Warning: Permanently added '52.90.184.202' (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/11283246-fedora-43-x86_64 --chroot fedora-43-x86_64 Version: 1.11 PID: 11818 Logging PID: 11820 Task: {'allow_user_ssh': False, 'appstream': False, 'background': False, 'build_id': 11283246, 'buildroot_pkgs': [], 'chroot': 'fedora-43-x86_64', 'enable_net': False, 'fedora_review': False, 'git_hash': '0cf6bdb9f45cbfcbd95c656ed02fcc80a2144fc9', 'git_repo': 'https://copr-dist-git.fedorainfracloud.org/git/mhough/neurofedora/python-ipax', 'isolation': 'default', 'memory_reqs': 2048, 'package_name': 'python-ipax', 'package_version': '0.13.0-1', 'project_dirname': 'neurofedora', 'project_name': 'neurofedora', 'project_owner': 'mhough', 'repo_priority': None, 'repos': [{'baseurl': 'https://download.copr.fedorainfracloud.org/results/mhough/neurofedora/fedora-43-x86_64/', 'id': 'copr_base', 'name': 'Copr repository', 'priority': None, 'repo_gpgcheck': False}], 'sandbox': 'mhough/neurofedora--mhough', 'source_json': {}, 'source_type': None, 'ssh_public_keys': None, 'storage': 1, 'submitter': 'mhough', 'tags': [], 'task_id': '11283246-fedora-43-x86_64', 'timeout': 86400, 'uses_devel_repo': False, 'with_opts': [], 'without_opts': []} Running: git clone https://copr-dist-git.fedorainfracloud.org/git/mhough/neurofedora/python-ipax /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax --depth 500 --no-single-branch --recursive cmd: ['git', 'clone', 'https://copr-dist-git.fedorainfracloud.org/git/mhough/neurofedora/python-ipax', '/var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax'... Running: git checkout 0cf6bdb9f45cbfcbd95c656ed02fcc80a2144fc9 -- cmd: ['git', 'checkout', '0cf6bdb9f45cbfcbd95c656ed02fcc80a2144fc9', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax rc: 0 stdout: stderr: Note: switching to '0cf6bdb9f45cbfcbd95c656ed02fcc80a2144fc9'. 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 0cf6bdb automatic import of python-ipax Running: dist-git-client sources cmd: ['dist-git-client', 'sources'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax 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 ipax-0.13.0.tar.gz INFO: Reading stdout from command: curl --help all INFO: Calling: curl -H Pragma: -H 'Accept-Encoding: identity' -o ipax-0.13.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/mhough/neurofedora/python-ipax/ipax-0.13.0.tar.gz/md5/332d8edd266b67219785f589efc65f28/ipax-0.13.0.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1.07M 100 1.07M 0 0 94.51M 0 0 INFO: Reading stdout from command: md5sum ipax-0.13.0.tar.gz tail: /var/lib/copr-rpmbuild/main.log: file truncated Running (timeout=86400): unbuffer mock --spec /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax/python-ipax.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1794038830.950905 -r /var/lib/copr-rpmbuild/results/configs/child.cfg INFO: mock.py version 6.9 starting (python version = 3.14.5, NVR = mock-6.9-1.fc44), args: /usr/libexec/mock/mock --spec /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax/python-ipax.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-uks3fp5m/python-ipax --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1794038830.950905 -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-uks3fp5m/python-ipax/python-ipax.spec) Config(fedora-43-x86_64) Start: clean chroot Finish: clean chroot Mock Version: 6.9 INFO: Mock Version: 6.9 Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-43-x86_64-bootstrap-1794038830.950905/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:43 INFO: Pulling image: registry.fedoraproject.org/fedora:43 INFO: Tagging container image as mock-bootstrap-b33f1ab6-69bc-4bdd-ab3f-f4f4edf68e5e INFO: Checking that 07f45a24d0719212cd8dffda2b52f6cdc5cf22a8efd5a6dd0ff69729a80620d5 image matches host's architecture INFO: Copy content of container 07f45a24d0719212cd8dffda2b52f6cdc5cf22a8efd5a6dd0ff69729a80620d5 to /var/lib/mock/fedora-43-x86_64-bootstrap-1794038830.950905/root INFO: mounting 07f45a24d0719212cd8dffda2b52f6cdc5cf22a8efd5a6dd0ff69729a80620d5 with podman image mount INFO: image 07f45a24d0719212cd8dffda2b52f6cdc5cf22a8efd5a6dd0ff69729a80620d5 as /var/lib/containers/storage/overlay/9ce6879fdc11007a0da77be81259f03144e5c4e9df98e802de5b328a0cb867c2/merged INFO: umounting image 07f45a24d0719212cd8dffda2b52f6cdc5cf22a8efd5a6dd0ff69729a80620d5 (/var/lib/containers/storage/overlay/9ce6879fdc11007a0da77be81259f03144e5c4e9df98e802de5b328a0cb867c2/merged) with podman image umount INFO: Removing image mock-bootstrap-b33f1ab6-69bc-4bdd-ab3f-f4f4edf68e5e 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-43-x86_64-1794038830.950905/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.2-1.fc43.x86_64 rpm-sequoia-1.10.3-1.fc43.x86_64 dnf5-5.2.18.0-5.fc43.x86_64 dnf5-plugins-5.2.18.0-5.fc43.x86_64 Start: installing minimal buildroot with dnf5 Updating and loading repositories: Copr repository 100% | 1.0 MiB/s | 671.2 KiB | 00m01s fedora 100% | 29.9 MiB/s | 35.4 MiB | 00m01s updates 100% | 31.5 MiB/s | 34.4 MiB | 00m01s Repositories loaded. Package Arch Version Repository Size Installing group/module packages: bash x86_64 5.3.0-2.fc43 fedora 8.4 MiB bzip2 x86_64 1.0.8-21.fc43 fedora 95.3 KiB coreutils x86_64 9.7-10.fc43 updates 5.4 MiB cpio x86_64 2.15-6.fc43 fedora 1.1 MiB diffutils x86_64 3.12-3.fc43 fedora 1.6 MiB fedora-release-common noarch 43-27 updates 20.6 KiB findutils x86_64 1:4.10.0-6.fc43 fedora 1.8 MiB gawk x86_64 5.3.2-2.fc43 fedora 1.8 MiB glibc-minimal-langpack x86_64 2.42-17.fc43 updates 0.0 B grep x86_64 3.12-2.fc43 fedora 1.0 MiB gzip x86_64 1.13-4.fc43 fedora 388.8 KiB info x86_64 7.2-7.fc43 updates 353.9 KiB patch x86_64 2.8-2.fc43 fedora 222.8 KiB redhat-rpm-config noarch 343-14.fc43 updates 182.9 KiB rpm-build x86_64 6.0.2-1.fc43 updates 286.4 KiB sed x86_64 4.9-5.fc43 fedora 857.3 KiB shadow-utils x86_64 2:4.18.0-3.fc43 fedora 3.9 MiB tar x86_64 2:1.35-6.fc43 fedora 2.9 MiB unzip x86_64 6.0-67.fc43 fedora 386.3 KiB util-linux x86_64 2.41.6-1.fc43 updates 3.5 MiB which x86_64 2.23-3.fc43 fedora 83.5 KiB xz x86_64 1:5.8.1-4.fc43 updates 1.3 MiB Installing dependencies: add-determinism x86_64 0.6.0-3.fc43 updates 2.3 MiB alternatives x86_64 1.33-3.fc43 updates 62.2 KiB ansible-srpm-macros noarch 1-18.1.fc43 fedora 35.7 KiB audit-libs x86_64 4.2.1-1.fc43 updates 382.5 KiB binutils x86_64 2.45.1-5.fc43 updates 27.3 MiB build-reproducibility-srpm-macros noarch 0.6.0-3.fc43 updates 735.0 B bzip2-libs x86_64 1.0.8-21.fc43 fedora 80.6 KiB ca-certificates noarch 2026.2.92_v9.0.319-2.fc43 updates 2.7 MiB cmake-srpm-macros noarch 3.31.11-1.fc43 updates 524.0 B coreutils-common x86_64 9.7-10.fc43 updates 11.3 MiB crypto-policies noarch 20251125-1.git63291f8.fc43 updates 147.1 KiB curl x86_64 8.15.0-12.fc43 updates 461.4 KiB cyrus-sasl-lib x86_64 2.1.28-33.fc43 fedora 2.3 MiB debugedit x86_64 5.2-3.fc43 fedora 214.0 KiB dwz x86_64 0.16-2.fc43 fedora 287.1 KiB ed x86_64 1.22.2-1.fc43 fedora 148.1 KiB efi-srpm-macros noarch 6-4.fc43 fedora 40.1 KiB elfutils x86_64 0.197-1.fc43 updates 3.1 MiB elfutils-debuginfod-client x86_64 0.197-1.fc43 updates 83.8 KiB elfutils-default-yama-scope noarch 0.197-1.fc43 updates 1.8 KiB elfutils-libelf x86_64 0.197-1.fc43 updates 1.6 MiB elfutils-libs x86_64 0.197-1.fc43 updates 695.4 KiB fedora-gpg-keys noarch 43-2 updates 259.0 KiB fedora-release noarch 43-27 updates 0.0 B fedora-release-identity-basic noarch 43-27 updates 631.0 B fedora-repos noarch 43-2 updates 4.9 KiB file x86_64 5.46-9.fc43 updates 100.2 KiB file-libs x86_64 5.46-9.fc43 updates 11.9 MiB filesystem x86_64 3.18-50.fc43 fedora 112.0 B filesystem-srpm-macros noarch 3.18-50.fc43 fedora 38.2 KiB fonts-srpm-macros noarch 1:2.0.5-23.fc43 fedora 55.8 KiB forge-srpm-macros noarch 0.4.0-3.fc43 fedora 38.9 KiB fpc-srpm-macros noarch 1.3-15.fc43 fedora 144.0 B gap-srpm-macros noarch 2-1.fc43 fedora 2.1 KiB gdb-minimal x86_64 18.1-1.fc43 updates 13.8 MiB gdbm-libs x86_64 1:1.23-10.fc43 fedora 129.9 KiB ghc-srpm-macros noarch 1.9.2-3.fc43 fedora 779.0 B glibc x86_64 2.42-17.fc43 updates 6.7 MiB glibc-common x86_64 2.42-17.fc43 updates 1.0 MiB glibc-gconv-extra x86_64 2.42-17.fc43 updates 7.2 MiB gmp x86_64 1:6.3.0-4.fc43 fedora 811.2 KiB gnat-srpm-macros noarch 7-1.fc43 updates 1.0 KiB gnome-srpm-macros noarch 1.0-1.fc43 updates 3.5 KiB gnulib-l10n noarch 20241231-1.fc43 fedora 655.0 KiB gnupg2 x86_64 2.4.9-5.fc43 updates 6.6 MiB gnupg2-dirmngr x86_64 2.4.9-5.fc43 updates 618.4 KiB gnupg2-gpg-agent x86_64 2.4.9-5.fc43 updates 671.4 KiB gnupg2-gpgconf x86_64 2.4.9-5.fc43 updates 250.0 KiB gnupg2-keyboxd x86_64 2.4.9-5.fc43 updates 201.4 KiB gnupg2-verify x86_64 2.4.9-5.fc43 updates 348.5 KiB gnutls x86_64 3.8.13-1.fc43 updates 3.8 MiB go-srpm-macros noarch 3.8.0-1.fc43 fedora 61.9 KiB gpgverify noarch 2.2-3.fc43 fedora 8.7 KiB ima-evm-utils-libs x86_64 1.6.2-6.fc43 fedora 60.7 KiB jansson x86_64 2.14-3.fc43 fedora 89.1 KiB java-srpm-macros noarch 1-7.fc43 fedora 870.0 B json-c x86_64 0.18-7.fc43 fedora 82.7 KiB kernel-srpm-macros noarch 1.0-27.fc43 fedora 1.9 KiB keyutils-libs x86_64 1.6.3-6.fc43 fedora 54.3 KiB krb5-libs x86_64 1.22.2-4.fc43 updates 2.3 MiB libacl x86_64 2.4.0-1.fc43 updates 39.9 KiB libarchive x86_64 3.8.4-1.fc43 updates 955.3 KiB libassuan x86_64 2.5.7-4.fc43 fedora 163.8 KiB libattr x86_64 2.6.0-1.fc43 updates 24.3 KiB libblkid x86_64 2.41.6-1.fc43 updates 262.3 KiB libbrotli x86_64 1.2.1-1.fc43 updates 865.0 KiB libcap x86_64 2.76-4.fc43 updates 209.1 KiB libcap-ng x86_64 0.9.6-1.fc43 updates 68.8 KiB libcom_err x86_64 1.47.3-2.fc43 fedora 63.1 KiB libcurl x86_64 8.15.0-12.fc43 updates 907.0 KiB libeconf x86_64 0.7.9-2.fc43 fedora 64.9 KiB libevent x86_64 2.1.13-1.fc43 updates 884.4 KiB libfdisk x86_64 2.41.6-1.fc43 updates 380.3 KiB libffi x86_64 3.5.2-1.fc43 updates 83.8 KiB libfsverity x86_64 1.6-3.fc43 fedora 28.5 KiB libgcc x86_64 15.3.1-1.fc43 updates 266.6 KiB libgcrypt x86_64 1.11.1-4.fc43 updates 1.6 MiB libgomp x86_64 15.3.1-1.fc43 updates 541.8 KiB libgpg-error x86_64 1.55-2.fc43 fedora 915.3 KiB libidn2 x86_64 2.3.8-2.fc43 fedora 552.5 KiB libksba x86_64 1.6.7-4.fc43 fedora 398.5 KiB liblastlog2 x86_64 2.41.6-1.fc43 updates 37.6 KiB libmount x86_64 2.41.6-1.fc43 updates 376.6 KiB libnghttp2 x86_64 1.66.0-3.fc43 updates 162.1 KiB libpfm x86_64 4.14.1-2.fc43 updates 2.4 MiB libpkgconf x86_64 2.3.0-3.fc43 fedora 78.1 KiB libpsl x86_64 0.21.5-6.fc43 fedora 76.4 KiB libselinux x86_64 3.9-5.fc43 fedora 193.1 KiB libsemanage x86_64 3.9-4.fc43 fedora 308.5 KiB libsepol x86_64 3.9-2.fc43 fedora 822.0 KiB libsmartcols x86_64 2.41.6-1.fc43 updates 180.3 KiB libssh x86_64 0.11.5-1.fc43 updates 573.1 KiB libssh-config noarch 0.11.5-1.fc43 updates 277.0 B libstdc++ x86_64 15.3.1-1.fc43 updates 2.8 MiB libtasn1 x86_64 4.21.0-1.fc43 updates 176.7 KiB libtool-ltdl x86_64 2.5.4-8.fc43 updates 70.1 KiB libunistring x86_64 1.1-10.fc43 fedora 1.7 MiB libusb1 x86_64 1.0.30-1.fc43 updates 176.0 KiB libuuid x86_64 2.41.6-1.fc43 updates 37.2 KiB libverto x86_64 0.3.2-11.fc43 fedora 25.4 KiB libxcrypt x86_64 4.5.2-1.fc43 updates 285.3 KiB libxml2 x86_64 2.12.10-5.fc43 fedora 1.7 MiB libzstd x86_64 1.5.7-2.fc43 fedora 799.9 KiB lua-libs x86_64 5.4.8-4.fc43 updates 281.9 KiB lua-srpm-macros noarch 1-16.fc43 fedora 1.3 KiB lz4-libs x86_64 1.10.0-3.fc43 fedora 161.4 KiB mpfr x86_64 4.2.2-2.fc43 fedora 832.8 KiB ncurses-base noarch 6.5-7.20250614.fc43 fedora 328.1 KiB ncurses-libs x86_64 6.5-7.20250614.fc43 fedora 946.3 KiB nettle x86_64 3.10.1-2.fc43 fedora 790.6 KiB npth x86_64 1.8-3.fc43 fedora 49.6 KiB ocaml-srpm-macros noarch 11-2.fc43 fedora 1.9 KiB openblas-srpm-macros noarch 2-20.fc43 fedora 112.0 B openldap x86_64 2.6.15-1.fc43 updates 659.2 KiB openssl-libs x86_64 1:3.5.9-1.fc43 updates 8.9 MiB p11-kit x86_64 0.26.5-1.fc43 updates 2.5 MiB p11-kit-trust x86_64 0.26.5-1.fc43 updates 466.3 KiB package-notes-srpm-macros noarch 0.20-1.fc43 updates 1.6 KiB pam-libs x86_64 1.7.1-5.fc43 updates 126.5 KiB pcre2 x86_64 10.47-1.fc43 updates 702.6 KiB pcre2-syntax noarch 10.47-1.fc43 updates 281.9 KiB perl-srpm-macros noarch 1-60.fc43 fedora 861.0 B pkgconf x86_64 2.3.0-3.fc43 fedora 88.5 KiB pkgconf-m4 noarch 2.3.0-3.fc43 fedora 14.4 KiB pkgconf-pkg-config x86_64 2.3.0-3.fc43 fedora 989.0 B popt x86_64 1.19-9.fc43 fedora 132.8 KiB publicsuffix-list-dafsa noarch 20260116-1.fc43 updates 70.4 KiB pyproject-srpm-macros noarch 1.24.0-1.fc43 updates 3.4 KiB python-srpm-macros noarch 3.14-5.fc43 fedora 51.5 KiB qt5-srpm-macros noarch 5.15.18-1.fc43 updates 500.0 B qt6-srpm-macros noarch 6.10.3-1.fc43 updates 472.0 B readline x86_64 8.3-2.fc43 fedora 511.7 KiB rpm x86_64 6.0.2-1.fc43 updates 3.1 MiB rpm-build-libs x86_64 6.0.2-1.fc43 updates 264.3 KiB rpm-libs x86_64 6.0.2-1.fc43 updates 933.5 KiB rpm-sequoia x86_64 1.10.3-1.fc43 updates 2.4 MiB rpm-sign-libs x86_64 6.0.2-1.fc43 updates 39.6 KiB rust-srpm-macros noarch 28.5-1.fc43 updates 5.5 KiB setup noarch 2.15.0-26.fc43 fedora 725.0 KiB sqlite-libs x86_64 3.50.2-3.fc43 updates 1.5 MiB systemd-libs x86_64 258.11-1.fc43 updates 2.3 MiB systemd-standalone-sysusers x86_64 258.11-1.fc43 updates 297.4 KiB tpm2-tss x86_64 4.1.3-8.fc43 fedora 1.6 MiB tree-sitter-srpm-macros noarch 0.4.2-1.fc43 fedora 8.3 KiB util-linux-core x86_64 2.41.6-1.fc43 updates 1.5 MiB xxhash-libs x86_64 0.8.4-2.fc43 updates 90.0 KiB xz-libs x86_64 1:5.8.1-4.fc43 updates 217.8 KiB zig-srpm-macros noarch 1-5.fc43 fedora 1.1 KiB zip x86_64 3.0-44.fc43 fedora 694.5 KiB zlib-ng-compat x86_64 2.3.3-2.fc43 updates 161.7 KiB zstd x86_64 1.5.7-2.fc43 fedora 1.7 MiB Installing groups: Buildsystem building group Transaction Summary: Installing: 173 packages Total size of inbound packages is 60 MiB. Need to download 60 MiB. After this operation, 204 MiB extra will be used (install 204 MiB, remove 0 B). [ 1/173] bzip2-0:1.0.8-21.fc43.x86_64 100% | 4.6 MiB/s | 51.6 KiB | 00m00s [ 2/173] cpio-0:2.15-6.fc43.x86_64 100% | 17.9 MiB/s | 293.1 KiB | 00m00s [ 3/173] bash-0:5.3.0-2.fc43.x86_64 100% | 81.3 MiB/s | 1.9 MiB | 00m00s [ 4/173] diffutils-0:3.12-3.fc43.x86_6 100% | 31.9 MiB/s | 392.3 KiB | 00m00s [ 5/173] findutils-1:4.10.0-6.fc43.x86 100% | 67.1 MiB/s | 550.0 KiB | 00m00s [ 6/173] grep-0:3.12-2.fc43.x86_64 100% | 73.0 MiB/s | 299.1 KiB | 00m00s [ 7/173] gzip-0:1.13-4.fc43.x86_64 100% | 33.2 MiB/s | 170.1 KiB | 00m00s [ 8/173] patch-0:2.8-2.fc43.x86_64 100% | 22.2 MiB/s | 113.8 KiB | 00m00s [ 9/173] sed-0:4.9-5.fc43.x86_64 100% | 51.6 MiB/s | 317.1 KiB | 00m00s [ 10/173] shadow-utils-2:4.18.0-3.fc43. 100% | 183.2 MiB/s | 1.3 MiB | 00m00s [ 11/173] tar-2:1.35-6.fc43.x86_64 100% | 92.9 MiB/s | 856.4 KiB | 00m00s [ 12/173] unzip-0:6.0-67.fc43.x86_64 100% | 35.9 MiB/s | 183.7 KiB | 00m00s [ 13/173] which-0:2.23-3.fc43.x86_64 100% | 10.2 MiB/s | 41.7 KiB | 00m00s [ 14/173] fedora-release-common-0:43-27 100% | 7.4 MiB/s | 22.6 KiB | 00m00s [ 15/173] coreutils-0:9.7-10.fc43.x86_6 100% | 142.2 MiB/s | 1.1 MiB | 00m00s [ 16/173] gawk-0:5.3.2-2.fc43.x86_64 100% | 125.0 MiB/s | 1.1 MiB | 00m00s [ 17/173] glibc-minimal-langpack-0:2.42 100% | 7.7 MiB/s | 47.1 KiB | 00m00s [ 18/173] info-0:7.2-7.fc43.x86_64 100% | 59.5 MiB/s | 182.7 KiB | 00m00s [ 19/173] redhat-rpm-config-0:343-14.fc 100% | 24.8 MiB/s | 76.1 KiB | 00m00s [ 20/173] rpm-build-0:6.0.2-1.fc43.x86_ 100% | 33.0 MiB/s | 135.3 KiB | 00m00s [ 21/173] util-linux-0:2.41.6-1.fc43.x8 100% | 149.1 MiB/s | 1.2 MiB | 00m00s [ 22/173] xz-1:5.8.1-4.fc43.x86_64 100% | 79.9 MiB/s | 572.7 KiB | 00m00s [ 23/173] filesystem-0:3.18-50.fc43.x86 100% | 148.2 MiB/s | 1.3 MiB | 00m00s [ 24/173] bzip2-libs-0:1.0.8-21.fc43.x8 100% | 14.0 MiB/s | 43.1 KiB | 00m00s [ 25/173] ncurses-libs-0:6.5-7.20250614 100% | 46.4 MiB/s | 332.7 KiB | 00m00s [ 26/173] libselinux-0:3.9-5.fc43.x86_6 100% | 15.9 MiB/s | 97.7 KiB | 00m00s [ 27/173] libeconf-0:0.7.9-2.fc43.x86_6 100% | 17.2 MiB/s | 35.2 KiB | 00m00s [ 28/173] ed-0:1.22.2-1.fc43.x86_64 100% | 16.3 MiB/s | 83.7 KiB | 00m00s [ 29/173] libsemanage-0:3.9-4.fc43.x86_ 100% | 30.2 MiB/s | 123.5 KiB | 00m00s [ 30/173] setup-0:2.15.0-26.fc43.noarch 100% | 38.4 MiB/s | 157.3 KiB | 00m00s [ 31/173] gmp-1:6.3.0-4.fc43.x86_64 100% | 62.4 MiB/s | 319.3 KiB | 00m00s [ 32/173] mpfr-0:4.2.2-2.fc43.x86_64 100% | 84.7 MiB/s | 347.0 KiB | 00m00s [ 33/173] readline-0:8.3-2.fc43.x86_64 100% | 43.9 MiB/s | 224.6 KiB | 00m00s [ 34/173] coreutils-common-0:9.7-10.fc4 100% | 210.0 MiB/s | 2.1 MiB | 00m00s [ 35/173] glibc-common-0:2.42-17.fc43.x 100% | 54.3 MiB/s | 333.9 KiB | 00m00s [ 36/173] ansible-srpm-macros-0:1-18.1. 100% | 3.9 MiB/s | 19.9 KiB | 00m00s [ 37/173] efi-srpm-macros-0:6-4.fc43.no 100% | 7.3 MiB/s | 22.4 KiB | 00m00s [ 38/173] filesystem-srpm-macros-0:3.18 100% | 8.6 MiB/s | 26.4 KiB | 00m00s [ 39/173] dwz-0:0.16-2.fc43.x86_64 100% | 33.1 MiB/s | 135.5 KiB | 00m00s [ 40/173] fpc-srpm-macros-0:1.3-15.fc43 100% | 2.6 MiB/s | 7.9 KiB | 00m00s [ 41/173] fonts-srpm-macros-1:2.0.5-23. 100% | 6.6 MiB/s | 27.2 KiB | 00m00s [ 42/173] forge-srpm-macros-0:0.4.0-3.f 100% | 4.9 MiB/s | 20.1 KiB | 00m00s [ 43/173] gap-srpm-macros-0:2-1.fc43.no 100% | 4.4 MiB/s | 9.0 KiB | 00m00s [ 44/173] ghc-srpm-macros-0:1.9.2-3.fc4 100% | 4.3 MiB/s | 8.7 KiB | 00m00s [ 45/173] go-srpm-macros-0:3.8.0-1.fc43 100% | 9.2 MiB/s | 28.3 KiB | 00m00s [ 46/173] java-srpm-macros-0:1-7.fc43.n 100% | 3.9 MiB/s | 7.9 KiB | 00m00s [ 47/173] kernel-srpm-macros-0:1.0-27.f 100% | 4.4 MiB/s | 8.9 KiB | 00m00s [ 48/173] lua-srpm-macros-0:1-16.fc43.n 100% | 4.3 MiB/s | 8.8 KiB | 00m00s [ 49/173] openblas-srpm-macros-0:2-20.f 100% | 2.5 MiB/s | 7.6 KiB | 00m00s [ 50/173] perl-srpm-macros-0:1-60.fc43. 100% | 2.7 MiB/s | 8.3 KiB | 00m00s [ 51/173] ocaml-srpm-macros-0:11-2.fc43 100% | 2.3 MiB/s | 9.3 KiB | 00m00s [ 52/173] tree-sitter-srpm-macros-0:0.4 100% | 6.5 MiB/s | 13.4 KiB | 00m00s [ 53/173] python-srpm-macros-0:3.14-5.f 100% | 11.4 MiB/s | 23.4 KiB | 00m00s [ 54/173] zig-srpm-macros-0:1-5.fc43.no 100% | 2.7 MiB/s | 8.4 KiB | 00m00s [ 55/173] cmake-srpm-macros-0:3.31.11-1 100% | 4.8 MiB/s | 9.9 KiB | 00m00s [ 56/173] gnome-srpm-macros-0:1.0-1.fc4 100% | 4.2 MiB/s | 8.6 KiB | 00m00s [ 57/173] zip-0:3.0-44.fc43.x86_64 100% | 51.1 MiB/s | 261.6 KiB | 00m00s [ 58/173] debugedit-0:5.2-3.fc43.x86_64 100% | 20.9 MiB/s | 85.6 KiB | 00m00s [ 59/173] popt-0:1.19-9.fc43.x86_64 100% | 16.0 MiB/s | 65.7 KiB | 00m00s [ 60/173] zstd-0:1.5.7-2.fc43.x86_64 100% | 94.9 MiB/s | 485.9 KiB | 00m00s [ 61/173] rpm-0:6.0.2-1.fc43.x86_64 100% | 80.1 MiB/s | 574.0 KiB | 00m00s [ 62/173] util-linux-core-0:2.41.6-1.fc 100% | 89.8 MiB/s | 551.9 KiB | 00m00s [ 63/173] xz-libs-1:5.8.1-4.fc43.x86_64 100% | 15.7 MiB/s | 112.8 KiB | 00m00s [ 64/173] ncurses-base-0:6.5-7.20250614 100% | 17.2 MiB/s | 88.2 KiB | 00m00s [ 65/173] libsepol-0:3.9-2.fc43.x86_64 100% | 67.5 MiB/s | 345.4 KiB | 00m00s [ 66/173] gnulib-l10n-0:20241231-1.fc43 100% | 36.7 MiB/s | 150.2 KiB | 00m00s [ 67/173] lz4-libs-0:1.10.0-3.fc43.x86_ 100% | 19.0 MiB/s | 78.0 KiB | 00m00s [ 68/173] rpm-libs-0:6.0.2-1.fc43.x86_6 100% | 64.8 MiB/s | 398.4 KiB | 00m00s [ 69/173] glibc-0:2.42-17.fc43.x86_64 100% | 184.1 MiB/s | 2.2 MiB | 00m00s [ 70/173] glibc-gconv-extra-0:2.42-17.f 100% | 132.4 MiB/s | 1.6 MiB | 00m00s [ 71/173] libzstd-0:1.5.7-2.fc43.x86_64 100% | 34.1 MiB/s | 314.6 KiB | 00m00s [ 72/173] rpm-build-libs-0:6.0.2-1.fc43 100% | 24.2 MiB/s | 124.1 KiB | 00m00s [ 73/173] rpm-sign-libs-0:6.0.2-1.fc43. 100% | 8.3 MiB/s | 25.5 KiB | 00m00s [ 74/173] ima-evm-utils-libs-0:1.6.2-6. 100% | 9.5 MiB/s | 29.3 KiB | 00m00s [ 75/173] libfsverity-0:1.6-3.fc43.x86_ 100% | 6.1 MiB/s | 18.6 KiB | 00m00s [ 76/173] json-c-0:0.18-7.fc43.x86_64 100% | 14.6 MiB/s | 45.0 KiB | 00m00s [ 77/173] tpm2-tss-0:4.1.3-8.fc43.x86_6 100% | 83.2 MiB/s | 425.9 KiB | 00m00s [ 78/173] libuuid-0:2.41.6-1.fc43.x86_6 100% | 13.1 MiB/s | 26.9 KiB | 00m00s [ 79/173] libblkid-0:2.41.6-1.fc43.x86_ 100% | 24.2 MiB/s | 124.1 KiB | 00m00s [ 80/173] libmount-0:2.41.6-1.fc43.x86_ 100% | 40.2 MiB/s | 164.5 KiB | 00m00s [ 81/173] libgcc-0:15.3.1-1.fc43.x86_64 100% | 27.9 MiB/s | 142.9 KiB | 00m00s [ 82/173] libsmartcols-0:2.41.6-1.fc43. 100% | 16.5 MiB/s | 84.6 KiB | 00m00s [ 83/173] libxcrypt-0:4.5.2-1.fc43.x86_ 100% | 41.7 MiB/s | 128.1 KiB | 00m00s [ 84/173] audit-libs-0:4.2.1-1.fc43.x86 100% | 34.1 MiB/s | 139.6 KiB | 00m00s [ 85/173] libcap-ng-0:0.9.6-1.fc43.x86_ 100% | 8.4 MiB/s | 34.3 KiB | 00m00s [ 86/173] systemd-libs-0:258.11-1.fc43. 100% | 135.4 MiB/s | 832.0 KiB | 00m00s [ 87/173] liblastlog2-0:2.41.6-1.fc43.x 100% | 7.9 MiB/s | 24.3 KiB | 00m00s [ 88/173] libfdisk-0:2.41.6-1.fc43.x86_ 100% | 39.6 MiB/s | 162.3 KiB | 00m00s [ 89/173] pam-libs-0:1.7.1-5.fc43.x86_6 100% | 13.8 MiB/s | 56.4 KiB | 00m00s [ 90/173] zlib-ng-compat-0:2.3.3-2.fc43 100% | 28.9 MiB/s | 88.7 KiB | 00m00s [ 91/173] libcap-0:2.76-4.fc43.x86_64 100% | 28.0 MiB/s | 86.1 KiB | 00m00s [ 92/173] gpgverify-0:2.2-3.fc43.noarch 100% | 5.4 MiB/s | 11.1 KiB | 00m00s [ 93/173] gnupg2-0:2.4.9-5.fc43.x86_64 100% | 204.5 MiB/s | 1.6 MiB | 00m00s [ 94/173] libassuan-0:2.5.7-4.fc43.x86_ 100% | 13.2 MiB/s | 67.4 KiB | 00m00s [ 95/173] libgpg-error-0:1.55-2.fc43.x8 100% | 34.1 MiB/s | 244.3 KiB | 00m00s [ 96/173] npth-0:1.8-3.fc43.x86_64 100% | 6.3 MiB/s | 25.7 KiB | 00m00s [ 97/173] gnupg2-dirmngr-0:2.4.9-5.fc43 100% | 44.8 MiB/s | 275.0 KiB | 00m00s [ 98/173] gnupg2-gpg-agent-0:2.4.9-5.fc 100% | 66.7 MiB/s | 273.4 KiB | 00m00s [ 99/173] gnupg2-gpgconf-0:2.4.9-5.fc43 100% | 22.5 MiB/s | 115.3 KiB | 00m00s [100/173] gnupg2-keyboxd-0:2.4.9-5.fc43 100% | 23.1 MiB/s | 94.7 KiB | 00m00s [101/173] gnupg2-verify-0:2.4.9-5.fc43. 100% | 41.9 MiB/s | 171.6 KiB | 00m00s [102/173] libksba-0:1.6.7-4.fc43.x86_64 100% | 39.2 MiB/s | 160.4 KiB | 00m00s [103/173] libstdc++-0:15.3.1-1.fc43.x86 100% | 151.5 MiB/s | 931.1 KiB | 00m00s [104/173] libacl-0:2.4.0-1.fc43.x86_64 100% | 5.1 MiB/s | 26.1 KiB | 00m00s [105/173] lua-libs-0:5.4.8-4.fc43.x86_6 100% | 26.0 MiB/s | 133.1 KiB | 00m00s [106/173] rpm-sequoia-0:1.10.3-1.fc43.x 100% | 131.2 MiB/s | 940.6 KiB | 00m00s [107/173] sqlite-libs-0:3.50.2-3.fc43.x 100% | 92.6 MiB/s | 758.9 KiB | 00m00s [108/173] elfutils-libelf-0:0.197-1.fc4 100% | 36.6 MiB/s | 262.6 KiB | 00m00s [109/173] elfutils-libs-0:0.197-1.fc43. 100% | 53.3 MiB/s | 273.0 KiB | 00m00s [110/173] elfutils-0:0.197-1.fc43.x86_6 100% | 128.1 MiB/s | 655.7 KiB | 00m00s [111/173] elfutils-debuginfod-client-0: 100% | 11.3 MiB/s | 46.3 KiB | 00m00s [112/173] file-libs-0:5.46-9.fc43.x86_6 100% | 138.3 MiB/s | 849.9 KiB | 00m00s [113/173] file-0:5.46-9.fc43.x86_64 100% | 9.5 MiB/s | 48.5 KiB | 00m00s [114/173] libgomp-0:15.3.1-1.fc43.x86_6 100% | 74.9 MiB/s | 383.6 KiB | 00m00s [115/173] jansson-0:2.14-3.fc43.x86_64 100% | 14.7 MiB/s | 45.3 KiB | 00m00s [116/173] libarchive-0:3.8.4-1.fc43.x86 100% | 82.5 MiB/s | 422.6 KiB | 00m00s [117/173] libxml2-0:2.12.10-5.fc43.x86_ 100% | 84.6 MiB/s | 692.7 KiB | 00m00s [118/173] pkgconf-pkg-config-0:2.3.0-3. 100% | 1.9 MiB/s | 9.6 KiB | 00m00s [119/173] pkgconf-0:2.3.0-3.fc43.x86_64 100% | 14.5 MiB/s | 44.6 KiB | 00m00s [120/173] pkgconf-m4-0:2.3.0-3.fc43.noa 100% | 3.4 MiB/s | 13.9 KiB | 00m00s [121/173] binutils-0:2.45.1-5.fc43.x86_ 100% | 237.4 MiB/s | 5.9 MiB | 00m00s [122/173] libpkgconf-0:2.3.0-3.fc43.x86 100% | 4.1 MiB/s | 37.9 KiB | 00m00s [123/173] curl-0:8.15.0-12.fc43.x86_64 100% | 18.5 MiB/s | 226.8 KiB | 00m00s [124/173] build-reproducibility-srpm-ma 100% | 795.3 KiB/s | 11.9 KiB | 00m00s [125/173] gnat-srpm-macros-0:7-1.fc43.n 100% | 665.9 KiB/s | 8.7 KiB | 00m00s [126/173] add-determinism-0:0.6.0-3.fc4 100% | 45.9 MiB/s | 893.7 KiB | 00m00s [127/173] package-notes-srpm-macros-0:0 100% | 2.4 MiB/s | 9.9 KiB | 00m00s [128/173] pyproject-srpm-macros-0:1.24. 100% | 5.0 MiB/s | 15.4 KiB | 00m00s [129/173] qt5-srpm-macros-0:5.15.18-1.f 100% | 2.8 MiB/s | 8.6 KiB | 00m00s [130/173] qt6-srpm-macros-0:6.10.3-1.fc 100% | 3.0 MiB/s | 9.1 KiB | 00m00s [131/173] rust-srpm-macros-0:28.5-1.fc4 100% | 2.7 MiB/s | 11.2 KiB | 00m00s [132/173] libgcrypt-0:1.11.1-4.fc43.x86 100% | 83.1 MiB/s | 596.0 KiB | 00m00s [133/173] gnutls-0:3.8.13-1.fc43.x86_64 100% | 115.7 MiB/s | 1.4 MiB | 00m00s [134/173] openssl-libs-1:3.5.9-1.fc43.x 100% | 138.4 MiB/s | 2.6 MiB | 00m00s [135/173] libidn2-0:2.3.8-2.fc43.x86_64 100% | 15.5 MiB/s | 174.9 KiB | 00m00s [136/173] libunistring-0:1.1-10.fc43.x8 100% | 106.0 MiB/s | 542.9 KiB | 00m00s [137/173] nettle-0:3.10.1-2.fc43.x86_64 100% | 82.8 MiB/s | 424.2 KiB | 00m00s [138/173] openldap-0:2.6.15-1.fc43.x86_ 100% | 50.7 MiB/s | 259.7 KiB | 00m00s [139/173] gdbm-libs-1:1.23-10.fc43.x86_ 100% | 18.5 MiB/s | 56.8 KiB | 00m00s [140/173] cyrus-sasl-lib-0:2.1.28-33.fc 100% | 109.9 MiB/s | 787.9 KiB | 00m00s [141/173] fedora-repos-0:43-2.noarch 100% | 2.2 MiB/s | 8.9 KiB | 00m00s [142/173] fedora-gpg-keys-0:43-2.noarch 100% | 45.0 MiB/s | 184.2 KiB | 00m00s [143/173] elfutils-default-yama-scope-0 100% | 3.7 MiB/s | 11.5 KiB | 00m00s [144/173] libpfm-0:4.14.1-2.fc43.x86_64 100% | 44.8 MiB/s | 275.3 KiB | 00m00s [145/173] libattr-0:2.6.0-1.fc43.x86_64 100% | 4.4 MiB/s | 17.9 KiB | 00m00s [146/173] alternatives-0:1.33-3.fc43.x8 100% | 9.9 MiB/s | 40.6 KiB | 00m00s [147/173] libusb1-0:1.0.30-1.fc43.x86_6 100% | 19.7 MiB/s | 80.5 KiB | 00m00s [148/173] pcre2-0:10.47-1.fc43.x86_64 100% | 52.2 MiB/s | 267.2 KiB | 00m00s [149/173] pcre2-syntax-0:10.47-1.fc43.n 100% | 32.2 MiB/s | 164.7 KiB | 00m00s [150/173] crypto-policies-0:20251125-1. 100% | 23.9 MiB/s | 97.8 KiB | 00m00s [151/173] libevent-0:2.1.13-1.fc43.x86_ 100% | 63.4 MiB/s | 259.5 KiB | 00m00s [152/173] ca-certificates-0:2026.2.92_v 100% | 95.7 MiB/s | 980.2 KiB | 00m00s [153/173] libtool-ltdl-0:2.5.4-8.fc43.x 100% | 11.8 MiB/s | 36.2 KiB | 00m00s [154/173] libtasn1-0:4.21.0-1.fc43.x86_ 100% | 14.6 MiB/s | 74.5 KiB | 00m00s [155/173] p11-kit-0:0.26.5-1.fc43.x86_6 100% | 132.5 MiB/s | 542.8 KiB | 00m00s [156/173] p11-kit-trust-0:0.26.5-1.fc43 100% | 27.5 MiB/s | 140.6 KiB | 00m00s [157/173] libffi-0:3.5.2-1.fc43.x86_64 100% | 13.4 MiB/s | 41.1 KiB | 00m00s [158/173] xxhash-libs-0:0.8.4-2.fc43.x8 100% | 18.8 MiB/s | 38.6 KiB | 00m00s [159/173] systemd-standalone-sysusers-0 100% | 48.6 MiB/s | 149.4 KiB | 00m00s [160/173] fedora-release-0:43-27.noarch 100% | 2.8 MiB/s | 11.5 KiB | 00m00s [161/173] fedora-release-identity-basic 100% | 3.0 MiB/s | 12.3 KiB | 00m00s [162/173] libcurl-0:8.15.0-12.fc43.x86_ 100% | 78.9 MiB/s | 403.9 KiB | 00m00s [163/173] libpsl-0:0.21.5-6.fc43.x86_64 100% | 12.7 MiB/s | 65.0 KiB | 00m00s [164/173] gdb-minimal-0:18.1-1.fc43.x86 100% | 237.5 MiB/s | 4.5 MiB | 00m00s [165/173] libssh-config-0:0.11.5-1.fc43 100% | 1.7 MiB/s | 8.9 KiB | 00m00s [166/173] libssh-0:0.11.5-1.fc43.x86_64 100% | 32.7 MiB/s | 234.6 KiB | 00m00s [167/173] publicsuffix-list-dafsa-0:202 100% | 19.6 MiB/s | 60.3 KiB | 00m00s [168/173] krb5-libs-0:1.22.2-4.fc43.x86 100% | 107.5 MiB/s | 770.4 KiB | 00m00s [169/173] keyutils-libs-0:1.6.3-6.fc43. 100% | 6.1 MiB/s | 31.4 KiB | 00m00s [170/173] libcom_err-0:1.47.3-2.fc43.x8 100% | 8.7 MiB/s | 26.8 KiB | 00m00s [171/173] libverto-0:0.3.2-11.fc43.x86_ 100% | 6.7 MiB/s | 20.7 KiB | 00m00s [172/173] libbrotli-0:1.2.1-1.fc43.x86_ 100% | 68.3 MiB/s | 349.5 KiB | 00m00s [173/173] libnghttp2-0:1.66.0-3.fc43.x8 100% | 13.9 MiB/s | 71.0 KiB | 00m00s -------------------------------------------------------------------------------- [173/173] Total 100% | 164.9 MiB/s | 59.9 MiB | 00m00s Running transaction 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. [ 1/175] Verify package files 100% | 789.0 B/s | 173.0 B | 00m00s [ 2/175] Prepare transaction 100% | 4.4 KiB/s | 173.0 B | 00m00s [ 3/175] Installing libgcc-0:15.3.1-1. 100% | 262.0 MiB/s | 268.3 KiB | 00m00s [ 4/175] Installing publicsuffix-list- 100% | 0.0 B/s | 71.1 KiB | 00m00s [ 5/175] Installing libssh-config-0:0. 100% | 0.0 B/s | 816.0 B | 00m00s [ 6/175] Installing fedora-release-ide 100% | 867.2 KiB/s | 888.0 B | 00m00s [ 7/175] Installing fedora-gpg-keys-0: 100% | 57.8 MiB/s | 355.0 KiB | 00m00s [ 8/175] Installing fedora-repos-0:43- 100% | 0.0 B/s | 5.7 KiB | 00m00s [ 9/175] Installing fedora-release-com 100% | 24.3 MiB/s | 24.8 KiB | 00m00s [ 10/175] Installing fedora-release-0:4 100% | 15.1 KiB/s | 124.0 B | 00m00s >>> Running sysusers scriptlet: setup-0:2.15.0-26.fc43.noarch >>> Finished sysusers scriptlet: setup-0:2.15.0-26.fc43.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. >>> [ 11/175] Installing setup-0:2.15.0-26. 100% | 51.0 MiB/s | 730.6 KiB | 00m00s >>> [RPM] /etc/hosts created as /etc/hosts.rpmnew [ 12/175] Installing filesystem-0:3.18- 100% | 3.1 MiB/s | 212.8 KiB | 00m00s [ 13/175] Installing pcre2-syntax-0:10. 100% | 277.7 MiB/s | 284.3 KiB | 00m00s [ 14/175] Installing rust-srpm-macros-0 100% | 0.0 B/s | 6.4 KiB | 00m00s [ 15/175] Installing qt6-srpm-macros-0: 100% | 0.0 B/s | 748.0 B | 00m00s [ 16/175] Installing qt5-srpm-macros-0: 100% | 0.0 B/s | 776.0 B | 00m00s [ 17/175] Installing package-notes-srpm 100% | 0.0 B/s | 2.1 KiB | 00m00s [ 18/175] Installing gnat-srpm-macros-0 100% | 0.0 B/s | 1.3 KiB | 00m00s [ 19/175] Installing pkgconf-m4-0:2.3.0 100% | 0.0 B/s | 14.8 KiB | 00m00s [ 20/175] Installing gnulib-l10n-0:2024 100% | 215.5 MiB/s | 661.9 KiB | 00m00s [ 21/175] Installing coreutils-common-0 100% | 434.3 MiB/s | 11.3 MiB | 00m00s [ 22/175] Installing ncurses-base-0:6.5 100% | 86.3 MiB/s | 353.5 KiB | 00m00s [ 23/175] Installing bash-0:5.3.0-2.fc4 100% | 290.7 MiB/s | 8.4 MiB | 00m00s [ 24/175] Installing glibc-common-0:2.4 100% | 67.9 MiB/s | 1.0 MiB | 00m00s [ 25/175] Installing glibc-gconv-extra- 100% | 330.9 MiB/s | 7.3 MiB | 00m00s [ 26/175] Installing glibc-0:2.42-17.fc 100% | 202.8 MiB/s | 6.7 MiB | 00m00s [ 27/175] Installing ncurses-libs-0:6.5 100% | 310.1 MiB/s | 952.8 KiB | 00m00s [ 28/175] Installing glibc-minimal-lang 100% | 0.0 B/s | 124.0 B | 00m00s [ 29/175] Installing zlib-ng-compat-0:2 100% | 158.7 MiB/s | 162.6 KiB | 00m00s [ 30/175] Installing bzip2-libs-0:1.0.8 100% | 79.8 MiB/s | 81.7 KiB | 00m00s [ 31/175] Installing libgpg-error-0:1.5 100% | 64.3 MiB/s | 921.1 KiB | 00m00s [ 32/175] Installing libstdc++-0:15.3.1 100% | 407.0 MiB/s | 2.8 MiB | 00m00s [ 33/175] Installing xz-libs-1:5.8.1-4. 100% | 213.8 MiB/s | 218.9 KiB | 00m00s [ 34/175] Installing libassuan-0:2.5.7- 100% | 161.7 MiB/s | 165.6 KiB | 00m00s [ 35/175] Installing libgcrypt-0:1.11.1 100% | 393.7 MiB/s | 1.6 MiB | 00m00s [ 36/175] Installing readline-0:8.3-2.f 100% | 501.8 MiB/s | 513.9 KiB | 00m00s [ 37/175] Installing gmp-1:6.3.0-4.fc43 100% | 397.2 MiB/s | 813.5 KiB | 00m00s [ 38/175] Installing libuuid-0:2.41.6-1 100% | 0.0 B/s | 38.4 KiB | 00m00s [ 39/175] Installing libacl-0:2.4.0-1.f 100% | 0.0 B/s | 40.7 KiB | 00m00s [ 40/175] Installing popt-0:1.19-9.fc43 100% | 68.1 MiB/s | 139.4 KiB | 00m00s [ 41/175] Installing libzstd-0:1.5.7-2. 100% | 391.2 MiB/s | 801.1 KiB | 00m00s [ 42/175] Installing elfutils-libelf-0: 100% | 542.8 MiB/s | 1.6 MiB | 00m00s [ 43/175] Installing npth-0:1.8-3.fc43. 100% | 0.0 B/s | 50.7 KiB | 00m00s [ 44/175] Installing libblkid-0:2.41.6- 100% | 257.3 MiB/s | 263.5 KiB | 00m00s [ 45/175] Installing libxcrypt-0:4.5.2- 100% | 281.3 MiB/s | 288.0 KiB | 00m00s [ 46/175] Installing sqlite-libs-0:3.50 100% | 379.1 MiB/s | 1.5 MiB | 00m00s [ 47/175] Installing gnupg2-gpgconf-0:2 100% | 20.5 MiB/s | 252.1 KiB | 00m00s [ 48/175] Installing json-c-0:0.18-7.fc 100% | 0.0 B/s | 84.0 KiB | 00m00s [ 49/175] Installing libunistring-0:1.1 100% | 431.7 MiB/s | 1.7 MiB | 00m00s [ 50/175] Installing libidn2-0:2.3.8-2. 100% | 181.9 MiB/s | 558.7 KiB | 00m00s [ 51/175] Installing libtasn1-0:4.21.0- 100% | 21.8 MiB/s | 178.6 KiB | 00m00s [ 52/175] Installing crypto-policies-0: 100% | 42.0 MiB/s | 172.2 KiB | 00m00s [ 53/175] Installing gnupg2-verify-0:2. 100% | 26.3 MiB/s | 349.9 KiB | 00m00s [ 54/175] Installing dwz-0:0.16-2.fc43. 100% | 23.5 MiB/s | 288.5 KiB | 00m00s [ 55/175] Installing mpfr-0:4.2.2-2.fc4 100% | 271.6 MiB/s | 834.4 KiB | 00m00s [ 56/175] Installing gawk-0:5.3.2-2.fc4 100% | 106.8 MiB/s | 1.8 MiB | 00m00s [ 57/175] Installing libksba-0:1.6.7-4. 100% | 391.7 MiB/s | 401.1 KiB | 00m00s [ 58/175] Installing unzip-0:6.0-67.fc4 100% | 31.7 MiB/s | 389.8 KiB | 00m00s [ 59/175] Installing file-libs-0:5.46-9 100% | 741.3 MiB/s | 11.9 MiB | 00m00s [ 60/175] Installing file-0:5.46-9.fc43 100% | 9.0 MiB/s | 101.7 KiB | 00m00s [ 61/175] Installing libeconf-0:0.7.9-2 100% | 0.0 B/s | 66.5 KiB | 00m00s [ 62/175] Installing libsepol-0:3.9-2.f 100% | 401.8 MiB/s | 822.9 KiB | 00m00s [ 63/175] Installing lz4-libs-0:1.10.0- 100% | 158.6 MiB/s | 162.5 KiB | 00m00s [ 64/175] Installing libsmartcols-0:2.4 100% | 177.2 MiB/s | 181.5 KiB | 00m00s [ 65/175] Installing libcap-ng-0:0.9.6- 100% | 0.0 B/s | 70.6 KiB | 00m00s [ 66/175] Installing audit-libs-0:4.2.1 100% | 375.9 MiB/s | 384.9 KiB | 00m00s [ 67/175] Installing pam-libs-0:1.7.1-5 100% | 125.7 MiB/s | 128.8 KiB | 00m00s [ 68/175] Installing libcap-0:2.76-4.fc 100% | 17.4 MiB/s | 214.3 KiB | 00m00s [ 69/175] Installing systemd-libs-0:258 100% | 391.3 MiB/s | 2.3 MiB | 00m00s [ 70/175] Installing lua-libs-0:5.4.8-4 100% | 276.7 MiB/s | 283.3 KiB | 00m00s [ 71/175] Installing libattr-0:2.6.0-1. 100% | 0.0 B/s | 25.2 KiB | 00m00s [ 72/175] Installing alternatives-0:1.3 100% | 5.7 MiB/s | 63.8 KiB | 00m00s [ 73/175] Installing pcre2-0:10.47-1.fc 100% | 343.8 MiB/s | 704.1 KiB | 00m00s [ 74/175] Installing libselinux-0:3.9-5 100% | 189.8 MiB/s | 194.4 KiB | 00m00s [ 75/175] Installing grep-0:3.12-2.fc43 100% | 66.8 MiB/s | 1.0 MiB | 00m00s [ 76/175] Installing findutils-1:4.10.0 100% | 116.1 MiB/s | 1.9 MiB | 00m00s [ 77/175] Installing sed-0:4.9-5.fc43.x 100% | 60.4 MiB/s | 865.5 KiB | 00m00s [ 78/175] Installing xz-1:5.8.1-4.fc43. 100% | 83.2 MiB/s | 1.3 MiB | 00m00s [ 79/175] Installing libmount-0:2.41.6- 100% | 368.9 MiB/s | 377.8 KiB | 00m00s [ 80/175] Installing libffi-0:3.5.2-1.f 100% | 83.2 MiB/s | 85.2 KiB | 00m00s [ 81/175] Installing p11-kit-0:0.26.5-1 100% | 134.0 MiB/s | 2.5 MiB | 00m00s [ 82/175] Installing p11-kit-trust-0:0. 100% | 22.8 MiB/s | 467.9 KiB | 00m00s [ 83/175] Installing openssl-libs-1:3.5 100% | 406.5 MiB/s | 8.9 MiB | 00m00s [ 84/175] Installing coreutils-0:9.7-10 100% | 175.1 MiB/s | 5.4 MiB | 00m00s [ 85/175] Installing ca-certificates-0: 100% | 2.5 MiB/s | 2.5 MiB | 00m01s [ 86/175] Installing gzip-0:1.13-4.fc43 100% | 27.5 MiB/s | 394.4 KiB | 00m00s [ 87/175] Installing libfsverity-0:1.6- 100% | 0.0 B/s | 29.5 KiB | 00m00s [ 88/175] Installing rpm-sequoia-0:1.10 100% | 350.2 MiB/s | 2.5 MiB | 00m00s [ 89/175] Installing libevent-0:2.1.13- 100% | 289.1 MiB/s | 888.2 KiB | 00m00s [ 90/175] Installing util-linux-core-0: 100% | 92.2 MiB/s | 1.5 MiB | 00m00s [ 91/175] Installing tar-2:1.35-6.fc43. 100% | 164.3 MiB/s | 3.0 MiB | 00m00s [ 92/175] Installing libsemanage-0:3.9- 100% | 303.0 MiB/s | 310.2 KiB | 00m00s [ 93/175] Installing systemd-standalone 100% | 24.3 MiB/s | 298.1 KiB | 00m00s [ 94/175] Installing rpm-libs-0:6.0.2-1 100% | 304.4 MiB/s | 935.1 KiB | 00m00s [ 95/175] Installing libusb1-0:1.0.30-1 100% | 19.3 MiB/s | 177.7 KiB | 00m00s >>> Running sysusers scriptlet: tpm2-tss-0:4.1.3-8.fc43.x86_64 >>> Finished sysusers scriptlet: tpm2-tss-0:4.1.3-8.fc43.x86_64 >>> Scriptlet output: >>> Creating group 'tss' with GID 59. >>> Creating user 'tss' (Account used for TPM access) with UID 59 and GID 59. >>> [ 96/175] Installing tpm2-tss-0:4.1.3-8 100% | 314.4 MiB/s | 1.6 MiB | 00m00s [ 97/175] Installing ima-evm-utils-libs 100% | 60.5 MiB/s | 62.0 KiB | 00m00s [ 98/175] Installing gnupg2-gpg-agent-0 100% | 33.0 MiB/s | 675.4 KiB | 00m00s [ 99/175] Installing liblastlog2-0:2.41 100% | 7.8 MiB/s | 39.8 KiB | 00m00s [100/175] Installing zstd-0:1.5.7-2.fc4 100% | 106.9 MiB/s | 1.7 MiB | 00m00s [101/175] Installing zip-0:3.0-44.fc43. 100% | 52.5 MiB/s | 698.4 KiB | 00m00s [102/175] Installing gnupg2-keyboxd-0:2 100% | 33.0 MiB/s | 202.7 KiB | 00m00s [103/175] Installing libpsl-0:0.21.5-6. 100% | 75.7 MiB/s | 77.5 KiB | 00m00s [104/175] Installing libfdisk-0:2.41.6- 100% | 372.5 MiB/s | 381.4 KiB | 00m00s [105/175] Installing nettle-0:3.10.1-2. 100% | 387.5 MiB/s | 793.7 KiB | 00m00s [106/175] Installing gnutls-0:3.8.13-1. 100% | 376.7 MiB/s | 3.8 MiB | 00m00s [107/175] Installing libxml2-0:2.12.10- 100% | 100.3 MiB/s | 1.7 MiB | 00m00s [108/175] Installing libarchive-0:3.8.4 100% | 311.6 MiB/s | 957.2 KiB | 00m00s [109/175] Installing bzip2-0:1.0.8-21.f 100% | 8.1 MiB/s | 99.8 KiB | 00m00s [110/175] Installing add-determinism-0: 100% | 143.9 MiB/s | 2.3 MiB | 00m00s [111/175] Installing build-reproducibil 100% | 0.0 B/s | 1.0 KiB | 00m00s [112/175] Installing cpio-0:2.15-6.fc43 100% | 78.5 MiB/s | 1.1 MiB | 00m00s [113/175] Installing diffutils-0:3.12-3 100% | 97.6 MiB/s | 1.6 MiB | 00m00s [114/175] Installing ed-0:1.22.2-1.fc43 100% | 12.2 MiB/s | 150.4 KiB | 00m00s [115/175] Installing patch-0:2.8-2.fc43 100% | 18.3 MiB/s | 224.3 KiB | 00m00s [116/175] Installing libgomp-0:15.3.1-1 100% | 265.2 MiB/s | 543.2 KiB | 00m00s [117/175] Installing jansson-0:2.14-3.f 100% | 88.3 MiB/s | 90.5 KiB | 00m00s [118/175] Installing libpkgconf-0:2.3.0 100% | 0.0 B/s | 79.2 KiB | 00m00s [119/175] Installing pkgconf-0:2.3.0-3. 100% | 8.1 MiB/s | 91.0 KiB | 00m00s [120/175] Installing pkgconf-pkg-config 100% | 161.2 KiB/s | 1.8 KiB | 00m00s [121/175] Installing gdbm-libs-1:1.23-1 100% | 128.5 MiB/s | 131.6 KiB | 00m00s [122/175] Installing cyrus-sasl-lib-0:2 100% | 143.5 MiB/s | 2.3 MiB | 00m00s [123/175] Installing libpfm-0:4.14.1-2. 100% | 592.1 MiB/s | 2.4 MiB | 00m00s [124/175] Installing libtool-ltdl-0:2.5 100% | 69.6 MiB/s | 71.2 KiB | 00m00s [125/175] Installing openldap-0:2.6.15- 100% | 323.7 MiB/s | 663.0 KiB | 00m00s [126/175] Installing gnupg2-dirmngr-0:2 100% | 30.3 MiB/s | 621.1 KiB | 00m00s [127/175] Installing gnupg2-0:2.4.9-5.f 100% | 243.1 MiB/s | 6.6 MiB | 00m00s [128/175] Installing rpm-sign-libs-0:6. 100% | 0.0 B/s | 40.5 KiB | 00m00s [129/175] Installing gpgverify-0:2.2-3. 100% | 0.0 B/s | 9.4 KiB | 00m00s [130/175] Installing xxhash-libs-0:0.8. 100% | 89.2 MiB/s | 91.4 KiB | 00m00s [131/175] Installing keyutils-libs-0:1. 100% | 0.0 B/s | 55.7 KiB | 00m00s [132/175] Installing libcom_err-0:1.47. 100% | 0.0 B/s | 64.2 KiB | 00m00s [133/175] Installing libverto-0:0.3.2-1 100% | 26.6 MiB/s | 27.2 KiB | 00m00s [134/175] Installing krb5-libs-0:1.22.2 100% | 333.1 MiB/s | 2.3 MiB | 00m00s [135/175] Installing libssh-0:0.11.5-1. 100% | 280.8 MiB/s | 575.1 KiB | 00m00s [136/175] Installing libbrotli-0:1.2.1- 100% | 282.3 MiB/s | 867.3 KiB | 00m00s [137/175] Installing libnghttp2-0:1.66. 100% | 159.4 MiB/s | 163.2 KiB | 00m00s [138/175] Installing libcurl-0:8.15.0-1 100% | 295.6 MiB/s | 908.1 KiB | 00m00s [139/175] Installing curl-0:8.15.0-12.f 100% | 20.6 MiB/s | 463.9 KiB | 00m00s [140/175] Installing rpm-0:6.0.2-1.fc43 100% | 88.8 MiB/s | 2.6 MiB | 00m00s [141/175] Installing efi-srpm-macros-0: 100% | 40.2 MiB/s | 41.1 KiB | 00m00s [142/175] Installing java-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [143/175] Installing lua-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [144/175] Installing tree-sitter-srpm-m 100% | 0.0 B/s | 9.3 KiB | 00m00s [145/175] Installing zig-srpm-macros-0: 100% | 0.0 B/s | 1.7 KiB | 00m00s [146/175] Installing cmake-srpm-macros- 100% | 0.0 B/s | 804.0 B | 00m00s [147/175] Installing filesystem-srpm-ma 100% | 0.0 B/s | 38.9 KiB | 00m00s [148/175] Installing elfutils-default-y 100% | 408.6 KiB/s | 2.0 KiB | 00m00s [149/175] Installing elfutils-libs-0:0. 100% | 227.0 MiB/s | 697.2 KiB | 00m00s [150/175] Installing elfutils-debuginfo 100% | 7.0 MiB/s | 86.0 KiB | 00m00s [151/175] Installing elfutils-0:0.197-1 100% | 164.3 MiB/s | 3.1 MiB | 00m00s [152/175] Installing binutils-0:2.45.1- 100% | 365.0 MiB/s | 27.4 MiB | 00m00s [153/175] Installing gdb-minimal-0:18.1 100% | 321.5 MiB/s | 13.8 MiB | 00m00s [154/175] Installing debugedit-0:5.2-3. 100% | 17.7 MiB/s | 217.3 KiB | 00m00s [155/175] Installing rpm-build-libs-0:6 100% | 258.9 MiB/s | 265.1 KiB | 00m00s [156/175] Installing gnome-srpm-macros- 100% | 0.0 B/s | 4.1 KiB | 00m00s [157/175] Installing perl-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [158/175] Installing openblas-srpm-macr 100% | 0.0 B/s | 392.0 B | 00m00s [159/175] Installing ocaml-srpm-macros- 100% | 0.0 B/s | 2.1 KiB | 00m00s [160/175] Installing kernel-srpm-macros 100% | 0.0 B/s | 2.3 KiB | 00m00s [161/175] Installing ghc-srpm-macros-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [162/175] Installing gap-srpm-macros-0: 100% | 0.0 B/s | 2.7 KiB | 00m00s [163/175] Installing fpc-srpm-macros-0: 100% | 0.0 B/s | 420.0 B | 00m00s [164/175] Installing ansible-srpm-macro 100% | 0.0 B/s | 36.2 KiB | 00m00s [165/175] Installing rpm-build-0:6.0.2- 100% | 22.2 MiB/s | 295.6 KiB | 00m00s [166/175] Installing pyproject-srpm-mac 100% | 0.0 B/s | 4.0 KiB | 00m00s [167/175] Installing redhat-rpm-config- 100% | 184.7 MiB/s | 189.1 KiB | 00m00s [168/175] Installing forge-srpm-macros- 100% | 0.0 B/s | 40.3 KiB | 00m00s [169/175] Installing fonts-srpm-macros- 100% | 0.0 B/s | 57.0 KiB | 00m00s [170/175] Installing go-srpm-macros-0:3 100% | 0.0 B/s | 63.0 KiB | 00m00s [171/175] Installing python-srpm-macros 100% | 51.6 MiB/s | 52.8 KiB | 00m00s [172/175] Installing util-linux-0:2.41. 100% | 108.0 MiB/s | 3.6 MiB | 00m00s [173/175] Installing shadow-utils-2:4.1 100% | 147.0 MiB/s | 4.0 MiB | 00m00s [174/175] Installing which-0:2.23-3.fc4 100% | 7.6 MiB/s | 85.7 KiB | 00m00s [175/175] Installing info-0:7.2-7.fc43. 100% | 268.2 KiB/s | 354.3 KiB | 00m01s Complete! Finish: installing minimal buildroot with dnf5 Start: creating root cache Finish: creating root cache Finish: chroot init INFO: Installed packages: INFO: add-determinism-0.6.0-3.fc43.x86_64 alternatives-1.33-3.fc43.x86_64 ansible-srpm-macros-1-18.1.fc43.noarch audit-libs-4.2.1-1.fc43.x86_64 bash-5.3.0-2.fc43.x86_64 binutils-2.45.1-5.fc43.x86_64 build-reproducibility-srpm-macros-0.6.0-3.fc43.noarch bzip2-1.0.8-21.fc43.x86_64 bzip2-libs-1.0.8-21.fc43.x86_64 ca-certificates-2026.2.92_v9.0.319-2.fc43.noarch cmake-srpm-macros-3.31.11-1.fc43.noarch coreutils-9.7-10.fc43.x86_64 coreutils-common-9.7-10.fc43.x86_64 cpio-2.15-6.fc43.x86_64 crypto-policies-20251125-1.git63291f8.fc43.noarch curl-8.15.0-12.fc43.x86_64 cyrus-sasl-lib-2.1.28-33.fc43.x86_64 debugedit-5.2-3.fc43.x86_64 diffutils-3.12-3.fc43.x86_64 dwz-0.16-2.fc43.x86_64 ed-1.22.2-1.fc43.x86_64 efi-srpm-macros-6-4.fc43.noarch elfutils-0.197-1.fc43.x86_64 elfutils-debuginfod-client-0.197-1.fc43.x86_64 elfutils-default-yama-scope-0.197-1.fc43.noarch elfutils-libelf-0.197-1.fc43.x86_64 elfutils-libs-0.197-1.fc43.x86_64 fedora-gpg-keys-43-2.noarch fedora-release-43-27.noarch fedora-release-common-43-27.noarch fedora-release-identity-basic-43-27.noarch fedora-repos-43-2.noarch file-5.46-9.fc43.x86_64 file-libs-5.46-9.fc43.x86_64 filesystem-3.18-50.fc43.x86_64 filesystem-srpm-macros-3.18-50.fc43.noarch findutils-4.10.0-6.fc43.x86_64 fonts-srpm-macros-2.0.5-23.fc43.noarch forge-srpm-macros-0.4.0-3.fc43.noarch fpc-srpm-macros-1.3-15.fc43.noarch gap-srpm-macros-2-1.fc43.noarch gawk-5.3.2-2.fc43.x86_64 gdb-minimal-18.1-1.fc43.x86_64 gdbm-libs-1.23-10.fc43.x86_64 ghc-srpm-macros-1.9.2-3.fc43.noarch glibc-2.42-17.fc43.x86_64 glibc-common-2.42-17.fc43.x86_64 glibc-gconv-extra-2.42-17.fc43.x86_64 glibc-minimal-langpack-2.42-17.fc43.x86_64 gmp-6.3.0-4.fc43.x86_64 gnat-srpm-macros-7-1.fc43.noarch gnome-srpm-macros-1.0-1.fc43.noarch gnulib-l10n-20241231-1.fc43.noarch gnupg2-2.4.9-5.fc43.x86_64 gnupg2-dirmngr-2.4.9-5.fc43.x86_64 gnupg2-gpg-agent-2.4.9-5.fc43.x86_64 gnupg2-gpgconf-2.4.9-5.fc43.x86_64 gnupg2-keyboxd-2.4.9-5.fc43.x86_64 gnupg2-verify-2.4.9-5.fc43.x86_64 gnutls-3.8.13-1.fc43.x86_64 go-srpm-macros-3.8.0-1.fc43.noarch gpg-pubkey-c6e7f081cf80e13146676e88829b606631645531-66b6dccf gpgverify-2.2-3.fc43.noarch grep-3.12-2.fc43.x86_64 gzip-1.13-4.fc43.x86_64 ima-evm-utils-libs-1.6.2-6.fc43.x86_64 info-7.2-7.fc43.x86_64 jansson-2.14-3.fc43.x86_64 java-srpm-macros-1-7.fc43.noarch json-c-0.18-7.fc43.x86_64 kernel-srpm-macros-1.0-27.fc43.noarch keyutils-libs-1.6.3-6.fc43.x86_64 krb5-libs-1.22.2-4.fc43.x86_64 libacl-2.4.0-1.fc43.x86_64 libarchive-3.8.4-1.fc43.x86_64 libassuan-2.5.7-4.fc43.x86_64 libattr-2.6.0-1.fc43.x86_64 libblkid-2.41.6-1.fc43.x86_64 libbrotli-1.2.1-1.fc43.x86_64 libcap-2.76-4.fc43.x86_64 libcap-ng-0.9.6-1.fc43.x86_64 libcom_err-1.47.3-2.fc43.x86_64 libcurl-8.15.0-12.fc43.x86_64 libeconf-0.7.9-2.fc43.x86_64 libevent-2.1.13-1.fc43.x86_64 libfdisk-2.41.6-1.fc43.x86_64 libffi-3.5.2-1.fc43.x86_64 libfsverity-1.6-3.fc43.x86_64 libgcc-15.3.1-1.fc43.x86_64 libgcrypt-1.11.1-4.fc43.x86_64 libgomp-15.3.1-1.fc43.x86_64 libgpg-error-1.55-2.fc43.x86_64 libidn2-2.3.8-2.fc43.x86_64 libksba-1.6.7-4.fc43.x86_64 liblastlog2-2.41.6-1.fc43.x86_64 libmount-2.41.6-1.fc43.x86_64 libnghttp2-1.66.0-3.fc43.x86_64 libpfm-4.14.1-2.fc43.x86_64 libpkgconf-2.3.0-3.fc43.x86_64 libpsl-0.21.5-6.fc43.x86_64 libselinux-3.9-5.fc43.x86_64 libsemanage-3.9-4.fc43.x86_64 libsepol-3.9-2.fc43.x86_64 libsmartcols-2.41.6-1.fc43.x86_64 libssh-0.11.5-1.fc43.x86_64 libssh-config-0.11.5-1.fc43.noarch libstdc++-15.3.1-1.fc43.x86_64 libtasn1-4.21.0-1.fc43.x86_64 libtool-ltdl-2.5.4-8.fc43.x86_64 libunistring-1.1-10.fc43.x86_64 libusb1-1.0.30-1.fc43.x86_64 libuuid-2.41.6-1.fc43.x86_64 libverto-0.3.2-11.fc43.x86_64 libxcrypt-4.5.2-1.fc43.x86_64 libxml2-2.12.10-5.fc43.x86_64 libzstd-1.5.7-2.fc43.x86_64 lua-libs-5.4.8-4.fc43.x86_64 lua-srpm-macros-1-16.fc43.noarch lz4-libs-1.10.0-3.fc43.x86_64 mpfr-4.2.2-2.fc43.x86_64 ncurses-base-6.5-7.20250614.fc43.noarch ncurses-libs-6.5-7.20250614.fc43.x86_64 nettle-3.10.1-2.fc43.x86_64 npth-1.8-3.fc43.x86_64 ocaml-srpm-macros-11-2.fc43.noarch openblas-srpm-macros-2-20.fc43.noarch openldap-2.6.15-1.fc43.x86_64 openssl-libs-3.5.9-1.fc43.x86_64 p11-kit-0.26.5-1.fc43.x86_64 p11-kit-trust-0.26.5-1.fc43.x86_64 package-notes-srpm-macros-0.20-1.fc43.noarch pam-libs-1.7.1-5.fc43.x86_64 patch-2.8-2.fc43.x86_64 pcre2-10.47-1.fc43.x86_64 pcre2-syntax-10.47-1.fc43.noarch perl-srpm-macros-1-60.fc43.noarch pkgconf-2.3.0-3.fc43.x86_64 pkgconf-m4-2.3.0-3.fc43.noarch pkgconf-pkg-config-2.3.0-3.fc43.x86_64 popt-1.19-9.fc43.x86_64 publicsuffix-list-dafsa-20260116-1.fc43.noarch pyproject-srpm-macros-1.24.0-1.fc43.noarch python-srpm-macros-3.14-5.fc43.noarch qt5-srpm-macros-5.15.18-1.fc43.noarch qt6-srpm-macros-6.10.3-1.fc43.noarch readline-8.3-2.fc43.x86_64 redhat-rpm-config-343-14.fc43.noarch rpm-6.0.2-1.fc43.x86_64 rpm-build-6.0.2-1.fc43.x86_64 rpm-build-libs-6.0.2-1.fc43.x86_64 rpm-libs-6.0.2-1.fc43.x86_64 rpm-sequoia-1.10.3-1.fc43.x86_64 rpm-sign-libs-6.0.2-1.fc43.x86_64 rust-srpm-macros-28.5-1.fc43.noarch sed-4.9-5.fc43.x86_64 setup-2.15.0-26.fc43.noarch shadow-utils-4.18.0-3.fc43.x86_64 sqlite-libs-3.50.2-3.fc43.x86_64 systemd-libs-258.11-1.fc43.x86_64 systemd-standalone-sysusers-258.11-1.fc43.x86_64 tar-1.35-6.fc43.x86_64 tpm2-tss-4.1.3-8.fc43.x86_64 tree-sitter-srpm-macros-0.4.2-1.fc43.noarch unzip-6.0-67.fc43.x86_64 util-linux-2.41.6-1.fc43.x86_64 util-linux-core-2.41.6-1.fc43.x86_64 which-2.23-3.fc43.x86_64 xxhash-libs-0.8.4-2.fc43.x86_64 xz-5.8.1-4.fc43.x86_64 xz-libs-5.8.1-4.fc43.x86_64 zig-srpm-macros-1-5.fc43.noarch zip-3.0-44.fc43.x86_64 zlib-ng-compat-2.3.3-2.fc43.x86_64 zstd-1.5.7-2.fc43.x86_64 Start: buildsrpm Start: rpmbuild -bs Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc43.src.rpm Finish: rpmbuild -bs INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-43-x86_64-1794038830.950905/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-uks3fp5m/python-ipax/python-ipax.spec) Config(child) 0 minutes 18 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-ipax-0.13.0-1.fc43.src.rpm) Config(fedora-43-x86_64) Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-43-x86_64-bootstrap-1794038830.950905/root. INFO: reusing tmpfs at /var/lib/mock/fedora-43-x86_64-bootstrap-1794038830.950905/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-43-x86_64-1794038830.950905/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.2-1.fc43.x86_64 rpm-sequoia-1.10.3-1.fc43.x86_64 dnf5-5.2.18.0-5.fc43.x86_64 dnf5-plugins-5.2.18.0-5.fc43.x86_64 Finish: chroot init Start: build phase for python-ipax-0.13.0-1.fc43.src.rpm Start: build setup for python-ipax-0.13.0-1.fc43.src.rpm Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc43.src.rpm Updating and loading repositories: Copr repository 100% | 13.6 KiB/s | 1.5 KiB | 00m00s fedora 100% | 88.1 KiB/s | 23.5 KiB | 00m00s updates 100% | 102.2 KiB/s | 18.6 KiB | 00m00s Repositories loaded. Package Arch Version Repository Size Installing: pyproject-rpm-macros noarch 1.24.0-1.fc43 updates 169.0 KiB python3-array-api-strict noarch 2.0.1-7.fc43 fedora 694.1 KiB python3-devel x86_64 3.14.8-1.fc43 updates 2.0 MiB python3-hypothesis noarch 6.123.0-7.fc43 fedora 5.0 MiB python3-numpy x86_64 1:2.3.5-1.fc43 updates 41.4 MiB python3-pytest noarch 8.3.5-9.fc43 fedora 21.6 MiB python3-scipy x86_64 1.16.2-1.fc43 fedora 66.5 MiB python3-sympy noarch 1.14.0-7.fc43 fedora 84.3 MiB Installing dependencies: expat x86_64 2.9.0-1.fc43 updates 337.6 KiB flexiblas x86_64 3.5.0-1.fc43 updates 38.0 KiB flexiblas-netlib x86_64 3.5.0-1.fc43 updates 16.5 MiB flexiblas-openblas-openmp x86_64 3.5.0-1.fc43 updates 39.2 KiB libgfortran x86_64 15.3.1-1.fc43 updates 3.3 MiB libquadmath x86_64 15.3.1-1.fc43 updates 317.9 KiB mpdecimal x86_64 4.0.1-2.fc43 fedora 217.2 KiB openblas x86_64 0.3.29-2.fc43 fedora 111.7 KiB openblas-openmp x86_64 0.3.29-2.fc43 fedora 43.7 MiB python-pip-wheel noarch 25.1.1-19.fc43 updates 1.2 MiB python-rpm-macros noarch 3.14-5.fc43 fedora 23.2 KiB python3 x86_64 3.14.8-1.fc43 updates 28.7 KiB python3-attrs noarch 25.4.0-1.fc43 updates 436.8 KiB python3-charset-normalizer noarch 3.4.3-3.fc43 fedora 355.7 KiB python3-idna noarch 3.18-1.fc43 updates 522.3 KiB python3-iniconfig noarch 2.1.0-3.fc43 fedora 42.4 KiB python3-libs x86_64 3.14.8-1.fc43 updates 43.5 MiB python3-mpmath noarch 1.3.0-16.fc43 fedora 5.3 MiB python3-numpy-f2py x86_64 1:2.3.5-1.fc43 updates 2.1 MiB python3-packaging noarch 25.0-7.fc43 fedora 607.4 KiB python3-platformdirs noarch 4.4.0-1.fc43 updates 182.4 KiB python3-pluggy noarch 1.6.0-4.fc43 fedora 211.0 KiB python3-pooch noarch 1.9.0-1.fc43 updates 656.8 KiB python3-requests noarch 2.33.1-1.fc43 updates 477.3 KiB python3-rpm-generators noarch 14-13.fc43 fedora 81.7 KiB python3-rpm-macros noarch 3.14-5.fc43 fedora 6.5 KiB python3-sortedcontainers noarch 2.4.0-25.fc43 fedora 392.9 KiB python3-urllib3 noarch 2.8.0-3.fc43 updates 1.2 MiB tzdata noarch 2026e-1.fc43 updates 1.6 MiB Transaction Summary: Installing: 37 packages Total size of inbound packages is 71 MiB. Need to download 71 MiB. After this operation, 345 MiB extra will be used (install 345 MiB, remove 0 B). [ 1/37] python3-array-api-strict-0:2.0. 100% | 10.7 MiB/s | 164.4 KiB | 00m00s [ 2/37] python3-pytest-0:8.3.5-9.fc43.n 100% | 123.1 MiB/s | 2.2 MiB | 00m00s [ 3/37] python3-hypothesis-0:6.123.0-7. 100% | 41.4 MiB/s | 1.2 MiB | 00m00s [ 4/37] pyproject-rpm-macros-0:1.24.0-1 100% | 6.3 MiB/s | 58.0 KiB | 00m00s [ 5/37] python3-devel-0:3.14.8-1.fc43.x 100% | 47.7 MiB/s | 439.4 KiB | 00m00s [ 6/37] python3-numpy-1:2.3.5-1.fc43.x8 100% | 96.8 MiB/s | 8.2 MiB | 00m00s [ 7/37] python3-sympy-0:1.14.0-7.fc43.n 100% | 118.1 MiB/s | 15.9 MiB | 00m00s [ 8/37] python3-sortedcontainers-0:2.4. 100% | 3.1 MiB/s | 63.9 KiB | 00m00s [ 9/37] python3-scipy-0:1.16.2-1.fc43.x 100% | 106.1 MiB/s | 16.3 MiB | 00m00s [10/37] python3-iniconfig-0:2.1.0-3.fc4 100% | 1.5 MiB/s | 22.9 KiB | 00m00s [11/37] python3-packaging-0:25.0-7.fc43 100% | 9.9 MiB/s | 161.5 KiB | 00m00s [12/37] python3-pluggy-0:1.6.0-4.fc43.n 100% | 20.0 MiB/s | 61.5 KiB | 00m00s [13/37] python-rpm-macros-0:3.14-5.fc43 100% | 2.4 MiB/s | 17.3 KiB | 00m00s [14/37] python3-mpmath-0:1.3.0-16.fc43. 100% | 122.2 MiB/s | 1.1 MiB | 00m00s [15/37] python3-rpm-macros-0:3.14-5.fc4 100% | 1.9 MiB/s | 11.8 KiB | 00m00s [16/37] mpdecimal-0:4.0.1-2.fc43.x86_64 100% | 15.8 MiB/s | 97.1 KiB | 00m00s [17/37] python3-numpy-f2py-1:2.3.5-1.fc 100% | 71.3 MiB/s | 510.8 KiB | 00m00s [18/37] python3-0:3.14.8-1.fc43.x86_64 100% | 7.2 MiB/s | 29.4 KiB | 00m00s [19/37] expat-0:2.9.0-1.fc43.x86_64 100% | 21.3 MiB/s | 131.1 KiB | 00m00s [20/37] flexiblas-0:3.5.0-1.fc43.x86_64 100% | 7.5 MiB/s | 23.1 KiB | 00m00s [21/37] flexiblas-openblas-openmp-0:3.5 100% | 3.4 MiB/s | 17.3 KiB | 00m00s [22/37] flexiblas-netlib-0:3.5.0-1.fc43 100% | 166.6 MiB/s | 4.5 MiB | 00m00s [23/37] python3-libs-0:3.14.8-1.fc43.x8 100% | 180.3 MiB/s | 9.9 MiB | 00m00s [24/37] python-pip-wheel-0:25.1.1-19.fc 100% | 60.2 MiB/s | 1.2 MiB | 00m00s [25/37] tzdata-0:2026e-1.fc43.noarch 100% | 87.0 MiB/s | 713.0 KiB | 00m00s [26/37] openblas-openmp-0:0.3.29-2.fc43 100% | 116.5 MiB/s | 5.4 MiB | 00m00s [27/37] libquadmath-0:15.3.1-1.fc43.x86 100% | 29.8 MiB/s | 213.7 KiB | 00m00s [28/37] libgfortran-0:15.3.1-1.fc43.x86 100% | 73.1 MiB/s | 973.6 KiB | 00m00s [29/37] python3-pooch-0:1.9.0-1.fc43.no 100% | 20.4 MiB/s | 145.9 KiB | 00m00s [30/37] python3-attrs-0:25.4.0-1.fc43.n 100% | 27.5 MiB/s | 140.6 KiB | 00m00s [31/37] openblas-0:0.3.29-2.fc43.x86_64 100% | 10.3 MiB/s | 42.3 KiB | 00m00s [32/37] python3-platformdirs-0:4.4.0-1. 100% | 16.0 MiB/s | 49.1 KiB | 00m00s [33/37] python3-requests-0:2.33.1-1.fc4 100% | 31.4 MiB/s | 160.6 KiB | 00m00s [34/37] python3-charset-normalizer-0:3. 100% | 22.9 MiB/s | 117.3 KiB | 00m00s [35/37] python3-idna-0:3.18-1.fc43.noar 100% | 20.4 MiB/s | 104.3 KiB | 00m00s [36/37] python3-rpm-generators-0:14-13. 100% | 9.3 MiB/s | 28.5 KiB | 00m00s [37/37] python3-urllib3-0:2.8.0-3.fc43. 100% | 75.7 MiB/s | 309.9 KiB | 00m00s -------------------------------------------------------------------------------- [37/37] Total 100% | 261.9 MiB/s | 70.7 MiB | 00m00s Running transaction [ 1/39] Verify package files 100% | 155.0 B/s | 37.0 B | 00m00s [ 2/39] Prepare transaction 100% | 544.0 B/s | 37.0 B | 00m00s [ 3/39] Installing libgfortran-0:15.3.1 100% | 371.5 MiB/s | 3.3 MiB | 00m00s [ 4/39] Installing python-rpm-macros-0: 100% | 0.0 B/s | 23.9 KiB | 00m00s [ 5/39] Installing python3-rpm-macros-0 100% | 0.0 B/s | 6.8 KiB | 00m00s [ 6/39] Installing pyproject-rpm-macros 100% | 167.4 MiB/s | 171.5 KiB | 00m00s [ 7/39] Installing openblas-0:0.3.29-2. 100% | 0.0 B/s | 113.5 KiB | 00m00s [ 8/39] Installing openblas-openmp-0:0. 100% | 642.5 MiB/s | 43.7 MiB | 00m00s [ 9/39] Installing libquadmath-0:15.3.1 100% | 311.7 MiB/s | 319.2 KiB | 00m00s [10/39] Installing flexiblas-netlib-0:3 100% | 351.3 MiB/s | 16.5 MiB | 00m00s [11/39] Installing flexiblas-0:3.5.0-1. 100% | 0.0 B/s | 39.2 KiB | 00m00s [12/39] Installing flexiblas-openblas-o 100% | 13.0 MiB/s | 40.1 KiB | 00m00s [13/39] Installing tzdata-0:2026e-1.fc4 100% | 73.5 MiB/s | 1.9 MiB | 00m00s [14/39] Installing python-pip-wheel-0:2 100% | 623.0 MiB/s | 1.2 MiB | 00m00s [15/39] Installing expat-0:2.9.0-1.fc43 100% | 25.5 MiB/s | 339.6 KiB | 00m00s [16/39] Installing mpdecimal-0:4.0.1-2. 100% | 42.7 MiB/s | 218.8 KiB | 00m00s [17/39] Installing python3-libs-0:3.14. 100% | 375.5 MiB/s | 43.9 MiB | 00m00s [18/39] Installing python3-0:3.14.8-1.f 100% | 2.0 MiB/s | 30.4 KiB | 00m00s [19/39] Installing python3-numpy-1:2.3. 100% | 378.9 MiB/s | 41.7 MiB | 00m00s [20/39] Installing python3-numpy-f2py-1 100% | 103.4 MiB/s | 2.2 MiB | 00m00s [21/39] Installing python3-packaging-0: 100% | 201.8 MiB/s | 619.9 KiB | 00m00s [22/39] Installing python3-idna-0:3.18- 100% | 39.8 MiB/s | 530.2 KiB | 00m00s [23/39] Installing python3-urllib3-0:2. 100% | 294.8 MiB/s | 1.2 MiB | 00m00s [24/39] Installing python3-rpm-generato 100% | 0.0 B/s | 82.9 KiB | 00m00s [25/39] Installing python3-sortedcontai 100% | 388.0 MiB/s | 397.3 KiB | 00m00s [26/39] Installing python3-iniconfig-0: 100% | 45.4 MiB/s | 46.5 KiB | 00m00s [27/39] Installing python3-pluggy-0:1.6 100% | 106.2 MiB/s | 217.5 KiB | 00m00s [28/39] Installing python3-mpmath-0:1.3 100% | 384.0 MiB/s | 5.4 MiB | 00m00s [29/39] Installing python3-attrs-0:25.4 100% | 220.3 MiB/s | 451.1 KiB | 00m00s [30/39] Installing python3-platformdirs 100% | 184.4 MiB/s | 188.8 KiB | 00m00s [31/39] Installing python3-charset-norm 100% | 27.5 MiB/s | 365.8 KiB | 00m00s [32/39] Installing python3-requests-0:2 100% | 239.0 MiB/s | 489.5 KiB | 00m00s [33/39] Installing python3-pooch-0:1.9. 100% | 93.9 MiB/s | 672.8 KiB | 00m00s [34/39] Installing python3-scipy-0:1.16 100% | 405.7 MiB/s | 66.9 MiB | 00m00s [35/39] Installing python3-hypothesis-0 100% | 148.9 MiB/s | 5.1 MiB | 00m00s [36/39] Installing python3-sympy-0:1.14 100% | 359.5 MiB/s | 85.2 MiB | 00m00s [37/39] Installing python3-pytest-0:8.3 100% | 403.6 MiB/s | 21.8 MiB | 00m00s [38/39] Installing python3-devel-0:3.14 100% | 105.6 MiB/s | 2.0 MiB | 00m00s [39/39] Installing python3-array-api-st 100% | 13.2 MiB/s | 717.6 KiB | 00m00s Complete! Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc43.src.rpm Updating and loading repositories: Copr repository 100% | 13.4 KiB/s | 1.5 KiB | 00m00s fedora 100% | 50.8 KiB/s | 23.5 KiB | 00m00s updates 100% | 50.6 KiB/s | 18.6 KiB | 00m00s Repositories loaded. Nothing to do. Package "pyproject-rpm-macros-1.24.0-1.fc43.noarch" is already installed. Package "python3-array-api-strict-2.0.1-7.fc43.noarch" is already installed. Package "python3-devel-3.14.8-1.fc43.x86_64" is already installed. Package "python3-hypothesis-6.123.0-7.fc43.noarch" is already installed. Package "python3-numpy-1:2.3.5-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.5-9.fc43.noarch" is already installed. Package "python3-scipy-1.16.2-1.fc43.x86_64" is already installed. Package "python3-sympy-1.14.0-7.fc43.noarch" is already installed. Finish: build setup for python-ipax-0.13.0-1.fc43.src.rpm Start: rpmbuild python-ipax-0.13.0-1.fc43.src.rpm Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.WYk5LI Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.GBuvZu + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.0-build + cd /builddir/build/BUILD/python-ipax-0.13.0-build + rm -rf ipax-0.13.0 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/ipax-0.13.0.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd ipax-0.13.0 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + RPM_EC=0 ++ jobs -p + exit 0 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.xzjOnO + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.0-build + cd ipax-0.13.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-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-dep-overrides Handling hatchling>=1.27 from build-system.requires Requirement not satisfied: hatchling>=1.27 Exiting dependency generation pass: build backend + cat /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires + rm -rfv '*.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc43.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: Copr repository 100% | 11.2 KiB/s | 1.5 KiB | 00m00s fedora 100% | 55.5 KiB/s | 23.5 KiB | 00m00s updates 100% | 46.4 KiB/s | 18.6 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.24.0-1.fc43.noarch" is already installed. Package "python3-array-api-strict-2.0.1-7.fc43.noarch" is already installed. Package "python3-devel-3.14.8-1.fc43.x86_64" is already installed. Package "python3-hypothesis-6.123.0-7.fc43.noarch" is already installed. Package "python3-numpy-1:2.3.5-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.5-9.fc43.noarch" is already installed. Package "python3-scipy-1.16.2-1.fc43.x86_64" is already installed. Package "python3-sympy-1.14.0-7.fc43.noarch" is already installed. Package "python3-packaging-25.0-7.fc43.noarch" is already installed. Package Arch Version Repository Size Installing: python3-hatchling noarch 1.31.0-1.fc43 updates 681.7 KiB python3-pip noarch 25.1.1-19.fc43 updates 12.5 MiB Installing dependencies: python3-pathspec noarch 1.0.3-1.fc43 updates 372.4 KiB python3-trove-classifiers noarch 2025.12.1.14-1.fc43 updates 111.8 KiB Transaction Summary: Installing: 4 packages Total size of inbound packages is 3 MiB. Need to download 3 MiB. After this operation, 14 MiB extra will be used (install 14 MiB, remove 0 B). [1/4] python3-pathspec-0:1.0.3-1.fc43.n 100% | 7.0 MiB/s | 107.7 KiB | 00m00s [2/4] python3-hatchling-0:1.31.0-1.fc43 100% | 12.7 MiB/s | 233.2 KiB | 00m00s [3/4] python3-trove-classifiers-0:2025. 100% | 16.6 MiB/s | 34.0 KiB | 00m00s [4/4] python3-pip-0:25.1.1-19.fc43.noar 100% | 123.7 MiB/s | 2.8 MiB | 00m00s -------------------------------------------------------------------------------- [4/4] Total 100% | 139.6 MiB/s | 3.2 MiB | 00m00s Running transaction [1/6] Verify package files 100% | 400.0 B/s | 4.0 B | 00m00s [2/6] Prepare transaction 100% | 210.0 B/s | 4.0 B | 00m00s [3/6] Installing python3-trove-classifi 100% | 9.4 MiB/s | 115.6 KiB | 00m00s [4/6] Installing python3-pathspec-0:1.0 100% | 128.4 MiB/s | 394.6 KiB | 00m00s [5/6] Installing python3-hatchling-0:1. 100% | 37.6 MiB/s | 730.8 KiB | 00m00s [6/6] Installing python3-pip-0:25.1.1-1 100% | 182.7 MiB/s | 12.8 MiB | 00m00s Complete! Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.lYEJDi + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.0-build + cd ipax-0.13.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-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-dep-overrides Handling hatchling>=1.27 from build-system.requires Requirement satisfied: hatchling>=1.27 (installed: hatchling 1.31.0) Handling array-api-compat>=1.9 from hook generated metadata: Requires-Dist (ipax) Requirement not satisfied: array-api-compat>=1.9 Handling array-api-extra>=0.6 from hook generated metadata: Requires-Dist (ipax) Requirement not satisfied: array-api-extra>=0.6 Handling asv>=0.6; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: asv>=0.6; extra == 'bench' Handling matplotlib>=3.8; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: matplotlib>=3.8; extra == 'bench' Handling memray>=1.13; (sys_platform != 'win32') and extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: memray>=1.13; (sys_platform != 'win32') and extra == 'bench' Handling osqp>=1.0; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: osqp>=1.0; extra == 'bench' Handling pytest-benchmark>=4; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-benchmark>=4; extra == 'bench' Handling array-api-strict>=2.1; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: array-api-strict>=2.1; extra == 'dev' Handling asv>=0.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: asv>=0.6; extra == 'dev' Handling codespell>=2.3; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: codespell>=2.3; extra == 'dev' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'dev' Handling hypothesis>=6.100; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: hypothesis>=6.100; extra == 'dev' Handling matplotlib>=3.8; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: matplotlib>=3.8; extra == 'dev' Handling memray>=1.13; (sys_platform != 'win32') and extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: memray>=1.13; (sys_platform != 'win32') and extra == 'dev' Handling mkdocs-material>=9.5; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs-material>=9.5; extra == 'dev' Handling mkdocs>=1.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs>=1.6; extra == 'dev' Handling mkdocstrings[python]>=0.26; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocstrings[python]>=0.26; extra == 'dev' Handling mypy>=1.11; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mypy>=1.11; extra == 'dev' Handling numpy>=1.26; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'dev' Handling osqp>=1.0; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: osqp>=1.0; extra == 'dev' Handling pre-commit>=3.7; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pre-commit>=3.7; extra == 'dev' Handling pytest-benchmark>=4; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-benchmark>=4; extra == 'dev' Handling pytest-cov>=5; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-cov>=5; extra == 'dev' Handling pytest-xdist>=3.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-xdist>=3.6; extra == 'dev' Handling pytest>=8; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest>=8; extra == 'dev' Handling ruff>=0.16.2; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: ruff>=0.16.2; extra == 'dev' Handling scipy>=1.12; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'dev' Handling sympy>=1.13; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: sympy>=1.13; extra == 'dev' Handling torch>=2.2; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: torch>=2.2; extra == 'dev' Handling mkdocs-material>=9.5; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs-material>=9.5; extra == 'docs' Handling mkdocs>=1.6; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs>=1.6; extra == 'docs' Handling mkdocstrings[python]>=0.26; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocstrings[python]>=0.26; extra == 'docs' Handling jax>=0.4.28; extra == 'jax' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: jax>=0.4.28; extra == 'jax' Handling jaxlib>=0.4.28; extra == 'jax' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: jaxlib>=0.4.28; extra == 'jax' Handling codespell>=2.3; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: codespell>=2.3; extra == 'lint' Handling mypy>=1.11; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mypy>=1.11; extra == 'lint' Handling pre-commit>=3.7; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pre-commit>=3.7; extra == 'lint' Handling ruff>=0.16.2; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: ruff>=0.16.2; extra == 'lint' Handling numpy>=1.26; extra == 'numpy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'numpy' Handling numpy>=1.26; extra == 'scipy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'scipy' Handling scipy>=1.12; extra == 'scipy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'scipy' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'sparse' Handling nvmath-python; (platform_system != 'Darwin') and extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: nvmath-python; (platform_system != 'Darwin') and extra == 'sparse' Handling scipy>=1.12; extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'sparse' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'sparse-cpu' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'sparse-cpu' Handling scipy>=1.12; extra == 'sparse-cpu' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'sparse-cpu' Handling nvmath-python; (platform_system != 'Darwin') and extra == 'sparse-cuda' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: nvmath-python; (platform_system != 'Darwin') and extra == 'sparse-cuda' Handling array-api-strict>=2.1; extra == 'strict' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: array-api-strict>=2.1; extra == 'strict' Handling hypothesis>=6.100; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: hypothesis>=6.100; extra == 'test' Handling pytest-cov>=5; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-cov>=5; extra == 'test' Handling pytest-xdist>=3.6; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-xdist>=3.6; extra == 'test' Handling pytest>=8; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest>=8; extra == 'test' Handling sympy>=1.13; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: sympy>=1.13; extra == 'test' Handling torch>=2.2; extra == 'torch' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: torch>=2.2; extra == 'torch' Handling numba>=0.60; extra == 'trots' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numba>=0.60; extra == 'trots' + cat /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires + rm -rfv ipax-0.13.0.dist-info/ removed 'ipax-0.13.0.dist-info/METADATA' removed directory 'ipax-0.13.0.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc43.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: Copr repository 100% | 10.6 KiB/s | 1.5 KiB | 00m00s fedora 100% | 42.1 KiB/s | 23.5 KiB | 00m01s updates 100% | 59.3 KiB/s | 18.6 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.24.0-1.fc43.noarch" is already installed. Package "python3-array-api-strict-2.0.1-7.fc43.noarch" is already installed. Package "python3-devel-3.14.8-1.fc43.x86_64" is already installed. Package "python3-hypothesis-6.123.0-7.fc43.noarch" is already installed. Package "python3-numpy-1:2.3.5-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.5-9.fc43.noarch" is already installed. Package "python3-scipy-1.16.2-1.fc43.x86_64" is already installed. Package "python3-sympy-1.14.0-7.fc43.noarch" is already installed. Package "python3-hatchling-1.31.0-1.fc43.noarch" is already installed. Package "python3-packaging-25.0-7.fc43.noarch" is already installed. Package "python3-pip-25.1.1-19.fc43.noarch" is already installed. Package Arch Version Repository Size Installing: python3-array-api-compat noarch 1.15.0-1.fc43 copr_base 506.6 KiB python3-array-api-extra noarch 0.11.5-1.fc43 copr_base 1.4 MiB Transaction Summary: Installing: 2 packages Total size of inbound packages is 395 KiB. Need to download 395 KiB. After this operation, 2 MiB extra will be used (install 2 MiB, remove 0 B). [1/2] python3-array-api-compat-0:1.15.0 100% | 483.1 KiB/s | 123.2 KiB | 00m00s [2/2] python3-array-api-extra-0:0.11.5- 100% | 916.3 KiB/s | 272.2 KiB | 00m00s -------------------------------------------------------------------------------- [2/2] Total 100% | 1.3 MiB/s | 395.3 KiB | 00m00s Running transaction [1/4] Verify package files 100% | 2.0 KiB/s | 2.0 B | 00m00s [2/4] Prepare transaction 100% | 181.0 B/s | 2.0 B | 00m00s [3/4] Installing python3-array-api-comp 100% | 129.2 MiB/s | 529.3 KiB | 00m00s [4/4] Installing python3-array-api-extr 100% | 101.5 MiB/s | 1.4 MiB | 00m00s Warning: skipped OpenPGP checks for 2 packages from repository: copr_base Complete! Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.roiiuQ + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.0-build + cd ipax-0.13.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-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-dep-overrides Handling hatchling>=1.27 from build-system.requires Requirement satisfied: hatchling>=1.27 (installed: hatchling 1.31.0) Handling array-api-compat>=1.9 from hook generated metadata: Requires-Dist (ipax) Requirement satisfied: array-api-compat>=1.9 (installed: array-api-compat 1.15.0) Handling array-api-extra>=0.6 from hook generated metadata: Requires-Dist (ipax) Requirement satisfied: array-api-extra>=0.6 (installed: array-api-extra 0.11.5) Handling asv>=0.6; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: asv>=0.6; extra == 'bench' Handling matplotlib>=3.8; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: matplotlib>=3.8; extra == 'bench' Handling memray>=1.13; (sys_platform != 'win32') and extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: memray>=1.13; (sys_platform != 'win32') and extra == 'bench' Handling osqp>=1.0; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: osqp>=1.0; extra == 'bench' Handling pytest-benchmark>=4; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-benchmark>=4; extra == 'bench' Handling array-api-strict>=2.1; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: array-api-strict>=2.1; extra == 'dev' Handling asv>=0.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: asv>=0.6; extra == 'dev' Handling codespell>=2.3; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: codespell>=2.3; extra == 'dev' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'dev' Handling hypothesis>=6.100; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: hypothesis>=6.100; extra == 'dev' Handling matplotlib>=3.8; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: matplotlib>=3.8; extra == 'dev' Handling memray>=1.13; (sys_platform != 'win32') and extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: memray>=1.13; (sys_platform != 'win32') and extra == 'dev' Handling mkdocs-material>=9.5; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs-material>=9.5; extra == 'dev' Handling mkdocs>=1.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs>=1.6; extra == 'dev' Handling mkdocstrings[python]>=0.26; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocstrings[python]>=0.26; extra == 'dev' Handling mypy>=1.11; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mypy>=1.11; extra == 'dev' Handling numpy>=1.26; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'dev' Handling osqp>=1.0; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: osqp>=1.0; extra == 'dev' Handling pre-commit>=3.7; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pre-commit>=3.7; extra == 'dev' Handling pytest-benchmark>=4; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-benchmark>=4; extra == 'dev' Handling pytest-cov>=5; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-cov>=5; extra == 'dev' Handling pytest-xdist>=3.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-xdist>=3.6; extra == 'dev' Handling pytest>=8; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest>=8; extra == 'dev' Handling ruff>=0.16.2; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: ruff>=0.16.2; extra == 'dev' Handling scipy>=1.12; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'dev' Handling sympy>=1.13; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: sympy>=1.13; extra == 'dev' Handling torch>=2.2; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: torch>=2.2; extra == 'dev' Handling mkdocs-material>=9.5; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs-material>=9.5; extra == 'docs' Handling mkdocs>=1.6; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs>=1.6; extra == 'docs' Handling mkdocstrings[python]>=0.26; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocstrings[python]>=0.26; extra == 'docs' Handling jax>=0.4.28; extra == 'jax' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: jax>=0.4.28; extra == 'jax' Handling jaxlib>=0.4.28; extra == 'jax' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: jaxlib>=0.4.28; extra == 'jax' Handling codespell>=2.3; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: codespell>=2.3; extra == 'lint' Handling mypy>=1.11; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mypy>=1.11; extra == 'lint' Handling pre-commit>=3.7; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pre-commit>=3.7; extra == 'lint' Handling ruff>=0.16.2; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: ruff>=0.16.2; extra == 'lint' Handling numpy>=1.26; extra == 'numpy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'numpy' Handling numpy>=1.26; extra == 'scipy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'scipy' Handling scipy>=1.12; extra == 'scipy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'scipy' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'sparse' Handling nvmath-python; (platform_system != 'Darwin') and extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: nvmath-python; (platform_system != 'Darwin') and extra == 'sparse' Handling scipy>=1.12; extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'sparse' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'sparse-cpu' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'sparse-cpu' Handling scipy>=1.12; extra == 'sparse-cpu' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'sparse-cpu' Handling nvmath-python; (platform_system != 'Darwin') and extra == 'sparse-cuda' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: nvmath-python; (platform_system != 'Darwin') and extra == 'sparse-cuda' Handling array-api-strict>=2.1; extra == 'strict' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: array-api-strict>=2.1; extra == 'strict' Handling hypothesis>=6.100; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: hypothesis>=6.100; extra == 'test' Handling pytest-cov>=5; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-cov>=5; extra == 'test' Handling pytest-xdist>=3.6; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-xdist>=3.6; extra == 'test' Handling pytest>=8; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest>=8; extra == 'test' Handling sympy>=1.13; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: sympy>=1.13; extra == 'test' Handling torch>=2.2; extra == 'torch' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: torch>=2.2; extra == 'torch' Handling numba>=0.60; extra == 'trots' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numba>=0.60; extra == 'trots' + cat /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires + rm -rfv ipax-0.13.0.dist-info/ removed 'ipax-0.13.0.dist-info/METADATA' removed directory 'ipax-0.13.0.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc43.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: Copr repository 100% | 11.9 KiB/s | 1.5 KiB | 00m00s fedora 100% | 102.8 KiB/s | 23.5 KiB | 00m00s updates 100% | 122.4 KiB/s | 18.6 KiB | 00m00s Repositories loaded. Nothing to do. Package "pyproject-rpm-macros-1.24.0-1.fc43.noarch" is already installed. Package "python3-array-api-strict-2.0.1-7.fc43.noarch" is already installed. Package "python3-devel-3.14.8-1.fc43.x86_64" is already installed. Package "python3-hypothesis-6.123.0-7.fc43.noarch" is already installed. Package "python3-numpy-1:2.3.5-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.5-9.fc43.noarch" is already installed. Package "python3-scipy-1.16.2-1.fc43.x86_64" is already installed. Package "python3-sympy-1.14.0-7.fc43.noarch" is already installed. Package "python3-array-api-compat-1.15.0-1.fc43.noarch" is already installed. Package "python3-array-api-extra-0.11.5-1.fc43.noarch" is already installed. Package "python3-hatchling-1.31.0-1.fc43.noarch" is already installed. Package "python3-packaging-25.0-7.fc43.noarch" is already installed. Package "python3-pip-25.1.1-19.fc43.noarch" is already installed. Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.Bh5hKY + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.0-build + cd ipax-0.13.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-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-dep-overrides Handling hatchling>=1.27 from build-system.requires Requirement satisfied: hatchling>=1.27 (installed: hatchling 1.31.0) Handling array-api-compat>=1.9 from hook generated metadata: Requires-Dist (ipax) Requirement satisfied: array-api-compat>=1.9 (installed: array-api-compat 1.15.0) Handling array-api-extra>=0.6 from hook generated metadata: Requires-Dist (ipax) Requirement satisfied: array-api-extra>=0.6 (installed: array-api-extra 0.11.5) Handling asv>=0.6; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: asv>=0.6; extra == 'bench' Handling matplotlib>=3.8; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: matplotlib>=3.8; extra == 'bench' Handling memray>=1.13; (sys_platform != 'win32') and extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: memray>=1.13; (sys_platform != 'win32') and extra == 'bench' Handling osqp>=1.0; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: osqp>=1.0; extra == 'bench' Handling pytest-benchmark>=4; extra == 'bench' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-benchmark>=4; extra == 'bench' Handling array-api-strict>=2.1; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: array-api-strict>=2.1; extra == 'dev' Handling asv>=0.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: asv>=0.6; extra == 'dev' Handling codespell>=2.3; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: codespell>=2.3; extra == 'dev' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'dev' Handling hypothesis>=6.100; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: hypothesis>=6.100; extra == 'dev' Handling matplotlib>=3.8; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: matplotlib>=3.8; extra == 'dev' Handling memray>=1.13; (sys_platform != 'win32') and extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: memray>=1.13; (sys_platform != 'win32') and extra == 'dev' Handling mkdocs-material>=9.5; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs-material>=9.5; extra == 'dev' Handling mkdocs>=1.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs>=1.6; extra == 'dev' Handling mkdocstrings[python]>=0.26; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocstrings[python]>=0.26; extra == 'dev' Handling mypy>=1.11; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mypy>=1.11; extra == 'dev' Handling numpy>=1.26; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'dev' Handling osqp>=1.0; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: osqp>=1.0; extra == 'dev' Handling pre-commit>=3.7; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pre-commit>=3.7; extra == 'dev' Handling pytest-benchmark>=4; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-benchmark>=4; extra == 'dev' Handling pytest-cov>=5; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-cov>=5; extra == 'dev' Handling pytest-xdist>=3.6; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-xdist>=3.6; extra == 'dev' Handling pytest>=8; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest>=8; extra == 'dev' Handling ruff>=0.16.2; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: ruff>=0.16.2; extra == 'dev' Handling scipy>=1.12; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'dev' Handling sympy>=1.13; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: sympy>=1.13; extra == 'dev' Handling torch>=2.2; extra == 'dev' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: torch>=2.2; extra == 'dev' Handling mkdocs-material>=9.5; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs-material>=9.5; extra == 'docs' Handling mkdocs>=1.6; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocs>=1.6; extra == 'docs' Handling mkdocstrings[python]>=0.26; extra == 'docs' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mkdocstrings[python]>=0.26; extra == 'docs' Handling jax>=0.4.28; extra == 'jax' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: jax>=0.4.28; extra == 'jax' Handling jaxlib>=0.4.28; extra == 'jax' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: jaxlib>=0.4.28; extra == 'jax' Handling codespell>=2.3; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: codespell>=2.3; extra == 'lint' Handling mypy>=1.11; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: mypy>=1.11; extra == 'lint' Handling pre-commit>=3.7; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pre-commit>=3.7; extra == 'lint' Handling ruff>=0.16.2; extra == 'lint' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: ruff>=0.16.2; extra == 'lint' Handling numpy>=1.26; extra == 'numpy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'numpy' Handling numpy>=1.26; extra == 'scipy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numpy>=1.26; extra == 'scipy' Handling scipy>=1.12; extra == 'scipy' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'scipy' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'sparse' Handling nvmath-python; (platform_system != 'Darwin') and extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: nvmath-python; (platform_system != 'Darwin') and extra == 'sparse' Handling scipy>=1.12; extra == 'sparse' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'sparse' Handling feral-solver[scipy]<0.12,>=0.11; extra == 'sparse-cpu' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: feral-solver[scipy]<0.12,>=0.11; extra == 'sparse-cpu' Handling scipy>=1.12; extra == 'sparse-cpu' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: scipy>=1.12; extra == 'sparse-cpu' Handling nvmath-python; (platform_system != 'Darwin') and extra == 'sparse-cuda' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: nvmath-python; (platform_system != 'Darwin') and extra == 'sparse-cuda' Handling array-api-strict>=2.1; extra == 'strict' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: array-api-strict>=2.1; extra == 'strict' Handling hypothesis>=6.100; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: hypothesis>=6.100; extra == 'test' Handling pytest-cov>=5; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-cov>=5; extra == 'test' Handling pytest-xdist>=3.6; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest-xdist>=3.6; extra == 'test' Handling pytest>=8; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: pytest>=8; extra == 'test' Handling sympy>=1.13; extra == 'test' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: sympy>=1.13; extra == 'test' Handling torch>=2.2; extra == 'torch' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: torch>=2.2; extra == 'torch' Handling numba>=0.60; extra == 'trots' from hook generated metadata: Requires-Dist (ipax) Ignoring alien requirement: numba>=0.60; extra == 'trots' + cat /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-buildrequires + rm -rfv ipax-0.13.0.dist-info/ removed 'ipax-0.13.0.dist-info/METADATA' removed directory 'ipax-0.13.0.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.1yWf6g + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 ipax-0.13.0 + mkdir -p /builddir/build/BUILD/python-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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-ipax-0.13.0-build/.pyproject-builddir + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_wheel.py /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir Processing /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0 Preparing metadata (pyproject.toml): started Running command Preparing metadata (pyproject.toml) Preparing metadata (pyproject.toml): finished with status 'done' Building wheels for collected packages: ipax Building wheel for ipax (pyproject.toml): started Running command Building wheel for ipax (pyproject.toml) Building wheel for ipax (pyproject.toml): finished with status 'done' Created wheel for ipax: filename=ipax-0.13.0-py3-none-any.whl size=356589 sha256=fa4e88f3294aed82c0d86f26ba7e371bcd671bbf298d565e254b66dae9159294 Stored in directory: /builddir/.cache/pip/wheels/af/41/6c/a7b4939fa83a4bb508f57a72bc11873e01a69d49a4a3e3433e Successfully built ipax + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.KCGbTn + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.0-build + '[' /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT ++ dirname /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT + mkdir -p /builddir/build/BUILD/python-ipax-0.13.0-build + mkdir /builddir/build/BUILD/python-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 ipax-0.13.0 ++ ls /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir/ipax-0.13.0-py3-none-any.whl ++ xargs basename --multiple ++ sed -E 's/([^-]+)-([^-]+)-.+\.whl/\1==\2/' + specifier=ipax==0.13.0 + '[' -z ipax==0.13.0 ']' + PIP_CONFIG_FILE=/dev/null + TMPDIR=/builddir/build/BUILD/python-ipax-0.13.0-build/.pyproject-builddir + /usr/bin/python3 -m pip install --root /builddir/build/BUILD/python-ipax-0.13.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-ipax-0.13.0-build/pyproject-wheeldir ipax==0.13.0 Using pip 25.1.1 from /usr/lib/python3.14/site-packages/pip (python 3.14) Looking in links: /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir Processing /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir/ipax-0.13.0-py3-none-any.whl Installing collected packages: ipax Successfully installed ipax-0.13.0 + '[' -d /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/bin ']' + rm -f /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-ghost-distinfo + site_dirs=() + '[' -d /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages ']' + site_dirs+=("/usr/lib/python3.14/site-packages") + '[' /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib64/python3.14/site-packages '!=' /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages ']' + '[' -d /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib64/python3.14/site-packages ']' + for site_dir in ${site_dirs[@]} + for distinfo in /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT$site_dir/*.dist-info + echo '%ghost %dir /usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info' +++ basename /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info ++ PYTHONPATH=/usr/lib/rpm/redhat ++ /usr/bin/python3 -sBc 'import sys; from pyproject_save_files import canonical_name_from_distinfo; print(canonical_name_from_distinfo(sys.argv[1]))' ipax-0.13.0.dist-info + _normalized=ipax + echo '%ghost %dir /usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info' + sed -i s/pip/rpm/ /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.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-ipax-0.13.0-build/BUILDROOT --record /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info/RECORD --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-record + rm -fv /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info/RECORD removed '/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info/RECORD' + rm -fv /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info/REQUESTED removed '/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax-0.13.0.dist-info/REQUESTED' + '[' -f /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-dep-overrides ']' ++ wc -l /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-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-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-files --output-modules /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-modules --buildroot /builddir/build/BUILD/python-ipax-0.13.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-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-record --prefix /usr ipax + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /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-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14 using python3.14 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-determinism --brp -j4 /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/__pycache__/typing.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/__pycache__/result.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/__pycache__/_logging.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/testing/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/testing/__pycache__/backends.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/__pycache__/solve.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/scaling.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/__pycache__/options.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/scaling.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/linear_ineq.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/derivatives.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/finitediff.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/base.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/autodiff/__pycache__/torch.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/autodiff/__pycache__/jax.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/autodiff/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/problem/__pycache__/function.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/regularize.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/solver.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/sparse.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/sparse.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/krylov.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/dense.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/testing/__pycache__/problems.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/linalg/__pycache__/dense.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/kkt.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/termination.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/kkt.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/termination.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/step.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/init.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/restoration.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/hessian.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/driver.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/restoration.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/hessian.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/driver.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/filter_ls.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/breedveld_ls.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/breedveld_ls.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/barrier.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/interfaces/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/ipm/__pycache__/corrections.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/interfaces/__pycache__/scipy.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/interfaces/__pycache__/scipy.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/__pycache__/errors.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/__pycache__/namespace.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/numpy_scipy.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/jax.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/numpy_scipy.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/_canonical.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/__pycache__/operators.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/_routing.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/torch.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/__pycache__/operators.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/dense/__pycache__/torch.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/dense/__pycache__/numpy_scipy.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/dense/__pycache__/numpy_scipy.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/dense/__pycache__/__init__.cpython-314.opt-1.pyc: rewriting with normalized contents /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/dense/__pycache__/cupy.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/dense/__pycache__/cupy.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/cupy.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ipax/backend/sparse/__pycache__/cupy.cpython-314.opt-1.pyc: replacing with normalized version Scanned 27 directories and 168 files, processed 69 inodes, 69 modified (30 replaced + 39 rewritten), 0 unsupported format, 0 errors Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.kNl1Rk + umask 022 + cd /builddir/build/BUILD/python-ipax-0.13.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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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 ipax-0.13.0 + '[' '!' -f /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-modules ']' + PATH=/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin + PYTHONPATH=/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib64/python3.14/site-packages:/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages + _PYTHONSITE=/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib64/python3.14/site-packages:/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages + PYTHONDONTWRITEBYTECODE=1 + /usr/bin/python3 -sP /usr/lib/rpm/redhat/import_all_modules.py -f /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc43.x86_64-pyproject-modules -e 'ipax.backend.*.cupy' -e 'ipax.backend.*.torch' -e ipax.problem.autodiff.jax -e ipax.problem.autodiff.torch Check import: ipax Check import: ipax.backend Check import: ipax.backend.dense Check import: ipax.backend.dense.numpy_scipy Check import: ipax.backend.errors Check import: ipax.backend.namespace Check import: ipax.backend.operators Check import: ipax.backend.sparse Check import: ipax.backend.sparse.jax Check import: ipax.backend.sparse.numpy_scipy Check import: ipax.interfaces Check import: ipax.interfaces.scipy Check import: ipax.ipm Check import: ipax.ipm.barrier Check import: ipax.ipm.breedveld_ls Check import: ipax.ipm.corrections Check import: ipax.ipm.driver Check import: ipax.ipm.filter_ls Check import: ipax.ipm.hessian Check import: ipax.ipm.init Check import: ipax.ipm.kkt Check import: ipax.ipm.restoration Check import: ipax.ipm.step Check import: ipax.ipm.termination Check import: ipax.linalg Check import: ipax.linalg.dense Check import: ipax.linalg.krylov Check import: ipax.linalg.regularize Check import: ipax.linalg.solver Check import: ipax.linalg.sparse Check import: ipax.options Check import: ipax.problem Check import: ipax.problem.autodiff Check import: ipax.problem.base Check import: ipax.problem.derivatives Check import: ipax.problem.finitediff Check import: ipax.problem.function Check import: ipax.problem.linear_ineq Check import: ipax.problem.scaling Check import: ipax.result Check import: ipax.solve Check import: ipax.testing Check import: ipax.testing.backends Check import: ipax.testing.problems Check import: ipax.typing + 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 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -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-ipax-0.13.0-build/BUILDROOT/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin + PYTHONPATH=/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib64/python3.14/site-packages:/builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14/site-packages + PYTHONDONTWRITEBYTECODE=1 + PYTEST_ADDOPTS=' --ignore=/builddir/build/BUILD/python-ipax-0.13.0-build/.pyproject-builddir' + PYTEST_XDIST_AUTO_NUM_WORKERS=4 + /usr/bin/pytest -p no:cacheprovider tests -m 'not slow and not gpu and not sparse' -o addopts=-ra --ignore=tests/regression/test_input_device_allocations.py ============================= test session starts ============================== platform linux -- Python 3.14.8, pytest-8.3.5, pluggy-1.6.0 rootdir: /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0 configfile: pyproject.toml plugins: hypothesis-6.123.0 collected 3761 items / 256 deselected / 9 skipped / 3505 selected tests/backends/test_cross_backend_conformance.py ...F. [ 0%] tests/contracts/test_builtin_operator_contracts.py ..................... [ 0%] ........................................................................ [ 2%] ....................F.F.F.F.F.F.F.F [ 3%] tests/contracts/test_builtin_problem_contracts.py ...................... [ 4%] .......................... [ 5%] tests/contracts/test_builtin_solver_contracts.py ....................... [ 5%] ...........s.s.s.s.s. [ 6%] tests/integration/test_baseline_jacobian_pattern.py ..... [ 6%] tests/integration/test_benchmark_compare.py ....... [ 6%] tests/integration/test_benchmark_crosscheck.py ..... [ 6%] tests/integration/test_benchmark_harness.py ...F...F.F...F........ [ 7%] tests/integration/test_benchmark_phase4.py .ssss [ 7%] tests/integration/test_benchmark_scaling.py ... [ 7%] tests/integration/test_breedveld_soc.py .F.F.F.F..FF.F.. [ 8%] tests/integration/test_callback_and_logging.py .F.F.F.F.F.F.F.F.F.F.F.F. [ 8%] F [ 8%] tests/integration/test_corrections_solve.py ..FF..FF.F....FFss [ 9%] tests/integration/test_dense_augmented_route.py .F.F.F.F [ 9%] tests/integration/test_dense_nonconvex.py .F [ 9%] tests/integration/test_device_efficiency.py .F.F. [ 9%] tests/integration/test_hock_schittkowski.py .F.F.F.F.F.F.F.F.F.F [ 10%] tests/integration/test_known_optima.py .F.F.F.F.F.F.F.F.F.F [ 11%] tests/integration/test_krylov_solve.py .F.F.F.F.F.F.F.F.F.F [ 11%] tests/integration/test_linear_inequalities.py .F.F.F.F.F.F [ 11%] tests/integration/test_result_routes.py .F.F.s.F.F.F.F. [ 12%] tests/integration/test_routing_hints_report.py ........ [ 12%] tests/integration/test_s2mpj_baselines_runner.py ....................... [ 13%] ......... [ 13%] tests/integration/test_s2mpj_sweep_runner.py ................ [ 13%] tests/integration/test_scaling_solve.py .F.F.F.F.F.F [ 14%] tests/integration/test_scipy_interface_hs71.py ... [ 14%] tests/integration/test_tall_linear_ineq_benchmark.py ............ [ 14%] tests/integration/test_warm_start_solve.py .F.F.F.F [ 14%] tests/property/test_derivative_checks.py ........................ [ 15%] tests/regression/test_adaptive_alpha_min.py .F.F [ 15%] tests/regression/test_bound_only_lbfgs_structured_routes.py .F.F.F [ 15%] tests/regression/test_budget_exhaustion_acceptable.py .F.F [ 16%] tests/regression/test_callback_evaluation_counts.py .F...FFF...FFF [ 16%] tests/regression/test_corrector_operator_counts.py .F....FFFF..FF [ 16%] tests/regression/test_cudss_determinism_gate.py ........ [ 17%] tests/regression/test_delta_c_rank_deficient_constraints.py .F.F [ 17%] tests/regression/test_dense_diagonal_overflow.py ............ [ 17%] tests/regression/test_doctest_collection_adapters.py ................ [ 18%] tests/regression/test_driver_host_sync_budget.py ssssFFFF [ 18%] tests/regression/test_equality_dual_divergence.py ... [ 18%] tests/regression/test_false_infeasible_veto.py .F.F.F [ 18%] tests/regression/test_feasible_ascent_stall.py .F.F.F..F [ 18%] tests/regression/test_feasible_point_restoration_recenter.py .F.F.F [ 18%] tests/regression/test_feasible_recenter_without_inequalities.py .... [ 19%] tests/regression/test_fraction_to_boundary_no_elementwise_sync.py s. [ 19%] tests/regression/test_hs7_lbfgs_no_false_infeasible.py .F.F [ 19%] tests/regression/test_hs9_krylov_zero_hessian.py .F.. [ 19%] tests/regression/test_iteration_operator_lifetime.py ..FF [ 19%] tests/regression/test_lbfgs_apply_guard_is_cheap.py .. [ 19%] tests/regression/test_lbfgs_diagonal_singular_middle.py .............. [ 19%] tests/regression/test_lbfgs_gradient_overshoot.py .F [ 19%] tests/regression/test_lbfgs_setup_reuse.py .......... [ 20%] tests/regression/test_linear_ineq_lbfgs.py ......FFssss [ 20%] tests/regression/test_mu_oracle_inflation.py ......FFFFFF [ 20%] tests/regression/test_near_feasible_not_infeasible.py .F.F [ 21%] tests/regression/test_point_cache_lifetime.py ...F.F [ 21%] tests/regression/test_repeat_recenter_raises_mu.py .F [ 21%] tests/regression/test_restoration_on_step_failure.py ..FF.F.F.F [ 21%] tests/regression/test_restoration_tall_gram_block_not_densified.py ..FF. [ 21%] F [ 21%] tests/regression/test_second_chance_restoration.py .F.F [ 21%] tests/regression/test_soc_factorization_reuse.py ..FF..FF.......F.F..... [ 22%] .....F. [ 22%] tests/regression/test_step_solve_callback_errors_propagate.py ..FF..FF.F [ 22%] .F.F [ 23%] tests/regression/test_step_solve_numerical_failure_ladder.py ...FFF...FF [ 23%] F [ 23%] tests/regression/test_terminal_dual_certificate.py .F.F.F.F.F.F..FF.F.F. [ 24%] F.F.F.F.F [ 24%] tests/regression/test_theta_min_ftype_gate.py .F [ 24%] tests/regression/test_trots_lsqr_validation.py ............... [ 24%] tests/regression/test_unbounded_detection.py .F.F.F.F [ 24%] tests/regression/test_uncertified_restoration_stall.py .F.F.F.F [ 25%] tests/test_purity_gate.py FF.F [ 25%] tests/unit/test_alpha_min.py .......... [ 25%] tests/unit/test_autodiff.py ssssssss [ 25%] tests/unit/test_backend_namespace.py .................F. [ 26%] tests/unit/test_barrier.py ................ [ 26%] tests/unit/test_breedveld.py ......F.F..F.F.F.F.F......FFFFFF........... [ 28%] ........ [ 28%] tests/unit/test_condensed_curvature_gram.py ............................ [ 29%] .................F [ 29%] tests/unit/test_corrections.py .......................F....FFFF...F.F..F [ 30%] .F.F.F.F.F.... [ 31%] tests/unit/test_cupy_sparse_adapter.py ................................. [ 32%] ..................................... [ 33%] tests/unit/test_dense_cholesky_reuse.py .s.sssssssss...s.............s.s [ 34%] .....s..s.....s....s.s.s.s.s... [ 34%] tests/unit/test_dense_diagonal_adder.py .s.s.s.s.s.......s [ 35%] tests/unit/test_dense_dispatch.py .s.s.s...s...s...s.s.. [ 36%] tests/unit/test_dense_numpy_scipy_cholesky.py .......................... [ 36%] cholesky_solve bitwise-identity: 32/32 (100.0%) configurations bitwise identical; max relative difference among the rest: 0.000e+00 . [ 36%] tests/unit/test_dense_numpy_scipy_ldl.py ........ [ 37%] tests/unit/test_dense_numpy_scipy_potrf.py ............................. [ 37%] ... [ 38%] tests/unit/test_dense_solver.py ........................................ [ 39%] ........................................................................ [ 41%] ........ [ 41%] tests/unit/test_equality_dual_repair_gate.py .................. [ 41%] tests/unit/test_equality_dual_repair_option.py ..... [ 42%] tests/unit/test_expand_indptr.py ..................FFFFFFFFFFFFFFFFFF..F [ 43%] F.F.F [ 43%] tests/unit/test_feasible_kkt_acceptance.py .F.F.F.F.F.F [ 43%] tests/unit/test_filter_ls.py ........................... [ 44%] tests/unit/test_filter_reset_on_mu_update.py .F [ 44%] tests/unit/test_free_mode_acceptance.py .......F.F.F.F.F [ 44%] tests/unit/test_gram_dense_windows.py .................................. [ 45%] .................. [ 46%] tests/unit/test_hessian_lbfgs.py .................................F..... [ 47%] ....... [ 47%] tests/unit/test_inertia_correction.py ..... [ 47%] tests/unit/test_init_bounds.py .F.F [ 48%] tests/unit/test_init_recenter.py .F.F.F.F [ 48%] tests/unit/test_kkt.py .......s.s....................................... [ 49%] .......................................................................F [ 51%] .................... [ 52%] tests/unit/test_krylov.py .............................................. [ 53%] ........................................................................ [ 55%] ................ [ 56%] tests/unit/test_lbfgs_damping_skip.py ....... [ 56%] tests/unit/test_lbfgs_seed_formula.py ....... [ 56%] tests/unit/test_least_squares_duals.py ............................ [ 57%] tests/unit/test_line_search_opt_ins_default_off.py ....... [ 57%] tests/unit/test_linear_ineq_lowering.py .....................ssssF....FF [ 58%] FF.F.F.F...F.F...F.F...sFs...ssF...ssF.F.F...F.F.F.F.F.F....F...F.F.... [ 60%] tests/unit/test_logging.py .................. [ 60%] tests/unit/test_mixed_precision_dense.py ............................... [ 61%] ...............F.......................F [ 62%] tests/unit/test_mu_schedule.py ........F.F.....FFF...FFF.F.F.F.F..FF.F.F [ 64%] ..F.F..............F.F.F [ 64%] tests/unit/test_numerical_failures.py ................................. [ 65%] tests/unit/test_operator_batched_hooks.py ................s [ 66%] tests/unit/test_operator_coo.py ................................ [ 67%] tests/unit/test_operator_coo_values.py .................. [ 67%] tests/unit/test_operator_diagonal.py .................................. [ 68%] tests/unit/test_options.py ............................................. [ 69%] ............................................ [ 71%] tests/unit/test_problem_derivatives.py .............. [ 71%] tests/unit/test_public_exports.py .. [ 71%] tests/unit/test_public_sparse_operators.py .....F.F.F.................s. [ 72%] s.s.s.s.s [ 72%] tests/unit/test_quality_mu.py .......... [ 73%] tests/unit/test_recenter_mu_escalation.py .F.F.F [ 73%] tests/unit/test_regularize.py .... [ 73%] tests/unit/test_restoration.py .F.F.F.F.F.F.F.F.F.F.F..FF.F.F.F.F.F.F..F [ 74%] F.F.F.F.F.F.F...ssF...... [ 75%] tests/unit/test_restoration_cholesky.py .........F..FF.F.F.s.F.F.F...F.F [ 76%] ..FF.F..FF [ 76%] tests/unit/test_result.py ........... [ 76%] tests/unit/test_s2mpj_adapter.py ............... [ 77%] tests/unit/test_s2mpj_fasteval.py ............................ [ 77%] tests/unit/test_scaling.py .....F...F.F.F...s....... [ 78%] tests/unit/test_scipy_interface.py ..................................... [ 79%] ................................... [ 80%] tests/unit/test_scipy_interface_backends.py .F.F.F.F...F.F...........sss [ 81%] .F...F.s.F [ 81%] tests/unit/test_slack_init_scale.py .F.F.F.F. [ 82%] tests/unit/test_solve_tall_selection.py ........... [ 82%] tests/unit/test_solver_selection.py .................................. [ 83%] tests/unit/test_sparse_canonical.py ........... [ 83%] tests/unit/test_sparse_device_routing.py .......s.s [ 83%] tests/unit/test_sparse_dispatch.py ..s.. [ 84%] tests/unit/test_sparse_gram_cache.py .................... [ 84%] tests/unit/test_sparse_inertia_warning.py ...... [ 84%] tests/unit/test_step_failure_salvage.py ........ [ 85%] tests/unit/test_step_length_memo.py ... [ 85%] tests/unit/test_termination.py ......... [ 85%] tests/unit/test_theta_min_switching.py ...... [ 85%] tests/unit/test_trots_breedveld_start.py ...............ss..........s... [ 86%] s............................... [ 87%] tests/unit/test_trots_exact_hessian.py ..................ssssss.ssssssss [ 88%] ssss.................sss.s.s.. [ 89%] tests/unit/test_trots_hessian_gram_merge.py ..ss.s.s.s..ss......ss [ 89%] tests/unit/test_trots_reference.py ................ [ 90%] tests/unit/test_trots_tiled_gram.py .................................... [ 91%] ........................................................................ [ 93%] ........................................FsF.ssssssssssssssssssssssssssss [ 95%] ssssssssssssssssssssssssssssssssssssssssssss...............sssssssssssss [ 97%] sssss................................ssssssssssssssssssssssss....s.s.s.s [ 99%] .s.s.s.s.... [ 99%] tests/unit/test_warm_start.py .F.... [100%] =================================== FAILURES =================================== ______________________ test_same_solution_across_backends ______________________ all_available_backends = ['numpy', 'array_api_strict'] def test_same_solution_across_backends(all_available_backends): if len(all_available_backends) < 2: pytest.skip("needs at least two installed Array-API backends") solutions = [] for name in all_available_backends: xp = import_namespace(name) Q = array(xp, [[4.0, 1.0], [1.0, 3.0]]) b = array(xp, [1.0, 2.0]) problem = UnconstrainedQuadratic(Q, b, xp) with implemented("solver"): > result = solve( problem, array(xp, [0.0, 0.0]), options=Options(hessian="exact", linsolve="dense"), ) tests/backends/test_cross_backend_conformance.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ TestSignedRowSelection.test_shape_consistency[array_api_strict] ________ self = namespace = def test_shape_consistency(self, namespace): with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:21: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ TestSignedRowSelection.test_matvec_matches_dense[array_api_strict] ______ self = namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_matvec_matches_dense(self, namespace, tol): with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:28: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ TestSignedRowSelection.test_adjoint_identity[array_api_strict] ________ self = namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_adjoint_identity(self, namespace, tol): with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ TestSignedRowSelection.test_matmat_matches_dense[array_api_strict] ______ self = namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_matmat_matches_dense(self, namespace, tol): with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:50: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ TestSignedRowSelection.test_dense_matrix_matches_dense_when_available[array_api_strict] _ self = namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_dense_matrix_matches_dense_when_available(self, namespace, tol): with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ TestSignedRowSelection.test_positive_definite_hint_is_honest[array_api_strict] _ self = namespace = def test_positive_definite_hint_is_honest(self, namespace): # ``positive_definite_hint`` defaults to False; an operator that claims # PD by construction must materialize to a matrix Cholesky accepts. with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:82: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ TestSignedRowSelection.test_dense_matrix_with_gram_is_honest_when_offered[array_api_strict] _ self = namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_dense_matrix_with_gram_is_honest_when_offered(self, namespace, tol): # ``dense_matrix_with_gram`` declines by default; an operator that # fuses must return ``A + Jᵀ diag(w) J`` for *any* Jacobian it is # handed (or decline it), symmetric to round-off. from ipax.backend.operators import Dense with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:98: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ TestSignedRowSelection.test_exact_lbfgs_inverse_claim_is_honest[array_api_strict] _ self = namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_exact_lbfgs_inverse_claim_is_honest(self, namespace, tol): # ``lbfgs_inverse_is_exact`` defaults to False; an operator that claims # exactness must back it with an apply that inverts it to round-off. with implemented(self.implementation_reason): > op = self.make_operator(namespace) tests/contracts/test_operator_contract.py:123: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/contracts/test_builtin_operator_contracts.py:213: in make_operator return _SignedRowSelection( ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_run_case_scores_a_known_optimum[array_api_strict] ____________ namespace = def test_run_case_scores_a_known_optimum(namespace): case = _bound_qp_case() result = run_case( case, config="exact/dense", options=ipax.Options(hessian="exact", linsolve="dense"), xp=namespace, backend="test", ) > assert result.correct E AssertionError: assert False E + where False = CaseResult(problem='bound_qp', kind='QP', backend='test', config='exact/dense', status='solve_error', success=False, c...later, but the current API version for array-api-strict is 2022.12', prepare_time=0.0, soc_attempted=0, soc_accepted=0).correct tests/integration/test_benchmark_harness.py:50: AssertionError ______ test_run_case_reports_soc_attempted_and_accepted[array_api_strict] ______ namespace = def test_run_case_reports_soc_attempted_and_accepted(namespace): # ``CaseResult.soc_attempted``/``.soc_accepted`` are sums of the public # ``IterationRecord.soc_attempted``/``.used_soc`` off ``Result.history`` # (see AGENTS.md; ipax/result.py) — not a re-implementation of the # controller's bookkeeping. Reuses the textbook Maratos-effect setup # (tests/integration/test_breedveld_soc.py) whose far-start Newton steps # trigger a Breedveld second-order correction. import math from benchmarks.corpus import BenchmarkProblem from ipax.options import BreedveldOptions from ipax.testing.problems import Maratos from tests._helpers import array start = [0.5 * math.cos(2.5), 0.5 * math.sin(2.5)] case = BenchmarkProblem( name="maratos", kind="NLP", tags=(), build=lambda xp: (Maratos(namespace), array(namespace, start)), ) def _run(max_soc: int): return run_case( case, config="exact/dense", options=ipax.Options( hessian="exact", linsolve="dense", globalization="breedveld", breedveld=BreedveldOptions(max_soc=max_soc), ), xp=namespace, backend="test", ) off = _run(0) assert off.soc_attempted == 0 assert off.soc_accepted == 0 on = _run(1) > assert on.soc_accepted >= 1 E AssertionError: assert 0 >= 1 E + where 0 = CaseResult(problem='maratos', kind='NLP', backend='test', config='exact/dense', status='solve_error', success=False, c...later, but the current API version for array-api-strict is 2022.12', prepare_time=0.0, soc_attempted=0, soc_accepted=0).soc_accepted tests/integration/test_benchmark_harness.py:132: AssertionError _ test_run_case_converged_but_not_correct_when_objective_differs[array_api_strict] _ namespace = def test_run_case_converged_but_not_correct_when_objective_differs(namespace): # A solve that reaches a valid KKT point but a *different* objective than the # dataset-documented one is `converged` but not `correct` — the tier that # credits convergence to a different local optimum on a nonconvex problem. from benchmarks.corpus import BenchmarkProblem class _QP(ipax.Problem): expected_objective = -12345.0 # deliberately wrong "documented" optimum @property def n_vars(self) -> int: return 2 def objective(self, x): return namespace.sum(x * x) def gradient(self, x): return 2.0 * x case = BenchmarkProblem( name="wrong_opt", kind="NLP", tags=(), build=lambda xp: (_QP(), namespace.asarray([1.0, 1.0])), ) result = run_case( case, config="lbfgs/dense", options=ipax.Options(hessian="lbfgs", linsolve="dense"), xp=namespace, backend="test", ) > assert result.converged # reached a KKT point (x -> 0, kkt small) E AssertionError: assert False E + where False = CaseResult(problem='wrong_opt', kind='NLP', backend='test', config='lbfgs/dense', status='solve_error', success=False,...later, but the current API version for array-api-strict is 2022.12', prepare_time=0.0, soc_attempted=0, soc_accepted=0).converged tests/integration/test_benchmark_harness.py:168: AssertionError ____________ test_run_case_applies_prepare_solve[array_api_strict] _____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9ca4bf100> def test_run_case_applies_prepare_solve(namespace, monkeypatch): # A case's ``prepare_solve`` hook runs after ``build`` and its start, # warm start and options are what ``ipax.solve`` receives; its wall time # counts toward the row's solve_time (the TROTS Breedveld initialisation). import time from dataclasses import replace from ipax.result import WarmStart seen: dict[str, object] = {} warm = WarmStart() tuned = ipax.Options(hessian="exact", linsolve="dense", max_iter=50) def prepare(problem, x0, options): seen["prepare"] = (problem, x0, options) time.sleep(0.05) started = x0 * 1.0 # a fresh array: the hook's start, not build's seen["start"] = started return started, warm, tuned real_solve = ipax.solve def spy_solve(problem, x0, **kwargs): seen["solve"] = (problem, x0, kwargs) return real_solve(problem, x0, **kwargs) monkeypatch.setattr(ipax, "solve", spy_solve) base = ipax.Options(hessian="exact", linsolve="dense") result = run_case( replace(_bound_qp_case(), prepare_solve=prepare), config="exact/dense", options=base, xp=namespace, backend="test", ) problem, _x0, given = seen["prepare"] assert given is base solved_problem, solved_x0, kwargs = seen["solve"] assert solved_problem is problem assert solved_x0 is seen["start"] # the solve starts from the hook's x0 assert kwargs["options"] is tuned assert kwargs["warm_start"] is warm > assert result.error is None and result.correct E assert ('Traceback (most recent call last):\n File "/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/benchmarks/har...he function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12' is None) E + where 'Traceback (most recent call last):\n File "/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/benchmarks/har...he function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12' = CaseResult(problem='bound_qp', kind='QP', backend='test', config='exact/dense', status='solve_error', success=False, c...urrent API version for array-api-strict is 2022.12', prepare_time=0.05040304499999593, soc_attempted=0, soc_accepted=0).error tests/integration/test_benchmark_harness.py:233: AssertionError _____ test_soc_reaches_the_same_optimum_as_backtracking[array_api_strict] ______ namespace = def test_soc_reaches_the_same_optimum_as_backtracking(namespace): > plain = _solve_maratos(namespace, _options()) tests/integration/test_breedveld_soc.py:58: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/integration/test_breedveld_soc.py:54: in _solve_maratos return solve(Maratos(namespace), array(namespace, list(_START)), options=options) ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([124.82156515], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_filter_soc_recorded_on_iteration_history[array_api_strict] ________ namespace = def test_filter_soc_recorded_on_iteration_history(namespace): # LineSearchOptions.max_soc defaults to 4 (on): the filter line search's # own W&B 2006 §2.4 correction, exercised the same way as Breedveld's. > off = _solve_maratos( namespace, Options( hessian="exact", linsolve="dense", line_search=LineSearchOptions(max_soc=0), ), ) tests/integration/test_breedveld_soc.py:80: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/integration/test_breedveld_soc.py:54: in _solve_maratos return solve(Maratos(namespace), array(namespace, list(_START)), options=options) ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([124.82156515], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_soc_composes_with_common_step[array_api_strict] _____________ namespace = def test_soc_composes_with_common_step(namespace): # An accepted correction is taken at the full length the Markov test # judged; under ``common_step`` that same α moves the duals. > result = _solve_maratos(namespace, _options(max_soc=1, common_step=True)) tests/integration/test_breedveld_soc.py:100: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/integration/test_breedveld_soc.py:54: in _solve_maratos return solve(Maratos(namespace), array(namespace, list(_START)), options=options) ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([124.82156515], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_breedveld_soc_rounds_come_from_breedveld_options[array_api_strict] ____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c66c4230> def test_breedveld_soc_rounds_come_from_breedveld_options(namespace, monkeypatch): # The driver threads BreedveldOptions.max_soc into the correction loop; the # filter line search's LineSearchOptions.max_soc is not read on this path. # The round count itself is internal to ``soc()`` (not surfaced on # IterationRecord), so this still spies on the factorization-reuse call — # that is what actually tests "the round count comes from BreedveldOptions". resolves = {"n": 0} original = IPMDriver._resolve_reused_factorization def spy(self, *args, **kwargs): resolves["n"] += 1 return original(self, *args, **kwargs) monkeypatch.setattr(IPMDriver, "_resolve_reused_factorization", spy) silent = dataclasses.replace( _options(max_soc=0), line_search=LineSearchOptions(max_soc=4) ) > silent_result = _solve_maratos(namespace, silent) tests/integration/test_breedveld_soc.py:127: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/integration/test_breedveld_soc.py:54: in _solve_maratos return solve(Maratos(namespace), array(namespace, list(_START)), options=options) ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([124.82156515], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_soc_leaves_hock_schittkowski_optima_unchanged[array_api_strict-HS71] ___ namespace = cls = , start = [1.0, 5.0, 5.0, 1.0] @pytest.mark.parametrize( ("cls", "start"), [(HS71, [1.0, 5.0, 5.0, 1.0]), (HS43, [0.0, 0.0, 0.0, 0.0])], ids=["HS71", "HS43"], ) def test_soc_leaves_hock_schittkowski_optima_unchanged(namespace, cls, start): # The Markov test never rejects a θ-worsening full step here, so the # option is inert: same optimum, no correction attempted. problem, x0 = cls(namespace), array(namespace, start) > plain = solve(problem, x0, options=_options()) tests/integration/test_breedveld_soc.py:153: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_soc_leaves_hock_schittkowski_optima_unchanged[array_api_strict-HS43] ___ namespace = cls = , start = [0.0, 0.0, 0.0, 0.0] @pytest.mark.parametrize( ("cls", "start"), [(HS71, [1.0, 5.0, 5.0, 1.0]), (HS43, [0.0, 0.0, 0.0, 0.0])], ids=["HS71", "HS43"], ) def test_soc_leaves_hock_schittkowski_optima_unchanged(namespace, cls, start): # The Markov test never rejects a θ-worsening full step here, so the # option is inert: same optimum, no correction attempted. problem, x0 = cls(namespace), array(namespace, start) > plain = solve(problem, x0, options=_options()) tests/integration/test_breedveld_soc.py:153: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_soc_trials_are_logged_at_debug_level[array_api_strict] __________ namespace = caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9ca35c7d0> def test_soc_trials_are_logged_at_debug_level(namespace, caplog): import logging with caplog.at_level(logging.DEBUG): > _solve_maratos(namespace, _options(max_soc=1)) tests/integration/test_breedveld_soc.py:165: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/integration/test_breedveld_soc.py:54: in _solve_maratos return solve(Maratos(namespace), array(namespace, list(_START)), options=options) ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([124.82156515], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_callback_is_invoked_once_per_recorded_iteration[array_api_strict] ____ namespace = def test_callback_is_invoked_once_per_recorded_iteration(namespace): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) seen: list[IterationInfo] = [] with implemented("bound handling"): > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense"), callback=seen.append, ) tests/integration/test_callback_and_logging.py:32: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_callback_truthy_return_requests_stop[array_api_strict] __________ namespace = def test_callback_truthy_return_requests_stop(namespace): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) calls = 0 def stop_after_two(info: IterationInfo) -> bool: nonlocal calls calls += 1 return info.record.iteration >= 1 with implemented("bound handling"): > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense"), callback=stop_after_two, ) tests/integration/test_callback_and_logging.py:66: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_acceptable_stopping_is_integrated_with_the_driver[array_api_strict] ___ namespace = def test_acceptable_stopping_is_integrated_with_the_driver(namespace): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with implemented("bound handling"): > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", # One ultra-loose enabled condition, the (default-on) others # opted out: the gate must fire on the very first iterate. acceptable=AcceptableStoppingOptions( dual_inf_tol=1e6, constr_viol_tol=None, compl_inf_tol=None, n_iter=1, ), ), ) tests/integration/test_callback_and_logging.py:85: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_component_optimality_threshold_is_integrated_with_the_driver[array_api_strict] _ namespace = def test_component_optimality_threshold_is_integrated_with_the_driver(namespace): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with implemented("bound handling"): > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", # Loose optimality on dual/complementarity, tight on feasibility. optimality=OptimalityConditionOptions( dual_inf_tol=1e-4, compl_inf_tol=1e-4, constr_viol_tol=1e-8 ), ), ) tests/integration/test_callback_and_logging.py:118: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_wall_time_stopping_is_integrated_with_the_driver[array_api_strict] ____ namespace = def test_wall_time_stopping_is_integrated_with_the_driver(namespace): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with implemented("bound handling"): > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_time=1e-12), ) tests/integration/test_callback_and_logging.py:143: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_objective_stagnation_is_guarded_and_skips_the_initial_record[array_api_strict] _ namespace = def test_objective_stagnation_is_guarded_and_skips_the_initial_record(namespace): lower = array(namespace, [0.0]) upper = array(namespace, [2.0]) problem = FunctionProblem( 1, lambda x: namespace.sum(x * 0.0), gradient=lambda x: namespace.zeros_like(x), bounds=(lower, upper), ) with implemented("bound handling"): > result = solve( problem, array(namespace, [1.0]), options=Options( linsolve="dense", # Monotone μ keeps this degenerate problem un-converged for a # few iterations so the acceptable-stagnation checker (the # subject of this test) actually fires; the probing default # solves it to full optimality straight away. mu_schedule="monotone", acceptable=AcceptableStoppingOptions( f_rel_change_tol=0.0, dual_inf_tol=1.0, constr_viol_tol=1.0, compl_inf_tol=1.0, n_iter=1, ), ), ) tests/integration/test_callback_and_logging.py:165: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([1.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_convergence_takes_priority_over_stop_request[array_api_strict] ______ namespace = def test_convergence_takes_priority_over_stop_request(namespace): """A converged final iterate reports OPTIMAL even if the callback stops.""" Q = array(namespace, [[4.0, 1.0], [1.0, 3.0]]) b = array(namespace, [1.0, 2.0]) problem = UnconstrainedQuadratic(Q, b, namespace) x0 = problem.known_solution() # unconstrained minimum: KKT error ~0 at iter 0 with implemented("dense solver"): > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense"), callback=lambda info: True, ) tests/integration/test_callback_and_logging.py:198: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_verbose_emits_iteration_log_to_ipax_logger[array_api_strict] _______ namespace = caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9ca4bf5c0> def test_verbose_emits_iteration_log_to_ipax_logger(namespace, caplog): from ipax._logging import ITERATION, RESULT problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) # caplog at the ITERATION level captures the result summary (tier 1) and the # per-iteration table (tier 2) but not the lower setup tiers. with caplog.at_level(ITERATION, logger="ipax"): with implemented("bound handling"): > solve( problem, x0, options=Options(hessian="exact", linsolve="dense", verbose=2), ) tests/integration/test_callback_and_logging.py:218: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_iteration_header_is_reprinted_periodically[array_api_strict] _______ namespace = caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9c665fad0> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c66d1710> def test_iteration_header_is_reprinted_periodically(namespace, caplog, monkeypatch): from ipax._logging import ITERATION # Force a header before every row so the count is deterministic regardless of # how many iterations the problem needs. The driver binds the name at import, # so patch it in the driver module's namespace. monkeypatch.setattr("ipax.ipm.driver.HEADER_REPEAT_INTERVAL", 1) problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with caplog.at_level(ITERATION, logger="ipax"): with implemented("bound handling"): > solve( problem, x0, options=Options(hessian="exact", linsolve="dense", verbose=2), ) tests/integration/test_callback_and_logging.py:258: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_iterates_meeting_acceptable_criteria_are_marked[array_api_strict] ____ namespace = caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9c64bf790> def test_iterates_meeting_acceptable_criteria_are_marked(namespace, caplog): from ipax._logging import ITERATION problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) # Tolerances loose enough that the iterates satisfy them, but n_iter large # enough that the acceptable rule never actually fires — so the rows are # marked without changing the termination outcome. acceptable = AcceptableStoppingOptions( dual_inf_tol=1e6, constr_viol_tol=1e6, compl_inf_tol=1e6, n_iter=10_000, ) with caplog.at_level(ITERATION, logger="ipax"): with implemented("bound handling"): > solve( problem, x0, options=Options( hessian="exact", linsolve="dense", verbose=2, acceptable=acceptable, ), ) tests/integration/test_callback_and_logging.py:294: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_restoration_jump_marks_the_resulting_iteration[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c9fa3860> caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9c6582150> def test_restoration_jump_marks_the_resulting_iteration(namespace, monkeypatch, caplog): # A restoration jump replaces (x, s) outside the Newton step; the record for # the resulting iterate — and its logged row — must say so, both so users can # see restorations in the table and so IterationRecord.restored is reliable # for programmatic inspection. from ipax._logging import ITERATION from ipax.ipm.driver import IPMDriver from ipax.ipm.filter_ls import FilterLineSearch, LineSearchResult from ipax.ipm.restoration import RestorationExit from ipax.testing.problems import HS7 xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) calls = {"n": 0} original = FilterLineSearch.search def flaky(self, **kwargs): calls["n"] += 1 if calls["n"] == 1: return original(self, **kwargs) return LineSearchResult(self._o.alpha_min_frac, False, False, True) monkeypatch.setattr(FilterLineSearch, "search", flaky) feasible = array(xp, [0.0, 1.7320508075688772]) # exactly satisfies HS7's c(x)=0 def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): return feasible, s, RestorationExit.FEASIBLE monkeypatch.setattr(IPMDriver, "_restore", stub_restore) with caplog.at_level(ITERATION, logger="ipax"): > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", verbose=2, max_iter=15), ) tests/integration/test_callback_and_logging.py:350: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_verbosity_tiers_are_emitted_at_their_levels[array_api_strict] ______ namespace = caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9c66c7890> def test_verbosity_tiers_are_emitted_at_their_levels(namespace, caplog): from ipax._logging import ITERATION, OPTIONS, PROBLEM, RESULT, SOLVER problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) # Capturing at DEBUG records every tier regardless of verbose; the tiers are # distinguished by their numeric level (what the console threshold gates on). with caplog.at_level(logging.DEBUG, logger="ipax"): with implemented("bound handling"): > solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_callback_and_logging.py:378: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________________ test_silent_by_default[array_api_strict] ___________________ namespace = caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9c66d1390> def test_silent_by_default(namespace, caplog): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with caplog.at_level(logging.DEBUG, logger="ipax"): with implemented("bound handling"): > solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_callback_and_logging.py:401: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_corrections_match_optimum_on_bound_qp[array_api_strict-mehrotra] _____ namespace = method = 'mehrotra' @pytest.mark.parametrize("method", ["mehrotra", "gondzio"]) def test_corrections_match_optimum_on_bound_qp(namespace, method): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with implemented("dense solver"): > base = solve(problem, x0, options=_opts("none")) tests/integration/test_corrections_solve.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_corrections_match_optimum_on_bound_qp[array_api_strict-gondzio] _____ namespace = method = 'gondzio' @pytest.mark.parametrize("method", ["mehrotra", "gondzio"]) def test_corrections_match_optimum_on_bound_qp(namespace, method): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with implemented("dense solver"): > base = solve(problem, x0, options=_opts("none")) tests/integration/test_corrections_solve.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_corrections_solve_inequality_qp[array_api_strict-mehrotra] ________ namespace = method = 'mehrotra' @pytest.mark.parametrize("method", ["mehrotra", "gondzio"]) def test_corrections_solve_inequality_qp(namespace, method): problem = _InequalityQP(namespace) x0 = namespace.full((5,), 0.1, dtype=array(namespace, [0.0]).dtype) with implemented("dense solver"): > base = solve(problem, x0, options=_opts("none")) tests/integration/test_corrections_solve.py:81: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_corrections_solve_inequality_qp[array_api_strict-gondzio] ________ namespace = method = 'gondzio' @pytest.mark.parametrize("method", ["mehrotra", "gondzio"]) def test_corrections_solve_inequality_qp(namespace, method): problem = _InequalityQP(namespace) x0 = namespace.full((5,), 0.1, dtype=array(namespace, [0.0]).dtype) with implemented("dense solver"): > base = solve(problem, x0, options=_opts("none")) tests/integration/test_corrections_solve.py:81: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_corrections_reduce_outer_iterations_on_inequality_qp[array_api_strict] __ namespace = def test_corrections_reduce_outer_iterations_on_inequality_qp(namespace): # This checks outer convergence, not wall time: dense corrector solves are # full solves, while sparse-direct can reuse its numeric factorization. problem = _InequalityQP(namespace, n=8) x0 = namespace.full((8,), 0.05, dtype=array(namespace, [0.0]).dtype) with implemented("dense solver"): > base = solve(problem, x0, options=_opts("none")) tests/integration/test_corrections_solve.py:99: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_corrections_work_across_repeated_solve_routes[array_api_strict-krylov-mehrotra] _ namespace = method = 'mehrotra', linsolve = 'krylov' @pytest.mark.parametrize("method", ["mehrotra", "gondzio"]) @pytest.mark.parametrize("linsolve", ["krylov", "sparse"]) def test_corrections_work_across_repeated_solve_routes(namespace, method, linsolve): if linsolve == "sparse" and not capabilities(namespace).has_sparse_adapter: pytest.skip(f"no sparse adapter for {namespace.__name__!r}") problem = _InequalityQP(namespace) x0 = namespace.full((5,), 0.1, dtype=array(namespace, [0.0]).dtype) > corrected = solve(problem, x0, options=_opts(method, linsolve)) tests/integration/test_corrections_solve.py:114: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_corrections_work_across_repeated_solve_routes[array_api_strict-krylov-gondzio] _ namespace = method = 'gondzio', linsolve = 'krylov' @pytest.mark.parametrize("method", ["mehrotra", "gondzio"]) @pytest.mark.parametrize("linsolve", ["krylov", "sparse"]) def test_corrections_work_across_repeated_solve_routes(namespace, method, linsolve): if linsolve == "sparse" and not capabilities(namespace).has_sparse_adapter: pytest.skip(f"no sparse adapter for {namespace.__name__!r}") problem = _InequalityQP(namespace) x0 = namespace.full((5,), 0.1, dtype=array(namespace, [0.0]).dtype) > corrected = solve(problem, x0, options=_opts(method, linsolve)) tests/integration/test_corrections_solve.py:114: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_augmented_route_reaches_known_optimum[array_api_strict] _________ namespace = def test_augmented_route_reaches_known_optimum(namespace): for problem, x0 in _cases(namespace): > result = solve(problem, x0, options=_augmented_options()) tests/integration/test_dense_augmented_route.py:71: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_augmented_route_agrees_with_condensed_route[array_api_strict] ______ namespace = def test_augmented_route_agrees_with_condensed_route(namespace): for problem, x0 in _cases(namespace): > augmented = solve(problem, x0, options=_augmented_options()) tests/integration/test_dense_augmented_route.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_augmented_route_reports_itself_in_linear_solver[array_api_strict] ____ namespace = def test_augmented_route_reports_itself_in_linear_solver(namespace): # HS35 has a genuine inequality border, so the augmented route actually # engages (as opposed to silently falling back to condensed). problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=_augmented_options() ) tests/integration/test_dense_augmented_route.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_augmented_route_escapes_saddle_like_condensed[array_api_strict] _____ namespace = def test_augmented_route_escapes_saddle_like_condensed(namespace): # Same regression case as test_dense_nonconvex.py's Cholesky-guard test: # the augmented route's inertia check must reject the saddle just as # reliably, via a different mechanism (real inertia vs. Cholesky failure). problem, x0 = _saddle_trap_qp(namespace) > result = solve( problem, x0, options=Options( linsolve="dense", hessian="exact", max_iter=300, dense=DenseOptions(kkt_route="augmented"), ), ) tests/integration/test_dense_augmented_route.py:137: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_dense_route_pd_guard_escapes_saddle[array_api_strict] __________ namespace = def test_dense_route_pd_guard_escapes_saddle(namespace): problem, x0 = _saddle_trap_qp(namespace) > result = solve( problem, x0, options=Options(linsolve="dense", hessian="exact", max_iter=300) ) tests/integration/test_dense_nonconvex.py:49: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_measure_device_solve_populates_metrics[array_api_strict] _________ namespace = backend_name = 'array_api_strict' def test_measure_device_solve_populates_metrics(namespace, backend_name): problem = make_rt_like_problem(namespace, 60, n_structures=4, density=0.2, seed=0) x0 = namespace.full((60,), 0.01, dtype=namespace.float64) > m = measure_device_solve( problem, x0, ipax.Options(hessian="exact", linsolve="krylov"), backend=backend_name, route="krylov", ) tests/integration/test_device_efficiency.py:29: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ benchmarks/harness/__init__.py:794: in measure_device_solve ipax.solve(problem, x0, options=options) # type: ignore[arg-type] ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([1500., 1500., 1500., 1500.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_sync_counter_restores_dunders_after_window[array_api_strict] _______ namespace = def test_sync_counter_restores_dunders_after_window(namespace): """The counter must not leave the array type permanently patched.""" problem = make_rt_like_problem(namespace, 40, n_structures=4, density=0.2, seed=0) x0 = namespace.full((40,), 0.01, dtype=namespace.float64) before = namespace.asarray([2.5])[0] assert float(before) == 2.5 > measure_device_solve( problem, x0, ipax.Options(hessian="exact", linsolve="dense"), backend="numpy", route="dense", ) tests/integration/test_device_efficiency.py:58: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ benchmarks/harness/__init__.py:794: in measure_device_solve ipax.solve(problem, x0, options=options) # type: ignore[arg-type] ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([1000., 1000., 1000., 1000.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_hs1_rosenbrock_reaches_published_optimum[array_api_strict] ________ namespace = def test_hs1_rosenbrock_reaches_published_optimum(namespace): with implemented("HS subset"): > result = solve( HS1Rosenbrock(namespace), array(namespace, [-1.2, 1.0]), options=Options(hessian="lbfgs", linsolve="dense"), ) tests/integration/test_hock_schittkowski.py:39: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________________ test_hs6_nonconvex_equality[array_api_strict] _________________ namespace = def test_hs6_nonconvex_equality(namespace): problem = HS6(namespace) > result = solve( problem, array(namespace, [-1.2, 1.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:62: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([4.16666667], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______________ test_hs7_log_objective_equality[array_api_strict] _______________ namespace = def test_hs7_log_objective_equality(namespace): problem = HS7(namespace) > result = solve( problem, array(namespace, [2.0, 2.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_hs8_two_quadratic_equalities[array_api_strict] ______________ namespace = def test_hs8_two_quadratic_equalities(namespace): problem = HS8(namespace) > result = solve( problem, array(namespace, [2.0, 1.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([25., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_hs35_inequality_qp_with_bounds[array_api_strict] _____________ namespace = def test_hs35_inequality_qp_with_bounds(namespace): problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:86: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_hs43_rosen_suzuki_inequalities[array_api_strict] _____________ namespace = def test_hs43_rosen_suzuki_inequalities(namespace): problem = HS43(namespace) > result = solve( problem, array(namespace, [0.0, 0.0, 0.0, 0.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:94: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_hs21_active_bound_with_linear_inequality[array_api_strict] ________ namespace = def test_hs21_active_bound_with_linear_inequality(namespace): problem = HS21(namespace) > result = solve( problem, array(namespace, [3.0, 1.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:102: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([26., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_hs28_equality_qp_degenerate_multiplier[array_api_strict] _________ namespace = def test_hs28_equality_qp_degenerate_multiplier(namespace): problem = HS28(namespace) > result = solve( problem, array(namespace, [-1.0, 0.5, 0.5]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:113: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([33.33333333], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_hs9_nonunique_periodic_optimum[array_api_strict] _____________ namespace = def test_hs9_nonunique_periodic_optimum(namespace): # The optimum is non-unique (periodic); assert the optimal value and KKT # satisfaction rather than a specific x*. problem = HS9(namespace) > result = solve( problem, array(namespace, [0.0, 0.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:126: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([25.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______________ test_hs71_full_constraint_mix[array_api_strict] ________________ namespace = def test_hs71_full_constraint_mix(namespace): # Published optimum carries ~9 significant figures; relax the primal/objective # tolerance accordingly while still gating KKT/feasibility tightly. problem = HS71(namespace) > result = solve( problem, array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(**_EXACT_DENSE) ) tests/integration/test_hock_schittkowski.py:140: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_unconstrained_quadratic_hits_closed_form[array_api_strict] ________ namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_unconstrained_quadratic_hits_closed_form(namespace, tol): Q = array(namespace, [[4.0, 1.0], [1.0, 3.0]]) b = array(namespace, [1.0, 2.0]) problem = UnconstrainedQuadratic(Q, b, namespace) x0 = array(namespace, [0.0, 0.0]) with implemented("dense solver"): > result = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_known_optima.py:30: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_unreachable_optimality_stops_acceptable_not_max_iter[array_api_strict] __ namespace = def test_unreachable_optimality_stops_acceptable_not_max_iter(namespace): # The default acceptable gate (IPOPT convention: 1e2 x tol for 15 # consecutive iterations) must stop a solve that cannot reach the optimality # conditions, instead of grinding to max_iter/max_time at an essentially # optimal point (S2MPJ v6: PALMER1A, NELSONLS, LOADBAL). Optimality is made # deterministically unreachable via f_tol: the optimum objective is # ~-0.68, so |f| <= 1e-12 never holds, while the KKT residuals settle far # below the acceptable 1e-6 within a few iterations. Q = array(namespace, [[4.0, 1.0], [1.0, 3.0]]) b = array(namespace, [1.0, 2.0]) problem = UnconstrainedQuadratic(Q, b, namespace) x0 = array(namespace, [0.0, 0.0]) from ipax.options import OptimalityConditionOptions options = Options( hessian="exact", linsolve="dense", optimality=OptimalityConditionOptions(f_tol=1e-12), ) > result = solve(problem, x0, options=options) tests/integration/test_known_optima.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_bound_constrained_qp_finds_known_active_bounds[array_api_strict] _____ namespace = def test_bound_constrained_qp_finds_known_active_bounds(namespace): problem = BoundConstrainedQP(namespace) x0 = array(namespace, [0.25, 0.75]) with implemented("bound handling"): > result = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_known_optima.py:75: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_inequality_qp_finds_known_active_set[array_api_strict] __________ namespace = def test_inequality_qp_finds_known_active_set(namespace): class InequalityQP(Problem): @property def n_vars(self) -> int: return 1 def objective(self, x): return 0.5 * (x[0] - 2.0) * (x[0] - 2.0) def gradient(self, x): return namespace.stack((x[0] - 2.0,)) def ineq_constraints(self, x): return namespace.stack((x[0] - 1.0,)) def ineq_jacobian(self, x): del x return array(namespace, [[1.0]]) def lagrangian_hessian(self, x, y_eq, y_ineq, sigma=1.0): del y_eq, y_ineq return sigma * array(namespace, [[1.0 + 0.0 * x[0]]]) problem = InequalityQP() x0 = array(namespace, [0.5]) with implemented("inequality handling"): > result = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_known_optima.py:111: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_equality_constrained_qp_satisfies_kkt[array_api_strict] _________ namespace = def test_equality_constrained_qp_satisfies_kkt(namespace): problem = EqualityConstrainedQP(namespace) x0 = array(namespace, [0.9, 0.1]) with implemented("equalities"): > result = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_known_optima.py:125: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mixed_linear_and_nonlinear_equalities_slice_hessian_multipliers[array_api_strict] _ namespace = def test_mixed_linear_and_nonlinear_equalities_slice_hessian_multipliers(namespace): class MixedEqualityProblem(Problem): @property def n_vars(self) -> int: return 2 def objective(self, x): return 0.5 * ((x[0] - 2.0) * (x[0] - 2.0) + x[1] * x[1]) def gradient(self, x): return namespace.stack((x[0] - 2.0, x[1])) def eq_constraints(self, x): return namespace.stack((x[0] * x[0] - 1.0,)) def eq_jacobian(self, x): return namespace.stack( (namespace.stack((2.0 * x[0], namespace.zeros_like(x[1]))),) ) def linear_eq(self): return array(namespace, [[0.0, 1.0]]), array(namespace, [0.0]) def lagrangian_hessian(self, x, y_eq, y_ineq, sigma=1.0): del y_ineq assert int(y_eq.shape[0]) == 1 zero = namespace.zeros_like(x[0]) h00 = sigma + 2.0 * y_eq[0] h11 = sigma + zero return namespace.stack( (namespace.stack((h00, zero)), namespace.stack((zero, h11))) ) > result = solve( MixedEqualityProblem(), array(namespace, [1.2, 0.25]), options=Options(hessian="exact", linsolve="dense"), ) tests/integration/test_known_optima.py:174: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([41.66666667], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_fixed_variable_solves_via_bound_relaxation[array_api_strict] _______ namespace = def test_fixed_variable_solves_via_bound_relaxation(namespace): # A fixed variable (x_L == x_U) has no strict barrier interior; without bound # relaxation the first Newton step is non-finite and the solve fails. Here x1 # is pinned at 2, so the optimum is x0=3, x1=2, f = 0.5·(0 + (2-5)²) = 4.5. class FixedVarProblem(Problem): @property def n_vars(self) -> int: return 2 def bounds(self): return array(namespace, [-10.0, 2.0]), array(namespace, [10.0, 2.0]) def objective(self, x): return 0.5 * ((x[0] - 3.0) ** 2 + (x[1] - 5.0) ** 2) def gradient(self, x): return namespace.stack((x[0] - 3.0, x[1] - 5.0)) def lagrangian_hessian(self, x, y_eq, y_ineq, sigma=1.0): del y_eq, y_ineq return sigma * namespace.eye(2, dtype=x.dtype) > result = solve( FixedVarProblem(), array(namespace, [0.0, 2.0]), options=Options(hessian="exact", linsolve="dense"), ) tests/integration/test_known_optima.py:206: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 2.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_infeasible_problem_reports_infeasible[array_api_strict] _________ namespace = def test_infeasible_problem_reports_infeasible(namespace): class InfeasibleBounds(Problem): @property def n_vars(self) -> int: return 1 def bounds(self): return array(namespace, [1.0]), array(namespace, [0.0]) def objective(self, x): return namespace.sum(x * x) def gradient(self, x): return 2.0 * x with implemented("restoration"): > result = solve(InfeasibleBounds(), array(namespace, [0.5]), options=Options()) tests/integration/test_known_optima.py:233: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:161: in solve constraint_violation=_bound_violation(xp, x0, lower, upper), ipax/solve.py:89: in _bound_violation violation = max(violation, float(xp.max(xp.maximum(lower - x, zero)))) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.5], dtype=array_api_strict.float64), Array([0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_inconsistent_equalities_report_infeasible[array_api_strict] _______ namespace = def test_inconsistent_equalities_report_infeasible(namespace): > result = solve(InfeasibleEqualities(namespace), array(namespace, [0.5])) tests/integration/test_known_optima.py:244: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_result_history_tracks_monotone_kkt_progress[array_api_strict] ______ namespace = def test_result_history_tracks_monotone_kkt_progress(namespace): Q = array(namespace, [[2.0, 0.0], [0.0, 1.0]]) b = array(namespace, [1.0, -1.0]) problem = UnconstrainedQuadratic(Q, b, namespace) with implemented("driver iteration history"): > result = solve(problem, array(namespace, [10.0, -10.0]), options=Options()) tests/integration/test_known_optima.py:257: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_krylov_unconstrained_quadratic[array_api_strict] _____________ namespace = def test_krylov_unconstrained_quadratic(namespace): Q = array(namespace, [[4.0, 1.0], [1.0, 3.0]]) b = array(namespace, [1.0, 2.0]) problem = UnconstrainedQuadratic(Q, b, namespace) > result = solve(problem, array(namespace, [0.0, 0.0]), options=_krylov_options()) tests/integration/test_krylov_solve.py:45: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______________ test_krylov_bound_constrained_qp[array_api_strict] ______________ namespace = def test_krylov_bound_constrained_qp(namespace): problem = BoundConstrainedQP(namespace) > result = solve(problem, array(namespace, [0.25, 0.75]), options=_krylov_options()) tests/integration/test_krylov_solve.py:54: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________________ test_krylov_inequality_qp[array_api_strict] __________________ namespace = def test_krylov_inequality_qp(namespace): class InequalityQP(Problem): @property def n_vars(self) -> int: return 1 def objective(self, x): return 0.5 * (x[0] - 2.0) * (x[0] - 2.0) def gradient(self, x): return namespace.stack((x[0] - 2.0,)) def ineq_constraints(self, x): return namespace.stack((x[0] - 1.0,)) def ineq_jacobian(self, x): del x return array(namespace, [[1.0]]) def lagrangian_hessian(self, x, y_eq, y_ineq, sigma=1.0): del y_eq, y_ineq return sigma * array(namespace, [[1.0 + 0.0 * x[0]]]) > result = solve(InequalityQP(), array(namespace, [0.5]), options=_krylov_options()) tests/integration/test_krylov_solve.py:83: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_krylov_jacobi_preconditioner_cuts_total_iterations[array_api_strict] ___ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6709c10> def test_krylov_jacobi_preconditioner_cuts_total_iterations(namespace, monkeypatch): """End-to-end scaling win: Jacobi engages mid-solve on the condensed system. An ill-conditioned (κ ≈ 1000) bound-constrained QP with a diagonal Hessian that *exposes* its diagonal, so the condensed operator builds a Jacobi preconditioner matrix-free. Preconditioning must collapse the total CG work. """ n = 24 diag = array(namespace, [1.0 + (1000.0 - 1.0) * k / (n - 1) for k in range(n)]) b = array(namespace, [0.5 if k % 2 else -0.5 for k in range(n)]) hessian = namespace.eye(n, dtype=diag.dtype) * diag class IllConditionedBoundedQP(Problem): @property def n_vars(self) -> int: return n def bounds(self): return namespace.zeros((n,), dtype=diag.dtype), None def objective(self, x): return 0.5 * namespace.sum(diag * x * x) - namespace.sum(b * x) def gradient(self, x): return diag * x - b def lagrangian_hessian(self, x, y_eq, y_ineq, sigma=1.0): del x, y_eq, y_ineq return sigma * hessian problem = IllConditionedBoundedQP() x0 = namespace.ones((n,), dtype=diag.dtype) original_solve = KrylovSolver.solve def run(preconditioner: str): counts: list[int] = [] def counting_solve(self, rhs): result = original_solve(self, rhs) counts.append(self.last_iterations) return result monkeypatch.setattr(KrylovSolver, "solve", counting_solve) result = solve( problem, x0, options=Options( hessian="exact", linsolve="krylov", krylov=KrylovOptions(preconditioner=preconditioner), ), ) monkeypatch.undo() return result, sum(counts) > none_result, none_iters = run("none") tests/integration/test_krylov_solve.py:144: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/integration/test_krylov_solve.py:132: in run result = solve( ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_krylov_equality_constrained_qp_uses_minres[array_api_strict] _______ namespace = def test_krylov_equality_constrained_qp_uses_minres(namespace): """Equalities form the indefinite saddle — the CG path falls back to MINRES.""" problem = EqualityConstrainedQP(namespace) > result = solve(problem, array(namespace, [0.9, 0.1]), options=_krylov_options()) tests/integration/test_krylov_solve.py:157: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_gmres_solves_bound_constrained_qp[array_api_strict] ___________ namespace = def test_gmres_solves_bound_constrained_qp(namespace): """The GMRES route drives the full IPM to the same optimum as CG/MINRES.""" problem = BoundConstrainedQP(namespace) options = Options( hessian="exact", linsolve="krylov", krylov=KrylovOptions(method="gmres"), ) > result = solve(problem, array(namespace, [0.25, 0.75]), options=options) tests/integration/test_krylov_solve.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_lbfgs_preconditioner_solves_bound_constrained_qp[array_api_strict] ____ namespace = def test_lbfgs_preconditioner_solves_bound_constrained_qp(namespace): """End-to-end L-BFGS Hessian + L-BFGS-aware preconditioner on the Krylov route. The problem supplies no analytic Hessian, so ``hessian="lbfgs"`` actually builds the compact L-BFGS operator the preconditioner then inverts. """ reference = BoundConstrainedQP(namespace) lower, upper = reference.bounds() def objective(x): diff = x - reference.center return 0.5 * namespace.sum(diff * diff) def gradient(x): return x - reference.center problem = FunctionProblem(2, objective, gradient=gradient, bounds=(lower, upper)) options = Options( hessian="lbfgs", linsolve="krylov", krylov=KrylovOptions(preconditioner="lbfgs"), ) > result = solve(problem, array(namespace, [0.25, 0.75]), options=options) tests/integration/test_krylov_solve.py:204: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_krylov_solves_synthetic_rt_like_problem[array_api_strict] ________ namespace = def test_krylov_solves_synthetic_rt_like_problem(namespace): """A block-structured, matrix-free RT-like NLP solves to KKT.""" n = 200 problem = make_rt_like_problem(namespace, n, n_structures=6, density=0.2, seed=3) x0 = namespace.full((n,), 0.01, dtype=array(namespace, [0.0]).dtype) > result = solve(problem, x0, options=_krylov_options()) tests/integration/test_krylov_solve.py:219: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3400., 3400., 3300., 3300., 3300., 3300.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_krylov_solve_never_materializes_the_kkt_matrix[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c65e8940> def test_krylov_solve_never_materializes_the_kkt_matrix(namespace, monkeypatch): """The headline matrix-free guarantee: no ``n×n`` KKT matrix is ever formed. Densifying an operator goes through ``LinearOperator.matmat`` (the dense solver materializes ``N`` that way). The Krylov route uses only matvecs, so its ``matmat`` count must be exactly zero — in contrast to the dense route. """ n = 150 problem = make_rt_like_problem(namespace, n, n_structures=5, density=0.2, seed=1) x0 = namespace.full((n,), 0.01, dtype=array(namespace, [0.0]).dtype) counter = {"matmat": 0} original_matmat = LinearOperator.matmat def counting_matmat(self, V): counter["matmat"] += 1 return original_matmat(self, V) monkeypatch.setattr(LinearOperator, "matmat", counting_matmat) > krylov_result = solve( problem, x0, options=Options(hessian="exact", linsolve="krylov") ) tests/integration/test_krylov_solve.py:247: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3000., 3000., 3000., 3000., 3000.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_krylov_operator_errors_propagate[array_api_strict] ____________ namespace = def test_krylov_operator_errors_propagate(namespace): """User/operator callback bugs are not swallowed as numerical failures.""" class BadHessianQP(Problem): @property def n_vars(self) -> int: return 1 def objective(self, x): return 0.5 * (x[0] - 1.0) * (x[0] - 1.0) def gradient(self, x): return namespace.stack((x[0] - 1.0,)) def lagrangian_hessian(self, x, y_eq, y_ineq, sigma=1.0): del x, y_eq, y_ineq, sigma def matvec(v): del v raise ValueError("bad Hessian matvec") return MatrixFreeJacobian((1, 1), matvec, matvec) with pytest.raises(ValueError, match="bad Hessian matvec"): > solve( BadHessianQP(), array(namespace, [0.0]), options=Options(hessian="exact", linsolve="krylov"), ) tests/integration/test_krylov_solve.py:288: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_lower_bounded_linear_inequality[array_api_strict] ____________ namespace = def test_lower_bounded_linear_inequality(namespace): problem = _LowerBoundedQP(namespace) > result = solve(problem, array(namespace, [0.0, 0.0]), options=_EXACT_DENSE) tests/integration/test_linear_inequalities.py:148: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_two_sided_range_upper_active[array_api_strict] ______________ namespace = def test_two_sided_range_upper_active(namespace): problem = _RangeBoxQP(namespace) > result = solve(problem, array(namespace, [1.5, 0.0]), options=_EXACT_DENSE) tests/integration/test_linear_inequalities.py:160: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_mixed_nonlinear_and_linear_inequalities[array_api_strict] ________ namespace = def test_mixed_nonlinear_and_linear_inequalities(namespace): problem = _MixedIneqQP(namespace) > result = solve(problem, array(namespace, [0.5, 0.5]), options=_EXACT_DENSE) tests/integration/test_linear_inequalities.py:171: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_linear_inequality_with_gradient_scaling[array_api_strict] ________ namespace = def test_linear_inequality_with_gradient_scaling(namespace): problem = _LowerBoundedQP(namespace) > result = solve( problem, array(namespace, [0.0, 0.0]), options=Options(hessian="exact", linsolve="dense", scaling="gradient-based"), ) tests/integration/test_linear_inequalities.py:182: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_hs21_via_linear_ineq_matches_known_optimum[array_api_strict] _______ namespace = def test_hs21_via_linear_ineq_matches_known_optimum(namespace): problem = HS21(namespace) > result = solve(problem, array(namespace, [3.0, 1.0]), options=_EXACT_DENSE) tests/integration/test_linear_inequalities.py:193: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([26., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_matrix_free_linear_ineq_is_lowered_and_solved[array_api_strict] _____ namespace = def test_matrix_free_linear_ineq_is_lowered_and_solved(namespace): # Formerly rejected (NotImplementedError): an operator-valued matrix is now # lowered through a signed row selection. ``0.5 ≤ x ≤ 1`` with the # objective pulling x to 0 ⇒ the lower rows bind at ``(0.5, 0.5)``. from ipax.backend.operators import Identity class _MatrixFreeLinearIneq(Problem): @property def n_vars(self) -> int: return 2 def objective(self, x): return namespace.sum(x * x) def gradient(self, x): return 2.0 * x def linear_ineq(self): return ( Identity(2), array(namespace, [0.5, 0.5]), array(namespace, [1.0, 1.0]), ) > result = solve(_MatrixFreeLinearIneq(), array(namespace, [0.75, 0.75])) tests/integration/test_linear_inequalities.py:226: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:177: in solve resolved = lower_linear_inequalities(resolved, x0, xp) ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 1], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_routes_record_the_default_auto_selection[array_api_strict] ________ namespace = def test_routes_record_the_default_auto_selection(namespace): > result = solve(_BoundQP(namespace), namespace.full((4,), 0.4)) tests/integration/test_result_routes.py:66: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_routes_reflect_forced_krylov[array_api_strict] ______________ namespace = def test_routes_reflect_forced_krylov(namespace): > result = solve( _BoundQP(namespace), namespace.full((4,), 0.4), options=Options(linsolve="krylov"), ) tests/integration/test_result_routes.py:83: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_routes_reflect_the_dense_augmented_form[array_api_strict] ________ namespace = def test_routes_reflect_the_dense_augmented_form(namespace): > result = solve( _IneqQP(namespace), namespace.full((4,), 0.4), options=Options( linsolve="dense", dense=DenseOptions(kkt_route="augmented"), hessian="exact", ), ) tests/integration/test_result_routes.py:118: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_routes_echo_configured_algorithm_pieces[array_api_strict] ________ namespace = def test_routes_echo_configured_algorithm_pieces(namespace): > result = solve( _IneqQP(namespace), namespace.full((4,), 0.4), options=Options(scaling="none", corrections="mehrotra"), ) tests/integration/test_result_routes.py:134: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_routes_absent_on_pre_solver_exits[array_api_strict] ___________ namespace = def test_routes_absent_on_pre_solver_exits(namespace): class _InfeasibleBounds(_BoundQP): def bounds(self): xp = self._xp return xp.ones((4,), dtype=xp.float64), xp.zeros((4,), dtype=xp.float64) > result = solve(_InfeasibleBounds(namespace), namespace.full((4,), 0.4)) tests/integration/test_result_routes.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:161: in solve constraint_violation=_bound_violation(xp, x0, lower, upper), ipax/solve.py:89: in _bound_violation violation = max(violation, float(xp.max(xp.maximum(lower - x, zero)))) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.6, 0.6, 0.6, 0.6], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_format_result_reports_routes[array_api_strict] ______________ namespace = def test_format_result_reports_routes(namespace): from ipax._logging import format_result > result = solve(_BoundQP(namespace), namespace.full((4,), 0.4)) tests/integration/test_result_routes.py:160: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_badly_scaled_qp_solves_with_scaling[array_api_strict] __________ namespace = def test_badly_scaled_qp_solves_with_scaling(namespace): xp = namespace problem = _badly_scaled_qp(xp) x0 = array(xp, [1.0, 1.0]) with implemented("dense solver"): > result = solve(problem, x0, options=_scaled_options("dense")) tests/integration/test_scaling_solve.py:46: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_options_accepts_simple_scaling_shorthand[array_api_strict] ________ namespace = def test_options_accepts_simple_scaling_shorthand(namespace): xp = namespace problem = _badly_scaled_qp(xp) x0 = array(xp, [1.0, 1.0]) options = Options( hessian="exact", linsolve="dense", scaling="gradient-based", ) > result = solve(problem, x0, options=options) tests/integration/test_scaling_solve.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_history_and_callback_use_original_problem_units[array_api_strict] ____ namespace = def test_history_and_callback_use_original_problem_units(namespace): xp = namespace problem = _badly_scaled_qp(xp) x0 = array(xp, [1.0, 1.0]) seen = [] > result = solve( problem, x0, options=_scaled_options("dense"), callback=lambda info: seen.append(info), ) tests/integration/test_scaling_solve.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_callback_slacks_and_inequality_duals_use_original_units[array_api_strict] _ namespace = def test_callback_slacks_and_inequality_duals_use_original_units(namespace): xp = namespace jac = array(xp, [[1000.0]]) problem = FunctionProblem( 1, lambda x: 0.5 * (x[0] - 2.0) ** 2, gradient=lambda x: xp.stack((x[0] - 2.0,)), ineq_constraints=lambda x: xp.stack((1000.0 * (x[0] - 1.0),)), ineq_jacobian=lambda x: jac, lagrangian_hessian=lambda x, ye, yi, sigma: sigma * xp.eye(1), ) seen = [] > result = solve( problem, array(xp, [0.5]), options=_scaled_options("dense"), callback=lambda info: seen.append(info) or True, ) tests/integration/test_scaling_solve.py:110: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.1], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_scaling_off_by_default_leaves_problem_unscaled[array_api_strict] _____ namespace = def test_scaling_off_by_default_leaves_problem_unscaled(namespace): # The default Options does not scale; the same problem still solves (it is # convex), confirming scaling is opt-in and the result space is identical. xp = namespace problem = _badly_scaled_qp(xp) x0 = array(xp, [1.0, 1.0]) with implemented("dense solver"): > result = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/integration/test_scaling_solve.py:136: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_scaling_matches_across_solver_routes[array_api_strict] __________ namespace = def test_scaling_matches_across_solver_routes(namespace): # The scaled problem must agree through the matrix-free Krylov route, which # exercises _RowScaled.matvec/rmatvec/gram on the linear-equality Jacobian. xp = namespace problem = _badly_scaled_qp(xp) x0 = array(xp, [1.0, 1.0]) with implemented("krylov solver"): > result = solve(problem, x0, options=_scaled_options("krylov")) tests/integration/test_scaling_solve.py:150: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_warm_start_from_optimum_converges_immediately[array_api_strict] _____ namespace = def test_warm_start_from_optimum_converges_immediately(namespace): xp = namespace problem = BoundConstrainedQP(xp) x0 = array(xp, [0.25, 0.75]) with implemented("dense solver"): > cold = solve(problem, x0, options=_DENSE) tests/integration/test_warm_start_solve.py:20: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_warm_start_with_scaling_round_trips[array_api_strict] __________ namespace = def test_warm_start_with_scaling_round_trips(namespace): # The original-units warm start must be rescaled into the scaled subproblem, # so a warm re-solve still lands on the correct unscaled multiplier. xp = namespace problem = _badly_scaled_qp(xp) opts = Options( hessian="exact", linsolve="dense", scaling=ScalingOptions(method="gradient-based"), ) x0 = array(xp, [1.0, 1.0]) with implemented("dense solver"): > cold = solve(problem, x0, options=opts) tests/integration/test_warm_start_solve.py:63: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_warm_start_with_scaling_round_trips_inequalities[array_api_strict] ____ namespace = def test_warm_start_with_scaling_round_trips_inequalities(namespace): # The inequality counterpart of the round-trip above: the warm start's # slacks and inequality multipliers are given in original units and must be # rescaled into the scaled subproblem (s̃ = d_ineq·s, ỹ = y·s_f/d_ineq). xp = namespace problem = _badly_scaled_ineq_qp(xp) opts = Options( hessian="exact", linsolve="dense", scaling=ScalingOptions(method="gradient-based"), ) x0 = array(xp, [1.0, 1.0]) with implemented("dense solver"): > cold = solve(problem, x0, options=opts) tests/integration/test_warm_start_solve.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_warm_start_dimension_mismatch_raises[array_api_strict] __________ namespace = def test_warm_start_dimension_mismatch_raises(namespace): import pytest xp = namespace problem = BoundConstrainedQP(xp) x0 = array(xp, [0.25, 0.75]) bad = WarmStart(z_lower=array(xp, [1.0, 2.0, 3.0])) # n is 2, not 3 with pytest.raises(ValueError, match="z_lower has length 3, expected 2"): > solve(problem, x0, options=_DENSE, warm_start=bad) tests/integration/test_warm_start_solve.py:125: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_driver_derives_theta_min_from_the_initial_violation[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c65e4ad0> def test_driver_derives_theta_min_from_the_initial_violation(namespace, monkeypatch): # HS71 starts infeasible, so θ(x_0) > 1 and θ_min must scale with it rather # than sit at the bare 1e-4·1 floor. # # θ(x_0) is observed through the driver's own ``_theta_l1`` rather than read # off ``result.history``: the history records ``_theta`` — the *original # problem's* ∞-norm — while the filter (and so θ_min) runs on the ℓ1 norm # ‖(c, g+s)‖₁. The two coincide at this particular x_0, which would let a # wrong wiring pass unnoticed. seen = _spy_theta_min(monkeypatch) thetas: list[float] = [] original_theta_l1 = IPMDriver._theta_l1 def spy_theta(self, *args, **kwargs): value = original_theta_l1(self, *args, **kwargs) thetas.append(value) return value monkeypatch.setattr(IPMDriver, "_theta_l1", spy_theta) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(hessian="exact", linsolve="dense"), ) tests/regression/test_adaptive_alpha_min.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_theta_min_floors_at_one_for_a_feasible_start[array_api_strict] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6550520> def test_theta_min_floors_at_one_for_a_feasible_start(namespace, monkeypatch): # max(1, θ(x_0)) — a feasible or near-feasible start must not collapse θ_min # toward 0, which would permanently disable the eq. (23) switching term. seen = _spy_theta_min(monkeypatch) > result = solve( BoundConstrainedQP(namespace), array(namespace, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense"), ) tests/regression/test_adaptive_alpha_min.py:90: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_dense_route_never_materializes_bound_only_lbfgs[array_api_strict] ____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9ca0d78c0> def test_dense_route_never_materializes_bound_only_lbfgs(namespace, monkeypatch): def _boom(self, *args, **kwargs): raise AssertionError("bound-only L-BFGS must use the structured solve") monkeypatch.setattr(DenseSolver, "_materialize_and_guard", _boom) problem = _BoxLeastSquares(namespace) > result = solve( problem, _x0(namespace, problem.n_vars), options=Options(linsolve="dense", hessian="lbfgs"), ) tests/regression/test_bound_only_lbfgs_structured_routes.py:68: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_krylov_route_uses_exact_lbfgs_inverse_on_bound_only[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c78303d0> def test_krylov_route_uses_exact_lbfgs_inverse_on_bound_only(namespace, monkeypatch): iterations: list[int] = [] original = KrylovSolver.solve def _spy(self, rhs): out = original(self, rhs) iterations.append(self.last_iterations) return out monkeypatch.setattr(KrylovSolver, "solve", _spy) problem = _BoxLeastSquares(namespace) > result = solve( problem, _x0(namespace, problem.n_vars), options=Options(linsolve="krylov", hessian="lbfgs"), ) tests/regression/test_bound_only_lbfgs_structured_routes.py:88: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_structured_routes_agree_with_each_other[array_api_strict] ________ namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_structured_routes_agree_with_each_other(namespace, tol): problem = _BoxLeastSquares(namespace) x0 = _x0(namespace, problem.n_vars) > dense = solve(problem, x0, options=Options(linsolve="dense", hessian="lbfgs")) tests/regression/test_bound_only_lbfgs_structured_routes.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_max_iter_within_relaxed_tolerance_reports_acceptable[array_api_strict] __ namespace = def test_max_iter_within_relaxed_tolerance_reports_acceptable(namespace): > best_dual = _reference_best_dual(namespace) tests/regression/test_budget_exhaustion_acceptable.py:73: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_budget_exhaustion_acceptable.py:28: in _reference_best_dual result = solve( ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_max_iter_far_from_tolerance_stays_max_iter[array_api_strict] _______ namespace = def test_max_iter_far_from_tolerance_stays_max_iter(namespace): > best_dual = _reference_best_dual(namespace) tests/regression/test_budget_exhaustion_acceptable.py:83: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_budget_exhaustion_acceptable.py:28: in _reference_best_dual result = solve( ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_unconstrained_lbfgs_evaluates_each_point_once[array_api_strict] _____ namespace = def test_unconstrained_lbfgs_evaluates_each_point_once(namespace): n = 20 inner = _Rosenbrock(namespace, n) problem = _Counting(inner) x0 = array(namespace, [-1.2, 1.0] * (n // 2)) > result = solve(problem, x0, options=Options()) tests/regression/test_callback_evaluation_counts.py:107: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=array_api...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_constrained_without_soc_evaluates_each_point_once[array_api_strict-HS43-ineq] _ namespace = factory = , x0 = [0.0, 0.0, 0.0, 0.0] @pytest.mark.parametrize(("factory", "x0"), _CASES, ids=_IDS) def test_constrained_without_soc_evaluates_each_point_once(namespace, factory, x0): """With second-order corrections off, the only points visited are x0 and the line-search trials — so that is the evaluation budget.""" problem = _Counting(factory(namespace)) options = Options(line_search=LineSearchOptions(max_soc=0)) > result = solve(problem, array(namespace, x0), options=options) tests/regression/test_callback_evaluation_counts.py:133: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_constrained_without_soc_evaluates_each_point_once[array_api_strict-HS7-eq] _ namespace = factory = , x0 = [2.0, 2.0] @pytest.mark.parametrize(("factory", "x0"), _CASES, ids=_IDS) def test_constrained_without_soc_evaluates_each_point_once(namespace, factory, x0): """With second-order corrections off, the only points visited are x0 and the line-search trials — so that is the evaluation budget.""" problem = _Counting(factory(namespace)) options = Options(line_search=LineSearchOptions(max_soc=0)) > result = solve(problem, array(namespace, x0), options=options) tests/regression/test_callback_evaluation_counts.py:133: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_constrained_without_soc_evaluates_each_point_once[array_api_strict-HS71-eq-ineq-bounds] _ namespace = factory = , x0 = [1.0, 5.0, 5.0, 1.0] @pytest.mark.parametrize(("factory", "x0"), _CASES, ids=_IDS) def test_constrained_without_soc_evaluates_each_point_once(namespace, factory, x0): """With second-order corrections off, the only points visited are x0 and the line-search trials — so that is the evaluation budget.""" problem = _Counting(factory(namespace)) options = Options(line_search=LineSearchOptions(max_soc=0)) > result = solve(problem, array(namespace, x0), options=options) tests/regression/test_callback_evaluation_counts.py:133: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_constrained_with_soc_bounded_by_visited_points[array_api_strict-HS43-ineq] _ namespace = factory = , x0 = [0.0, 0.0, 0.0, 0.0] @pytest.mark.parametrize(("factory", "x0"), _CASES, ids=_IDS) def test_constrained_with_soc_bounded_by_visited_points(namespace, factory, x0): """Each second-order correction probes one new point (its residual forms the corrected RHS, W&B 2006 §2.4) and the accepted SOC point is one more; nothing beyond those and the trials may be evaluated.""" problem = _Counting(factory(namespace)) > result = solve(problem, array(namespace, x0), options=Options()) tests/regression/test_callback_evaluation_counts.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_constrained_with_soc_bounded_by_visited_points[array_api_strict-HS7-eq] _ namespace = factory = , x0 = [2.0, 2.0] @pytest.mark.parametrize(("factory", "x0"), _CASES, ids=_IDS) def test_constrained_with_soc_bounded_by_visited_points(namespace, factory, x0): """Each second-order correction probes one new point (its residual forms the corrected RHS, W&B 2006 §2.4) and the accepted SOC point is one more; nothing beyond those and the trials may be evaluated.""" problem = _Counting(factory(namespace)) > result = solve(problem, array(namespace, x0), options=Options()) tests/regression/test_callback_evaluation_counts.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_constrained_with_soc_bounded_by_visited_points[array_api_strict-HS71-eq-ineq-bounds] _ namespace = factory = , x0 = [1.0, 5.0, 5.0, 1.0] @pytest.mark.parametrize(("factory", "x0"), _CASES, ids=_IDS) def test_constrained_with_soc_bounded_by_visited_points(namespace, factory, x0): """Each second-order correction probes one new point (its residual forms the corrected RHS, W&B 2006 §2.4) and the accepted SOC point is one more; nothing beyond those and the trials may be evaluated.""" problem = _Counting(factory(namespace)) > result = solve(problem, array(namespace, x0), options=Options()) tests/regression/test_callback_evaluation_counts.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_no_corrector_monotone_passes[array_api_strict] ______________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6afed60> def test_no_corrector_monotone_passes(namespace, monkeypatch): counts = _instrument(monkeypatch) > result = _run(namespace, counts, corrections="none", mu_schedule="monotone") tests/regression/test_corrector_operator_counts.py:204: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_mehrotra_corrector_passes[array_api_strict-monotone-filter] _______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7832c80> mu_schedule = 'monotone', globalization = 'filter' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) @pytest.mark.parametrize("mu_schedule", ["monotone", "probing"]) def test_mehrotra_corrector_passes(namespace, monkeypatch, mu_schedule, globalization): counts = _instrument(monkeypatch) > result = _run( namespace, counts, globalization=globalization, corrections="mehrotra", mu_schedule=mu_schedule, ) tests/regression/test_corrector_operator_counts.py:216: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_mehrotra_corrector_passes[array_api_strict-monotone-breedveld] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c69c9c50> mu_schedule = 'monotone', globalization = 'breedveld' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) @pytest.mark.parametrize("mu_schedule", ["monotone", "probing"]) def test_mehrotra_corrector_passes(namespace, monkeypatch, mu_schedule, globalization): counts = _instrument(monkeypatch) > result = _run( namespace, counts, globalization=globalization, corrections="mehrotra", mu_schedule=mu_schedule, ) tests/regression/test_corrector_operator_counts.py:216: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_mehrotra_corrector_passes[array_api_strict-probing-filter] ________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c69c9f60> mu_schedule = 'probing', globalization = 'filter' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) @pytest.mark.parametrize("mu_schedule", ["monotone", "probing"]) def test_mehrotra_corrector_passes(namespace, monkeypatch, mu_schedule, globalization): counts = _instrument(monkeypatch) > result = _run( namespace, counts, globalization=globalization, corrections="mehrotra", mu_schedule=mu_schedule, ) tests/regression/test_corrector_operator_counts.py:216: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_mehrotra_corrector_passes[array_api_strict-probing-breedveld] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7832350> mu_schedule = 'probing', globalization = 'breedveld' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) @pytest.mark.parametrize("mu_schedule", ["monotone", "probing"]) def test_mehrotra_corrector_passes(namespace, monkeypatch, mu_schedule, globalization): counts = _instrument(monkeypatch) > result = _run( namespace, counts, globalization=globalization, corrections="mehrotra", mu_schedule=mu_schedule, ) tests/regression/test_corrector_operator_counts.py:216: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_gondzio_corrector_passes[array_api_strict-filter] ____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7833150> globalization = 'filter' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) def test_gondzio_corrector_passes(namespace, monkeypatch, globalization): counts = _instrument(monkeypatch) > result = _run( namespace, counts, globalization=globalization, corrections="gondzio", mu_schedule="probing", ) tests/regression/test_corrector_operator_counts.py:247: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_gondzio_corrector_passes[array_api_strict-breedveld] ___________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c69ca820> globalization = 'breedveld' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) def test_gondzio_corrector_passes(namespace, monkeypatch, globalization): counts = _instrument(monkeypatch) > result = _run( namespace, counts, globalization=globalization, corrections="gondzio", mu_schedule="probing", ) tests/regression/test_corrector_operator_counts.py:247: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_corrector_operator_counts.py:166: in _run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_dense_solves_rank_deficient_equality[array_api_strict] __________ namespace = def test_dense_solves_rank_deficient_equality(namespace): > result = solve( _RedundantEquality(namespace), array(namespace, [2.0, -1.0]), options=Options(hessian="exact", linsolve="dense"), ) tests/regression/test_delta_c_rank_deficient_constraints.py:68: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_lbfgs_solves_rank_deficient_equality[array_api_strict] __________ namespace = def test_lbfgs_solves_rank_deficient_equality(namespace): # The Hessian-less L-BFGS route on the same degenerate saddle. > result = solve( _RedundantEquality(namespace), array(namespace, [2.0, -1.0]), options=Options(hessian="lbfgs", linsolve="dense"), ) tests/regression/test_delta_c_rank_deficient_constraints.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_host_syncs_per_iteration_bounded[array_api_strict-rosenbrock-unconstrained] _ namespace = make = at 0x7fd9c7668300> x0 = [-1.2, 1.0, -1.2, 1.0, -1.2, 1.0, ...], budget = 13.0 options = Options(optimality=OptimalityConditionOptions(f_tol=None, f_rel_change_tol=None, dual_inf_tol=1e-08, constr_viol_tol=1...ax_corrections=2, gondzio_gamma=0.1, gondzio_variant='ipax'), enable_autodiff=True, enable_finite_diff=True, verbose=0) @pytest.mark.parametrize( ("make", "x0", "budget", "options"), [ (lambda xp: _Rosenbrock(xp, 20), [-1.2, 1.0] * 10, 13.0, Options()), (HS43, [0.0, 0.0, 0.0, 0.0], 21.0, Options()), (HS71, [1.0, 5.0, 5.0, 1.0], 31.0, Options()), # Bound-only L-BFGS on the Krylov route: the budget sits *between* the # direct exact-inverse dispatch (~22.8 syncs/iter) and the same solve # re-wrapped in CG (~25.5, both with the device-side apply guard), so # it pins that the direct route stays dispatched — the change's # device-efficiency property, not just its iteration counts. ( BoundConstrainedQP, [0.25, 0.75], 24.0, Options(hessian="lbfgs", linsolve="krylov"), ), ], ids=[ "rosenbrock-unconstrained", "HS43-ineq", "HS71-eq-ineq-bounds", "bound-only-lbfgs-krylov-direct", ], ) def test_host_syncs_per_iteration_bounded(namespace, make, x0, budget, options): problem = make(namespace) x = array(namespace, x0) with _ScalarSyncCounter(type(x)) as counter: > result = solve(problem, x, options=options) tests/regression/test_driver_host_sync_budget.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=array_api...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_host_syncs_per_iteration_bounded[array_api_strict-HS43-ineq] _______ namespace = make = , x0 = [0.0, 0.0, 0.0, 0.0] budget = 21.0 options = Options(optimality=OptimalityConditionOptions(f_tol=None, f_rel_change_tol=None, dual_inf_tol=1e-08, constr_viol_tol=1...ax_corrections=2, gondzio_gamma=0.1, gondzio_variant='ipax'), enable_autodiff=True, enable_finite_diff=True, verbose=0) @pytest.mark.parametrize( ("make", "x0", "budget", "options"), [ (lambda xp: _Rosenbrock(xp, 20), [-1.2, 1.0] * 10, 13.0, Options()), (HS43, [0.0, 0.0, 0.0, 0.0], 21.0, Options()), (HS71, [1.0, 5.0, 5.0, 1.0], 31.0, Options()), # Bound-only L-BFGS on the Krylov route: the budget sits *between* the # direct exact-inverse dispatch (~22.8 syncs/iter) and the same solve # re-wrapped in CG (~25.5, both with the device-side apply guard), so # it pins that the direct route stays dispatched — the change's # device-efficiency property, not just its iteration counts. ( BoundConstrainedQP, [0.25, 0.75], 24.0, Options(hessian="lbfgs", linsolve="krylov"), ), ], ids=[ "rosenbrock-unconstrained", "HS43-ineq", "HS71-eq-ineq-bounds", "bound-only-lbfgs-krylov-direct", ], ) def test_host_syncs_per_iteration_bounded(namespace, make, x0, budget, options): problem = make(namespace) x = array(namespace, x0) with _ScalarSyncCounter(type(x)) as counter: > result = solve(problem, x, options=options) tests/regression/test_driver_host_sync_budget.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_host_syncs_per_iteration_bounded[array_api_strict-HS71-eq-ineq-bounds] __ namespace = make = , x0 = [1.0, 5.0, 5.0, 1.0] budget = 31.0 options = Options(optimality=OptimalityConditionOptions(f_tol=None, f_rel_change_tol=None, dual_inf_tol=1e-08, constr_viol_tol=1...ax_corrections=2, gondzio_gamma=0.1, gondzio_variant='ipax'), enable_autodiff=True, enable_finite_diff=True, verbose=0) @pytest.mark.parametrize( ("make", "x0", "budget", "options"), [ (lambda xp: _Rosenbrock(xp, 20), [-1.2, 1.0] * 10, 13.0, Options()), (HS43, [0.0, 0.0, 0.0, 0.0], 21.0, Options()), (HS71, [1.0, 5.0, 5.0, 1.0], 31.0, Options()), # Bound-only L-BFGS on the Krylov route: the budget sits *between* the # direct exact-inverse dispatch (~22.8 syncs/iter) and the same solve # re-wrapped in CG (~25.5, both with the device-side apply guard), so # it pins that the direct route stays dispatched — the change's # device-efficiency property, not just its iteration counts. ( BoundConstrainedQP, [0.25, 0.75], 24.0, Options(hessian="lbfgs", linsolve="krylov"), ), ], ids=[ "rosenbrock-unconstrained", "HS43-ineq", "HS71-eq-ineq-bounds", "bound-only-lbfgs-krylov-direct", ], ) def test_host_syncs_per_iteration_bounded(namespace, make, x0, budget, options): problem = make(namespace) x = array(namespace, x0) with _ScalarSyncCounter(type(x)) as counter: > result = solve(problem, x, options=options) tests/regression/test_driver_host_sync_budget.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_host_syncs_per_iteration_bounded[array_api_strict-bound-only-lbfgs-krylov-direct] _ namespace = make = , x0 = [0.25, 0.75] budget = 24.0 options = Options(optimality=OptimalityConditionOptions(f_tol=None, f_rel_change_tol=None, dual_inf_tol=1e-08, constr_viol_tol=1...ax_corrections=2, gondzio_gamma=0.1, gondzio_variant='ipax'), enable_autodiff=True, enable_finite_diff=True, verbose=0) @pytest.mark.parametrize( ("make", "x0", "budget", "options"), [ (lambda xp: _Rosenbrock(xp, 20), [-1.2, 1.0] * 10, 13.0, Options()), (HS43, [0.0, 0.0, 0.0, 0.0], 21.0, Options()), (HS71, [1.0, 5.0, 5.0, 1.0], 31.0, Options()), # Bound-only L-BFGS on the Krylov route: the budget sits *between* the # direct exact-inverse dispatch (~22.8 syncs/iter) and the same solve # re-wrapped in CG (~25.5, both with the device-side apply guard), so # it pins that the direct route stays dispatched — the change's # device-efficiency property, not just its iteration counts. ( BoundConstrainedQP, [0.25, 0.75], 24.0, Options(hessian="lbfgs", linsolve="krylov"), ), ], ids=[ "rosenbrock-unconstrained", "HS43-ineq", "HS71-eq-ineq-bounds", "bound-only-lbfgs-krylov-direct", ], ) def test_host_syncs_per_iteration_bounded(namespace, make, x0, budget, options): problem = make(namespace) x = array(namespace, x0) with _ScalarSyncCounter(type(x)) as counter: > result = solve(problem, x, options=options) tests/regression/test_driver_host_sync_budget.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_infeasible_verdict_vetoed_by_feasible_history[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c69caa50> def test_infeasible_verdict_vetoed_by_feasible_history(namespace, monkeypatch): # After a few good iterations (θ ~ 1e-12 on this QP) the line search is # forced to fail and restoration "returns" a wildly infeasible point while # claiming local infeasibility. The veto must reject that claim — the run # has already visited feasibility — and report STALLED with a usable point. xp = namespace problem = EqualityConstrainedQP(xp) # x0 already satisfies the (linear) constraint, so the very first record # certifies θ = 0: feasibility evidence exists before any step. Every # line search fails (the QP would otherwise converge in one step). _fail_search_after(monkeypatch, 0) def bogus_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): # θ = 19, claims "infeasible" with a stationarity certificate return array(xp, [10.0, 10.0]), s, RestorationExit.STATIONARY monkeypatch.setattr(IPMDriver, "_restore", bogus_restore) > result = solve( problem, array(xp, [2.0, -1.0]), options=Options(hessian="exact", linsolve="dense", max_iter=60), ) tests/regression/test_false_infeasible_veto.py:63: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_failure_status_returns_best_iterate[array_api_strict] __________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76a2f90> def test_failure_status_returns_best_iterate(namespace, monkeypatch): # After a good start (3 accepted steps toward the optimum), restoration # "recovers" to a terrible (but interior, feasible-flagged) point and the # run stalls there. The result must carry the lowest-KKT accepted iterate # from the good phase, not the wreckage. from ipax.testing.problems import BoundConstrainedQP xp = namespace problem = BoundConstrainedQP(xp) _fail_search_after(monkeypatch, 3) def bogus_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): # bad interior jump, no claim return array(xp, [10.0, 0.5]), s, RestorationExit.FEASIBLE monkeypatch.setattr(IPMDriver, "_restore", bogus_restore) > result = solve( problem, array(xp, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense", max_iter=100), ) tests/regression/test_false_infeasible_veto.py:92: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_genuine_infeasibility_still_reported[array_api_strict] __________ namespace = def test_genuine_infeasibility_still_reported(namespace): from ipax.testing.problems import InfeasibleEqualities problem = InfeasibleEqualities(namespace) > result = solve( problem, array(namespace, [0.5]), options=Options(hessian="exact", linsolve="dense", max_iter=200), ) tests/regression/test_false_infeasible_veto.py:109: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_krylov_escapes_feasible_ascent_direction[array_api_strict] ________ namespace = def test_krylov_escapes_feasible_ascent_direction(namespace): # Pre-fix: CG's garbage direction on the indefinite Hessian is rejected # forever (max_iter at f = 1.135, e0 = 100 frozen); the dense route already # solved this via its Cholesky PD-probe + delta_w escalation. problem, x0 = _powell_badly_scaled(namespace) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="krylov", max_iter=300), ) tests/regression/test_feasible_ascent_stall.py:82: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_stall_detector_terminates_honestly[array_api_strict] ___________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76a1860> def test_stall_detector_terminates_honestly(namespace, monkeypatch): # Force every line search to fail: restoration at a feasible point is a # no-op, so without the detector the run burns the whole budget with # alpha = 0 and a frozen KKT error. def always_fail(self, **kwargs): return LineSearchResult(self._o.alpha_min_frac, False, False, True) monkeypatch.setattr(FilterLineSearch, "search", always_fail) > result = solve( BoundConstrainedQP(namespace), array(namespace, [0.25, 0.75]), options=Options( hessian="exact", linsolve="dense", max_iter=500, max_stall_iter=10 ), ) tests/regression/test_feasible_ascent_stall.py:102: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_stall_detector_disabled_runs_to_budget[array_api_strict] _________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7670360> def test_stall_detector_disabled_runs_to_budget(namespace, monkeypatch): def always_fail(self, **kwargs): return LineSearchResult(self._o.alpha_min_frac, False, False, True) monkeypatch.setattr(FilterLineSearch, "search", always_fail) > result = solve( BoundConstrainedQP(namespace), array(namespace, [0.25, 0.75]), options=Options( hessian="exact", linsolve="dense", max_iter=40, max_stall_iter=None ), ) tests/regression/test_feasible_ascent_stall.py:119: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_descent_enforcement_reuses_step_when_already_descent[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7671da0> def test_descent_enforcement_reuses_step_when_already_descent(namespace, monkeypatch): # The enforcement must be a no-op on a healthy solve: a PD problem's step # is descent, so no extra KKT solves happen (count them). problem = BoundConstrainedQP(namespace) calls = {"n": 0} original = IPMDriver._solve_step def counting(self, *args, **kwargs): calls["n"] += 1 return original(self, *args, **kwargs) monkeypatch.setattr(IPMDriver, "_solve_step", counting) > result = solve( problem, array(namespace, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense", mu_schedule="monotone"), ) tests/regression/test_feasible_ascent_stall.py:146: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_feasible_entry_recenters_instead_of_restoring[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7672200> def test_feasible_entry_recenters_instead_of_restoring(namespace, monkeypatch): # HS35 from a strictly feasible start: theta0 = 0, so a (forced) line-search # failure must NOT call restore() — the repair path re-centers the barrier # state at the same point and the solve still reaches the optimum. xp = namespace problem = HS35(xp) x0 = array(xp, [0.5, 0.5, 0.5]) # g = -1: strictly feasible interior _fail_first_search(monkeypatch) def forbidden_restore(self, *args, **kwargs): raise AssertionError("restore() must not run at a feasible point") monkeypatch.setattr(IPMDriver, "_restore", forbidden_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=100), ) tests/regression/test_feasible_point_restoration_recenter.py:54: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_infeasible_entry_still_restores[array_api_strict] ____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ec64a0> def test_infeasible_entry_still_restores(namespace, monkeypatch): # Gate boundary: from an infeasible point (theta0 >> tol) the classic # restoration phase must still run — the repair only replaces it where # restoration provably cannot move the point. xp = namespace problem = HS35(xp) x0 = array(xp, [2.0, 2.0, 2.0]) # g = +3: violated inequality _fail_first_search(monkeypatch) restore_calls = {"n": 0} original_restore = IPMDriver._restore def counting_restore(self, *args, **kwargs): restore_calls["n"] += 1 return original_restore(self, *args, **kwargs) monkeypatch.setattr(IPMDriver, "_restore", counting_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=100), ) tests/regression/test_feasible_point_restoration_recenter.py:83: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_recenter_breaks_a_poisoned_dual_deadlock[array_api_strict] ________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ec7cb0> def test_recenter_breaks_a_poisoned_dual_deadlock(namespace, monkeypatch): # The HS101 mechanism in miniature: start feasible with a wildly poisoned # warm-started multiplier (λ = 1e6 on a constraint that is active at the # optimum). Without the repair, a line-search failure at a feasible point # resumes with that multiplier untouched. With it, the solve must still # converge to the optimum. xp = namespace problem = HS35(xp) x0 = array(xp, [0.5, 0.5, 0.5]) _fail_first_search(monkeypatch) def forbidden_restore(self, *args, **kwargs): raise AssertionError("restore() must not run at a feasible point") monkeypatch.setattr(IPMDriver, "_restore", forbidden_restore) warm = WarmStart(y_ineq=array(xp, [1e6])) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=200), warm_start=warm, ) tests/regression/test_feasible_point_restoration_recenter.py:110: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_hs7_lbfgs_dense_does_not_diverge[array_api_strict] ____________ namespace = def test_hs7_lbfgs_dense_does_not_diverge(namespace): > result = solve( _HS7NoHessian(namespace), array(namespace, [2.0, 2.0]), options=Options(hessian="lbfgs", linsolve="dense"), ) tests/regression/test_hs7_lbfgs_no_false_infeasible.py:66: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_hs7_lbfgs_krylov_does_not_diverge[array_api_strict] ___________ namespace = def test_hs7_lbfgs_krylov_does_not_diverge(namespace): > result = solve( _HS7NoHessian(namespace), array(namespace, [2.0, 2.0]), options=Options(hessian="lbfgs", linsolve="krylov"), ) tests/regression/test_hs7_lbfgs_no_false_infeasible.py:75: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_hs9_exact_krylov_recovers_from_zero_hessian_start[array_api_strict] ___ namespace = def test_hs9_exact_krylov_recovers_from_zero_hessian_start(namespace): > result = solve( HS9(namespace), array(namespace, [0.0, 0.0]), options=Options(hessian="exact", linsolve="krylov"), ) tests/regression/test_hs9_krylov_zero_hessian.py:26: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([25.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_previous_hessian_is_released_before_the_next_assembly[array_api_strict-filter] _ namespace = globalization = 'filter' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) def test_previous_hessian_is_released_before_the_next_assembly( namespace, globalization ): problem = _TrackedHessianHS71(namespace) x0 = array(namespace, [1.0, 5.0, 5.0, 1.0]) options = Options(hessian="exact", linsolve="dense", globalization=globalization) > result = solve(problem, x0, options=options) tests/regression/test_iteration_operator_lifetime.py:68: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_previous_hessian_is_released_before_the_next_assembly[array_api_strict-breedveld] _ namespace = globalization = 'breedveld' @pytest.mark.parametrize("globalization", ["filter", "breedveld"]) def test_previous_hessian_is_released_before_the_next_assembly( namespace, globalization ): problem = _TrackedHessianHS71(namespace) x0 = array(namespace, [1.0, 5.0, 5.0, 1.0]) options = Options(hessian="exact", linsolve="dense", globalization=globalization) > result = solve(problem, x0, options=options) tests/regression/test_iteration_operator_lifetime.py:68: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_lbfgs_recovers_from_non_finite_gradient_overshoot[array_api_strict] ___ namespace = def test_lbfgs_recovers_from_non_finite_gradient_overshoot(namespace): > result = solve( _SteepOvershoot(namespace), array(namespace, [10.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=100), ) tests/regression/test_lbfgs_gradient_overshoot.py:50: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_affine_lbfgs_active_inequality_and_bound[array_api_strict-linear_ineq-dense] _ namespace = route = 'dense', representation = 'linear_ineq' @pytest.mark.parametrize("route", ["dense", "krylov", "sparse"]) @pytest.mark.parametrize("representation", ["linear_ineq", "coo_callback"]) def test_affine_lbfgs_active_inequality_and_bound(namespace, route, representation): xp = namespace if (route == "sparse" or representation == "coo_callback") and get_sparse_adapter( xp ) is None: pytest.skip("backend has no sparse adapter") A = array(xp, [[200.0, 200.0, 0.0]]) b = array(xp, [200.0]) target = array(xp, [2.0, 1.5, -1.0]) if representation == "linear_ineq": constraints = {"linear_ineq": (A, array(xp, [-float("inf")]), b)} else: op = COOOperator( xp.asarray([0, 0]), xp.asarray([0, 1]), array(xp, [200.0, 200.0]), (1, 3) ) constraints = { "ineq_constraints": lambda x: op.matvec(x) - b, "ineq_jacobian": lambda x: op, } problem = FunctionProblem( 3, lambda x: 0.5 * xp.sum((x - target) ** 2), gradient=lambda x: x - target, bounds=(xp.zeros((3,), dtype=A.dtype), xp.full((3,), 2.0, dtype=A.dtype)), **constraints, ) > result = solve( problem, array(xp, [0.2, 0.2, 0.2]), options=Options( linsolve=route, hessian="lbfgs", scaling="gradient-based", max_iter=100 ), ) tests/regression/test_linear_ineq_lbfgs.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([1., 1., 1.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_affine_lbfgs_active_inequality_and_bound[array_api_strict-linear_ineq-krylov] _ namespace = route = 'krylov', representation = 'linear_ineq' @pytest.mark.parametrize("route", ["dense", "krylov", "sparse"]) @pytest.mark.parametrize("representation", ["linear_ineq", "coo_callback"]) def test_affine_lbfgs_active_inequality_and_bound(namespace, route, representation): xp = namespace if (route == "sparse" or representation == "coo_callback") and get_sparse_adapter( xp ) is None: pytest.skip("backend has no sparse adapter") A = array(xp, [[200.0, 200.0, 0.0]]) b = array(xp, [200.0]) target = array(xp, [2.0, 1.5, -1.0]) if representation == "linear_ineq": constraints = {"linear_ineq": (A, array(xp, [-float("inf")]), b)} else: op = COOOperator( xp.asarray([0, 0]), xp.asarray([0, 1]), array(xp, [200.0, 200.0]), (1, 3) ) constraints = { "ineq_constraints": lambda x: op.matvec(x) - b, "ineq_jacobian": lambda x: op, } problem = FunctionProblem( 3, lambda x: 0.5 * xp.sum((x - target) ** 2), gradient=lambda x: x - target, bounds=(xp.zeros((3,), dtype=A.dtype), xp.full((3,), 2.0, dtype=A.dtype)), **constraints, ) > result = solve( problem, array(xp, [0.2, 0.2, 0.2]), options=Options( linsolve=route, hessian="lbfgs", scaling="gradient-based", max_iter=100 ), ) tests/regression/test_linear_ineq_lbfgs.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([1., 1., 1.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-probing-none] _ namespace = schedule = 'probing', corrections = 'none' @pytest.mark.parametrize( ("schedule", "corrections"), [ ("probing", "none"), ("probing", "gondzio"), ("adaptive", "gondzio"), ("breedveld", "mehrotra"), # The quality function may raise μ (σ > 1) by design, but it is # closed-loop — a large μ scores badly through its own predicted # complementarity — so it must not reproduce the open-loop Mehrotra # runaway either. ("quality", "none"), ("quality", "gondzio"), ], ) def test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls( namespace, schedule, corrections ): problem, x0 = _ls_problem(namespace) > result = solve( problem, x0, options=Options( hessian="lbfgs", linsolve="dense", mu_schedule=schedule, corrections=corrections, max_iter=200, ), ) tests/regression/test_mu_oracle_inflation.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-probing-gondzio] _ namespace = schedule = 'probing', corrections = 'gondzio' @pytest.mark.parametrize( ("schedule", "corrections"), [ ("probing", "none"), ("probing", "gondzio"), ("adaptive", "gondzio"), ("breedveld", "mehrotra"), # The quality function may raise μ (σ > 1) by design, but it is # closed-loop — a large μ scores badly through its own predicted # complementarity — so it must not reproduce the open-loop Mehrotra # runaway either. ("quality", "none"), ("quality", "gondzio"), ], ) def test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls( namespace, schedule, corrections ): problem, x0 = _ls_problem(namespace) > result = solve( problem, x0, options=Options( hessian="lbfgs", linsolve="dense", mu_schedule=schedule, corrections=corrections, max_iter=200, ), ) tests/regression/test_mu_oracle_inflation.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-adaptive-gondzio] _ namespace = schedule = 'adaptive', corrections = 'gondzio' @pytest.mark.parametrize( ("schedule", "corrections"), [ ("probing", "none"), ("probing", "gondzio"), ("adaptive", "gondzio"), ("breedveld", "mehrotra"), # The quality function may raise μ (σ > 1) by design, but it is # closed-loop — a large μ scores badly through its own predicted # complementarity — so it must not reproduce the open-loop Mehrotra # runaway either. ("quality", "none"), ("quality", "gondzio"), ], ) def test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls( namespace, schedule, corrections ): problem, x0 = _ls_problem(namespace) > result = solve( problem, x0, options=Options( hessian="lbfgs", linsolve="dense", mu_schedule=schedule, corrections=corrections, max_iter=200, ), ) tests/regression/test_mu_oracle_inflation.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-breedveld-mehrotra] _ namespace = schedule = 'breedveld', corrections = 'mehrotra' @pytest.mark.parametrize( ("schedule", "corrections"), [ ("probing", "none"), ("probing", "gondzio"), ("adaptive", "gondzio"), ("breedveld", "mehrotra"), # The quality function may raise μ (σ > 1) by design, but it is # closed-loop — a large μ scores badly through its own predicted # complementarity — so it must not reproduce the open-loop Mehrotra # runaway either. ("quality", "none"), ("quality", "gondzio"), ], ) def test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls( namespace, schedule, corrections ): problem, x0 = _ls_problem(namespace) > result = solve( problem, x0, options=Options( hessian="lbfgs", linsolve="dense", mu_schedule=schedule, corrections=corrections, max_iter=200, ), ) tests/regression/test_mu_oracle_inflation.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-quality-none] _ namespace = schedule = 'quality', corrections = 'none' @pytest.mark.parametrize( ("schedule", "corrections"), [ ("probing", "none"), ("probing", "gondzio"), ("adaptive", "gondzio"), ("breedveld", "mehrotra"), # The quality function may raise μ (σ > 1) by design, but it is # closed-loop — a large μ scores badly through its own predicted # complementarity — so it must not reproduce the open-loop Mehrotra # runaway either. ("quality", "none"), ("quality", "gondzio"), ], ) def test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls( namespace, schedule, corrections ): problem, x0 = _ls_problem(namespace) > result = solve( problem, x0, options=Options( hessian="lbfgs", linsolve="dense", mu_schedule=schedule, corrections=corrections, max_iter=200, ), ) tests/regression/test_mu_oracle_inflation.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-quality-gondzio] _ namespace = schedule = 'quality', corrections = 'gondzio' @pytest.mark.parametrize( ("schedule", "corrections"), [ ("probing", "none"), ("probing", "gondzio"), ("adaptive", "gondzio"), ("breedveld", "mehrotra"), # The quality function may raise μ (σ > 1) by design, but it is # closed-loop — a large μ scores badly through its own predicted # complementarity — so it must not reproduce the open-loop Mehrotra # runaway either. ("quality", "none"), ("quality", "gondzio"), ], ) def test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls( namespace, schedule, corrections ): problem, x0 = _ls_problem(namespace) > result = solve( problem, x0, options=Options( hessian="lbfgs", linsolve="dense", mu_schedule=schedule, corrections=corrections, max_iter=200, ), ) tests/regression/test_mu_oracle_inflation.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., ...0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_near_feasible_restoration_stall_is_not_infeasible[array_api_strict] ___ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7832190> def test_near_feasible_restoration_stall_is_not_infeasible(namespace, monkeypatch): # Restoration floors at a NEAR-feasible point: HS7 constraint # (1+x1²)² + x2² - 4 at [1, √(5e-5)] is exactly 5e-5 — below IPOPT's 1e-4 # feasibility band but above the old 1e-5 threshold. A stationarity # certificate there must NOT be read as local infeasibility (the objective # is far from optimal, so the run honestly stalls instead). xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) x_near = array(xp, [1.0, math.sqrt(5e-5)]) # theta_l1 = 5e-5 _fail_every_search(monkeypatch) def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): return x_near, s, RestorationExit.STATIONARY monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=80), ) tests/regression/test_near_feasible_not_infeasible.py:55: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_genuinely_infeasible_restoration_still_reports_infeasible[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a795c0> def test_genuinely_infeasible_restoration_still_reports_infeasible( namespace, monkeypatch ): # Control: restoration flooring at a violation bounded well away from zero # (theta = |26² + 25 - 4| = 697) is genuine local infeasibility and must # still be reported — the relaxed band only reprieves near-feasible points. xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) x_far = array(xp, [5.0, -5.0]) # theta_l1 = 697, far above 1e-4 _fail_every_search(monkeypatch) def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): return x_far, s, RestorationExit.STATIONARY monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=80), ) tests/regression/test_near_feasible_not_infeasible.py:81: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_at_most_two_jacobians_alive_during_a_solve[array_api_strict] _______ namespace = def test_at_most_two_jacobians_alive_during_a_solve(namespace): problem = _TrackedJacobians(namespace) x0 = array(namespace, [1.0, 5.0, 5.0, 1.0]) try: weakref.ref(problem.eq_jacobian(x0)) except TypeError: pytest.skip("backend arrays do not support weak references") problem.eq_refs.clear() peak = {"eq": 0, "ineq": 0} def callback(info: Any) -> bool: gc.collect() peak["eq"] = max(peak["eq"], sum(1 for r in problem.eq_refs if r() is not None)) peak["ineq"] = max( peak["ineq"], sum(1 for r in problem.ineq_refs if r() is not None) ) return False > result = solve(problem, x0, options=Options(), callback=callback) tests/regression/test_point_cache_lifetime.py:104: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_descent_retry_diagnostic_formats[array_api_strict] ____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76e0c20> caplog = <_pytest.logging.LogCaptureFixture object at 0x7fd9c6565790> def test_descent_retry_diagnostic_formats(namespace, monkeypatch, caplog): """Force the non-descent retry at a feasible iterate and check the debug record still formats (the probe value must survive until it is logged).""" from ipax.testing.problems import UnconstrainedQuadratic xp = namespace problem = UnconstrainedQuadratic( array(xp, [[2.0, 0.0], [0.0, 4.0]]), array(xp, [-1.0, 1.0]), xp ) original = IPMDriver._dphi state = {"calls": 0} def ascent_once(self: Any, *args: Any, **kwargs: Any) -> float: state["calls"] += 1 value = original(self, *args, **kwargs) return abs(value) + 1.0 if state["calls"] == 1 else value monkeypatch.setattr(IPMDriver, "_dphi", ascent_once) caplog.set_level(logging.DEBUG, logger="ipax") > result = solve(problem, array(xp, [3.0, -3.0]), options=Options()) tests/regression/test_point_cache_lifetime.py:133: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ----------------------------- Captured stderr call ----------------------------- ipax solving: 2 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = exact ------------------------------ Captured log call ------------------------------- RESULT ipax:solve.py:365 ipax solving: 2 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = exact PROBLEM ipax:solve.py:378 problem structure: variables = 2 inequalities = 0 equalities = 0 nonlinear + 0 linear bounded vars = 0 lower, 0 upper SOLVER ipax:solve.py:390 solver setup: hessian = auto linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg OPTIONS ipax:solve.py:392 options: optimality: f_tol = None f_rel_change_tol = None dual_inf_tol = 1e-08 constr_viol_tol = 1e-08 compl_inf_tol = 1e-08 acceptable: f_tol = None f_rel_change_tol = None dual_inf_tol = 1e-06 constr_viol_tol = 1e-06 compl_inf_tol = 1e-06 n_iter = 15 max_iter = 3000 max_stall_iter = 25 max_time = None diverging_iterates_tol = 1e+20 hessian = auto linsolve = auto globalization = filter mu_schedule = monotone barrier: mu_init = 0.1 mu_min = 1e-11 kappa_mu = 0.2 theta_mu = 1.5 tau_min = 0.99 fallback = kkt-error fallback_kappa = 0.9999 fallback_window = 5 fallback_mu_factor = 0.8 kappa_centrality = 0.01 slack_init_scale = 0.0 probing_sigma = nww line_search: max_soc = 4 backtrack_interpolation = False backtrack_shrink_min = 0.1 backtrack_shrink_max = 0.5 alpha_min_frac = 1e-08 gamma_alpha = None gamma_theta = 1e-05 gamma_phi = 1e-05 s_theta = 1.1 s_phi = 2.3 eta_phi = 0.0001 ftype_requires_theta_min = False feasible_kkt_progress = None free_mode_acceptance = rigorous free_filter_margin_fact = 1e-05 free_filter_max_margin = 1.0 regularization: delta_w_init = 1e-06 delta_w_max = 1e+40 delta_w_factor = 8.0 delta_c = 1e-08 delta_c_max = 0.1 delta_c_trigger = 10000000000.0 equality_dual_repair = None breedveld: tau = 0.995 backtrack = 0.9 max_backtrack = 20 armijo_c = 0.0001 ratio_limit = 20.0 common_step = False max_soc = 0 lbfgs: memory = 10 powell_damping = True initial_scaling = True damping_skip_ratio = None seed_formula = direct krylov: method = cg rtol = 1e-10 max_iter = None preconditioner = jacobi exact_lbfgs_inverse = True gmres_restart = 30 adaptive_tol = True adaptive_eta = 0.1 adaptive_rtol_max = 1e-08 auto_switch_ratio = 0.5 restoration: linear_solver = auto krylov = KrylovOptions(method='cg', rtol=1e-08, max_iter=200, preconditioner='jacobi', exact_lbfgs_inverse=True, gmres_restart=30, adaptive_tol=False, adaptive_eta=0.1, adaptive_rtol_max=1e-08, auto_switch_ratio=0.5) dense_materialize_max_elements = 10000000 dense_factorization = lu dense: kkt_route = condensed augmented_max_size = 20000 gram_dtype = auto refine_tol = 1e-10 refine_accept_tol = 1e-06 refine_max_iters = 15 refine_stall_ratio = 0.9 refine_failure_limit = 3 pd_hint_failure_limit = 3 sparse: kkt_route = auto perturbed_pivot_refinement_steps = 10 perturbed_pivot_max_residual = 0.01 deterministic = False scaling: method = gradient-based max_gradient = 100.0 corrections: method = none gondzio_max_corrections = 2 gondzio_gamma = 0.1 gondzio_variant = ipax enable_autodiff = True enable_finite_diff = True verbose = 0 _______ test_repeat_recenter_raise_sticks_in_the_loop[array_api_strict] ________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a797f0> def test_repeat_recenter_raise_sticks_in_the_loop(namespace, monkeypatch): # HS35 from a strictly feasible interior point: the (linear) inequality # keeps θ = 0 along the whole trajectory, so both forced failures hit the # feasible re-center path. Failures late enough that monotone μ has # dropped below mu_init, leaving headroom for the raise. problem = HS35(namespace) x0 = array(namespace, [0.5, 0.5, 0.5]) _fail_searches(monkeypatch, fail_calls={5, 6}) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=200), ) tests/regression/test_repeat_recenter_raises_mu.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_step_solve_failure_enters_restoration_not_numerical_error[array_api_strict-dense] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76e1b00> restoration = RestorationOptions(linear_solver='auto', krylov=KrylovOptions(method='cg', rtol=1e-08, max_iter=200, preconditioner='j....1, adaptive_rtol_max=1e-08, auto_switch_ratio=0.5), dense_materialize_max_elements=10000000, dense_factorization='lu') @pytest.mark.parametrize("restoration", _RESTORATION_ROUTES, ids=["dense", "krylov"]) def test_step_solve_failure_enters_restoration_not_numerical_error( namespace, monkeypatch, restoration ): xp = namespace problem = HS35(xp) x0 = array(xp, [2.0, 2.0, 2.0]) calls = _fail_step_solve_once(monkeypatch) krylov_solves = _count_krylov_solves(monkeypatch) > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=restoration ), ) tests/regression/test_restoration_on_step_failure.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_step_solve_failure_enters_restoration_not_numerical_error[array_api_strict-krylov] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a7b0e0> restoration = RestorationOptions(linear_solver='krylov', krylov=KrylovOptions(method='cg', rtol=1e-08, max_iter=200, preconditioner=....1, adaptive_rtol_max=1e-08, auto_switch_ratio=0.5), dense_materialize_max_elements=10000000, dense_factorization='lu') @pytest.mark.parametrize("restoration", _RESTORATION_ROUTES, ids=["dense", "krylov"]) def test_step_solve_failure_enters_restoration_not_numerical_error( namespace, monkeypatch, restoration ): xp = namespace problem = HS35(xp) x0 = array(xp, [2.0, 2.0, 2.0]) calls = _fail_step_solve_once(monkeypatch) krylov_solves = _count_krylov_solves(monkeypatch) > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=restoration ), ) tests/regression/test_restoration_on_step_failure.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_matrix_free_restoration_does_not_pin_its_operator_after_returning[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c764a820> def test_matrix_free_restoration_does_not_pin_its_operator_after_returning( namespace, monkeypatch ): """The restoration solver must not keep the last restoration point's Jacobians (an m×n operator at scale) alive for the rest of the run.""" xp = namespace problem = HS35(xp) x0 = array(xp, [2.0, 2.0, 2.0]) _fail_step_solve_once(monkeypatch) factored: list[weakref.ref] = [] original_factor = KrylovSolver.factor def recording_factor(self, operator): factored.append(weakref.ref(operator)) return original_factor(self, operator) monkeypatch.setattr(KrylovSolver, "factor", recording_factor) alive_after_restoration: list[int] = [] def callback(record): del record if factored: gc.collect() alive_after_restoration.append(sum(ref() is not None for ref in factored)) > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=RestorationOptions(linear_solver="krylov"), ), callback=callback, ) tests/regression/test_restoration_on_step_failure.py:117: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_step_solve_failure_on_infeasible_problem_reports_honestly[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9ca043cb0> def test_step_solve_failure_on_infeasible_problem_reports_honestly( namespace, monkeypatch ): # A genuinely infeasible problem (x = 0 and x = 1). A step-solve failure # must resolve to an honest infeasibility verdict rather than the crash-like # numerical_error — exactly the diagnostic upgrade the mining targeted. xp = namespace problem = InfeasibleEqualities(xp) x0 = array(xp, [0.4]) _fail_step_solve_once(monkeypatch) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=100), ) tests/regression/test_restoration_on_step_failure.py:145: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([100., 100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_step_failure_near_optimum_still_converges[array_api_strict] _______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a78750> def test_step_failure_near_optimum_still_converges(namespace, monkeypatch): # A step-solve failure late in a converging run must not derail it: the # ACCEPTABLE salvage or a re-centering resume still reaches the optimum # rather than reporting numerical_error. (The near-optimal ACCEPTABLE # classification itself is unit-tested in test_step_failure_salvage.py.) xp = namespace problem = HS35(xp) x0 = array(xp, [0.5, 0.5, 0.5]) # strictly feasible interior calls = {"n": 0} original = IPMDriver._solve_step def flaky(self, *args, **kwargs): calls["n"] += 1 dx, dy_eq, dw, ok = original(self, *args, **kwargs) if calls["n"] == 6: # a single failure once the run is well underway return dx, dy_eq, dw, False return dx, dy_eq, dw, ok monkeypatch.setattr(IPMDriver, "_solve_step", flaky) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=100), ) tests/regression/test_restoration_on_step_failure.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_tall_gram_block_through_restoration_is_not_densified[array_api_strict-operator] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a79da0> threshold = 1 @pytest.mark.parametrize("threshold", [1, 10_000_000], ids=["operator", "dense"]) def test_tall_gram_block_through_restoration_is_not_densified( namespace, monkeypatch, threshold ): xp = namespace _fail_step_solve_once(monkeypatch) log, inside, state = _restoration_log(monkeypatch) problem = _TallLinearIneq(xp, log) x0 = array(xp, [4.0, 4.0, 4.0]) # far outside A x ≤ b assert float(xp.max(problem.ineq_constraints(x0))) > 1.0 > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=RestorationOptions( linear_solver="dense", dense_materialize_max_elements=threshold ), ), ) tests/regression/test_restoration_tall_gram_block_not_densified.py:144: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_tall_gram_block_through_restoration_is_not_densified[array_api_strict-dense] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ebe0b0> threshold = 10000000 @pytest.mark.parametrize("threshold", [1, 10_000_000], ids=["operator", "dense"]) def test_tall_gram_block_through_restoration_is_not_densified( namespace, monkeypatch, threshold ): xp = namespace _fail_step_solve_once(monkeypatch) log, inside, state = _restoration_log(monkeypatch) problem = _TallLinearIneq(xp, log) x0 = array(xp, [4.0, 4.0, 4.0]) # far outside A x ≤ b assert float(xp.max(problem.ineq_constraints(x0))) > 1.0 > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=RestorationOptions( linear_solver="dense", dense_materialize_max_elements=threshold ), ), ) tests/regression/test_restoration_tall_gram_block_not_densified.py:144: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_operator_path_restoration_matches_the_densified_path[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ebdef0> def test_operator_path_restoration_matches_the_densified_path(namespace, monkeypatch): xp = namespace calls = _fail_step_solve_once(monkeypatch) results = [] for threshold in (1, 10_000_000): calls["n"] = 0 # re-arm the forced failure for each run problem = _TallLinearIneq(xp, []) results.append( > solve( problem, array(xp, [4.0, 4.0, 4.0]), options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=RestorationOptions( linear_solver="dense", dense_materialize_max_elements=threshold, ), ), ) ) tests/regression/test_restoration_tall_gram_block_not_densified.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_second_chance_restoration_rescues_a_bad_basin[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a79ef0> def test_second_chance_restoration_rescues_a_bad_basin(namespace, monkeypatch): # HS7 from an infeasible start: after one accepted step the line search is # forced to fail, and restoration from the *current* iterate claims local # infeasibility at a wildly violated point. Restoration from the original # x0 (which this stub recognizes by its argument) finds the feasible point # (0, sqrt(3)). The driver must use that second chance instead of reporting # INFEASIBLE on a feasible problem. xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) # theta0 = |(1+4)^2 + 4 - 4| = 25, infeasible _fail_search_after(monkeypatch, 1) restore_calls: list[float] = [] def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): dist_to_x0 = float(xp.max(xp.abs(x - x0))) restore_calls.append(dist_to_x0) if dist_to_x0 < 1e-9: # anchored at the starting point: feasibility is reachable feasible = array(xp, [0.0, 1.7320508075688772]) # sqrt(3) return feasible, s, RestorationExit.FEASIBLE # from the wandered-off iterate: a genuinely stuck local minimizer # (theta = |26^2 + 25 - 4| = 697, with a stationarity certificate) return array(xp, [5.0, -5.0]), s, RestorationExit.STATIONARY monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=40), ) tests/regression/test_second_chance_restoration.py:64: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_second_chance_fires_at_most_once[array_api_strict] ____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ebe7b0> def test_second_chance_fires_at_most_once(namespace, monkeypatch): # Every restoration claims infeasibility, including from x0: the x0-anchored # retry must run exactly once (no restart loop), and the final verdict stays # INFEASIBLE (the claim survived its probe). xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) _fail_search_after(monkeypatch, 1) restore_calls: list[float] = [] def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): restore_calls.append(float(xp.max(xp.abs(x - x0)))) return array(xp, [5.0, -5.0]), s, RestorationExit.STATIONARY monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=40), ) tests/regression/test_second_chance_restoration.py:94: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_soc_solves_reuse_the_step_factorization[array_api_strict-dense] _____ namespace = linsolve = 'dense' monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76e3d90> @pytest.mark.parametrize("linsolve", ["dense", "krylov"]) def test_soc_solves_reuse_the_step_factorization(namespace, linsolve, monkeypatch): in_search = {"active": False} soc_invoked = {"n": 0} reused = {"n": 0} orig_reuse = IPMDriver._resolve_reused_factorization def counting_reuse(self, *args, **kwargs): if in_search["active"]: reused["n"] += 1 return orig_reuse(self, *args, **kwargs) orig_search = FilterLineSearch.search def marked_search(self, *args, **kwargs): # Count SOC *invocations* (not acceptances): the guard below is # non-vacuous as long as the soc callback ran at all, even if a # future tuning change made its corrected points get rejected. inner_soc = kwargs.get("soc") if inner_soc is not None: def counting_soc(alpha, _inner=inner_soc): soc_invoked["n"] += 1 return _inner(alpha) kwargs["soc"] = counting_soc in_search["active"] = True try: return orig_search(self, *args, **kwargs) finally: in_search["active"] = False orig_step = IPMDriver._solve_step def guarded_step(self, *args, **kwargs): # HS71's SOC iterations are all unregularized (δ_w = 0), so every SOC # solve must be a re-solve on the retained factorization — never a # rebuild through the δ_w ladder. (On a problem with δ_w > 0 SOC # iterations the ladder is legitimate; see the module docstring.) assert not in_search["active"], ( "SOC re-entered _solve_step (fresh operator + δ_w ladder) at an " "unregularized step instead of reusing the step's factorization " "(W&B 2006 §2.4, eq. (26))" ) return orig_step(self, *args, **kwargs) monkeypatch.setattr(FilterLineSearch, "search", marked_search) monkeypatch.setattr(IPMDriver, "_solve_step", guarded_step) monkeypatch.setattr(IPMDriver, "_resolve_reused_factorization", counting_reuse) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(linsolve=linsolve), ) tests/regression/test_soc_factorization_reuse.py:102: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_soc_solves_reuse_the_step_factorization[array_api_strict-krylov] _____ namespace = linsolve = 'krylov' monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ebf700> @pytest.mark.parametrize("linsolve", ["dense", "krylov"]) def test_soc_solves_reuse_the_step_factorization(namespace, linsolve, monkeypatch): in_search = {"active": False} soc_invoked = {"n": 0} reused = {"n": 0} orig_reuse = IPMDriver._resolve_reused_factorization def counting_reuse(self, *args, **kwargs): if in_search["active"]: reused["n"] += 1 return orig_reuse(self, *args, **kwargs) orig_search = FilterLineSearch.search def marked_search(self, *args, **kwargs): # Count SOC *invocations* (not acceptances): the guard below is # non-vacuous as long as the soc callback ran at all, even if a # future tuning change made its corrected points get rejected. inner_soc = kwargs.get("soc") if inner_soc is not None: def counting_soc(alpha, _inner=inner_soc): soc_invoked["n"] += 1 return _inner(alpha) kwargs["soc"] = counting_soc in_search["active"] = True try: return orig_search(self, *args, **kwargs) finally: in_search["active"] = False orig_step = IPMDriver._solve_step def guarded_step(self, *args, **kwargs): # HS71's SOC iterations are all unregularized (δ_w = 0), so every SOC # solve must be a re-solve on the retained factorization — never a # rebuild through the δ_w ladder. (On a problem with δ_w > 0 SOC # iterations the ladder is legitimate; see the module docstring.) assert not in_search["active"], ( "SOC re-entered _solve_step (fresh operator + δ_w ladder) at an " "unregularized step instead of reusing the step's factorization " "(W&B 2006 §2.4, eq. (26))" ) return orig_step(self, *args, **kwargs) monkeypatch.setattr(FilterLineSearch, "search", marked_search) monkeypatch.setattr(IPMDriver, "_solve_step", guarded_step) monkeypatch.setattr(IPMDriver, "_resolve_reused_factorization", counting_reuse) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(linsolve=linsolve), ) tests/regression/test_soc_factorization_reuse.py:102: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_soc_gate_follows_a_regularized_fallback_inside_the_soc_loop[array_api_strict-dense] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771d470> linsolve = 'dense' @pytest.mark.parametrize("linsolve", ["dense", "krylov"]) def test_soc_gate_follows_a_regularized_fallback_inside_the_soc_loop( namespace, monkeypatch, linsolve ): """After round 1's re-solve fails and its fallback ladder ends at δ_w > 0, the later rounds reuse *that* factorization instead of re-climbing the ladder per round. The ladder established that δ_w = 0 does not solve this rhs family, so a fresh ladder per round only repeats the same rungs. The dense arm is the one that isolates this clause; on the iterative arm a failed re-solve must *skip* the correction — no ``_solve_step`` ladder inside SOC at all (v29 sweep: DRUGDIS's 233 in-SOC ladders cost 120 s). The step's own regularized matrix on a direct route is a different matter — ``test_direct_soc_never_reuses_the_steps_regularized_factorization``. """ state = {"in_search": False, "done": False, "force_floor": False} events: list[str] = [] # KKT-solve events inside the first SOC search orig_reuse = IPMDriver._resolve_reused_factorization def failing_first_reuse(self, *args, **kwargs): if state["in_search"] and not state["done"]: events.append("reuse") if len(events) == 1: state["force_floor"] = True return None # simulate a failed re-solve on the SOC rhs return orig_reuse(self, *args, **kwargs) orig_step = IPMDriver._solve_step def regularizing_step(self, *args, **kwargs): if state["force_floor"]: # The fallback ladder ends at δ_w = 1e-4: the retained factorization # is no longer the unregularized matrix. state["force_floor"] = False args = (*args[:9], 1e-4) out = orig_step(self, *args, **kwargs) if state["in_search"] and not state["done"]: events.append(f"step:{out[2]:g}") return out orig_search = FilterLineSearch.search def marked_search(self, *args, **kwargs): if state["done"]: return orig_search(self, *args, **kwargs) state["in_search"] = True try: return orig_search(self, *args, **kwargs) finally: state["in_search"] = False if events: state["done"] = True monkeypatch.setattr(IPMDriver, "_resolve_reused_factorization", failing_first_reuse) monkeypatch.setattr(IPMDriver, "_solve_step", regularizing_step) monkeypatch.setattr(FilterLineSearch, "search", marked_search) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(linsolve=linsolve), ) tests/regression/test_soc_factorization_reuse.py:173: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_soc_gate_follows_a_regularized_fallback_inside_the_soc_loop[array_api_strict-krylov] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76e3b60> linsolve = 'krylov' @pytest.mark.parametrize("linsolve", ["dense", "krylov"]) def test_soc_gate_follows_a_regularized_fallback_inside_the_soc_loop( namespace, monkeypatch, linsolve ): """After round 1's re-solve fails and its fallback ladder ends at δ_w > 0, the later rounds reuse *that* factorization instead of re-climbing the ladder per round. The ladder established that δ_w = 0 does not solve this rhs family, so a fresh ladder per round only repeats the same rungs. The dense arm is the one that isolates this clause; on the iterative arm a failed re-solve must *skip* the correction — no ``_solve_step`` ladder inside SOC at all (v29 sweep: DRUGDIS's 233 in-SOC ladders cost 120 s). The step's own regularized matrix on a direct route is a different matter — ``test_direct_soc_never_reuses_the_steps_regularized_factorization``. """ state = {"in_search": False, "done": False, "force_floor": False} events: list[str] = [] # KKT-solve events inside the first SOC search orig_reuse = IPMDriver._resolve_reused_factorization def failing_first_reuse(self, *args, **kwargs): if state["in_search"] and not state["done"]: events.append("reuse") if len(events) == 1: state["force_floor"] = True return None # simulate a failed re-solve on the SOC rhs return orig_reuse(self, *args, **kwargs) orig_step = IPMDriver._solve_step def regularizing_step(self, *args, **kwargs): if state["force_floor"]: # The fallback ladder ends at δ_w = 1e-4: the retained factorization # is no longer the unregularized matrix. state["force_floor"] = False args = (*args[:9], 1e-4) out = orig_step(self, *args, **kwargs) if state["in_search"] and not state["done"]: events.append(f"step:{out[2]:g}") return out orig_search = FilterLineSearch.search def marked_search(self, *args, **kwargs): if state["done"]: return orig_search(self, *args, **kwargs) state["in_search"] = True try: return orig_search(self, *args, **kwargs) finally: state["in_search"] = False if events: state["done"] = True monkeypatch.setattr(IPMDriver, "_resolve_reused_factorization", failing_first_reuse) monkeypatch.setattr(IPMDriver, "_solve_step", regularizing_step) monkeypatch.setattr(FilterLineSearch, "search", marked_search) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(linsolve=linsolve), ) tests/regression/test_soc_factorization_reuse.py:173: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_direct_soc_never_reuses_the_steps_regularized_factorization[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771dc50> def test_direct_soc_never_reuses_the_steps_regularized_factorization( namespace, monkeypatch ): """On a direct route a δ_w > 0 *step* factorization is not reused for the first correction (the measured ZAMB2/ACOPP30 reroute; a fresh factorization per rung is cheap); the fresh round-1 solve then leaves an unregularized factorization that the later rounds reuse.""" > events = _regularized_step_soc_events(namespace, monkeypatch, "dense") tests/regression/test_soc_factorization_reuse.py:390: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_soc_factorization_reuse.py:372: in _regularized_step_soc_events result = solve( ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_iterative_soc_reuses_the_steps_regularized_factorization[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771d9b0> def test_iterative_soc_reuses_the_steps_regularized_factorization( namespace, monkeypatch ): """On an iterative route every correction re-solves the step's retained system even at δ_w > 0 (Wächter & Biegler 2006 eq. (26) verbatim): a fresh δ_w = 0 solve there is a full Krylov ladder per SOC round — v29 sweep, DRUGDIS 21 s (reuse) vs `max_time` (fresh), DALLASS/NET1 alike.""" > events = _regularized_step_soc_events(namespace, monkeypatch, "krylov") tests/regression/test_soc_factorization_reuse.py:402: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_soc_factorization_reuse.py:372: in _regularized_step_soc_events result = solve( ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_direct_soc_skips_the_correction_when_its_fresh_solve_fails[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771ec80> def test_direct_soc_skips_the_correction_when_its_fresh_solve_fails( namespace, monkeypatch ): """Direct route, regularized step: SOC solves fresh at δ_w = 0, and when that fresh solve fails the correction is simply skipped (the search continues without one) rather than aborting the iteration.""" state = {"in_search": False, "done": False} events: list[str] = [] orig_step = IPMDriver._solve_step orig_search = FilterLineSearch.search def failing_fresh_soc_step(self, *args, **kwargs): if not state["in_search"]: args = (*args[:9], 1e-4) # every *step* solve ends regularized return orig_step(self, *args, **kwargs) out = orig_step(self, *args, **kwargs) if state["done"]: return out events.append("fresh-soc-failed") return (out[0], out[1], out[2], False) def marked_search(self, *args, **kwargs): if state["done"]: return orig_search(self, *args, **kwargs) state["in_search"] = True try: return orig_search(self, *args, **kwargs) finally: state["in_search"] = False if events: state["done"] = True monkeypatch.setattr(IPMDriver, "_solve_step", failing_fresh_soc_step) monkeypatch.setattr(FilterLineSearch, "search", marked_search) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options(linsolve="dense"), ) tests/regression/test_soc_factorization_reuse.py:528: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_linear_ineq_gram_type_error_propagates[array_api_strict-exact] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771ef90> hessian = 'exact' @pytest.mark.parametrize("hessian", _HESSIANS) def test_linear_ineq_gram_type_error_propagates(namespace, monkeypatch, hessian): xp = namespace operator = _BuggyGram(_jacobian(xp)) restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _LinearIneqQP(xp, operator), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian=hessian, linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:154: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:177: in solve resolved = lower_linear_inequalities(resolved, x0, xp) ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_linear_ineq_gram_type_error_propagates[array_api_strict-lbfgs] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5f0b380> hessian = 'lbfgs' @pytest.mark.parametrize("hessian", _HESSIANS) def test_linear_ineq_gram_type_error_propagates(namespace, monkeypatch, hessian): xp = namespace operator = _BuggyGram(_jacobian(xp)) restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _LinearIneqQP(xp, operator), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian=hessian, linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:154: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:177: in solve resolved = lower_linear_inequalities(resolved, x0, xp) ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_ineq_jacobian_gram_type_error_propagates[array_api_strict-exact] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5f0af90> hessian = 'exact' @pytest.mark.parametrize("hessian", _HESSIANS) def test_ineq_jacobian_gram_type_error_propagates(namespace, monkeypatch, hessian): xp = namespace operator = _BuggyGram(_jacobian(xp)) restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _OperatorJacobianHS35(xp, operator), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian=hessian, linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:172: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_ineq_jacobian_gram_type_error_propagates[array_api_strict-lbfgs] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e45e10> hessian = 'lbfgs' @pytest.mark.parametrize("hessian", _HESSIANS) def test_ineq_jacobian_gram_type_error_propagates(namespace, monkeypatch, hessian): xp = namespace operator = _BuggyGram(_jacobian(xp)) restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _OperatorJacobianHS35(xp, operator), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian=hessian, linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:172: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mixed_precision_gram_keyword_bug_is_not_retried_away[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e45c50> def test_mixed_precision_gram_keyword_bug_is_not_retried_away(namespace, monkeypatch): # The pre-0.10 compatibility retry (an operator whose ``gram`` predates the # ``accumulate_dtype``/``hinted_only`` keywords) must fire only for that # signature mismatch. A Gram that *accepts* the keywords and then crashes # is a bug: retrying without them silently degraded the solve to the exact # Gram and hid it. xp = namespace operator = _BuggyGram(_jacobian(xp), fail_on_keywords_only=True, hint="float32") restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _LinearIneqQP(xp, operator), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian="exact", linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:193: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:177: in solve resolved = lower_linear_inequalities(resolved, x0, xp) ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_hessian_operator_materialization_type_error_propagates[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e45630> def test_hessian_operator_materialization_type_error_propagates(namespace, monkeypatch): xp = namespace restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _BuggyHessianHS35(xp), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian="exact", linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:208: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_lagrangian_hessian_callback_type_error_propagates[array_api_strict] ___ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e46820> def test_lagrangian_hessian_callback_type_error_propagates(namespace, monkeypatch): xp = namespace restorations = _count_restorations(monkeypatch) with pytest.raises(TypeError, match="unexpected keyword argument 'device'"): > solve( _RaisingHessianHS35(xp), array(xp, [0.5, 0.5, 0.5]), options=Options(hessian="exact", linsolve="dense", max_iter=50), ) tests/regression/test_step_solve_callback_errors_propagate.py:222: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_numerical_failure_in_first_factorization_escalates_delta_w[array_api_strict-backend-linalg-error] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e444b0> kind = 'backend-linalg-error' @pytest.mark.parametrize("kind", sorted(_FAILURES)) def test_numerical_failure_in_first_factorization_escalates_delta_w( namespace, monkeypatch, kind ): xp = namespace baseline_escalations = _count(monkeypatch, driver_module, "escalate_delta_w") > baseline = _solve_hs35(xp) tests/regression/test_step_solve_numerical_failure_ladder.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_step_solve_numerical_failure_ladder.py:59: in _solve_hs35 return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_numerical_failure_in_first_factorization_escalates_delta_w[array_api_strict-floating-point-error] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e46f90> kind = 'floating-point-error' @pytest.mark.parametrize("kind", sorted(_FAILURES)) def test_numerical_failure_in_first_factorization_escalates_delta_w( namespace, monkeypatch, kind ): xp = namespace baseline_escalations = _count(monkeypatch, driver_module, "escalate_delta_w") > baseline = _solve_hs35(xp) tests/regression/test_step_solve_numerical_failure_ladder.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_step_solve_numerical_failure_ladder.py:59: in _solve_hs35 return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_numerical_failure_in_first_factorization_escalates_delta_w[array_api_strict-zero-division-error] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e47000> kind = 'zero-division-error' @pytest.mark.parametrize("kind", sorted(_FAILURES)) def test_numerical_failure_in_first_factorization_escalates_delta_w( namespace, monkeypatch, kind ): xp = namespace baseline_escalations = _count(monkeypatch, driver_module, "escalate_delta_w") > baseline = _solve_hs35(xp) tests/regression/test_step_solve_numerical_failure_ladder.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_step_solve_numerical_failure_ladder.py:59: in _solve_hs35 return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_exhausted_ladder_hands_the_step_to_restoration[array_api_strict-backend-linalg-error] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e47cb0> kind = 'backend-linalg-error' @pytest.mark.parametrize("kind", sorted(_FAILURES)) def test_exhausted_ladder_hands_the_step_to_restoration(namespace, monkeypatch, kind): xp = namespace failure = _FAILURES[kind](xp) _fail_materializations(monkeypatch, failure, count=_MAX_REG_ATTEMPTS) restorations = _count(monkeypatch, IPMDriver, "_handle_restoration") > result = _solve_hs35(xp) tests/regression/test_step_solve_numerical_failure_ladder.py:97: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_step_solve_numerical_failure_ladder.py:59: in _solve_hs35 return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_exhausted_ladder_hands_the_step_to_restoration[array_api_strict-floating-point-error] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e454e0> kind = 'floating-point-error' @pytest.mark.parametrize("kind", sorted(_FAILURES)) def test_exhausted_ladder_hands_the_step_to_restoration(namespace, monkeypatch, kind): xp = namespace failure = _FAILURES[kind](xp) _fail_materializations(monkeypatch, failure, count=_MAX_REG_ATTEMPTS) restorations = _count(monkeypatch, IPMDriver, "_handle_restoration") > result = _solve_hs35(xp) tests/regression/test_step_solve_numerical_failure_ladder.py:97: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_step_solve_numerical_failure_ladder.py:59: in _solve_hs35 return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_exhausted_ladder_hands_the_step_to_restoration[array_api_strict-zero-division-error] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76f11d0> kind = 'zero-division-error' @pytest.mark.parametrize("kind", sorted(_FAILURES)) def test_exhausted_ladder_hands_the_step_to_restoration(namespace, monkeypatch, kind): xp = namespace failure = _FAILURES[kind](xp) _fail_materializations(monkeypatch, failure, count=_MAX_REG_ATTEMPTS) restorations = _count(monkeypatch, IPMDriver, "_handle_restoration") > result = _solve_hs35(xp) tests/regression/test_step_solve_numerical_failure_ladder.py:97: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_step_solve_numerical_failure_ladder.py:59: in _solve_hs35 return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_budget_exit_with_repairable_duals_reports_acceptable[array_api_strict] __ namespace = def test_budget_exit_with_repairable_duals_reports_acceptable(namespace): # Feasible start (c(x0) = 0) carrying poisoned equality duals; the # one-iteration budget ends the run before any step could fix them. > result = solve( _rank_deficient_feasibility(namespace), array(namespace, [1.0, 1.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=1), warm_start=_poisoned(namespace), ) tests/regression/test_terminal_dual_certificate.py:110: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_certificate_declines_at_an_infeasible_point[array_api_strict] ______ namespace = def test_certificate_declines_at_an_infeasible_point(namespace): # Same poisoned duals, but c(x0) = 3: the certificate's feasibility # component fails, so the honest budget status must survive. > result = solve( _rank_deficient_feasibility(namespace), array(namespace, [2.0, 1.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=1), warm_start=_poisoned(namespace), ) tests/regression/test_terminal_dual_certificate.py:130: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([25., 25.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_stall_with_certifiable_gradient_reports_acceptable[array_api_strict] ___ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5f0ab30> def test_stall_with_certifiable_gradient_reports_acceptable(namespace, monkeypatch): # Frozen at gradient 5e-7 — inside acceptable (1e-6), outside optimal # (1e-8) — while the initialized bound duals keep the *recorded* dual # infeasibility at ~9e-2. Pre-fix this reported STALLED (the in-loop # relaxed-tolerance check sees only the recorded multipliers). _always_fail_line_search(monkeypatch) > result = solve( _asymmetric_box_problem(namespace), array(namespace, [5e-7, 5e-7]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10 ), ) tests/regression/test_terminal_dual_certificate.py:146: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([4.5, 4.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_stall_at_a_non_stationary_point_stays_stalled[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5f09ef0> def test_stall_at_a_non_stationary_point_stays_stalled(namespace, monkeypatch): # Gradient 0.5 at the frozen point: no multiplier choice can certify it. _always_fail_line_search(monkeypatch) > result = solve( _asymmetric_box_problem(namespace), array(namespace, [0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10 ), ) tests/regression/test_terminal_dual_certificate.py:162: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([4.5, 4.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_stall_at_an_active_bound_stays_stalled[array_api_strict] _________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771f000> def test_stall_at_an_active_bound_stays_stalled(namespace, monkeypatch): # min Σ(x−2)² on [-1, 1]²: the optimum sits ON the bound with a genuine # z_U = 2. Dropping the bound duals to zero leaves the raw gradient ~2 in # the residual, so the certificate must decline — the zero-dual candidate # under-certifies rather than inventing a multiplier it cannot justify. xp = namespace problem = FunctionProblem( 2, lambda x: xp.sum((x - 2.0) * (x - 2.0)), gradient=lambda x: 2.0 * (x - 2.0), bounds=(array(xp, [-1.0, -1.0]), array(xp, [1.0, 1.0])), lagrangian_hessian=lambda x, y_eq, y_ineq, sigma=1.0: ( 2.0 * sigma * xp.eye(2, dtype=x.dtype) ), ) _always_fail_line_search(monkeypatch) > result = solve( problem, array(namespace, [0.999, 0.999]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10 ), ) tests/regression/test_terminal_dual_certificate.py:189: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_disabled_acceptable_stopping_disables_the_certificate[array_api_strict] _ namespace = def test_disabled_acceptable_stopping_disables_the_certificate(namespace): # "Acceptable" is what the caller is willing to accept; all-None means # they accept nothing short of optimal, and the certificate must respect # that instead of introducing a tolerance of its own. > result = solve( _rank_deficient_feasibility(namespace), array(namespace, [1.0, 1.0]), options=Options( hessian="lbfgs", linsolve="dense", max_iter=1, acceptable=AcceptableStoppingOptions( dual_inf_tol=None, constr_viol_tol=None, compl_inf_tol=None ), ), warm_start=_poisoned(namespace), ) tests/regression/test_terminal_dual_certificate.py:204: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_certificate_requires_the_dual_tolerance_enabled[array_api_strict-acceptable0] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76f1400> acceptable = AcceptableStoppingOptions(f_tol=None, f_rel_change_tol=None, dual_inf_tol=None, constr_viol_tol=None, compl_inf_tol=1e-06, n_iter=15) @pytest.mark.parametrize( "acceptable", [ # With the candidate multipliers the complementarity residual is zero # BY CONSTRUCTION, and on a bound-only problem so is the primal one — # neither carries any information about stationarity. A legal # partial-None configuration enabling only an uninformative component # must therefore never certify (invariant-audit blocker: pre-fix, # both of these upgraded a point with raw gradient 5e-1 to # ACCEPTABLE/success). AcceptableStoppingOptions( dual_inf_tol=None, constr_viol_tol=None, compl_inf_tol=1e-6 ), AcceptableStoppingOptions( dual_inf_tol=None, constr_viol_tol=1e-6, compl_inf_tol=None ), ], ) def test_certificate_requires_the_dual_tolerance_enabled( namespace, monkeypatch, acceptable ): _always_fail_line_search(monkeypatch) > result = solve( _asymmetric_box_problem(namespace), array(namespace, [0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10, acceptable=acceptable, ), ) tests/regression/test_terminal_dual_certificate.py:243: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([4.5, 4.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_certificate_requires_the_dual_tolerance_enabled[array_api_strict-acceptable1] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c60017f0> acceptable = AcceptableStoppingOptions(f_tol=None, f_rel_change_tol=None, dual_inf_tol=None, constr_viol_tol=1e-06, compl_inf_tol=None, n_iter=15) @pytest.mark.parametrize( "acceptable", [ # With the candidate multipliers the complementarity residual is zero # BY CONSTRUCTION, and on a bound-only problem so is the primal one — # neither carries any information about stationarity. A legal # partial-None configuration enabling only an uninformative component # must therefore never certify (invariant-audit blocker: pre-fix, # both of these upgraded a point with raw gradient 5e-1 to # ACCEPTABLE/success). AcceptableStoppingOptions( dual_inf_tol=None, constr_viol_tol=None, compl_inf_tol=1e-6 ), AcceptableStoppingOptions( dual_inf_tol=None, constr_viol_tol=1e-6, compl_inf_tol=None ), ], ) def test_certificate_requires_the_dual_tolerance_enabled( namespace, monkeypatch, acceptable ): _always_fail_line_search(monkeypatch) > result = solve( _asymmetric_box_problem(namespace), array(namespace, [0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10, acceptable=acceptable, ), ) tests/regression/test_terminal_dual_certificate.py:243: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([4.5, 4.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_an_enabled_f_tol_is_honored_terminally[array_api_strict] _________ namespace = def test_an_enabled_f_tol_is_honored_terminally(namespace): # The in-loop acceptable checker requires |f| <= f_tol when enabled; the # certificate must apply the same test instead of silently dropping it. # Here every residual passes (grad = 0 at a feasible point) but |f| = 1. def _solve(f_tol): return solve( _constant_objective_feasibility(namespace), array(namespace, [1.0, 1.0]), options=Options( hessian="lbfgs", linsolve="dense", max_iter=1, acceptable=AcceptableStoppingOptions(f_tol=f_tol), ), warm_start=_poisoned(namespace), ) > assert _solve(1e-30).status is Status.MAX_ITER tests/regression/test_terminal_dual_certificate.py:295: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/regression/test_terminal_dual_certificate.py:283: in _solve return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_max_time_exit_is_certified_too[array_api_strict] _____________ namespace = def test_max_time_exit_is_certified_too(namespace): # The docstring claims all three failure exits; MAX_TIME is the one the # other tests never produce. > result = solve( _rank_deficient_feasibility(namespace), array(namespace, [1.0, 1.0]), options=Options(hessian="lbfgs", linsolve="dense", max_time=1e-9), warm_start=_poisoned(namespace), ) tests/regression/test_terminal_dual_certificate.py:302: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_certificate_survives_a_raising_dual_estimator[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c771ec10> def test_certificate_survives_a_raising_dual_estimator(namespace, monkeypatch): # A certificate must never be the thing that fails: an estimator error # declines it and the honest failure status survives. def raising(eq_jac, grad, *, xp, m_eq=None): raise RuntimeError("synthetic estimator failure") monkeypatch.setattr("ipax.ipm.driver.least_squares_duals", raising) > result = solve( _rank_deficient_feasibility(namespace), array(namespace, [1.0, 1.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=1), warm_start=_poisoned(namespace), ) tests/regression/test_terminal_dual_certificate.py:320: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_certificate_declines_a_non_finite_dual_estimate[array_api_strict] ____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6002120> def test_certificate_declines_a_non_finite_dual_estimate(namespace, monkeypatch): def non_finite(eq_jac, grad, *, xp, m_eq=None): return xp.full((2,), float("nan"), dtype=grad.dtype) monkeypatch.setattr("ipax.ipm.driver.least_squares_duals", non_finite) > result = solve( _rank_deficient_feasibility(namespace), array(namespace, [1.0, 1.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=1), warm_start=_poisoned(namespace), ) tests/regression/test_terminal_dual_certificate.py:335: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_stall_returning_a_best_iterate_within_relaxed_tol[array_api_strict] ___ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76f3700> def test_stall_returning_a_best_iterate_within_relaxed_tol(namespace, monkeypatch): # The WEEDS shape with honest multipliers: one accepted step moves the # iterate from gradient 5e-7 (inside the relaxed band) to ~1e-5 (outside), # then the line search freezes. The in-loop stall check sees only the # frozen tail; the salvage swaps the best iterate back in, and the # relaxed-tolerance re-judge — not the certificate — must certify it. xp = namespace problem = FunctionProblem( 1, lambda x: 5e-7 * x[0] + (3.8e7 / 3.0) * x[0] ** 3, gradient=lambda x: 5e-7 + 3.8e7 * x * x, lagrangian_hessian=lambda x, y_eq, y_ineq, sigma=1.0: ( sigma * xp.eye(1, dtype=x.dtype) ), ) calls = {"n": 0} def scripted(self, **kwargs): calls["n"] += 1 if calls["n"] == 1: return LineSearchResult( alpha=1.0, accepted=True, augment=False, restoration=False ) return LineSearchResult( alpha=self._o.alpha_min_frac, accepted=False, augment=False, restoration=True, ) monkeypatch.setattr(FilterLineSearch, "search", scripted) > result = solve( problem, array(namespace, [0.0]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10 ), ) tests/regression/test_terminal_dual_certificate.py:376: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_enabled_relative_change_tolerance_declines_the_certificate[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6000590> def test_enabled_relative_change_tolerance_declines_the_certificate( namespace, monkeypatch ): # ``f_rel_change_tol`` compares CONSECUTIVE iterates; it has no one-shot # terminal analogue, so a caller who enabled it has asked for a test the # certificate cannot evaluate. Declining is the honest answer — quietly # dropping the component would certify against a weaker acceptance rule # than the one the caller configured. _always_fail_line_search(monkeypatch) > result = solve( _asymmetric_box_problem(namespace), array(namespace, [0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10, acceptable=AcceptableStoppingOptions( dual_inf_tol=1e6, # loose enough that the point WOULD certify constr_viol_tol=None, compl_inf_tol=None, f_rel_change_tol=1e-8, ), ), ) tests/regression/test_terminal_dual_certificate.py:400: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([4.5, 4.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_a_failing_residual_declines_the_certificate_instead_of_raising[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6002eb0> def test_a_failing_residual_declines_the_certificate_instead_of_raising( namespace, monkeypatch ): # The certificate's contract is that it can only ever *decline* — never # make a run worse. kkt_error() applies the Jacobians (rmatvec on a # possibly lazy or user-supplied operator), so it can fail for the same # reasons the gradient/Jacobian evaluation can. Outside a guard that would # turn an ordinary stall into an exception. import inspect from ipax.ipm.driver import IPMDriver _always_fail_line_search(monkeypatch) original = IPMDriver.kkt_error state = {"terminal": False} def failing(self, **kwargs): # Fail *only* the certificate's own residual. Several call sites pass # mu=0.0 (the in-loop convergence check among them), and those must # keep working or nothing would converge — so discriminate on the # caller, not the arguments. if any(f.function == "_terminal_certificate" for f in inspect.stack()[:4]): state["terminal"] = True raise RuntimeError("operator apply failed") return original(self, **kwargs) monkeypatch.setattr(IPMDriver, "kkt_error", failing) > result = solve( _asymmetric_box_problem(namespace), array(namespace, [5e-7, 5e-7]), options=Options( hessian="exact", linsolve="dense", max_iter=100, max_stall_iter=10 ), ) tests/regression/test_terminal_dual_certificate.py:448: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([4.5, 4.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_ftype_branch_is_gated_by_the_driver_supplied_theta_min[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5e44280> def test_ftype_branch_is_gated_by_the_driver_supplied_theta_min(namespace, monkeypatch): # The gate is only real if the driver's θ_min actually reaches it. Recording # the trials where the θ_min conjunct *flips* the verdict away from the old # switching-only answer is what makes this non-vacuous: an unwired θ_min # (or one left at +inf) would never flip anything and ``seen`` would be empty. seen: list[tuple[float, float]] = [] original = FilterLineSearch._is_ftype def spy(self, dphi, alpha, theta0, theta_min): verdict = original(self, dphi, alpha, theta0, theta_min) if verdict != self._switching(dphi, alpha, theta0): seen.append((theta0, theta_min)) return verdict monkeypatch.setattr(FilterLineSearch, "_is_ftype", spy) > result = solve( HS71(namespace), array(namespace, [1.0, 5.0, 5.0, 1.0]), options=Options( hessian="exact", linsolve="dense", line_search=LineSearchOptions(ftype_requires_theta_min=True), ), ) tests/regression/test_theta_min_ftype_gate.py:54: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_unbounded_problem_reports_unbounded[array_api_strict] __________ namespace = def test_unbounded_problem_reports_unbounded(namespace): > result = solve( _ConcaveUnbounded(namespace), array(namespace, [1.0, -1.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=2000), ) tests/regression/test_unbounded_detection.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_well_posed_problem_is_not_flagged_unbounded[array_api_strict] ______ namespace = def test_well_posed_problem_is_not_flagged_unbounded(namespace): > result = solve( _BoundedQuadratic(namespace), array(namespace, [5.0, -3.0]), options=Options(hessian="lbfgs", linsolve="dense"), ) tests/regression/test_unbounded_detection.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_far_optimum_is_not_misreported_unbounded[array_api_strict] ________ namespace = def test_far_optimum_is_not_misreported_unbounded(namespace): # Bounded-below objective, iterates past the ‖x‖ threshold: the two-signal # test (norm AND diverged objective) must keep solving instead of claiming # UNBOUNDED from a bounded problem. > result = solve( _FarOptimum(namespace), array(namespace, [0.0]), options=Options(hessian="lbfgs", linsolve="dense", max_iter=500), ) tests/regression/test_unbounded_detection.py:107: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_diverging_iterates_tol_none_disables_detection[array_api_strict] _____ namespace = def test_diverging_iterates_tol_none_disables_detection(namespace): # With detection off, the unbounded solve runs out its iteration budget # (or fails numerically) instead of reporting UNBOUNDED. > result = solve( _ConcaveUnbounded(namespace), array(namespace, [1.0, -1.0]), options=Options( hessian="lbfgs", linsolve="dense", max_iter=200, diverging_iterates_tol=None, ), ) tests/regression/test_unbounded_detection.py:122: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_non_progressing_uncertified_stall_is_restoration_failed[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c758b230> def test_non_progressing_uncertified_stall_is_restoration_failed( namespace, monkeypatch ): # Every restoration returns the same wildly violated point via the stall # window (no certificate). The driver may resume once on the first stall, # but a repeat with zero θ progress must end the run as RESTORATION_FAILED, # not as INFEASIBLE (no stationarity certificate was ever produced). xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) _fail_search_after(monkeypatch, 1) restore_calls = {"n": 0} def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): restore_calls["n"] += 1 return _hs7_point_with_violation(xp, 8.0), s, RestorationExit.STALL_WINDOW monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=40), ) tests/regression/test_uncertified_restoration_stall.py:71: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_progressing_uncertified_stalls_resume_the_main_loop[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6076f20> def test_progressing_uncertified_stalls_resume_the_main_loop(namespace, monkeypatch): # Restoration keeps stalling without a certificate but reduces θ each time # (8 -> 4 -> 2 -> 1); the driver must resume through the whole progressing # streak and only fail on the first non-progressing repeat. xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) _fail_search_after(monkeypatch, 1) thetas = [8.0, 4.0, 2.0, 1.0, 1.0] restore_calls = {"n": 0} def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): theta = thetas[min(restore_calls["n"], len(thetas) - 1)] restore_calls["n"] += 1 return _hs7_point_with_violation(xp, theta), s, RestorationExit.BUDGET monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=40), ) tests/regression/test_uncertified_restoration_stall.py:104: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_uncertified_stall_still_gets_the_x0_anchored_rescue[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c60778c0> def test_uncertified_stall_still_gets_the_x0_anchored_rescue(namespace, monkeypatch): # The first restexit A/B (2026-07-08) regression: HS90/HS91/SNAKE/BT9/HS39 # were second-chance rescues (feasibility IS reachable from x0), but the # uncertified-stall path terminated as RESTORATION_FAILED without ever # probing from x0. A non-progressing uncertified stall must spend the same # one-shot probe before giving up. xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) # Searches 2 and 3 fail (driving the two uncertified stalls that spend the # probe); after the rescue jumps to the feasible point the search works # again — the real HS90/SNAKE anatomy, where the solve converges from the # rescued basin. calls = {"n": 0} original = FilterLineSearch.search def flaky(self, **kwargs): calls["n"] += 1 if calls["n"] in (2, 3): return LineSearchResult(self._o.alpha_min_frac, False, False, True) return original(self, **kwargs) monkeypatch.setattr(FilterLineSearch, "search", flaky) probe_seen = {"n": 0} def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): if float(xp.max(xp.abs(x - x0))) < 1e-9: probe_seen["n"] += 1 feasible = array(xp, [0.0, 1.7320508075688772]) # sqrt(3) return feasible, s, RestorationExit.FEASIBLE return _hs7_point_with_violation(xp, 8.0), s, RestorationExit.STALL_WINDOW monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=40), ) tests/regression/test_uncertified_restoration_stall.py:151: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_certified_stationary_claim_still_reports_infeasible[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a1a660> def test_certified_stationary_claim_still_reports_infeasible(namespace, monkeypatch): # Control: a stationarity-certified claim (surviving its x0-anchored second # chance) must keep reporting INFEASIBLE exactly as before. xp = namespace problem = HS7(xp) x0 = array(xp, [2.0, 2.0]) _fail_search_after(monkeypatch, 1) def stub_restore(self, x, s, m, m_eq, mask_l, mask_u, lower_safe, upper_safe): return array(xp, [5.0, -5.0]), s, RestorationExit.STATIONARY monkeypatch.setattr(IPMDriver, "_restore", stub_restore) > result = solve( problem, x0, options=Options(hessian="exact", linsolve="dense", max_iter=40), ) tests/regression/test_uncertified_restoration_stall.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________________________ test_no_banned_imports_in_core ________________________ def test_no_banned_imports_in_core(): result = subprocess.run( [sys.executable, str(REPO_ROOT / "scripts" / "check_purity.py")], capture_output=True, text=True, ) > assert result.returncode == 0, result.stdout + result.stderr E AssertionError: /usr/bin/python3: can't open file '/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_purity.py': [Errno 2] No such file or directory E E assert 2 == 0 E + where 2 = CompletedProcess(args=['/usr/bin/python3', '/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_p...ddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_purity.py': [Errno 2] No such file or directory\n").returncode tests/test_purity_gate.py:25: AssertionError ______________ test_core_may_not_import_the_interfaces_front_ends ______________ def test_core_may_not_import_the_interfaces_front_ends(): # ipax/interfaces/ may import SciPy because nothing in the core imports it; # a core import of ipax.interfaces would pull SciPy into `import ipax`. import ast > purity = _load_purity_script() tests/test_purity_gate.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_purity_gate.py:35: in _load_purity_script spec.loader.exec_module(module) :759: in exec_module ??? :896: in get_code ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_frozen_importlib_external.SourceFileLoader object at 0x7fd9c60a2510> path = '/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_purity.py' > ??? E FileNotFoundError: [Errno 2] No such file or directory: '/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_purity.py' :954: FileNotFoundError ____________ test_relative_imports_of_the_interfaces_are_caught_too ____________ def test_relative_imports_of_the_interfaces_are_caught_too(): import ast > purity = _load_purity_script() tests/test_purity_gate.py:74: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/test_purity_gate.py:35: in _load_purity_script spec.loader.exec_module(module) :759: in exec_module ??? :896: in get_code ??? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <_frozen_importlib_external.SourceFileLoader object at 0x7fd9c60a24b0> path = '/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_purity.py' > ??? E FileNotFoundError: [Errno 2] No such file or directory: '/builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/scripts/check_purity.py' :954: FileNotFoundError ___________ test_capabilities_reports_real_devices[array_api_strict] ___________ namespace = def test_capabilities_reports_real_devices(namespace): """Devices come from the Array-API info namespace, not a hardcoded ``cpu``.""" with implemented("device probe"): caps = capabilities(namespace) assert isinstance(caps.devices, tuple) assert len(caps.devices) >= 1 assert all(isinstance(d, str) for d in caps.devices) # Exactly what the namespace's own inspection API reports — a CPU for # numpy/torch/array_api_strict, only CUDA devices for CuPy (which has no # CPU device) — never a hard-coded "cpu". > info = namespace.__array_namespace_info__() tests/unit/test_backend_namespace.py:89: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function __array_namespace_info__ requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_breedveld_globalization_solves_bound_qp[array_api_strict] ________ namespace = def test_breedveld_globalization_solves_bound_qp(namespace): problem = BoundConstrainedQP(namespace) > result = solve( problem, array(namespace, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense", globalization="breedveld"), ) tests/unit/test_breedveld.py:84: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_breedveld_globalization_uses_breedveld_tau[array_api_strict] _______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5f0bbd0> def test_breedveld_globalization_uses_breedveld_tau(namespace, monkeypatch): captured: list[float] = [] original = IPMDriver._alpha_primal def capture_tau(self, step, s, m, x_minus_l, u_minus_x, mask_l, mask_u, tau): captured.append(tau) return original(self, step, s, m, x_minus_l, u_minus_x, mask_l, mask_u, tau) monkeypatch.setattr(IPMDriver, "_alpha_primal", capture_tau) > result = solve( BoundConstrainedQP(namespace), array(namespace, [0.25, 0.75]), options=Options( hessian="exact", linsolve="dense", globalization="breedveld", # The probing default's affine probe legitimately measures the # maximal steplength at τ = 1, which would contaminate the captured # values; monotone keeps every _alpha_primal call a line-search one. mu_schedule="monotone", barrier=BarrierOptions(tau_min=0.99), breedveld=BreedveldOptions(tau=0.5), ), ) tests/unit/test_breedveld.py:102: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_common_step_couples_the_primal_and_dual_step_lengths[array_api_strict] __ namespace = def test_common_step_couples_the_primal_and_dual_step_lengths(namespace): # HS71 under the runner's Breedveld setup takes different primal and dual # fraction-to-boundary lengths by default; with ``common_step`` every # accepted step moves both by the same α. problem, x0 = _hs71(namespace) > separate = solve(problem, x0, options=_runner_like()) tests/unit/test_breedveld.py:165: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_common_step_hands_the_controller_the_smaller_length[array_api_strict] __ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76f37e0> namespace = def test_common_step_hands_the_controller_the_smaller_length(monkeypatch, namespace): # α_max of the ratio control / Markov backtracking is min(α_p, α_d) of the # fraction-to-boundary rule (Breedveld 2017 §2.1). Monotone μ without a # corrector keeps every _alpha_primal/_alpha_dual call a line-search one. lengths: list[tuple[str, float]] = [] maxima: list[float] = [] orig_p, orig_d = IPMDriver._alpha_primal, IPMDriver._alpha_dual orig_search = BreedveldController.search def spy_p(self, *args, **kwargs): value = orig_p(self, *args, **kwargs) lengths.append(("p", value)) return value def spy_d(self, *args, **kwargs): value = orig_d(self, *args, **kwargs) lengths.append(("d", value)) return value def spy_search(self, **kwargs): maxima.append(kwargs["alpha_max"]) return orig_search(self, **kwargs) monkeypatch.setattr(IPMDriver, "_alpha_primal", spy_p) monkeypatch.setattr(IPMDriver, "_alpha_dual", spy_d) monkeypatch.setattr(BreedveldController, "search", spy_search) problem, x0 = _hs71(namespace) options = dataclasses.replace( _runner_like(common_step=True), corrections="none", mu_schedule="monotone" ) > result = solve(problem, x0, options=options) tests/unit/test_breedveld.py:204: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_common_step_backtracking_shrinks_both_updates[array_api_strict] _____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6f36820> namespace = def test_common_step_backtracking_shrinks_both_updates(monkeypatch, namespace): # A backtracked α (ratio control / Markov filter) moves the duals by the # same shrunken length as the primal step, not by the dual boundary length. orig_search = BreedveldController.search returned: list[float] = [] def half_step(self, **kwargs): result = orig_search(self, **kwargs) returned.append(0.5 * result.alpha) return dataclasses.replace(result, alpha=0.5 * result.alpha) monkeypatch.setattr(BreedveldController, "search", half_step) problem, x0 = _hs71(namespace) options = dataclasses.replace(_runner_like(common_step=True), max_iter=8) > result = solve(problem, x0, options=options) tests/unit/test_breedveld.py:230: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_common_step_leaves_the_corrector_probes_separate[array_api_strict] ____ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c76f2dd0> namespace = def test_common_step_leaves_the_corrector_probes_separate(monkeypatch, namespace): # ``common_step`` couples the step the driver takes, not the predictor- # corrector's step-length probes (the Head-and-Neck_01 diagnosis' lever; # coupling the probes too re-targets μ and was measured worse there). At # the shared start the corrector sees exactly the default's probe lengths. seen: dict[bool, list[tuple[float, float]]] = {False: [], True: []} orig = MehrotraCorrector.correct arm = {"common": False} def spy(self, context, mu_target): seen[arm["common"]].append( ( context.alpha_primal(context.affine, tau=1.0), context.alpha_dual(context.affine, tau=1.0), ) ) return orig(self, context, mu_target) monkeypatch.setattr(MehrotraCorrector, "correct", spy) problem, x0 = _hs71(namespace) > solve(problem, x0, options=_runner_like()) tests/unit/test_breedveld.py:258: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_common_step_is_inert_under_the_filter_line_search[array_api_strict] ___ namespace = def test_common_step_is_inert_under_the_filter_line_search(namespace): # The option belongs to the Breedveld controller: the IPOPT filter line # search keeps its separate primal and dual lengths (W&B 2006, eq. (15)). problem, x0 = _hs71(namespace) > base = solve(problem, x0, options=Options()) tests/unit/test_breedveld.py:270: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_common_step_default_is_bit_identical[array_api_strict-HS21-breedveld] __ namespace = name = 'HS21', mode = 'breedveld' @pytest.mark.parametrize(("name", "mode"), sorted(_FINGERPRINTS)) def test_common_step_default_is_bit_identical(namespace, name, mode): cls, start = _STARTS[name] problem, x0 = cls(namespace), array(namespace, start) base = _runner_like() if mode == "breedveld" else Options() explicit = dataclasses.replace(base, breedveld=BreedveldOptions(common_step=False)) > implicit_result = solve(problem, x0, options=base) tests/unit/test_breedveld.py:311: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([26., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_common_step_default_is_bit_identical[array_api_strict-HS35-breedveld] __ namespace = name = 'HS35', mode = 'breedveld' @pytest.mark.parametrize(("name", "mode"), sorted(_FINGERPRINTS)) def test_common_step_default_is_bit_identical(namespace, name, mode): cls, start = _STARTS[name] problem, x0 = cls(namespace), array(namespace, start) base = _runner_like() if mode == "breedveld" else Options() explicit = dataclasses.replace(base, breedveld=BreedveldOptions(common_step=False)) > implicit_result = solve(problem, x0, options=base) tests/unit/test_breedveld.py:311: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_common_step_default_is_bit_identical[array_api_strict-HS43-breedveld] __ namespace = name = 'HS43', mode = 'breedveld' @pytest.mark.parametrize(("name", "mode"), sorted(_FINGERPRINTS)) def test_common_step_default_is_bit_identical(namespace, name, mode): cls, start = _STARTS[name] problem, x0 = cls(namespace), array(namespace, start) base = _runner_like() if mode == "breedveld" else Options() explicit = dataclasses.replace(base, breedveld=BreedveldOptions(common_step=False)) > implicit_result = solve(problem, x0, options=base) tests/unit/test_breedveld.py:311: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_common_step_default_is_bit_identical[array_api_strict-HS43-filter] ____ namespace = name = 'HS43', mode = 'filter' @pytest.mark.parametrize(("name", "mode"), sorted(_FINGERPRINTS)) def test_common_step_default_is_bit_identical(namespace, name, mode): cls, start = _STARTS[name] problem, x0 = cls(namespace), array(namespace, start) base = _runner_like() if mode == "breedveld" else Options() explicit = dataclasses.replace(base, breedveld=BreedveldOptions(common_step=False)) > implicit_result = solve(problem, x0, options=base) tests/unit/test_breedveld.py:311: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([100., 100., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_common_step_default_is_bit_identical[array_api_strict-HS71-breedveld] __ namespace = name = 'HS71', mode = 'breedveld' @pytest.mark.parametrize(("name", "mode"), sorted(_FINGERPRINTS)) def test_common_step_default_is_bit_identical(namespace, name, mode): cls, start = _STARTS[name] problem, x0 = cls(namespace), array(namespace, start) base = _runner_like() if mode == "breedveld" else Options() explicit = dataclasses.replace(base, breedveld=BreedveldOptions(common_step=False)) > implicit_result = solve(problem, x0, options=base) tests/unit/test_breedveld.py:311: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_common_step_default_is_bit_identical[array_api_strict-HS71-filter] ____ namespace = name = 'HS71', mode = 'filter' @pytest.mark.parametrize(("name", "mode"), sorted(_FINGERPRINTS)) def test_common_step_default_is_bit_identical(namespace, name, mode): cls, start = _STARTS[name] problem, x0 = cls(namespace), array(namespace, start) base = _runner_like() if mode == "breedveld" else Options() explicit = dataclasses.replace(base, breedveld=BreedveldOptions(common_step=False)) > implicit_result = solve(problem, x0, options=base) tests/unit/test_breedveld.py:311: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([3., 3., 3., 3.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_solve_through_the_hook_matches_the_two_pass_solve[array_api_strict] ___ namespace = def test_solve_through_the_hook_matches_the_two_pass_solve(namespace): from ipax import Options, solve xp = namespace opts = Options(hessian="exact", linsolve="dense", max_iter=100) x0 = xp.zeros((8,), dtype=xp.float64) log: list[str] = [] > r_fused = solve(_qp(xp, fused=True, log=log), x0, options=opts) tests/unit/test_condensed_curvature_gram.py:339: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:177: in solve resolved = lower_linear_inequalities(resolved, x0, xp) ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_breedveld_gondzio_variant_targets_and_acceptance[array_api_strict] ____ namespace = def test_breedveld_gondzio_variant_targets_and_acceptance(namespace): # Breedveld 2017 supplement A.2: after the full Mehrotra corrector, probe # the trial step α̌ = min(1.1·α, 1), target the trial products by the # two-tier rule of eqs. (13)–(14), and keep a correction only when the # step length grows to ≥ 1.07·α. xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) mehrotra = _step(xp, ds=10.0, dy=10.0) first = _step(xp, ds=0.1, dy=0.1) second = _step(xp, ds=0.2, dy=0.2) solves = [] returns = [mehrotra, first, second] def solve(comp_s, comp_l, comp_u): solves.append(float(comp_s[0])) return returns[len(solves) - 1] alphas = {id(affine): 0.5, id(mehrotra): 0.5, id(first): 0.6, id(second): 0.61} def alpha(step, *, tau): return alphas[id(step)] context = _context(xp, affine, solve=solve, alpha_primal=alpha, alpha_dual=alpha) corrector = GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=3, gondzio_variant="breedveld" ) ) > result = corrector.correct(context, 1.0) tests/unit/test_corrections.py:286: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_breedveld_gondzio_capped_corrections[array_api_strict-10.0-10.0--40.0] __ namespace = ds = 10.0, dy = 10.0, expected_correction = -40.0 @pytest.mark.parametrize( ("ds", "dy", "expected_correction"), [ (10.0, 10.0, -40.0), # 8 − t < −5·β_max·μ ⇒ capped at −40 (1.0, 1.0, 8.0 - 2.55 * 3.55), # β_max·μ < t, uncapped ⇒ β_max·μ − t (-1.0, -1.0, 0.0), # inside [β_min·μ, β_max·μ] ⇒ untouched (-3.5, -5.0, 0.2 - 0.075 * 0.25), # t < β_min·μ ⇒ β_min·μ − t ], ) def test_breedveld_gondzio_capped_corrections(namespace, ds, dy, expected_correction): # Breedveld 2017 supplement A.2, eqs. (13)–(14) in the capped reading # (μ = 1, β = 0.2 / 8, trial α̌ = 1.1·0.5 = 0.55; the Mehrotra target # clips to 0.1). xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) mehrotra = _step(xp, ds=ds, dy=dy) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(float(comp_s[0])) return mehrotra if len(solves) == 1 else None context = _context( xp, affine, solve=solve, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=1, gondzio_variant="breedveld" ) > ).correct(context, 1.0) tests/unit/test_corrections.py:333: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_breedveld_gondzio_capped_corrections[array_api_strict-1.0-1.0--1.0524999999999984] _ namespace = ds = 1.0, dy = 1.0, expected_correction = -1.0524999999999984 @pytest.mark.parametrize( ("ds", "dy", "expected_correction"), [ (10.0, 10.0, -40.0), # 8 − t < −5·β_max·μ ⇒ capped at −40 (1.0, 1.0, 8.0 - 2.55 * 3.55), # β_max·μ < t, uncapped ⇒ β_max·μ − t (-1.0, -1.0, 0.0), # inside [β_min·μ, β_max·μ] ⇒ untouched (-3.5, -5.0, 0.2 - 0.075 * 0.25), # t < β_min·μ ⇒ β_min·μ − t ], ) def test_breedveld_gondzio_capped_corrections(namespace, ds, dy, expected_correction): # Breedveld 2017 supplement A.2, eqs. (13)–(14) in the capped reading # (μ = 1, β = 0.2 / 8, trial α̌ = 1.1·0.5 = 0.55; the Mehrotra target # clips to 0.1). xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) mehrotra = _step(xp, ds=ds, dy=dy) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(float(comp_s[0])) return mehrotra if len(solves) == 1 else None context = _context( xp, affine, solve=solve, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=1, gondzio_variant="breedveld" ) > ).correct(context, 1.0) tests/unit/test_corrections.py:333: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_breedveld_gondzio_capped_corrections[array_api_strict--1.0--1.0-0.0] ___ namespace = ds = -1.0, dy = -1.0, expected_correction = 0.0 @pytest.mark.parametrize( ("ds", "dy", "expected_correction"), [ (10.0, 10.0, -40.0), # 8 − t < −5·β_max·μ ⇒ capped at −40 (1.0, 1.0, 8.0 - 2.55 * 3.55), # β_max·μ < t, uncapped ⇒ β_max·μ − t (-1.0, -1.0, 0.0), # inside [β_min·μ, β_max·μ] ⇒ untouched (-3.5, -5.0, 0.2 - 0.075 * 0.25), # t < β_min·μ ⇒ β_min·μ − t ], ) def test_breedveld_gondzio_capped_corrections(namespace, ds, dy, expected_correction): # Breedveld 2017 supplement A.2, eqs. (13)–(14) in the capped reading # (μ = 1, β = 0.2 / 8, trial α̌ = 1.1·0.5 = 0.55; the Mehrotra target # clips to 0.1). xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) mehrotra = _step(xp, ds=ds, dy=dy) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(float(comp_s[0])) return mehrotra if len(solves) == 1 else None context = _context( xp, affine, solve=solve, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=1, gondzio_variant="breedveld" ) > ).correct(context, 1.0) tests/unit/test_corrections.py:333: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_breedveld_gondzio_capped_corrections[array_api_strict--3.5--5.0-0.18125000000000002] _ namespace = ds = -3.5, dy = -5.0, expected_correction = 0.18125000000000002 @pytest.mark.parametrize( ("ds", "dy", "expected_correction"), [ (10.0, 10.0, -40.0), # 8 − t < −5·β_max·μ ⇒ capped at −40 (1.0, 1.0, 8.0 - 2.55 * 3.55), # β_max·μ < t, uncapped ⇒ β_max·μ − t (-1.0, -1.0, 0.0), # inside [β_min·μ, β_max·μ] ⇒ untouched (-3.5, -5.0, 0.2 - 0.075 * 0.25), # t < β_min·μ ⇒ β_min·μ − t ], ) def test_breedveld_gondzio_capped_corrections(namespace, ds, dy, expected_correction): # Breedveld 2017 supplement A.2, eqs. (13)–(14) in the capped reading # (μ = 1, β = 0.2 / 8, trial α̌ = 1.1·0.5 = 0.55; the Mehrotra target # clips to 0.1). xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) mehrotra = _step(xp, ds=ds, dy=dy) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(float(comp_s[0])) return mehrotra if len(solves) == 1 else None context = _context( xp, affine, solve=solve, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=1, gondzio_variant="breedveld" ) > ).correct(context, 1.0) tests/unit/test_corrections.py:333: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_breedveld_gondzio_corrects_bound_blocks[array_api_strict] ________ namespace = def test_breedveld_gondzio_corrects_bound_blocks(namespace): # The bound blocks get the same capped correction on their finite # entries and stay zero off the masks (Breedveld 2017 supplement A.2, # eq. (14) for the upper block). μ = 1; α = 0.5 ⇒ trial α̌ = 0.55. xp = namespace zero2 = array(xp, [0.0, 0.0]) affine = NewtonStep( dx=zero2, ds=array(xp, [-1.0]), dy_eq=array(xp, []), dy_ineq=array(xp, [-1.0]), dz_lower=zero2, dz_upper=zero2, ) mehrotra = NewtonStep( dx=array(xp, [1.0, 1.0]), ds=array(xp, [-1.0]), dy_eq=array(xp, []), dy_ineq=array(xp, [-1.0]), dz_lower=array(xp, [10.0, 5.0]), dz_upper=array(xp, [-0.5, 3.0]), ) solves = [] def solve(comp_s, comp_l, comp_u): solves.append((comp_s, comp_l, comp_u)) return mehrotra if len(solves) == 1 else None mask = array(xp, [1.0, 0.0]) > 0.5 context = CorrectionContext( affine=affine, s=array(xp, [2.0]), y_ineq=array(xp, [3.0]), x_minus_l=array(xp, [1.0, 1.0]), u_minus_x=array(xp, [1.0, 1.0]), z_lower=array(xp, [2.0, 0.0]), z_upper=array(xp, [0.5, 0.0]), mask_l=mask, mask_u=mask, solve=solve, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=1, gondzio_variant="breedveld" ) > ).correct(context, 1.0) tests/unit/test_corrections.py:401: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_breedveld_gondzio_variant_rejects_small_growth[array_api_strict] _____ namespace = def test_breedveld_gondzio_variant_rejects_small_growth(namespace): # A correction that grows the step by less than 7 % is discarded. xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) mehrotra = _step(xp, ds=-0.5, dy=-0.5) small = _step(xp, ds=-0.4, dy=-0.4) returns = [mehrotra, small] solves = [] def solve(comp_s, comp_l, comp_u): solves.append(comp_s) return returns[len(solves) - 1] alphas = {id(affine): 0.5, id(mehrotra): 0.5, id(small): 0.53} context = _context( xp, affine, solve=solve, alpha_primal=lambda step, *, tau: alphas[id(step)], alpha_dual=lambda step, *, tau: alphas[id(step)], ) corrector = GondzioCorrector( CorrectionsOptions(method="gondzio", gondzio_variant="breedveld") ) > result = corrector.correct(context, 1.0) tests/unit/test_corrections.py:440: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mehrotra_second_order_targets_clipped_to_symmetric_box[array_api_strict] _ namespace = def test_mehrotra_second_order_targets_clipped_to_symmetric_box(namespace): # Regression: the −ΔΔ term from a *quasi-Newton* affine direction can be # arbitrarily large (RT least-squares example: targets ~1e5 inflated the # duals by five orders of magnitude in one step). Targets are clipped into # the symmetric neighbourhood [γμ, μ/γ] (Colombo & Gondzio 2008). xp = namespace affine = _step(xp, ds=-100.0, dy=100.0) # −ΔsΔλ = +1e4 ≫ μ captured = [] def solve(comp_s, comp_l, comp_u): captured.append((comp_s, comp_l, comp_u)) return None context = _context( xp, affine, solve=solve, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) corrector = MehrotraCorrector(CorrectionsOptions(method="mehrotra")) > corrector.correct(context, 1.0) tests/unit/test_corrections.py:472: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:548: in correct return _mehrotra_step( ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([10001.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mehrotra_failed_corrector_matches_affine_zero_target[array_api_strict] __ namespace = def test_mehrotra_failed_corrector_matches_affine_zero_target(namespace): xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) context = _context( xp, affine, solve=lambda *args: None, alpha_primal=lambda step, *, tau: 0.5, alpha_dual=lambda step, *, tau: 0.5, ) corrector = MehrotraCorrector(CorrectionsOptions(method="mehrotra")) > result = corrector.correct(context, probing_mu(context)) tests/unit/test_corrections.py:491: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:548: in correct return _mehrotra_step( ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.46484375], dtype=array_api_strict.float64), 0.146484375, 14.6484375) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mehrotra_falls_back_to_centered_when_correction_collapses_the_step[array_api_strict] _ namespace = def test_mehrotra_falls_back_to_centered_when_correction_collapses_the_step( namespace, ): # Task-6 fragility (S2MPJ HS71 × exact/dense+mehrotra): the −ΔΔ term # presumes a Newton predictor, and on nonconvex curvature the corrected # direction can collapse the maximal boundary step. When the corrected # step keeps less than half the predictor's combined step length, the # corrector must degrade to the plain centered Newton step at the same # μ target (what corrections="none" would compute) instead of handing the # driver a crippled direction. xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) corrected = _step(xp, ds=-0.9, dy=-0.9) centered = _step(xp, ds=-0.5, dy=-0.5) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(comp_s) return corrected if len(solves) == 1 else centered alphas = {id(affine): 0.45, id(corrected): 0.05, id(centered): 0.4} def alpha(step, *, tau): return alphas[id(step)] context = _context(xp, affine, solve=solve, alpha_primal=alpha, alpha_dual=alpha) corrector = MehrotraCorrector(CorrectionsOptions(method="mehrotra")) > result = corrector.correct(context, 1.0) tests/unit/test_corrections.py:526: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:548: in correct return _mehrotra_step( ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_mehrotra_keeps_a_correction_with_a_comparable_step[array_api_strict] ___ namespace = def test_mehrotra_keeps_a_correction_with_a_comparable_step(namespace): xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) corrected = _step(xp, ds=-0.9, dy=-0.9) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(comp_s) return corrected alphas = {id(affine): 0.45, id(corrected): 0.40} def alpha(step, *, tau): return alphas[id(step)] context = _context(xp, affine, solve=solve, alpha_primal=alpha, alpha_dual=alpha) corrector = MehrotraCorrector(CorrectionsOptions(method="mehrotra")) > result = corrector.correct(context, 1.0) tests/unit/test_corrections.py:552: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:548: in correct return _mehrotra_step( ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mehrotra_fallback_returns_affine_when_the_centered_solve_fails[array_api_strict] _ namespace = def test_mehrotra_fallback_returns_affine_when_the_centered_solve_fails(namespace): xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) corrected = _step(xp, ds=-0.9, dy=-0.9) solves = [] def solve(comp_s, comp_l, comp_u): solves.append(comp_s) return corrected if len(solves) == 1 else None alphas = {id(affine): 0.45, id(corrected): 0.05} def alpha(step, *, tau): return alphas[id(step)] context = _context(xp, affine, solve=solve, alpha_primal=alpha, alpha_dual=alpha) corrector = MehrotraCorrector(CorrectionsOptions(method="mehrotra")) > result = corrector.correct(context, 1.0) tests/unit/test_corrections.py:576: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:548: in correct return _mehrotra_step( ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), 0.1, 10.0), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_gondzio_accumulates_partial_trial_residual_and_uses_gamma[array_api_strict] _ namespace = def test_gondzio_accumulates_partial_trial_residual_and_uses_gamma(namespace): xp = namespace affine = _step(xp, ds=-1.0, dy=-1.0) base = _step(xp, ds=-0.4, dy=-0.5) candidate = _step(xp, ds=-0.2, dy=-0.2) candidate_2 = _step(xp, ds=-0.1, dy=-0.1) targets = [] def solve(comp_s, comp_l, comp_u): targets.append((comp_s, comp_l, comp_u)) if len(targets) == 1: return base if len(targets) == 2: return candidate return candidate_2 def alpha_primal(step, *, tau): del tau if step is affine: return 0.5 if step is base: return 0.2 if step is candidate: return 0.8 return 1.0 def alpha_dual(step, *, tau): del tau if step is affine: return 0.5 if step is base: return 0.3 if step is candidate: return 0.8 return 1.0 context = _context( xp, affine, solve=solve, alpha_primal=alpha_primal, alpha_dual=alpha_dual, ) gamma = 0.5 result = GondzioCorrector( CorrectionsOptions( method="gondzio", gondzio_max_corrections=2, gondzio_gamma=gamma ) > ).correct(context, probing_mu(context)) tests/unit/test_corrections.py:630: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/corrections.py:566: in correct state = _mehrotra_step(context, xp, mu_target, self._options.gondzio_gamma) ipax/ipm/corrections.py:459: in _mehrotra_step comp_s = xp.clip(comp_s, lo, hi) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.46484375], dtype=array_api_strict.float64), 0.732421875, 2.9296875) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function clip requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-empty_matrix-[]] _ namespace = counts = [], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0], dtype=array_api_strict.int64), empty((0,), dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-rows_all_empty-[0, 0, 0, 0]] _ namespace = counts = [0, 0, 0, 0], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 0, 0, 0], dtype=array_api_strict.int64), empty((0,), dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-single_row-[7]] _ namespace = counts = [7], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 7], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4, 5, 6], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-single_empty_row-[0]] _ namespace = counts = [0], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0], dtype=array_api_strict.int64), empty((0,), dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-leading_trailing_empty-[0, 0, 3, 1, 0, 0, 2, 0]] _ namespace = counts = [0, 0, 3, 1, 0, 0, ...], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 0, 3, 4, 4, 4, 6, 6], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4, 5], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_0-[3, 0, 0, 3, 1, 2, 2, 5, 0, 0, 1, 1]] _ namespace = counts = [3, 0, 0, 3, 1, 2, ...], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 3, 3, 6, 7, 9, 11, 16, 16, 16, 17, 18], dtype=array_api_strict.int64), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_1-[0, 5, 1]] _ namespace = counts = [0, 5, 1], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 5, 6], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4, 5], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_2-[0, 4, 0, 0, 0, 2, 2, 0]] _ namespace = counts = [0, 4, 0, 0, 0, 2, ...], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 4, 4, 4, 4, 6, 8, 8], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4, 5, 6, 7], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_3-[3, 4, 0, 0, 0, 5, 4, 2, 3, 1, 5, 0, 0, 4, 1, 0, 0, 3, 2, 5, 0, 1, 0, 1, 2, 0, 0, 0, 5, 0, 2, 1, 0, 0, 0, 5, 3, 2, 3, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 5, 3, 0, 2, 5, 5]] _ namespace = counts = [3, 4, 0, 0, 0, 5, ...], index_dtype = 'int64' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 7, 7, 7, 12, 16, 18, 21, 22, 27, 27, 27, 31, 32, 32, 32, 35, 37, 42, 42, 43, 43, ..., 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-empty_matrix-[]] _ namespace = counts = [], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0], dtype=array_api_strict.int32), empty((0,), dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-rows_all_empty-[0, 0, 0, 0]] _ namespace = counts = [0, 0, 0, 0], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 0, 0, 0], dtype=array_api_strict.int32), empty((0,), dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-single_row-[7]] _ namespace = counts = [7], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 7], dtype=array_api_strict.int32), Array([0, 1, 2, 3, 4, 5, 6], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-single_empty_row-[0]] _ namespace = counts = [0], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0], dtype=array_api_strict.int32), empty((0,), dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-leading_trailing_empty-[0, 0, 3, 1, 0, 0, 2, 0]] _ namespace = counts = [0, 0, 3, 1, 0, 0, ...], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 0, 3, 4, 4, 4, 6, 6], dtype=array_api_strict.int32), Array([0, 1, 2, 3, 4, 5], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_0-[3, 0, 0, 3, 1, 2, 2, 5, 0, 0, 1, 1]] _ namespace = counts = [3, 0, 0, 3, 1, 2, ...], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 3, 3, 6, 7, 9, 11, 16, 16, 16, 17, 18], dtype=array_api_strict.int32), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_1-[0, 5, 1]] _ namespace = counts = [0, 5, 1], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 5, 6], dtype=array_api_strict.int32), Array([0, 1, 2, 3, 4, 5], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_2-[0, 4, 0, 0, 0, 2, 2, 0]] _ namespace = counts = [0, 4, 0, 0, 0, 2, ...], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 4, 4, 4, 4, 6, 8, 8], dtype=array_api_strict.int32), Array([0, 1, 2, 3, 4, 5, 6, 7], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_3-[3, 4, 0, 0, 0, 5, 4, 2, 3, 1, 5, 0, 0, 4, 1, 0, 0, 3, 2, 5, 0, 1, 0, 1, 2, 0, 0, 0, 5, 0, 2, 1, 0, 0, 0, 5, 3, 2, 3, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 5, 3, 0, 2, 5, 5]] _ namespace = counts = [3, 4, 0, 0, 0, 5, ...], index_dtype = 'int32' @pytest.mark.parametrize(("name", "counts"), _patterns(), ids=lambda v: str(v)) @pytest.mark.parametrize("index_dtype", ["int64", "int32"]) def test_expand_indptr_matches_searchsorted(namespace, name, counts, index_dtype): del name xp = namespace indptr = _indptr(xp, counts, getattr(xp, index_dtype)) nnz = sum(counts) > _assert_identical(xp, _expand_indptr(xp, indptr, nnz), _reference(xp, indptr, nnz)) tests/unit/test_expand_indptr.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 7, 7, 7, 12, 16, 18, 21, 22, 27, 27, 27, 31, 32, 32, 32, 35, 37, 42, 42, 43, 43, ..., 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_falls_back_without_array_repeat[array_api_strict-_NoRepeat] _ namespace = proxy = @pytest.mark.parametrize("proxy", [_NoRepeat, _RejectingRepeat]) def test_expand_indptr_falls_back_without_array_repeat(namespace, proxy): xp = namespace counts = [0, 2, 0, 3, 1, 0] indptr = _indptr(xp, counts, xp.int64) > got = _expand_indptr(proxy(xp), indptr, sum(counts)) tests/unit/test_expand_indptr.py:93: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 2, 2, 5, 6, 6], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4, 5], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_expand_indptr_falls_back_without_array_repeat[array_api_strict-_RejectingRepeat] _ namespace = proxy = @pytest.mark.parametrize("proxy", [_NoRepeat, _RejectingRepeat]) def test_expand_indptr_falls_back_without_array_repeat(namespace, proxy): xp = namespace counts = [0, 2, 0, 3, 1, 0] indptr = _indptr(xp, counts, xp.int64) > got = _expand_indptr(proxy(xp), indptr, sum(counts)) tests/unit/test_expand_indptr.py:93: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 2, 2, 5, 6, 6], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4, 5], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_expand_indptr_rejects_indptr_nnz_mismatch[array_api_strict] _______ namespace = def test_expand_indptr_rejects_indptr_nnz_mismatch(namespace): xp = namespace indptr = xp.asarray([0, 2, 3]) with pytest.raises(ValueError, match="indptr"): > _expand_indptr(xp, indptr, 5) tests/unit/test_expand_indptr.py:101: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 2, 3], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_csr_csc_constructors_use_identical_expansion[array_api_strict] ______ namespace = def test_csr_csc_constructors_use_identical_expansion(namespace): xp = namespace counts = [2, 0, 3, 0] indptr = _indptr(xp, counts, xp.int64) indices = xp.asarray([0, 2, 1, 2, 3]) data = xp.asarray([1.0, 2.0, 3.0, 4.0, 5.0], dtype=xp.float64) > rows_ref = _reference(xp, indptr, 5) tests/unit/test_expand_indptr.py:110: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_expand_indptr.py:23: in _reference return xp.searchsorted(indptr, arange, side="right") - 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 2, 2, 5, 5], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_driver_passes_certifier_at_feasible_iterates[array_api_strict] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5c5a270> def test_driver_passes_certifier_at_feasible_iterates(namespace, monkeypatch): # HS35 from a strictly feasible interior point: the linear inequality keeps # θ = 0 along the whole trajectory, so with the rescue enabled every line # search must receive the KKT-progress certifier. seen = _record_kkt_progress_kwargs(monkeypatch) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", line_search=LineSearchOptions(feasible_kkt_progress=0.1), ), ) tests/unit/test_feasible_kkt_acceptance.py:37: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_certifier_disabled_by_default[array_api_strict] _____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5c5bf50> def test_certifier_disabled_by_default(namespace, monkeypatch): # OPT-IN since the S2MPJ v14 sweep: as a default the rescue walked # unconstrained/bounds-only runs (θ ≡ 0 — its whole domain) into worse # stationary points (48 corpus flips attributed). The default must not # wire the certifier at all. assert LineSearchOptions().feasible_kkt_progress is None seen = _record_kkt_progress_kwargs(monkeypatch) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options(hessian="exact", linsolve="dense"), ) tests/unit/test_feasible_kkt_acceptance.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_certifier_computes_a_real_kkt_decrease_verdict[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5c59d30> def test_certifier_computes_a_real_kkt_decrease_verdict(namespace, monkeypatch): # The certifier is a closure over live solver state: it re-evaluates the # gradient/Jacobian at the trial point and rescores the scaled KKT error. # Exercise the arithmetic against a real solve rather than a stub — on this # convex QP the Newton step genuinely drives the KKT error down, so a 10% # decrease must be certified at least once. > verdicts = _certifier_verdicts(namespace, monkeypatch, gamma=0.1, alpha=1.0) tests/unit/test_feasible_kkt_acceptance.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_feasible_kkt_acceptance.py:83: in _certifier_verdicts result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_certifier_threshold_is_honoured[array_api_strict] ____________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c60f5e10> def test_certifier_threshold_is_honoured(namespace, monkeypatch): # The verdict is the option's decrease fraction applied to a real error # ratio: demanding a 99.9999% drop per step is unattainable here, so the # certificate must refuse every trial — proving the threshold is actually # consulted rather than the rescue rubber-stamping the step. > verdicts = _certifier_verdicts(namespace, monkeypatch, gamma=0.999999, alpha=1.0) tests/unit/test_feasible_kkt_acceptance.py:114: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_feasible_kkt_acceptance.py:83: in _certifier_verdicts result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_certifier_advances_duals_even_for_a_null_primal_step[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c60f5550> def test_certifier_advances_duals_even_for_a_null_primal_step(namespace, monkeypatch): # Design note worth pinning: the certificate scores the state the driver # would *adopt* — the trial primal plus the iteration's fraction-to-boundary # dual step — so the duals move even at α = 0. A null primal step is # therefore not automatically "no progress"; the dual step alone can reduce # the KKT error. (The line search only ever consults it at α > 0; this pins # the closure's semantics against an accidental "use α for the duals" edit.) > verdicts = _certifier_verdicts(namespace, monkeypatch, gamma=0.1, alpha=0.0) tests/unit/test_feasible_kkt_acceptance.py:126: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_feasible_kkt_acceptance.py:83: in _certifier_verdicts result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_certifier_absent_at_infeasible_iterates[array_api_strict] ________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c60f6dd0> def test_certifier_absent_at_infeasible_iterates(namespace, monkeypatch): # From an infeasible start (g = +3) the early iterations have θ0 > 0: the # rescue is a θ0 = 0 mechanism only, so even with the option enabled those # searches get no certifier. seen = _record_kkt_progress_kwargs(monkeypatch) problem = HS35(namespace) > result = solve( problem, array(namespace, [2.0, 2.0, 2.0]), options=Options( hessian="exact", linsolve="dense", line_search=LineSearchOptions(feasible_kkt_progress=0.1), ), ) tests/unit/test_feasible_kkt_acceptance.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_filter_is_reset_when_mu_decreases[array_api_strict] ___________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c70d0210> def test_filter_is_reset_when_mu_decreases(namespace, monkeypatch): # HS7's nonlinear equality keeps early iterates infeasible, so accepted # θ-type steps augment the filter while μ steps down several times on the # way to optimality. Entries can only vanish again through a reset — # ``augment`` always appends — so an empty filter observed *after* it held # entries is exactly the μ-update re-initialization. entry_counts: list[int] = [] original = FilterLineSearch.search def recording(self, **kwargs): entry_counts.append(len(kwargs["entries"])) return original(self, **kwargs) monkeypatch.setattr(FilterLineSearch, "search", recording) problem = HS7(namespace) > result = solve( problem, array(namespace, [2.0, 2.0]), options=Options(hessian="exact", linsolve="dense"), ) tests/unit/test_filter_reset_on_mu_update.py:38: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:224: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([2.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_free_oracle_runs_the_weak_acceptance[array_api_strict] __________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c60f6970> def test_free_oracle_runs_the_weak_acceptance(namespace, monkeypatch): # Opted in, with a free-mode μ oracle and the safeguard never tripping, # every line search goes through the weak path. kinds = _record_search_kinds(monkeypatch) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", barrier=BarrierOptions(fallback="never"), line_search=LineSearchOptions(free_mode_acceptance="obj-constr-filter"), ), ) tests/unit/test_free_mode_acceptance.py:210: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_monitor_trip_reinstates_the_rigorous_search[array_api_strict] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6302580> def test_monitor_trip_reinstates_the_rigorous_search(namespace, monkeypatch): # A tripping KKT-error safeguard (tight κ) flips the loop to monotone mode # — from there the rigorous W&B filter search must govern again. kinds = _record_search_kinds(monkeypatch) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", barrier=BarrierOptions(fallback_kappa=0.01, fallback_window=0), line_search=LineSearchOptions(free_mode_acceptance="obj-constr-filter"), ), ) tests/unit/test_free_mode_acceptance.py:232: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_free_mode_acceptance_defaults_to_rigorous[array_api_strict] _______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c63008a0> def test_free_mode_acceptance_defaults_to_rigorous(namespace, monkeypatch): # OPT-IN: the weak per-trial test is not IPOPT's behavior (released IPOPT # never weakens its per-trial test; its (f, θ) margin filter is an # iterate-level progress check), and the paired S2MPJ A/Bs put it at # ≈ neutral while trading wrong-basin flips on nonconvex problems. So even # under a free-mode oracle the rigorous W&B gate governs unless asked for. assert LineSearchOptions().free_mode_acceptance == "rigorous" kinds = _record_search_kinds(monkeypatch) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", # free-mode oracle, yet still rigorous ), ) tests/unit/test_free_mode_acceptance.py:259: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_free_search_failure_switches_to_monotone[array_api_strict] ________ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c70d09f0> def test_free_search_failure_switches_to_monotone(namespace, monkeypatch): # A failed free-mode line search is the switch-to-monotone trigger # (NWW §5; IPOPT's skipped-line-search signal), not a restoration entry: # the very next search must run the rigorous W&B gate from the same # iterate, and the solve must still converge. from ipax.ipm.filter_ls import LineSearchResult kinds: list[str] = [] original = FilterLineSearch.search original_free = FilterLineSearch.search_free forced_failure = LineSearchResult(1e-8, False, False, True, n_trials=3) failed_once: list[bool] = [] def free(self, **kwargs): kinds.append("free") if not failed_once: failed_once.append(True) return forced_failure return original_free(self, **kwargs) def rigorous(self, **kwargs): kinds.append("rigorous") return original(self, **kwargs) monkeypatch.setattr(FilterLineSearch, "search", rigorous) monkeypatch.setattr(FilterLineSearch, "search_free", free) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", line_search=LineSearchOptions(free_mode_acceptance="obj-constr-filter"), ), ) tests/unit/test_free_mode_acceptance.py:302: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_weak_acceptance_is_inert_under_the_monotone_default[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c70d0a60> def test_weak_acceptance_is_inert_under_the_monotone_default(namespace, monkeypatch): # Containment: the default μ schedule is monotone, so there is no free mode # and the weak path is unreachable — opting *in* must therefore change # nothing at all. Trace identity pins that on the observable output, so the # option cannot leak into the default trajectory. kinds = _record_search_kinds(monkeypatch) problem = HS35(namespace) x0 = array(namespace, [0.5, 0.5, 0.5]) > default = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/unit/test_free_mode_acceptance.py:326: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_lbfgs_run_matches_exact_optimum_with_bounded_overhead[array_api_strict] _ namespace = def test_lbfgs_run_matches_exact_optimum_with_bounded_overhead(namespace): """L-BFGS reaches the same optimum as the exact Hessian. ``BoundConstrainedQP`` supplies the true identity Hessian. The L-BFGS run must hit the same point without a blow-up in iteration count. """ exact_problem = BoundConstrainedQP(namespace) lower, upper = exact_problem.bounds() def objective(x): diff = x - exact_problem.center return 0.5 * namespace.sum(diff * diff) def gradient(x): return x - exact_problem.center lbfgs_problem = FunctionProblem( 2, objective, gradient=gradient, bounds=(lower, upper), ) x0 = array(namespace, [0.25, 0.75]) > lbfgs = solve(lbfgs_problem, x0, options=Options(hessian="lbfgs", linsolve="dense")) tests/unit/test_hessian_lbfgs.py:210: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_fixed_bound_pair_is_widened_symmetrically[array_api_strict] _______ namespace = def test_fixed_bound_pair_is_widened_symmetrically(namespace): # x1 is fixed (l == u == 2); x0 is a normal box [0, 10]. lower = array(namespace, [0.0, 2.0]) upper = array(namespace, [10.0, 2.0]) > new_l, new_u = relax_fixed_bounds(namespace, lower, upper) tests/unit/test_init_bounds.py:13: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([5., 2.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_one_sided_and_absent_bounds_are_untouched[array_api_strict] _______ namespace = def test_one_sided_and_absent_bounds_are_untouched(namespace): inf = float("inf") lower = array(namespace, [0.0, -inf]) upper = array(namespace, [inf, 5.0]) > new_l, new_u = relax_fixed_bounds(namespace, lower, upper) tests/unit/test_init_bounds.py:27: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_active_slack_is_refloored_on_mu_and_poisoned_dual_is_clipped[array_api_strict] _ namespace = def test_active_slack_is_refloored_on_mu_and_poisoned_dual_is_clipped(namespace): # HS101 limit-cycle state: an active constraint (g ~ 0) whose slack sits on # restoration's 1e-12 boundary floor while the stale multiplier has grown # to ~1e6 — together Sigma_s = lambda/s ~ 1e18 and no step survives the # fraction-to-boundary rule. Re-centering must give the slack mu-scale # interiority and squash the multiplier to the central band. xp = namespace mu = 0.1 g = array(xp, [-1e-14]) y = array(xp, [3.2e6]) > s_new, y_new = recenter_slacks_duals(xp, g, y, mu) tests/unit/test_init_recenter.py:34: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.e-14], dtype=array_api_strict.float64), Array([0.01], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_inactive_slack_and_consistent_dual_pass_through[array_api_strict] ____ namespace = def test_inactive_slack_and_consistent_dual_pass_through(namespace): # A strictly-satisfied constraint keeps its natural slack s = -g, and a # multiplier already consistent with the central path (s*lambda ~ mu) must # not be disturbed — the repair only touches what is actually poisoned. xp = namespace mu = 0.1 g = array(xp, [-2.0]) y = array(xp, [mu / 2.0]) > s_new, y_new = recenter_slacks_duals(xp, g, y, mu) tests/unit/test_init_recenter.py:50: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([2.], dtype=array_api_strict.float64), Array([0.01], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_vanished_dual_is_raised_to_the_band_floor[array_api_strict] _______ namespace = def test_vanished_dual_is_raised_to_the_band_floor(namespace): # The opposite poisoning: a multiplier collapsed to ~0 on an active # constraint makes the primal-dual Sigma_s vanish; the clip raises it to # the lower edge of the central band. xp = namespace mu = 0.1 g = array(xp, [-1e-14]) y = array(xp, [1e-15]) > s_new, y_new = recenter_slacks_duals(xp, g, y, mu) tests/unit/test_init_recenter.py:64: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.e-14], dtype=array_api_strict.float64), Array([0.01], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_violated_constraint_gets_the_mu_floor[array_api_strict] _________ namespace = def test_violated_constraint_gets_the_mu_floor(namespace): # A (slightly) violated row has -g < 0: the slack lands on the mu-scale # floor, staying strictly interior. xp = namespace mu = 1e-6 g = array(xp, [0.5]) y = array(xp, [1.0]) > s_new, _ = recenter_slacks_duals(xp, g, y, mu) tests/unit/test_init_recenter.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([-0.5], dtype=array_api_strict.float64), Array([1.e-07], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_normal_equations_signature_is_none_without_a_stable_pattern[array_api_strict] _ namespace = def test_normal_equations_signature_is_none_without_a_stable_pattern(namespace): # The sparse-NE route may only reuse symbolic analysis when the caller # promised a stable pattern. Pattern reuse is opt-in, so a sparse Jacobian # constructed without a ``pattern_key`` declares none — and the NE tag must # propagate that rather than inventing a key of its own. from ipax.backend.operators import CSROperator dtype = array(namespace, [0.0]).dtype > ineq = CSROperator( namespace.asarray([0, 1, 2]), namespace.asarray([0, 1]), namespace.ones((2,), dtype=dtype), (2, 2), # no pattern_key: the caller promised nothing ) tests/unit/test_kkt.py:1296: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 1, 2], dtype=array_api_strict.int64), Array([0, 1], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_operator_lowering_matches_reference[array_api_strict-opaque] _______ namespace = kind = 'opaque' @pytest.mark.parametrize("kind", _ALL_KINDS) def test_operator_lowering_matches_reference(namespace, kind): _needs_adapter(namespace, kind) xp = namespace rows, lo, hi = _random_block() matrix, sizes = _make(xp, kind, rows) jac_ref, off_ref = _reference(rows, lo, hi, sizes) J = array(xp, jac_ref) Jt = transpose(xp, J) k = len(jac_ref) > op, offset = _lower(xp, matrix, lo, hi) tests/unit/test_linear_ineq_lowering.py:331: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-coo] _ namespace = kind = 'coo' @pytest.mark.parametrize("kind", _SPARSE_KINDS) def test_sparse_lowering_is_triplet_level_and_keeps_the_family(namespace, kind): # Pure Array API on the index/value vectors: runs on every backend, with or # without a sparse adapter (the adapter is needed only for the algebra). xp = namespace rows, lo, hi = _random_block() matrix, sizes = _make(xp, kind, rows) jac_ref, _ = _reference(rows, lo, hi, sizes) > op, _ = _lower(xp, matrix, lo, hi) tests/unit/test_linear_ineq_lowering.py:377: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:274: in _lower_two_sided return _lower_triplets(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:144: in _lower_triplets rows, cols, values, k = _signed_row_select_triplets( ipax/backend/operators.py:1438: in _signed_row_select_triplets keep_lower, keep_upper, new_rows, k = _signed_row_select_plan( ipax/backend/operators.py:1398: in _signed_row_select_plan lower_rank = xp.cumulative_sum(lower_int) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-csr] _ namespace = kind = 'csr' @pytest.mark.parametrize("kind", _SPARSE_KINDS) def test_sparse_lowering_is_triplet_level_and_keeps_the_family(namespace, kind): # Pure Array API on the index/value vectors: runs on every backend, with or # without a sparse adapter (the adapter is needed only for the algebra). xp = namespace rows, lo, hi = _random_block() > matrix, sizes = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:279: in _make return _csr(xp, rows, pattern_key="A"), [_M] tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14, 15, 17, 20, 23, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-csc] _ namespace = kind = 'csc' @pytest.mark.parametrize("kind", _SPARSE_KINDS) def test_sparse_lowering_is_triplet_level_and_keeps_the_family(namespace, kind): # Pure Array API on the index/value vectors: runs on every backend, with or # without a sparse adapter (the adapter is needed only for the algebra). xp = namespace rows, lo, hi = _random_block() > matrix, sizes = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:281: in _make return _csc(xp, rows), [_M] tests/unit/test_linear_ineq_lowering.py:217: in _csc return CSCOperator( ipax/backend/operators.py:1361: in __init__ cols = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 4, 9, 16, 22, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-vstack] _ namespace = kind = 'vstack' @pytest.mark.parametrize("kind", _SPARSE_KINDS) def test_sparse_lowering_is_triplet_level_and_keeps_the_family(namespace, kind): # Pure Array API on the index/value vectors: runs on every backend, with or # without a sparse adapter (the adapter is needed only for the algebra). xp = namespace rows, lo, hi = _random_block() > matrix, sizes = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:283: in _make top = _csr(xp, rows[:_SPLIT], values_dtype_hint="float32", pattern_key="t") tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14], dtype=array_api_strict.int64), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_vstack_lowering_keeps_per_block_precision_hints[array_api_strict] ____ namespace = def test_vstack_lowering_keeps_per_block_precision_hints(namespace): # gram_dtype="auto" reduces the Gram accumulate block by block, so a # float32-sourced block must stay its own block after lowering. xp = namespace rows, lo, hi = _random_block() > matrix, _ = _make(xp, "vstack", rows) tests/unit/test_linear_ineq_lowering.py:404: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:283: in _make top = _csr(xp, rows[:_SPLIT], values_dtype_hint="float32", pattern_key="t") tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14], dtype=array_api_strict.int64), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_sparse_lowering_keeps_a_declared_values_hint[array_api_strict] ______ namespace = def test_sparse_lowering_keeps_a_declared_values_hint(namespace): xp = namespace rows, lo, hi = _random_block() > op, _ = _lower(xp, _csr(xp, rows, values_dtype_hint="float32"), lo, hi) tests/unit/test_linear_ineq_lowering.py:418: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14, 15, 17, 20, 23, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_sparse_lowering_derives_a_stable_pattern_key[array_api_strict] ______ namespace = def test_sparse_lowering_derives_a_stable_pattern_key(namespace): xp = namespace rows, lo, hi = _random_block() > keyed = _csr(xp, rows, pattern_key="A") tests/unit/test_linear_ineq_lowering.py:426: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14, 15, 17, 20, 23, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_operator_lowering_rejects_inverted_ranges[array_api_strict-csr] _____ namespace = kind = 'csr' @pytest.mark.parametrize("kind", ("csr", "opaque", "vstack")) def test_operator_lowering_rejects_inverted_ranges(namespace, kind): xp = namespace rows, lo, hi = _random_block() lo[2], hi[2] = 1.0, -1.0 > matrix, _ = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:447: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:279: in _make return _csr(xp, rows, pattern_key="A"), [_M] tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14, 15, 17, 20, 23, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_operator_lowering_rejects_inverted_ranges[array_api_strict-vstack] ____ namespace = kind = 'vstack' @pytest.mark.parametrize("kind", ("csr", "opaque", "vstack")) def test_operator_lowering_rejects_inverted_ranges(namespace, kind): xp = namespace rows, lo, hi = _random_block() lo[2], hi[2] = 1.0, -1.0 > matrix, _ = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:447: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:283: in _make top = _csr(xp, rows[:_SPLIT], values_dtype_hint="float32", pattern_key="t") tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14], dtype=array_api_strict.int64), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_operator_lowering_rejects_bound_length_mismatch[array_api_strict-csr] __ namespace = kind = 'csr' @pytest.mark.parametrize("kind", ("csr", "opaque", "vstack")) def test_operator_lowering_rejects_bound_length_mismatch(namespace, kind): xp = namespace rows, lo, hi = _random_block() > matrix, _ = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:456: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:279: in _make return _csr(xp, rows, pattern_key="A"), [_M] tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14, 15, 17, 20, 23, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_operator_lowering_rejects_bound_length_mismatch[array_api_strict-vstack] _ namespace = kind = 'vstack' @pytest.mark.parametrize("kind", ("csr", "opaque", "vstack")) def test_operator_lowering_rejects_bound_length_mismatch(namespace, kind): xp = namespace rows, lo, hi = _random_block() > matrix, _ = _make(xp, kind, rows) tests/unit/test_linear_ineq_lowering.py:456: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:283: in _make top = _csr(xp, rows[:_SPLIT], values_dtype_hint="float32", pattern_key="t") tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14], dtype=array_api_strict.int64), Array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_all_unbounded_operator_block_lowers_to_nothing[array_api_strict-opaque] _ namespace = kind = 'opaque' @pytest.mark.parametrize("kind", ("csr", "opaque", "vstack")) def test_all_unbounded_operator_block_lowers_to_nothing(namespace, kind): _needs_adapter(namespace, kind) xp = namespace rows, _, _ = _random_block() matrix, _ = _make(xp, kind, rows) problem = _with_block(xp, rows, matrix, [-_INF] * _M, [_INF] * _M) > lowered = lower_linear_inequalities(problem, array(xp, [0.0] * _N), xp) tests/unit/test_linear_ineq_lowering.py:469: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_operator_block_without_nonlinear_inequalities[array_api_strict-opaque] __ namespace = kind = 'opaque' @pytest.mark.parametrize("kind", ("csr", "vstack", "opaque")) def test_operator_block_without_nonlinear_inequalities(namespace, kind): _needs_adapter(namespace, kind) xp = namespace rows, lo, hi = _random_block() matrix, sizes = _make(xp, kind, rows) jac_ref, off_ref = _reference(rows, lo, hi, sizes) problem = _with_block(xp, rows, matrix, lo, hi) > lowered = lower_linear_inequalities(problem, array(xp, [0.0] * _N), xp) tests/unit/test_linear_ineq_lowering.py:485: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_operator_block_multipliers_are_sliced_off[array_api_strict-opaque-1] ___ namespace = kind = 'opaque', n_blocks = 1 @pytest.mark.parametrize( ("kind", "n_blocks"), [("csr", 1), ("vstack", 2), ("opaque", 1)] ) def test_operator_block_multipliers_are_sliced_off(namespace, kind, n_blocks): _needs_adapter(namespace, kind) xp = namespace rows, lo, hi = _random_block() matrix, sizes = _make(xp, kind, rows) k = len(_reference(rows, lo, hi, sizes)[0]) inner = _NonlinearPlusLinear(xp, matrix, array(xp, lo), array(xp, hi)) > lowered = lower_linear_inequalities(inner, array(xp, [0.0] * _N), xp) tests/unit/test_linear_ineq_lowering.py:540: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/linear_ineq.py:373: in lower_linear_inequalities lowered_jac, offset = _lower_two_sided(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_matrix_free_block_lowers_through_the_wrapper[array_api_strict] ______ namespace = def test_matrix_free_block_lowers_through_the_wrapper(namespace): # A callback-only operator: matvec/rmatvec work, while the explicit # capabilities it lacks stay unavailable (never a silent identity probe). xp = namespace rows, lo, hi = _random_block() a = array(xp, rows) matrix = MatrixFreeJacobian( (_M, _N), matvec=lambda v: xp.matmul(a, v), rmatvec=lambda v: xp.matmul(transpose(xp, a), v), ) jac_ref, _ = _reference(rows, lo, hi, [_M]) J = array(xp, jac_ref) > op, _ = _lower(xp, matrix, lo, hi) tests/unit/test_linear_ineq_lowering.py:573: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_wrapper_to_coo_remaps_a_structured_inner_operator[array_api_strict] ___ namespace = def test_wrapper_to_coo_remaps_a_structured_inner_operator(namespace): # A subclass of a sparse operator is wrapped (its overrides must survive), # but its triplets are still exposed — remapped — for the sparse route. xp = namespace rows, lo, hi = _random_block() class _Custom(COOOperator): pass r, c, v = _triplets(xp, rows) matrix = _Custom(r, c, v, (_M, _N), pattern_key="custom") jac_ref, _ = _reference(rows, lo, hi, [_M]) > op, _ = _lower(xp, matrix, lo, hi) tests/unit/test_linear_ineq_lowering.py:605: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_csr_linear_ineq_no_longer_raises[array_api_strict] ____________ namespace = def test_csr_linear_ineq_no_longer_raises(namespace): # Regression: an operator-valued ``linear_ineq`` matrix raised # NotImplementedError ("require an explicit rank-2 array"), forcing large # sparse inequality sets through hand-lowered ineq_constraints callbacks. xp = namespace rows, lo, hi = _random_block() > problem = _with_block(xp, rows, _csr(xp, rows), lo, hi) tests/unit/test_linear_ineq_lowering.py:636: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:203: in _csr return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 3, 7, 9, 11, 14, 14, 14, 15, 17, 20, 23, 27], dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_dense_subclass_is_wrapped_so_its_overrides_survive[array_api_strict] ___ namespace = def test_dense_subclass_is_wrapped_so_its_overrides_survive(namespace): # Only the exact ``Dense`` type is unwrapped to its array; a subclass may # override the algebra (here a Gram counter) and must keep being consulted. xp = namespace rows, lo, hi = _random_block() calls = [] class _CountingDense(Dense): def gram(self, weights, *, accumulate_dtype=None, hinted_only=False): calls.append(1) a = self.dense_matrix() return xp.matmul(transpose(xp, a), xp.expand_dims(weights, axis=1) * a) def gram_capable(self): return True matrix = _CountingDense(array(xp, rows)) jac_ref, _ = _reference(rows, lo, hi, [_M]) J = array(xp, jac_ref) > op, _ = _lower(xp, matrix, lo, hi) tests/unit/test_linear_ineq_lowering.py:664: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_wrapper_coo_values_reuse_the_cached_selection[array_api_strict] _____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6d374d0> def test_wrapper_coo_values_reuse_the_cached_selection(namespace, monkeypatch): # The sparse route refreshes values every iteration; with a structural # inner pattern the wrapper must not re-derive the selection (cumulative # sums + data-dependent nonzero syncs) on each refresh. import ipax.backend.operators as ops xp = namespace rows, lo, hi = _random_block() class _Custom(COOOperator): pass r, c, v = _triplets(xp, rows) > op, _ = _lower(xp, _Custom(r, c, v, (_M, _N), pattern_key="custom"), lo, hi) tests/unit/test_linear_ineq_lowering.py:689: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_wrapper_without_a_pattern_key_rederives_its_coo[array_api_strict] ____ namespace = def test_wrapper_without_a_pattern_key_rederives_its_coo(namespace): # No structural promise from the inner operator ⇒ no cached plan: the # values are re-derived with the pattern each time (always correct). xp = namespace rows, lo, hi = _random_block() class _Custom(COOOperator): pass r, c, v = _triplets(xp, rows) > op, _ = _lower(xp, _Custom(r, c, v, (_M, _N)), lo, hi) tests/unit/test_linear_ineq_lowering.py:721: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_vstack_multipliers_are_ordered_block_by_block[array_api_strict] _____ namespace = def test_vstack_multipliers_are_ordered_block_by_block(namespace): # Documented order: a VStack lowers block by block (each block's lower rows, # then its upper rows); a single operator lowers all lower rows, then all # upper rows. Same set, different layout of y_ineq. xp = namespace rows, lo, hi = _random_block() stacked, sizes = _make(xp, "opaque", rows) top = _Opaque(array(xp, rows[:_SPLIT])) bottom = _Opaque(array(xp, rows[_SPLIT:])) > single, _ = _lower(xp, stacked, lo, hi) tests/unit/test_linear_ineq_lowering.py:740: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_vstack_subclass_is_wrapped_so_its_overrides_survive[array_api_strict] __ namespace = def test_vstack_subclass_is_wrapped_so_its_overrides_survive(namespace): # Regression: an ``isinstance`` dispatch decomposed a ``VStack`` subclass # into its blocks, silently dropping overridden algebra (the residuals of a # reproduction moved from [0, 2] to [-1, -1]). Only the exact ``VStack`` is # lowered block by block; a subclass takes the signed-row-selection path. xp = namespace rows, lo, hi = _random_block() calls = [] class _DoubledVStack(VStack): def matvec(self, v): return 2.0 * super().matvec(v) def rmatvec(self, v): return 2.0 * super().rmatvec(v) def gram(self, weights, *, accumulate_dtype=None, hinted_only=False): calls.append(1) return 4.0 * super().gram( weights, accumulate_dtype=accumulate_dtype, hinted_only=hinted_only ) top = _Opaque(array(xp, rows[:_SPLIT])) bottom = _Opaque(array(xp, rows[_SPLIT:])) matrix = _DoubledVStack((top, bottom)) jac_ref, _ = _reference(rows, lo, hi, [_M]) # one operator: no per-block split J = 2.0 * array(xp, jac_ref) > op, _ = _lower(xp, matrix, lo, hi) tests/unit/test_linear_ineq_lowering.py:779: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_vstack_with_one_bounded_block_is_not_restacked[array_api_strict] _____ namespace = def test_vstack_with_one_bounded_block_is_not_restacked(namespace): # Only the first block has finite bounds: the lowered result is that # block's own operator, not a one-element VStack. xp = namespace rows, lo, hi = _random_block() top = _Opaque(array(xp, rows[:_SPLIT])) bottom = _Opaque(array(xp, rows[_SPLIT:])) lo = lo[:_SPLIT] + [-_INF] * (_M - _SPLIT) hi = hi[:_SPLIT] + [_INF] * (_M - _SPLIT) > op, offset = _lower(xp, VStack((top, bottom)), lo, hi) tests/unit/test_linear_ineq_lowering.py:854: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:272: in _lower_two_sided return _lower_stacked(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:228: in _lower_stacked op, offset = _lower_two_sided(block, lower[start:stop], upper[start:stop], xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_row_selection_without_rows_adjoint_is_zero[array_api_strict] _______ namespace = def test_row_selection_without_rows_adjoint_is_zero(namespace): # k = 0: Sᵀ v is an empty-source expansion, so the adjoint products are # zero for rank-1 and rank-2 inputs alike. from ipax.backend.operators import _SignedRowSelection xp = namespace a = Dense(array(xp, [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])) none = array(xp, [0.0, 0.0, 0.0]) > 0.5 > op = _SignedRowSelection(a, none, none) tests/unit/test_linear_ineq_lowering.py:884: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 0, 0], dtype=array_api_strict.int64),), kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_wrapper_forwards_gram_coo_with_folded_weights[array_api_strict] _____ namespace = def test_wrapper_forwards_gram_coo_with_folded_weights(namespace): xp = namespace rows, lo, hi = _random_block() class _OpaqueCoo(_Opaque): def gram_coo(self, weights): g = self.gram(weights) r, c = [], [] for i in range(_N): for j in range(_N): r.append(i) c.append(j) flat = xp.reshape(g, (-1,)) return ( xp.asarray(r, dtype=xp.int64), xp.asarray(c, dtype=xp.int64), flat, (_N, _N), ) > op, _ = _lower(xp, _OpaqueCoo(array(xp, rows)), lo, hi) tests/unit/test_linear_ineq_lowering.py:912: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_linear_ineq_lowering.py:310: in _lower return _lower_two_sided(matrix, array(xp, lo), array(xp, hi), xp) ipax/problem/linear_ineq.py:275: in _lower_two_sided return _lower_wrapped(matrix, lower, upper, xp) ipax/problem/linear_ineq.py:204: in _lower_wrapped op = _SignedRowSelection(matrix, finite_l, finite_u) ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_gram_accumulate_dtype_hint_protocol[array_api_strict] __________ namespace = def test_gram_accumulate_dtype_hint_protocol(namespace): # The hint is how gram_dtype="auto" discovers that the constraint data # carries only float32 information: storage-level metadata, forwarded by # every wrapper. Absent evidence, the answer is None (native). from ipax.backend.operators import CSROperator, VStack from ipax.problem.scaling import _RowScaled xp = namespace dense64 = Dense(xp.asarray([[1.0, 2.0], [3.0, 4.0]], dtype=xp.float64)) dense32 = Dense(xp.asarray([[1.0, 2.0], [3.0, 4.0]], dtype=xp.float32)) assert dense64.gram_accumulate_dtype_hint() is None assert dense32.gram_accumulate_dtype_hint() == "float32" indptr = xp.asarray([0, 1, 2]) indices = xp.asarray([0, 1]) values64 = xp.asarray([1.0, 2.0], dtype=xp.float64) > csr64 = CSROperator(indptr, indices, values64, (2, 2)) tests/unit/test_mixed_precision_dense.py:711: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 1, 2], dtype=array_api_strict.int64), Array([0, 1], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_solve_hs35_with_mixed_gram_matches_reference[array_api_strict] ______ namespace = def test_solve_hs35_with_mixed_gram_matches_reference(namespace): # End-to-end: the full IPM with the mixed-precision dense route converges # to the known optimum of an inequality QP on every backend. from ipax import Options, Status, solve from ipax.testing.problems import HS35 xp = namespace problem = HS35(xp) x0 = xp.asarray([0.5, 0.5, 0.5], dtype=xp.float64) > result = solve( problem, x0, options=Options( hessian="exact", linsolve="dense", dense=DenseOptions(gram_dtype="float32"), ), ) tests/unit/test_mixed_precision_dense.py:1225: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_complementarity_measures_average_and_min[array_api_strict] ________ namespace = def test_complementarity_measures_average_and_min(namespace): xp = namespace # 2 slack pairs (0.5, 0.5), active-lower pairs (0.2, 0.2), active-upper # pair (0.4); masked-out entries carry junk that must not leak in. > avg, mn = complementarity_measures( s=array(xp, [1.0, 2.0]), y_ineq=array(xp, [0.5, 0.25]), z_lower=array(xp, [2.0, 1.0, 5.0]), z_upper=array(xp, [9.0, 9.0, 0.8]), x_minus_l=array(xp, [0.1, 0.2, 7.0]), u_minus_x=array(xp, [3.0, 4.0, 0.5]), mask_l=xp.asarray([True, True, False]), mask_u=xp.asarray([False, False, True]), m=2, n_bounds=3, ) tests/unit/test_mu_schedule.py:101: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/barrier.py:234: in complementarity_measures xp.minimum( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.2, 0.2, inf], dtype=array_api_strict.float64), Array([inf, inf, 0.4], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_complementarity_measures_bounds_only[array_api_strict] __________ namespace = def test_complementarity_measures_bounds_only(namespace): xp = namespace > avg, mn = complementarity_measures( s=array(xp, []), y_ineq=array(xp, []), z_lower=array(xp, [2.0, 1.0, 5.0]), z_upper=array(xp, [9.0, 9.0, 0.8]), x_minus_l=array(xp, [0.1, 0.2, 7.0]), u_minus_x=array(xp, [3.0, 4.0, 0.5]), mask_l=xp.asarray([True, True, False]), mask_u=xp.asarray([False, False, True]), m=0, n_bounds=3, ) tests/unit/test_mu_schedule.py:119: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/barrier.py:234: in complementarity_measures xp.minimum( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.2, 0.2, inf], dtype=array_api_strict.float64), Array([inf, inf, 0.4], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_schedule_solves_hs35_and_changes_mu_trace[array_api_strict-adaptive] ___ namespace = schedule = 'adaptive' @pytest.mark.parametrize("schedule", ["adaptive", "breedveld", "quality"]) def test_schedule_solves_hs35_and_changes_mu_trace(namespace, schedule): > problem, result = _solve_hs35(namespace, schedule) tests/unit/test_mu_schedule.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_schedule_solves_hs35_and_changes_mu_trace[array_api_strict-breedveld] __ namespace = schedule = 'breedveld' @pytest.mark.parametrize("schedule", ["adaptive", "breedveld", "quality"]) def test_schedule_solves_hs35_and_changes_mu_trace(namespace, schedule): > problem, result = _solve_hs35(namespace, schedule) tests/unit/test_mu_schedule.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_schedule_solves_hs35_and_changes_mu_trace[array_api_strict-quality] ___ namespace = schedule = 'quality' @pytest.mark.parametrize("schedule", ["adaptive", "breedveld", "quality"]) def test_schedule_solves_hs35_and_changes_mu_trace(namespace, schedule): > problem, result = _solve_hs35(namespace, schedule) tests/unit/test_mu_schedule.py:175: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_schedule_solves_bound_qp[array_api_strict-adaptive] ___________ namespace = schedule = 'adaptive' @pytest.mark.parametrize("schedule", ["adaptive", "breedveld", "quality"]) def test_schedule_solves_bound_qp(namespace, schedule): problem = BoundConstrainedQP(namespace) > result = solve( problem, array(namespace, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense", mu_schedule=schedule), ) tests/unit/test_mu_schedule.py:188: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_schedule_solves_bound_qp[array_api_strict-breedveld] ___________ namespace = schedule = 'breedveld' @pytest.mark.parametrize("schedule", ["adaptive", "breedveld", "quality"]) def test_schedule_solves_bound_qp(namespace, schedule): problem = BoundConstrainedQP(namespace) > result = solve( problem, array(namespace, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense", mu_schedule=schedule), ) tests/unit/test_mu_schedule.py:188: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_schedule_solves_bound_qp[array_api_strict-quality] ____________ namespace = schedule = 'quality' @pytest.mark.parametrize("schedule", ["adaptive", "breedveld", "quality"]) def test_schedule_solves_bound_qp(namespace, schedule): problem = BoundConstrainedQP(namespace) > result = solve( problem, array(namespace, [0.25, 0.75]), options=Options(hessian="exact", linsolve="dense", mu_schedule=schedule), ) tests/unit/test_mu_schedule.py:188: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0. , 0.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_breedveld_schedule_keeps_mu_until_first_step[array_api_strict] ______ namespace = def test_breedveld_schedule_keeps_mu_until_first_step(namespace): # σ(α) needs a previously *accepted* steplength (Breedveld 2017, eq. (12)); # before the first step the schedule must leave μ at μ_init rather than # consume the α = 1 sentinel (which would crash μ to the floor at once). > _, result = _solve_hs35(namespace, "breedveld") tests/unit/test_mu_schedule.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_probing_standalone_solves_and_changes_mu_trace[array_api_strict] _____ namespace = def test_probing_standalone_solves_and_changes_mu_trace(namespace): # NWW 2009 "Mehrotra probing" as a plain strategy: the affine solve is only # a σ probe; the step itself is the ordinary centered Newton direction. > problem, result = _solve_hs35(namespace, "probing") tests/unit/test_mu_schedule.py:213: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_quality_standalone_solves_and_changes_mu_trace[array_api_strict] _____ namespace = def test_quality_standalone_solves_and_changes_mu_trace(namespace): # NWW 2009 §3.3 quality function as a plain strategy: like probing it needs # the affine direction, so the standalone mode runs the corrector path with # a plain centered re-solve; σ then minimizes the predicted full-KKT model. > problem, result = _solve_hs35(namespace, "quality") tests/unit/test_mu_schedule.py:225: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____________ test_default_schedule_is_monotone[array_api_strict] ______________ namespace = def test_default_schedule_is_monotone(namespace): # Default decided by the S2MPJ v10 paired A/B (2026-07-08): monotone beat # probing on every config, 3837 vs 3770 correct in total — probing crashes # μ faster than the duals can follow on enough problems (tail stalls at # kkt ~1e-4). The non-monotone oracles remain explicit opt-ins. assert Options().mu_schedule == "monotone" problem = HS35(namespace) x0 = array(namespace, [0.5, 0.5, 0.5]) > default = solve(problem, x0, options=Options(hessian="exact", linsolve="dense")) tests/unit/test_mu_schedule.py:242: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_adaptive_oracle_steers_the_corrector[array_api_strict-mehrotra] _____ namespace = corrections = 'mehrotra' @pytest.mark.parametrize("corrections", ["mehrotra", "gondzio"]) def test_adaptive_oracle_steers_the_corrector(namespace, corrections): # The corrector consumes the oracle's μ target (NWW 2009: "the corrector is # not part of the selection of the barrier parameter"): choosing the LOQO # oracle with corrections active must change the μ trace vs. probing. > problem, result = _solve_hs35(namespace, "adaptive", corrections=corrections) tests/unit/test_mu_schedule.py:260: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_adaptive_oracle_steers_the_corrector[array_api_strict-gondzio] ______ namespace = corrections = 'gondzio' @pytest.mark.parametrize("corrections", ["mehrotra", "gondzio"]) def test_adaptive_oracle_steers_the_corrector(namespace, corrections): # The corrector consumes the oracle's μ target (NWW 2009: "the corrector is # not part of the selection of the barrier parameter"): choosing the LOQO # oracle with corrections active must change the μ trace vs. probing. > problem, result = _solve_hs35(namespace, "adaptive", corrections=corrections) tests/unit/test_mu_schedule.py:260: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_breedveld_oracle_with_corrector_solves[array_api_strict] _________ namespace = def test_breedveld_oracle_with_corrector_solves(namespace): > problem, result = _solve_hs35(namespace, "breedveld", corrections="gondzio") tests/unit/test_mu_schedule.py:269: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:157: in _solve_hs35 return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_probing_sigma_default_never_consults_the_mehrotra_rule[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6c8f4d0> def test_probing_sigma_default_never_consults_the_mehrotra_rule(namespace, monkeypatch): # The unclipped Mehrotra σ rule is opt-in: under the default options the # probing oracle must go through the NWW rule (``probing_mu``) and never # reach ``mehrotra_probing_mu``. import ipax.ipm.driver as driver_module assert BarrierOptions().probing_sigma == "nww" calls = {"nww": 0, "mehrotra": 0} original_nww = driver_module.probing_mu original_mehrotra = driver_module.mehrotra_probing_mu def nww_spy(context): calls["nww"] += 1 return original_nww(context) def mehrotra_spy(context, tau): calls["mehrotra"] += 1 return original_mehrotra(context, tau=tau) monkeypatch.setattr(driver_module, "probing_mu", nww_spy) monkeypatch.setattr(driver_module, "mehrotra_probing_mu", mehrotra_spy) > _, default = _solve_hs35_probing(namespace) tests/unit/test_mu_schedule.py:314: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:279: in _solve_hs35_probing return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_mehrotra_probing_sigma_solves_and_uses_the_breedveld_tau[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6c8fd90> def test_mehrotra_probing_sigma_solves_and_uses_the_breedveld_tau( namespace, monkeypatch ): # probing_sigma="mehrotra" routes the probing oracle to the unclipped rule # (Mehrotra 1992; Breedveld 2017 supplement eqs. (4)–(7)) with the probe # step cut back by BreedveldOptions.tau. import ipax.ipm.driver as driver_module seen: list[float] = [] original = driver_module.mehrotra_probing_mu def spy(context, tau): seen.append(tau) return original(context, tau=tau) monkeypatch.setattr(driver_module, "mehrotra_probing_mu", spy) > problem, result = _solve_hs35_probing(namespace, probing_sigma="mehrotra") tests/unit/test_mu_schedule.py:346: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:279: in _solve_hs35_probing return problem, solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_breedveld_mehrotra_and_gondzio_variant_solve_hs35[array_api_strict] ___ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6429a20> def test_breedveld_mehrotra_and_gondzio_variant_solve_hs35(namespace, monkeypatch): # Breedveld 2017 supplement A.1 + A.2 together (σ rule + Gondzio variant). import dataclasses import ipax.ipm.corrections as corrections_module from ipax.options import CorrectionsOptions # Spy: at least one candidate corrector solve of the Breedveld Gondzio # loop must run (not only the Mehrotra step preceding it). candidate_solves = [] original = corrections_module._breedveld_gondzio def spy(ctx, xp, step, mu_target, targets, max_corrections): def counting_solve(*args): candidate_solves.append(mu_target) return ctx.solve(*args) counted = dataclasses.replace(ctx, solve=counting_solve) return original(counted, xp, step, mu_target, targets, max_corrections) monkeypatch.setattr(corrections_module, "_breedveld_gondzio", spy) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", mu_schedule="probing", corrections=CorrectionsOptions( method="gondzio", gondzio_variant="breedveld" ), globalization="breedveld", barrier=BarrierOptions(probing_sigma="mehrotra"), ), ) tests/unit/test_mu_schedule.py:378: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_centrality_floor_steers_free_mode_mu[array_api_strict] __________ namespace = def test_centrality_floor_steers_free_mode_mu(namespace): # μ_free ≥ κ_cent·max(dual, primal infeasibility): a large κ visibly lifts # the μ trace on a problem the oracle would otherwise decenter, without # costing convergence. problem = HS35(namespace) x0 = array(namespace, [0.5, 0.5, 0.5]) def run(barrier: BarrierOptions): return solve( problem, x0, options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", barrier=barrier, ), ) > lifted = run(BarrierOptions(kappa_centrality=0.5)) tests/unit/test_mu_schedule.py:536: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:525: in run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_forced_fallback_steers_mu_and_still_converges[array_api_strict] _____ namespace = def test_forced_fallback_steers_mu_and_still_converges(namespace): # κ = 0.01 with a length-0 window demands a 100× KKT-error reduction every # free-mode iteration — practically guaranteed to trip, so the run must # fall back to monotone μ handling and still reach the optimum. problem = HS35(namespace) x0 = array(namespace, [0.5, 0.5, 0.5]) def run(barrier: BarrierOptions): return solve( problem, x0, options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", barrier=barrier, ), ) > forced = run(BarrierOptions(fallback_kappa=0.01, fallback_window=0)) tests/unit/test_mu_schedule.py:563: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_mu_schedule.py:552: in run return solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_driver_passes_infeasibility_to_fallback_mu[array_api_strict] _______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6e90520> def test_driver_passes_infeasibility_to_fallback_mu(namespace, monkeypatch): # Wiring proof for the fallback-path centrality floor: when the safeguard # trips, the driver must hand the current primal/dual infeasibility to # ``fallback_mu`` so the re-entry μ respects the El-Bakry floor. (The # formula itself is pinned by the fallback_mu unit tests above; a trace # comparison cannot discriminate this path because the free-mode oracles # share the same floor.) import ipax.ipm.driver as driver_mod seen: dict[str, float] = {} original = driver_mod.fallback_mu def recording(avg_compl, options, tol, infeasibility=0.0): seen["infeasibility"] = float(infeasibility) return original(avg_compl, options, tol) monkeypatch.setattr(driver_mod, "fallback_mu", recording) problem = HS35(namespace) > result = solve( problem, array(namespace, [0.5, 0.5, 0.5]), options=Options( hessian="exact", linsolve="dense", mu_schedule="adaptive", # Forced trip: κ = 0.01 with a length-0 window demands a 100× KKT # error reduction every free-mode iteration (see above). barrier=BarrierOptions(fallback_kappa=0.01, fallback_window=0), ), ) tests/unit/test_mu_schedule.py:591: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_csr_expands_to_correct_coo_structure[array_api_strict] __________ namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_csr_expands_to_correct_coo_structure(namespace, tol): # CSR for [[2, -1, 0.5], [0, 3, 4]]. indptr = namespace.asarray([0, 3, 5]) indices = namespace.asarray([0, 1, 2, 1, 2]) data = array(namespace, [2.0, -1.0, 0.5, 3.0, 4.0]) > op = CSROperator(indptr, indices, data, (2, 3)) tests/unit/test_public_sparse_operators.py:76: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 3, 5], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_csc_expands_to_correct_coo_structure[array_api_strict] __________ namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_csc_expands_to_correct_coo_structure(namespace, tol): # CSC for [[2, -1, 0.5], [0, 3, 4]]. indptr = namespace.asarray([0, 1, 3, 5]) indices = namespace.asarray([0, 0, 1, 0, 1]) data = array(namespace, [2.0, -1.0, 3.0, 0.5, 4.0]) > op = CSCOperator(indptr, indices, data, (2, 3)) tests/unit/test_public_sparse_operators.py:90: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1361: in __init__ cols = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 1, 3, 5], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_coo_values_matches_to_coo_values[array_api_strict] ____________ namespace = tol = {'atol': 1e-09, 'rtol': 1e-09} def test_coo_values_matches_to_coo_values(namespace, tol): indptr = namespace.asarray([0, 1, 3, 5]) indices = namespace.asarray([0, 0, 1, 0, 1]) data = array(namespace, [2.0, -1.0, 3.0, 0.5, 4.0]) > op = CSCOperator(indptr, indices, data, (2, 3)) tests/unit/test_public_sparse_operators.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1361: in __init__ cols = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0, 1, 3, 5], dtype=array_api_strict.int64), Array([0, 1, 2, 3, 4], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___________ test_first_feasible_recenter_keeps_mu[array_api_strict] ____________ namespace = def test_first_feasible_recenter_keeps_mu(namespace): # The HS101 fix: the first re-center repairs slacks/duals at the *current* # μ. No barrier escalation — outcome.mu is None (keep the loop's μ). opts = Options() driver = _driver(namespace, opts) rstate = _RestorationState() > outcome = _handle(driver, namespace, mu=1e-9, rstate=rstate) tests/unit/test_recenter_mu_escalation.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_recenter_mu_escalation.py:45: in _handle return driver._handle_restoration( ipax/ipm/driver.py:3181: in _handle_restoration s, y_ineq = recenter_slacks_duals(xp, g, y_ineq, mu_eff) ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([1.e-10], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_repeat_feasible_recenter_raises_mu[array_api_strict] ___________ namespace = def test_repeat_feasible_recenter_raises_mu(namespace): # The treadmill signature: a second feasible re-center in the same solve # means re-centering at the current μ already failed once — raise μ so the # next barrier problem is one the step/line search can actually solve. opts = Options() driver = _driver(namespace, opts) rstate = _RestorationState() mu = 1e-9 > first = _handle(driver, namespace, mu=mu, rstate=rstate) tests/unit/test_recenter_mu_escalation.py:93: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_recenter_mu_escalation.py:45: in _handle return driver._handle_restoration( ipax/ipm/driver.py:3181: in _handle_restoration s, y_ineq = recenter_slacks_duals(xp, g, y_ineq, mu_eff) ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([1.e-10], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_repeat_recenter_mu_capped_at_mu_init[array_api_strict] __________ namespace = def test_repeat_recenter_mu_capped_at_mu_init(namespace): # At μ already equal to mu_init there is no headroom: the re-center must # still resume, and any μ it returns must not exceed the cold-start value. opts = Options() driver = _driver(namespace, opts) rstate = _RestorationState() mu = opts.barrier.mu_init > _handle(driver, namespace, mu=mu, rstate=rstate) tests/unit/test_recenter_mu_escalation.py:112: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_recenter_mu_escalation.py:45: in _handle return driver._handle_restoration( ipax/ipm/driver.py:3181: in _handle_restoration s, y_ineq = recenter_slacks_duals(xp, g, y_ineq, mu_eff) ipax/ipm/init.py:214: in recenter_slacks_duals s = xp.maximum(-g, floor) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.01], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_restoration_reduces_equality_violation[array_api_strict] _________ namespace = def test_restoration_reduces_equality_violation(namespace): problem = HS6(namespace) # A point off the constraint manifold: 10(x2 - x1^2) = 10(0 - 4) = -40. x = array(namespace, [2.0, 0.0]) s = namespace.zeros((0,), dtype=x.dtype) theta0 = float(namespace.max(namespace.abs(problem.eq_constraints(x)))) > x_new, _, exit_reason = restore( xp=namespace, x=x, s=s, m=0, m_eq=1, eq_fn=problem.eq_constraints, eq_jac_fn=lambda z: as_operator(problem.eq_jacobian(z)), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=namespace.zeros((2,), dtype=namespace.bool), mask_u=namespace.zeros((2,), dtype=namespace.bool), lower_safe=namespace.zeros((2,), dtype=x.dtype), upper_safe=namespace.zeros((2,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([2., 0.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_matrix_free_restoration_uses_only_jacobian_products[array_api_strict] __ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c642be00> def test_matrix_free_restoration_uses_only_jacobian_products(namespace, monkeypatch): """The opt-in route must never construct an n-by-n identity or probe matmat.""" xp = namespace n = 3 x = array(xp, [2.0, 0.0, -1.0]) eye_shapes: list[int] = [] original_eye = xp.eye def recording_eye(size, *args, **kwargs): eye_shapes.append(int(size)) return original_eye(size, *args, **kwargs) monkeypatch.setattr(xp, "eye", recording_eye) eq_fn, _ = _two_equalities(xp) def eq_jac_fn(z): del z def matvec(v): return xp.stack((v[0] + 2.0 * v[1], v[2])) def rmatvec(v): return xp.stack((v[0], 2.0 * v[0], v[1])) op = MatrixFreeJacobian((2, n), matvec, rmatvec) def forbidden_matmat(V): del V raise AssertionError("matrix-free restoration densified the Jacobian") op.matmat = forbidden_matmat # type: ignore[method-assign] return op > x_new, _, exit_reason = restore( **_restore_kwargs(xp, x, m_eq=2, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn), linear_solver=_krylov_solver(rtol=1e-10), ) tests/unit/test_restoration.py:127: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 2., 0., -1.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_matrix_free_restoration_uses_the_truncated_krylov_iterate[array_api_strict] _ namespace = def test_matrix_free_restoration_uses_the_truncated_krylov_iterate(namespace): """A work-capped inner solve is a trial direction, not a rejected rung. CG iterates minimize the Gauss-Newton model over a growing Krylov space, so the truncated iterate is a descent direction (Steihaug 1983). Discarding it and climbing the LM ladder would degrade the route to damped steepest descent at large λ — and with a one-iteration cap could never certify anything but a solve failure. """ xp = namespace x = array(xp, [2.0, 0.0, -1.0]) eq_fn, eq_jac_fn = _two_equalities(xp) > x_new, _, exit_reason = restore( **_restore_kwargs(xp, x, m_eq=2, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn), linear_solver=_krylov_solver(max_iter=1, rtol=1e-12), ) tests/unit/test_restoration.py:150: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 2., 0., -1.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_matrix_free_restoration_tracks_dense_on_an_ill_conditioned_jacobian[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c722a900> def test_matrix_free_restoration_tracks_dense_on_an_ill_conditioned_jacobian( namespace, monkeypatch ): """Where restoration is actually entered — rank-deficient, ill-conditioned Jacobians — the Krylov route must make progress comparable to the dense Gauss-Newton solve on the same outer budget, not crawl along the LM ladder.""" import numpy as np import ipax.ipm.restoration as restoration_mod monkeypatch.setattr(restoration_mod, "_MAX_ITER", 20) xp = namespace rng = np.random.default_rng(0) # Sized so that discarding truncated CG iterates (climbing the LM ladder # instead) measurably lags dense: 3.8x here vs 1.4x with the reuse. n, m, rank = 200, 150, 130 u, _ = np.linalg.qr(rng.standard_normal((m, m))) v, _ = np.linalg.qr(rng.standard_normal((n, n))) sv = np.zeros(m) sv[:rank] = np.logspace(0, -5, rank) a = (u * sv) @ v[:m, :] b = a @ rng.standard_normal(n) + 1e-3 * rng.standard_normal(m) a_xp = array(xp, a.tolist()) b_xp = array(xp, b.tolist()) x0 = array(xp, rng.standard_normal(n).tolist()) def eq_fn(z): return xp.matmul(a_xp, z) - b_xp def eq_jac_fn(z): del z return as_operator(a_xp) kwargs = _restore_kwargs(xp, x0, m_eq=m, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn) > x_dense, _, _ = restore(**kwargs) tests/unit/test_restoration.py:193: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([-1.48308042e+00, -2.23211623e+00, 6.88233525e-01, -9.54544096e-01, -2.87439099e-01, -9.00755695...1.e-08, 1.e-08, 1.e-08, 1.e-08, 1.e-08, 1.e-08, 1.e-08, 1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_matrix_free_restoration_does_not_fall_back_on_krylov_failure[array_api_strict] _ namespace = def test_matrix_free_restoration_does_not_fall_back_on_krylov_failure(namespace): """Failed inner solves must climb the LM ladder, never allocate a dense matrix.""" xp = namespace calls = {"factor": 0, "solve": 0} class FailingSolver: def factor(self, operator): calls["factor"] += 1 assert operator.shape == (1, 1) def solve(self, rhs): del rhs calls["solve"] += 1 raise LinearSolveError("synthetic Krylov failure") def eq_jac_fn(z): del z return MatrixFreeJacobian((1, 1), lambda v: v, lambda v: v) x = array(xp, [0.0]) > _, _, exit_reason = restore( **_restore_kwargs(xp, x, m_eq=1, eq_fn=lambda z: z - 1.0, eq_jac_fn=eq_jac_fn), linear_solver=FailingSolver(), # type: ignore[arg-type] ) tests/unit/test_restoration.py:222: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_matrix_free_and_dense_restoration_match_with_active_bounds_and_inequality[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c64289f0> def test_matrix_free_and_dense_restoration_match_with_active_bounds_and_inequality( namespace, monkeypatch ): """The product operator must reproduce the dense reduced normal equations.""" import ipax.ipm.restoration as restoration_mod monkeypatch.setattr(restoration_mod, "_MAX_ITER", 1) xp = namespace x = xp.zeros((3,), dtype=xp.float64) def eq_fn(z): return xp.stack((z[0] + z[1] + 1.0,)) def eq_jac_fn(z): del z return as_operator(array(xp, [[1.0, 1.0, 0.0]])) def ineq_fn(z): return xp.stack((z[2] + 0.5,)) def ineq_jac_fn(z): del z return as_operator(array(xp, [[0.0, 0.0, 1.0]])) kwargs = _restore_kwargs( xp, x, s=xp.ones((1,), dtype=x.dtype), m=1, m_eq=1, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn, ineq_fn=ineq_fn, ineq_jac_fn=ineq_jac_fn, mask_l=xp.asarray([True, False, False], dtype=xp.bool), ) > x_dense, s_dense, dense_exit = restore(**kwargs) tests/unit/test_restoration.py:269: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0., 0., 0.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_matrix_free_restoration_requires_an_adjoint[array_api_strict] ______ namespace = def test_matrix_free_restoration_requires_an_adjoint(namespace): xp = namespace x = array(xp, [0.0]) with pytest.raises(NotImplementedError, match="adjoint"): > restore( **_restore_kwargs( xp, x, m_eq=1, eq_fn=lambda z: z - 1.0, eq_jac_fn=lambda z: MatrixFreeJacobian((1, 1), lambda v: v), ), linear_solver=_krylov_solver(), ) tests/unit/test_restoration.py:284: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_solve_rejects_matrix_free_restoration_without_an_adjoint_up_front[array_api_strict] _ namespace = def test_solve_rejects_matrix_free_restoration_without_an_adjoint_up_front( namespace, ): """A matvec-only Jacobian must be refused at entry, not hundreds of iterations later when restoration first needs the adjoint.""" xp = namespace class MatvecOnly(Problem): @property def n_vars(self) -> int: return 2 def objective(self, x): return xp.sum(x * x) def gradient(self, x): return 2.0 * x def eq_constraints(self, x): return xp.stack((x[0] + x[1] - 1.0,)) def eq_jacobian(self, x): del x return MatrixFreeJacobian((1, 2), lambda v: xp.stack((v[0] + v[1],))) options = Options( hessian="lbfgs", restoration=RestorationOptions(linear_solver="krylov") ) with pytest.raises(ValueError, match="adjoint"): > solve(MatvecOnly(), array(xp, [0.0, 0.0]), options=options) tests/unit/test_restoration.py:325: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ----------------------------- Captured stderr call ----------------------------- ipax solving: 2 variables (bounds: 0 lower, 0 upper), 1 equalities, 0 inequalities | linear solver = dense | hessian = lbfgs problem structure: variables = 2 inequalities = 0 equalities = 1 nonlinear + 0 linear bounded vars = 0 lower, 0 upper solver setup: hessian = lbfgs linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg ------------------------------ Captured log call ------------------------------- RESULT ipax:solve.py:365 ipax solving: 2 variables (bounds: 0 lower, 0 upper), 1 equalities, 0 inequalities | linear solver = dense | hessian = lbfgs PROBLEM ipax:solve.py:378 problem structure: variables = 2 inequalities = 0 equalities = 1 nonlinear + 0 linear bounded vars = 0 lower, 0 upper SOLVER ipax:solve.py:390 solver setup: hessian = lbfgs linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg _______ test_restoration_flags_inconsistent_equalities[array_api_strict] _______ namespace = def test_restoration_flags_inconsistent_equalities(namespace): problem = InfeasibleEqualities(namespace) x = array(namespace, [0.5]) s = namespace.zeros((0,), dtype=x.dtype) > _, _, exit_reason = restore( xp=namespace, x=x, s=s, m=0, m_eq=2, eq_fn=problem.eq_constraints, eq_jac_fn=lambda z: as_operator(problem.eq_jacobian(z)), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=namespace.zeros((1,), dtype=namespace.bool), mask_u=namespace.zeros((1,), dtype=namespace.bool), lower_safe=namespace.zeros((1,), dtype=x.dtype), upper_safe=namespace.zeros((1,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:333: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.5], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_restoration_keeps_projected_bound_point_strictly_interior[array_api_strict] _ namespace = def test_restoration_keeps_projected_bound_point_strictly_interior(namespace): class BoundaryEquality(Problem): @property def n_vars(self) -> int: return 1 def objective(self, x): return namespace.sum(x * x) def eq_constraints(self, x): return namespace.stack((x[0],)) def eq_jacobian(self, x): del x return array(namespace, [[1.0]]) problem = BoundaryEquality() x = array(namespace, [0.5]) s = namespace.zeros((0,), dtype=x.dtype) > x_new, _, exit_reason = restore( xp=namespace, x=x, s=s, m=0, m_eq=1, eq_fn=problem.eq_constraints, eq_jac_fn=lambda z: as_operator(problem.eq_jacobian(z)), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=namespace.asarray([True], dtype=namespace.bool), mask_u=namespace.asarray([False], dtype=namespace.bool), lower_safe=array(namespace, [0.0]), upper_safe=array(namespace, [0.0]), tol=1e-8, ) tests/unit/test_restoration.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.5], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_restoration_survives_singular_gauss_newton_system[array_api_strict] ___ namespace = def test_restoration_survives_singular_gauss_newton_system(namespace): # Regression: an extreme-scale constraint Jacobian makes the Gauss-Newton # normal matrix J^T J numerically singular (cf. HS7, whose (1+x1^2)^2 # Jacobian reaches ~1e201 at a bad restoration iterate). The damped solve # must degrade gracefully — previously numpy's solve raised # ``LinAlgError: Singular matrix`` and crashed the whole solve. xp = namespace x = array(xp, [1.0, 1.0]) s = xp.zeros((0,), dtype=x.dtype) # Moderate residual but a hugely ill-scaled Jacobian at this iterate. jac = array(xp, [[4.0e100, -1.9e27]]) def eq_fn(z): del z return array(xp, [1.0]) def eq_jac_fn(z): del z return as_operator(jac) > x_new, _, exit_reason = restore( xp=xp, x=x, s=s, m=0, m_eq=1, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn, ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=xp.zeros((2,), dtype=xp.bool), mask_u=xp.zeros((2,), dtype=xp.bool), lower_safe=xp.zeros((2,), dtype=x.dtype), upper_safe=xp.zeros((2,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:415: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_dense_gauss_newton_solve_propagates_non_numerical_errors[array_api_strict-TypeError] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c635e040> bug = TypeError("asarray() got an unexpected keyword argument 'device'") @pytest.mark.parametrize( "bug", [ TypeError("asarray() got an unexpected keyword argument 'device'"), MemoryError("host allocation failed"), ], ids=lambda e: type(e).__name__, ) def test_dense_gauss_newton_solve_propagates_non_numerical_errors( namespace, monkeypatch, bug ): # The dense LM solve treats only a numerical failure # (``numerical_failure_types()``) as a rejected trial; a bug or a resource # failure must leave ``restore`` as itself instead of being turned into a # NO_DESCENT "infeasibility certificate". xp = namespace x = array(xp, [1.0, 1.0]) def raising_solve(*args, **kwargs): del args, kwargs raise bug monkeypatch.setattr(xp.linalg, "solve", raising_solve) with pytest.raises(type(bug)) as info: > restore( xp=xp, x=x, s=xp.zeros((0,), dtype=x.dtype), m=0, m_eq=1, eq_fn=lambda z: array(xp, [1.0]), eq_jac_fn=lambda z: as_operator(array(xp, [[1.0, 2.0]])), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=xp.zeros((2,), dtype=xp.bool), mask_u=xp.zeros((2,), dtype=xp.bool), lower_safe=xp.zeros((2,), dtype=x.dtype), upper_safe=xp.zeros((2,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:463: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_dense_gauss_newton_solve_propagates_non_numerical_errors[array_api_strict-MemoryError] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a4c9f0> bug = MemoryError('host allocation failed') @pytest.mark.parametrize( "bug", [ TypeError("asarray() got an unexpected keyword argument 'device'"), MemoryError("host allocation failed"), ], ids=lambda e: type(e).__name__, ) def test_dense_gauss_newton_solve_propagates_non_numerical_errors( namespace, monkeypatch, bug ): # The dense LM solve treats only a numerical failure # (``numerical_failure_types()``) as a rejected trial; a bug or a resource # failure must leave ``restore`` as itself instead of being turned into a # NO_DESCENT "infeasibility certificate". xp = namespace x = array(xp, [1.0, 1.0]) def raising_solve(*args, **kwargs): del args, kwargs raise bug monkeypatch.setattr(xp.linalg, "solve", raising_solve) with pytest.raises(type(bug)) as info: > restore( xp=xp, x=x, s=xp.zeros((0,), dtype=x.dtype), m=0, m_eq=1, eq_fn=lambda z: array(xp, [1.0]), eq_jac_fn=lambda z: as_operator(array(xp, [[1.0, 2.0]])), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=xp.zeros((2,), dtype=xp.bool), mask_u=xp.zeros((2,), dtype=xp.bool), lower_safe=xp.zeros((2,), dtype=x.dtype), upper_safe=xp.zeros((2,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:463: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_rejected_lm_trials_reuse_the_jacobian[array_api_strict] _________ namespace = def test_rejected_lm_trials_reuse_the_jacobian(namespace): # Levenberg-Marquardt damping control: a rejected trial step must retry with # a larger damping WITHOUT rebuilding the Jacobian/normal matrix — they # belong to the unchanged current iterate. arctan(x)=0 from x=2 makes the # undamped Gauss-Newton step overshoot (|dx| = |atan(x)|(1+x^2) > |x|), so # the first several trials are rejected while the damping grows. xp = namespace calls = {"jac": 0} def eq_fn(z): return xp.atan(z) def eq_jac_fn(z): calls["jac"] += 1 return as_operator(xp.reshape(1.0 / (1.0 + z * z), (1, 1))) x = array(xp, [2.0]) s = xp.zeros((0,), dtype=x.dtype) > x_new, _, exit_reason = restore( xp=xp, x=x, s=s, m=0, m_eq=1, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn, ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=xp.zeros((1,), dtype=xp.bool), mask_u=xp.zeros((1,), dtype=xp.bool), lower_safe=xp.zeros((1,), dtype=x.dtype), upper_safe=xp.zeros((1,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:500: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([2.], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_bound_blocked_infeasibility_is_box_stationary[array_api_strict] _____ namespace = def test_bound_blocked_infeasibility_is_box_stationary(namespace): # c(x) = x - 1 = 0 with the upper bound x <= 0: the descent direction points # out of the box, so the projected gradient is zero — a first-order # stationary point of the bound-constrained infeasibility. The verdict must # come from that test directly instead of grinding the LM damping to its # ceiling with one Jacobian rebuild per rejected (projection-swallowed) # trial (the MANNE stall anatomy, S2MPJ 2026-07 audit). xp = namespace calls = {"jac": 0} def eq_fn(z): return z - 1.0 def eq_jac_fn(z): calls["jac"] += 1 return as_operator(xp.ones((1, 1), dtype=z.dtype)) x = array(xp, [-0.5]) s = xp.zeros((0,), dtype=x.dtype) > x_new, _, exit_reason = restore( xp=xp, x=x, s=s, m=0, m_eq=1, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn, ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=xp.zeros((1,), dtype=xp.bool), mask_u=xp.asarray([True], dtype=xp.bool), lower_safe=xp.zeros((1,), dtype=x.dtype), upper_safe=xp.zeros((1,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:543: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([-0.5], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_restoration_recovers_inequality_slack_without_filter_residual[array_api_strict] _ namespace = def test_restoration_recovers_inequality_slack_without_filter_residual(namespace): class InactiveInequality(Problem): @property def n_vars(self) -> int: return 1 def objective(self, x): return namespace.sum(x * x) def ineq_constraints(self, x): del x return array(namespace, [-1e-4]) def ineq_jacobian(self, x): del x return array(namespace, [[0.0]]) problem = InactiveInequality() x = array(namespace, [0.0]) s = array(namespace, [1.0]) > _, s_new, exit_reason = restore( xp=namespace, x=x, s=s, m=1, m_eq=0, eq_fn=lambda z: namespace.zeros((0,), dtype=z.dtype), eq_jac_fn=lambda z: as_operator(namespace.zeros((0, 1), dtype=z.dtype)), ineq_fn=problem.ineq_constraints, ineq_jac_fn=lambda z: as_operator(problem.ineq_jacobian(z)), mask_l=namespace.zeros((1,), dtype=namespace.bool), mask_u=namespace.zeros((1,), dtype=namespace.bool), lower_safe=namespace.zeros((1,), dtype=x.dtype), upper_safe=namespace.zeros((1,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:588: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_blocked_bound_solves_the_reduced_system_on_the_free_set[array_api_strict] _ namespace = def test_blocked_bound_solves_the_reduced_system_on_the_free_set(namespace): # DRUGDIS/UBH5 anatomy (S2MPJ 2026-07 probe): with a variable pinned at its # bound by a dominant residual, the FULL-space Gauss-Newton step is ruled # by the blocked component; projection swallows it, the trial fails to # descend, and the LM loop degrades into a microscopic gradient crawl # (DRUGDIS: theta 0.19 -> 0.16 in 200 iterations). Solving the normal # system reduced to the FREE variables (projected Newton on the binding # set; Bertsekas 1999, §2.3) must instead place the free variable at its # optimum in a couple of iterations. # # Residuals: r1 = x1 + x2 - 1 (feasible part), r2 = M (x1 + 1) with x1 >= 0 # (pins x1 at the lower bound, gradient pointing out of the box). The # box-constrained infeasibility minimum is x = (0, 1). xp = namespace big = 1.0e3 calls = {"jac": 0} def eq_fn(z): return xp.stack((z[0] + z[1] - 1.0, big * (z[0] + 1.0))) def eq_jac_fn(z): calls["jac"] += 1 one = 1.0 + xp.zeros_like(z[0]) return as_operator( xp.stack((xp.stack((one, one)), xp.stack((big * one, 0.0 * one)))) ) x = array(xp, [0.0, 0.0]) s = xp.zeros((0,), dtype=x.dtype) > x_new, _, exit_reason = restore( xp=xp, x=x, s=s, m=0, m_eq=2, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn, ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=xp.asarray([True, False], dtype=xp.bool), mask_u=xp.zeros((2,), dtype=xp.bool), lower_safe=array(xp, [0.0, 0.0]), upper_safe=array(xp, [0.0, 0.0]), tol=1e-8, ) tests/unit/test_restoration.py:640: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0., 0.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____ test_budget_exit_is_not_an_infeasibility_certificate[array_api_strict] ____ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c635cec0> def test_budget_exit_is_not_an_infeasibility_certificate(namespace, monkeypatch): # An exhausted iteration budget says nothing about local infeasibility — # HS6 restoration converges given iterations, so a 1-iteration budget must # exit as BUDGET (uncertified), never as a stationarity certificate. import ipax.ipm.restoration as restoration_mod monkeypatch.setattr(restoration_mod, "_MAX_ITER", 1) problem = HS6(namespace) x = array(namespace, [2.0, 0.0]) s = namespace.zeros((0,), dtype=x.dtype) > _, _, exit_reason = restore( xp=namespace, x=x, s=s, m=0, m_eq=1, eq_fn=problem.eq_constraints, eq_jac_fn=lambda z: as_operator(problem.eq_jacobian(z)), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=namespace.zeros((2,), dtype=namespace.bool), mask_u=namespace.zeros((2,), dtype=namespace.bool), lower_safe=namespace.zeros((2,), dtype=x.dtype), upper_safe=namespace.zeros((2,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:678: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([2., 0.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_stall_window_exit_is_not_an_infeasibility_certificate[array_api_strict] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c5ca5940> def test_stall_window_exit_is_not_an_infeasibility_certificate(namespace, monkeypatch): # A plateau exit (accepted steps whose improvement is microscopic) is a # stall, not a stationarity certificate: here the gradient stays at # |2x - 1| ~ 9 throughout, but a pinned huge LM damping makes every # accepted step (and hence every f improvement) tiny, so the trailing # window fires. That exit must be reported as an uncertified stall. import ipax.ipm.restoration as restoration_mod monkeypatch.setattr(restoration_mod, "_LM_INIT", 1e14) problem = InfeasibleEqualities(namespace) x = array(namespace, [5.0]) s = namespace.zeros((0,), dtype=x.dtype) > _, _, exit_reason = restore( xp=namespace, x=x, s=s, m=0, m_eq=2, eq_fn=problem.eq_constraints, eq_jac_fn=lambda z: as_operator(problem.eq_jacobian(z)), ineq_fn=_no_ineq, ineq_jac_fn=_no_ineq, mask_l=namespace.zeros((1,), dtype=namespace.bool), mask_u=namespace.zeros((1,), dtype=namespace.bool), lower_safe=namespace.zeros((1,), dtype=x.dtype), upper_safe=namespace.zeros((1,), dtype=x.dtype), tol=1e-8, ) tests/unit/test_restoration.py:712: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([5.], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_restoration_escapes_a_symmetric_saddle_before_certifying[array_api_strict-dense] _ namespace = route = 'dense' @pytest.mark.parametrize("route", ["dense", "krylov"]) def test_restoration_escapes_a_symmetric_saddle_before_certifying(namespace, route): """A critical point on a symmetry-invariant subspace is a saddle, not a certificate: restoration must probe off the subspace before claiming local infeasibility (S2MPJ POWERSUMNE/CYCLOOCT/HADAMARD, 2026-09).""" xp = namespace x = array(xp, [1.5, 1.5]) eq_fn, eq_jac_fn = _symmetric_trap(xp) solver = None if route == "dense" else _krylov_solver() > x_new, _, exit_reason = restore( **_restore_kwargs(xp, x, m_eq=2, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn), linear_solver=solver, ) tests/unit/test_restoration.py:765: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.5, 1.5], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_restoration_escapes_a_symmetric_saddle_before_certifying[array_api_strict-krylov] _ namespace = route = 'krylov' @pytest.mark.parametrize("route", ["dense", "krylov"]) def test_restoration_escapes_a_symmetric_saddle_before_certifying(namespace, route): """A critical point on a symmetry-invariant subspace is a saddle, not a certificate: restoration must probe off the subspace before claiming local infeasibility (S2MPJ POWERSUMNE/CYCLOOCT/HADAMARD, 2026-09).""" xp = namespace x = array(xp, [1.5, 1.5]) eq_fn, eq_jac_fn = _symmetric_trap(xp) solver = None if route == "dense" else _krylov_solver() > x_new, _, exit_reason = restore( **_restore_kwargs(xp, x, m_eq=2, eq_fn=eq_fn, eq_jac_fn=eq_jac_fn), linear_solver=solver, ) tests/unit/test_restoration.py:765: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.5, 1.5], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_restoration_still_certifies_a_genuine_local_minimum[array_api_strict] __ namespace = def test_restoration_still_certifies_a_genuine_local_minimum(namespace): """The escape probe must not turn a true nonzero local minimizer of the infeasibility into a stall: ``x² = -1`` has none, and stays certified.""" xp = namespace problem = InfeasibleEqualities(xp) x = array(xp, [0.5]) > _, _, exit_reason = restore( **_restore_kwargs( xp, x, m_eq=1, eq_fn=problem.eq_constraints, eq_jac_fn=lambda z: as_operator(problem.eq_jacobian(z)), ), linear_solver=_krylov_solver(), ) tests/unit/test_restoration.py:781: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([0.5], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_dense_route_forms_a_large_gram_capable_block_through_the_operator[array_api_strict] _ namespace = def test_dense_route_forms_a_large_gram_capable_block_through_the_operator( namespace, ): xp = namespace jg, g, jc, c = _tall_blocks(xp) eq_calls: list[str] = [] ineq_calls: list[str] = [] eq_op = _GramSpyDense(jc, eq_calls) ineq_op = _GramSpyDense(jg, ineq_calls) # Threshold below both m*n (7*3 = 21, 2*3 = 6): both blocks switch. > hessian, grad, active, gpos = _assemble(xp, eq_op, c, ineq_op, g, 5) tests/unit/test_restoration.py:891: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration.py:865: in _assemble gpos = xp.maximum(g, xp.zeros_like(g)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0.4, -0.2, 1.3, 0. , 2.2, -1. , 0.7], dtype=array_api_strict.float64), Array([0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_dense_route_keeps_small_blocks_byte_identical[array_api_strict] _____ namespace = def test_dense_route_keeps_small_blocks_byte_identical(namespace): xp = namespace jg, g, jc, c = _tall_blocks(xp) eq_calls: list[str] = [] ineq_calls: list[str] = [] eq_op = _GramSpyDense(jc, eq_calls) ineq_op = _GramSpyDense(jg, ineq_calls) # Threshold at the larger m*n (a block switches only strictly above it). > hessian, grad, active, gpos = _assemble(xp, eq_op, c, ineq_op, g, 21) tests/unit/test_restoration.py:911: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration.py:865: in _assemble gpos = xp.maximum(g, xp.zeros_like(g)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0.4, -0.2, 1.3, 0. , 2.2, -1. , 0.7], dtype=array_api_strict.float64), Array([0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_dense_route_decides_per_block_by_size[array_api_strict] _________ namespace = def test_dense_route_decides_per_block_by_size(namespace): # 6 < threshold < 21: only the tall inequality block switches. xp = namespace jg, g, jc, c = _tall_blocks(xp) eq_calls: list[str] = [] ineq_calls: list[str] = [] > hessian, grad, active, gpos = _assemble( xp, _GramSpyDense(jc, eq_calls), c, _GramSpyDense(jg, ineq_calls), g, 10 ) tests/unit/test_restoration.py:926: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration.py:865: in _assemble gpos = xp.maximum(g, xp.zeros_like(g)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0.4, -0.2, 1.3, 0. , 2.2, -1. , 0.7], dtype=array_api_strict.float64), Array([0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_dense_route_densifies_a_block_that_is_not_gram_capable[array_api_strict] _ namespace = def test_dense_route_densifies_a_block_that_is_not_gram_capable(namespace): xp = namespace jg, g, jc, c = _tall_blocks(xp) ineq_calls: list[str] = [] ineq_op = _SpyDense(jg, ineq_calls) # plain Dense: no Gram override assert not ineq_op.gram_capable() def matvec(v): return xp.matmul(jc, v) def rmatvec(v): return xp.matmul(xp.permute_dims(jc, (1, 0)), v) eq_op = MatrixFreeJacobian((2, 3), matvec, rmatvec) assert not eq_op.gram_capable() > hessian, grad, active, gpos = _assemble(xp, eq_op, c, ineq_op, g, 1) tests/unit/test_restoration.py:951: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration.py:865: in _assemble gpos = xp.maximum(g, xp.zeros_like(g)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0.4, -0.2, 1.3, 0. , 2.2, -1. , 0.7], dtype=array_api_strict.float64), Array([0., 0., 0., 0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_restore_never_densifies_a_large_gram_capable_block[array_api_strict] ___ namespace = def test_restore_never_densifies_a_large_gram_capable_block(namespace): # End to end: the same restoration on the operator path and on the # densified path reaches the same point (round-off aside). xp = namespace jg, _, _, _ = _tall_blocks(xp) rhs = array(xp, [-1.0, 2.0, -0.5, 0.0, -2.0, 1.0, -0.25]) x0 = array(xp, [1.0, -1.0, 2.0]) def ineq_fn(z): return xp.matmul(jg, z) + rhs def run(max_elements): calls: list[str] = [] def ineq_jac_fn(z): del z return _GramSpyDense(jg, calls) out = restore( **_restore_kwargs( xp, x0, s=xp.ones((7,), dtype=x0.dtype), m=7, ineq_fn=ineq_fn, ineq_jac_fn=ineq_jac_fn, ), dense_materialize_max_elements=max_elements, ) return out, calls > (x_op, s_op, exit_op), op_calls = run(20) tests/unit/test_restoration.py:990: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration.py:977: in run out = restore( ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 1., -1., 2.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_dense_route_real_sparse_gram_operators_match_the_densified_reference[array_api_strict-signed_selection] _ namespace = wrap = 'signed_selection' @pytest.mark.parametrize("wrap", ["coo", "row_scaled", "signed_selection"]) def test_dense_route_real_sparse_gram_operators_match_the_densified_reference( namespace, wrap ): # The production Gram-capable operators, not a test double: the sparse # adapter's Gram, the gradient-scaling wrapper (folds d² into the 0-1 # weights) and the lowered two-sided linear_ineq selection (folds |S|ᵀ). from ipax.backend.operators import COOOperator, _SignedRowSelection from ipax.problem.scaling import _RowScaled xp = namespace jg, _, _, _ = _tall_blocks(xp) rows, cols, values, shape = Dense(jg).to_coo() op = COOOperator(rows, cols, values, shape) if wrap == "row_scaled": op = _RowScaled(op, array(xp, [0.5, 2.0, 1.0, 3.0, 0.25, 1.5, 4.0])) elif wrap == "signed_selection": sel_lower = xp.asarray([True, False, True, False, True, False, True]) sel_upper = xp.asarray([True, True, False, False, True, True, False]) > op = _SignedRowSelection(op, sel_lower, sel_upper) tests/unit/test_restoration.py:1022: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/backend/operators.py:1493: in __init__ self._expand_lower = xp.cumulative_sum(lower_int) * lower_int _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1, 0, 1, 0, 1, 0, 1], dtype=array_api_strict.int64),) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function cumulative_sum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_default_restoration_reproduces_the_lu_reference[array_api_strict-mixed] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7229b70> case = 'mixed' @pytest.mark.parametrize("case", sorted(_LU_REFERENCE)) def test_default_restoration_reproduces_the_lu_reference(namespace, monkeypatch, case): xp = namespace cholesky_calls = _spy(monkeypatch, xp, "cholesky") > x_new, _, exit_reason = restore(**_CASES[case](xp)) tests/unit/test_restoration_cholesky.py:186: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_explicit_lu_is_the_default_bit_for_bit[array_api_strict-hs6] _______ namespace = case = 'hs6' @pytest.mark.parametrize("case", sorted(_CASES)) def test_explicit_lu_is_the_default_bit_for_bit(namespace, case): xp = namespace > x_default, s_default, exit_default = restore(**_CASES[case](xp)) tests/unit/test_restoration_cholesky.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([2., 0.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_explicit_lu_is_the_default_bit_for_bit[array_api_strict-mixed] ______ namespace = case = 'mixed' @pytest.mark.parametrize("case", sorted(_CASES)) def test_explicit_lu_is_the_default_bit_for_bit(namespace, case): xp = namespace > x_default, s_default, exit_default = restore(**_CASES[case](xp)) tests/unit/test_restoration_cholesky.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_cholesky_reaches_the_lu_feasible_point[array_api_strict] _________ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9bdb58c90> def test_cholesky_reaches_the_lu_feasible_point(cholesky_backend, monkeypatch): xp = cholesky_backend > x_lu, s_lu, exit_lu = restore(**_mixed_kwargs(xp)) tests/unit/test_restoration_cholesky.py:210: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_cholesky_on_a_rank_deficient_gram_stays_on_the_manifold[array_api_strict] _ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6a4ff50> def test_cholesky_on_a_rank_deficient_gram_stays_on_the_manifold( cholesky_backend, monkeypatch ): """HS6: one equality in two variables, so ``JᵀJ`` has rank 1. With ``λ = 1e-8`` the damped matrix has condition ~``‖J‖²/λ ≈ 1e10``, and the null-space component of the step is round-off in ``∇F`` amplified by ``1/λ``: LU and Cholesky (like NumPy and Torch LU, see ``_LU_REFERENCE``) drift apart along the feasible manifold by ~1e-6 over a few iterations. Both must still land on it, feasibly and close together. """ xp = cholesky_backend problem = HS6(xp) > x_lu, _, exit_lu = restore(**_hs6_kwargs(xp)) tests/unit/test_restoration_cholesky.py:233: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([2., 0.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_cholesky_without_a_triangular_solve_uses_lu[array_api_strict] ______ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c741dd30> def test_cholesky_without_a_triangular_solve_uses_lu(namespace, monkeypatch): """A backend without the gap-filler (JAX, array-api-strict) keeps the LU path.""" xp = namespace monkeypatch.setattr(restoration_mod, "_dense_cholesky_solver", lambda xp: None) cholesky_calls = _spy(monkeypatch, xp, "cholesky") > x_lu, _, exit_lu = restore(**_mixed_kwargs(xp)) tests/unit/test_restoration_cholesky.py:261: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_cholesky_breakdown_falls_back_to_lu[array_api_strict] __________ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9bdb59390> def test_cholesky_breakdown_falls_back_to_lu(cholesky_backend, monkeypatch): """A backend-raised breakdown (a genuinely indefinite input) → LU for that trial.""" xp = cholesky_backend original = xp.linalg.cholesky raised = {"n": 0} def indefinite_cholesky(matrix, *args, **kwargs): # Factor −A instead of A: negative definite, so the backend itself # raises its own LinAlgError (numpy/strict/torch) for every trial. try: return original(-matrix, *args, **kwargs) except Exception: raised["n"] += 1 raise monkeypatch.setattr(xp.linalg, "cholesky", indefinite_cholesky) # Every backend must fall back — a silent breakdown is classified too — # but only a raising one exercises the path this test is about. > _assert_fell_back_to_lu(xp, monkeypatch) tests/unit/test_restoration_cholesky.py:303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration_cholesky.py:275: in _assert_fell_back_to_lu x_lu, s_lu, exit_lu = restore(**_CASES[case](xp)) ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_non_finite_cholesky_factor_falls_back_to_lu[array_api_strict] ______ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9bdb598d0> def test_non_finite_cholesky_factor_falls_back_to_lu(cholesky_backend, monkeypatch): """A silent breakdown (NaN factor: NumPy on NaN input, CuPy, JAX) → LU.""" xp = cholesky_backend def nan_cholesky(matrix, *args, **kwargs): del args, kwargs return xp.full(matrix.shape, float("nan"), dtype=matrix.dtype) monkeypatch.setattr(xp.linalg, "cholesky", nan_cholesky) > _assert_fell_back_to_lu(xp, monkeypatch) tests/unit/test_restoration_cholesky.py:321: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration_cholesky.py:275: in _assert_fell_back_to_lu x_lu, s_lu, exit_lu = restore(**_CASES[case](xp)) ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_non_finite_cholesky_solution_falls_back_to_lu[array_api_strict] _____ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c741e660> def test_non_finite_cholesky_solution_falls_back_to_lu(cholesky_backend, monkeypatch): """A finite factor whose back-substitution overflows → LU, not a NaN step.""" xp = cholesky_backend def overflowing_solve(factor, rhs): del factor return xp.full(rhs.shape, float("inf"), dtype=rhs.dtype) monkeypatch.setattr( restoration_mod, "_dense_cholesky_solver", lambda xp: overflowing_solve ) > _assert_fell_back_to_lu(xp, monkeypatch) tests/unit/test_restoration_cholesky.py:362: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration_cholesky.py:275: in _assert_fell_back_to_lu x_lu, s_lu, exit_lu = restore(**_CASES[case](xp)) ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________ test_raising_cholesky_solve_falls_back_to_lu[array_api_strict] ________ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9bdb5b070> def test_raising_cholesky_solve_falls_back_to_lu(cholesky_backend, monkeypatch): xp = cholesky_backend def failing_solve(factor, rhs): del factor, rhs raise ArithmeticError("synthetic back-substitution overflow") monkeypatch.setattr( restoration_mod, "_dense_cholesky_solver", lambda xp: failing_solve ) > _assert_fell_back_to_lu(xp, monkeypatch) tests/unit/test_restoration_cholesky.py:375: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_restoration_cholesky.py:275: in _assert_fell_back_to_lu x_lu, s_lu, exit_lu = restore(**_CASES[case](xp)) ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_non_numerical_cholesky_errors_propagate[array_api_strict-TypeError] ___ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7571010> bug = TypeError("unexpected keyword argument 'upper'") @pytest.mark.parametrize( "bug", [TypeError("unexpected keyword argument 'upper'"), MemoryError("host OOM")], ids=lambda e: type(e).__name__, ) def test_non_numerical_cholesky_errors_propagate(cholesky_backend, monkeypatch, bug): """Only a numerical failure is a breakdown; a bug or OOM leaves ``restore``.""" xp = cholesky_backend def raising(*args, **kwargs): del args, kwargs raise bug monkeypatch.setattr(xp.linalg, "cholesky", raising) with pytest.raises(type(bug)) as info: > restore(**_mixed_kwargs(xp), dense_factorization="cholesky") tests/unit/test_restoration_cholesky.py:393: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_non_numerical_cholesky_errors_propagate[array_api_strict-MemoryError] __ cholesky_backend = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9bdb58c90> bug = MemoryError('host OOM') @pytest.mark.parametrize( "bug", [TypeError("unexpected keyword argument 'upper'"), MemoryError("host OOM")], ids=lambda e: type(e).__name__, ) def test_non_numerical_cholesky_errors_propagate(cholesky_backend, monkeypatch, bug): """Only a numerical failure is a breakdown; a bug or OOM leaves ``restore``.""" xp = cholesky_backend def raising(*args, **kwargs): del args, kwargs raise bug monkeypatch.setattr(xp.linalg, "cholesky", raising) with pytest.raises(type(bug)) as info: > restore(**_mixed_kwargs(xp), dense_factorization="cholesky") tests/unit/test_restoration_cholesky.py:393: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 3., -1., 2., 2.], dtype=array_api_strict.float64), Array([1.0000000e-08, 5.0000001e-01, 1.0000000e-08, 1.0000000e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_singular_gauss_newton_system_survives_with_cholesky[array_api_strict] __ cholesky_backend = def test_singular_gauss_newton_system_survives_with_cholesky(cholesky_backend): """The HS7-class extreme-scale Jacobian (see ``test_restoration``) must not crash.""" xp = cholesky_backend x = array(xp, [1.0, 1.0]) jac = array(xp, [[4.0e100, -1.9e27]]) kwargs = _hs6_kwargs(xp) kwargs.update( x=x, eq_fn=lambda z: array(xp, [1.0]), eq_jac_fn=lambda z: as_operator(jac), ) > x_new, _, exit_reason = restore(**kwargs, dense_factorization="cholesky") tests/unit/test_restoration_cholesky.py:408: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/restoration.py:407: in restore x = project(x) ipax/ipm/restoration.py:381: in project x = xp.where(mask_l, xp.maximum(x, lower_target), x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([1.e-08, 1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_solve_passes_the_dense_factorization_to_restoration[array_api_strict-lu] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c6ca5550> factorization = 'lu' @pytest.mark.parametrize("factorization", ["lu", "cholesky"]) def test_solve_passes_the_dense_factorization_to_restoration( namespace, monkeypatch, factorization ): import ipax.ipm.driver as driver_mod from tests.regression.test_restoration_tall_gram_block_not_densified import ( _fail_step_solve_once, _TallLinearIneq, ) xp = namespace _fail_step_solve_once(monkeypatch) seen: list[object] = [] original = driver_mod.restore def recording(**kwargs): seen.append(kwargs.get("dense_factorization")) return original(**kwargs) monkeypatch.setattr(driver_mod, "restore", recording) > result = solve( _TallLinearIneq(xp, []), array(xp, [4.0, 4.0, 4.0]), options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=RestorationOptions( linear_solver="dense", dense_factorization=factorization ), ), ) tests/unit/test_restoration_cholesky.py:438: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_solve_passes_the_dense_factorization_to_restoration[array_api_strict-cholesky] _ namespace = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fd9c7571710> factorization = 'cholesky' @pytest.mark.parametrize("factorization", ["lu", "cholesky"]) def test_solve_passes_the_dense_factorization_to_restoration( namespace, monkeypatch, factorization ): import ipax.ipm.driver as driver_mod from tests.regression.test_restoration_tall_gram_block_not_densified import ( _fail_step_solve_once, _TallLinearIneq, ) xp = namespace _fail_step_solve_once(monkeypatch) seen: list[object] = [] original = driver_mod.restore def recording(**kwargs): seen.append(kwargs.get("dense_factorization")) return original(**kwargs) monkeypatch.setattr(driver_mod, "restore", recording) > result = solve( _TallLinearIneq(xp, []), array(xp, [4.0, 4.0, 4.0]), options=Options( hessian="exact", linsolve="dense", max_iter=100, restoration=RestorationOptions( linear_solver="dense", dense_factorization=factorization ), ), ) tests/unit/test_restoration_cholesky.py:438: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],...28571, 34.48275862, 33.33333333, 32.25806452, 31.25 , 30.3030303 ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________________ test_constraint_row_factors[array_api_strict] _________________ namespace = def test_constraint_row_factors(namespace): xp = namespace jac = array(xp, [[3.0, 4.0], [0.0, 0.0]]) # row ∞-norms 4, 0 prob = _problem( xp, gradient=lambda x: array(xp, [1.0, 1.0]), ineq_constraints=lambda x: xp.matmul(jac, x), ineq_jacobian=lambda x: jac, ) x0 = array(xp, [0.0, 0.0]) > scaling = compute_scaling( prob, x0, xp, has_eq=False, has_ineq=True, max_gradient=2.0 ) tests/unit/test_scaling.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0.5, 2. ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __ test_matrix_free_scaling_accepts_bulk_row_norm_callback[array_api_strict] ___ namespace = def test_matrix_free_scaling_accepts_bulk_row_norm_callback(namespace): xp = namespace jac = array(xp, [[3.0, 4.0], [5.0, 6.0]]) op = MatrixFreeJacobian( jac.shape, matvec=lambda v: xp.matmul(jac, v), rmatvec=lambda v: xp.matmul(xp.permute_dims(jac, (1, 0)), v), row_inf_norms=lambda: array(xp, [4.0, 6.0]), ) prob = _problem( xp, gradient=lambda x: array(xp, [1.0, 1.0]), ineq_constraints=lambda x: xp.matmul(jac, x), ineq_jacobian=lambda x: op, ) > scaling = compute_scaling( prob, array(xp, [0.0, 0.0]), xp, has_eq=False, has_ineq=True, max_gradient=2.0, ) tests/unit/test_scaling.py:110: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0.5 , 0.33333333], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_linear_eq_combined_factor_orders_nonlinear_then_linear[array_api_strict] _ namespace = def test_linear_eq_combined_factor_orders_nonlinear_then_linear(namespace): xp = namespace a = array(xp, [[0.0, 50.0]]) # row ∞-norm 50 prob = _problem( xp, gradient=lambda x: array(xp, [1.0, 1.0]), linear_eq=(a, array(xp, [1.0])), ) x0 = array(xp, [0.0, 0.0]) > scaling = compute_scaling( prob, x0, xp, has_eq=False, has_ineq=False, max_gradient=10.0 ) tests/unit/test_scaling.py:162: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/scaling.py:239: in compute_scaling _vector_factors(xp, as_operator(linear[0]), max_gradient, dtype, x0) ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.2], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_scaled_problem_applies_factors[array_api_strict] _____________ namespace = def test_scaled_problem_applies_factors(namespace): xp = namespace jac = array(xp, [[3.0, 4.0]]) prob = _problem( xp, gradient=lambda x: 200.0 * x, ineq_constraints=lambda x: xp.matmul(jac, x), ineq_jacobian=lambda x: jac, lagrangian_hessian=lambda x, ye, yi, sigma: sigma * 200.0 * xp.eye(2), ) x0 = array(xp, [1.0, 1.0]) # gradient ∞-norm 200 > scaling = compute_scaling( prob, x0, xp, has_eq=False, has_ineq=True, max_gradient=50.0 ) tests/unit/test_scaling.py:182: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([12.5], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError __________ test_result_stays_in_the_input_namespace[array_api_strict] __________ namespace = def test_result_stays_in_the_input_namespace(namespace): fun, jac, target = _qp(namespace) x0 = array(namespace, [0.0, 0.0, 0.0, 0.0]) > res = minimize_ipax(fun, x0, jac=jac) tests/unit/test_scipy_interface_backends.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ----------------------------- Captured stderr call ----------------------------- ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = lbfgs ------------------------------ Captured log call ------------------------------- RESULT ipax:solve.py:365 ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = lbfgs PROBLEM ipax:solve.py:378 problem structure: variables = 4 inequalities = 0 equalities = 0 nonlinear + 0 linear bounded vars = 0 lower, 0 upper SOLVER ipax:solve.py:390 solver setup: hessian = auto linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg ______ test_missing_jac_resolves_in_the_input_namespace[array_api_strict] ______ namespace = backend_name = 'array_api_strict' def test_missing_jac_resolves_in_the_input_namespace(namespace, backend_name): fun, _, target = _qp(namespace) > res = minimize_ipax(fun, array(namespace, [0.0, 0.0, 0.0, 0.0])) tests/unit/test_scipy_interface_backends.py:71: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ----------------------------- Captured stderr call ----------------------------- ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = lbfgs ------------------------------ Captured log call ------------------------------- RESULT ipax:solve.py:365 ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = lbfgs PROBLEM ipax:solve.py:378 problem structure: variables = 4 inequalities = 0 equalities = 0 nonlinear + 0 linear bounded vars = 0 lower, 0 upper SOLVER ipax:solve.py:390 solver setup: hessian = auto linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg _______ test_nonlinear_constraint_with_exact_hessians[array_api_strict] ________ namespace = def test_nonlinear_constraint_with_exact_hessians(namespace): fun, jac, _ = _qp(namespace) > res = minimize_ipax( fun, array(namespace, [0.0, 0.0, 0.0, 0.0]), jac=jac, hess=lambda x: 2.0 * namespace.eye(4, dtype=x.dtype), constraints=[_circle(namespace)], ) tests/unit/test_scipy_interface_backends.py:81: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_scipy_constraint_objects_are_converted_to_the_input_namespace[array_api_strict] _ namespace = def test_scipy_constraint_objects_are_converted_to_the_input_namespace(namespace): # LinearConstraint and Bounds coerce their data to float64 NumPy arrays. fun, jac, _ = _qp(namespace) A = np.array([[1.0, 1.0, 1.0, 1.0], [1.0, -1.0, 0.0, 0.0]]) > res = minimize_ipax( fun, array(namespace, [0.0, 0.0, 0.0, 0.0]), jac=jac, bounds=Bounds([0.0, -np.inf, 0.0, -np.inf], [np.inf, -2.5, 0.25, np.inf]), constraints=[LinearConstraint(A, [2.0, -np.inf], [2.0, 4.0])], ) tests/unit/test_scipy_interface_backends.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:169: in solve lower, upper = relax_fixed_bounds(xp, lower, upper) ipax/ipm/init.py:128: in relax_fixed_bounds scale = xp.maximum(xp.ones_like(mid), xp.abs(mid)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0. , 0. , 0.125, 0. ], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_dict_constraints_and_callback_see_the_input_namespace[array_api_strict] _ namespace = def test_dict_constraints_and_callback_see_the_input_namespace(namespace): seen = [] def callback(intermediate_result): seen.append(intermediate_result.x) cons = [ {"type": "ineq", "fun": lambda x: x[0] - 2 * x[1] + 2}, {"type": "ineq", "fun": lambda x: -x[0] - 2 * x[1] + 6}, {"type": "ineq", "fun": lambda x: -x[0] + 2 * x[1] + 2}, ] > res = minimize_ipax( lambda x: (x[0] - 1) ** 2 + (x[1] - 2.5) ** 2, array(namespace, [2.0, 0.0]), bounds=((0, None), (0, None)), constraints=cons, callback=callback, ) tests/unit/test_scipy_interface_backends.py:151: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1.], dtype=array_api_strict.float64), Array([50., 50., 50.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_array_like_constraint_hessian_is_converted[array_api_strict] _______ namespace = def test_array_like_constraint_hessian_is_converted(namespace): fun, jac, _ = _qp(namespace) mask = array(namespace, [1.0, 1.0, 0.0, 0.0]) def nested_list_hess(x, v): h = 2.0 * float(v[0]) return [ [h, 0.0, 0.0, 0.0], [0.0, h, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], ] con = NonlinearConstraint( lambda x: namespace.reshape(namespace.sum(mask * x**2), (1,)), -np.inf, 1.0, jac=lambda x: namespace.reshape(2.0 * mask * x, (1, 4)), hess=nested_list_hess, ) > res = minimize_ipax( fun, array(namespace, [0.0, 0.0, 0.0, 0.0]), jac=jac, hess=lambda x: 2.0 * namespace.eye(4, dtype=x.dtype), constraints=con, ) tests/unit/test_scipy_interface_backends.py:185: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([100.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ______ test_objective_hess_may_return_an_ipax_operator[array_api_strict] _______ namespace = def test_objective_hess_may_return_an_ipax_operator(namespace): from ipax.backend.operators import Dense fun, jac, target = _qp(namespace) > res = minimize_ipax( fun, array(namespace, [0.0, 0.0, 0.0, 0.0]), jac=jac, hess=lambda x: Dense(2.0 * namespace.eye(4, dtype=x.dtype)), ) tests/unit/test_scipy_interface_backends.py:360: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ----------------------------- Captured stderr call ----------------------------- ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = exact ------------------------------ Captured log call ------------------------------- RESULT ipax:solve.py:365 ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = exact PROBLEM ipax:solve.py:378 problem structure: variables = 4 inequalities = 0 equalities = 0 nonlinear + 0 linear bounded vars = 0 lower, 0 upper SOLVER ipax:solve.py:390 solver setup: hessian = auto linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg __________ test_jac_true_and_hessp_on_every_backend[array_api_strict] __________ namespace = def test_jac_true_and_hessp_on_every_backend(namespace): _, _, target = _qp(namespace) def fun_and_grad(x): return namespace.sum((x - target) ** 2), 2.0 * (x - target) > res = minimize_ipax( fun_and_grad, array(namespace, [0.0, 0.0, 0.0, 0.0]), jac=True, hessp=lambda x, p: 2.0 * p, ) tests/unit/test_scipy_interface_backends.py:386: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:321: in solve result = driver.run(x0) ipax/ipm/driver.py:1013: in run start = initialize( ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1., 1., 1.], dtype=array_api_strict.float64), Array([0., 0., 0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ----------------------------- Captured stderr call ----------------------------- ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = exact ------------------------------ Captured log call ------------------------------- RESULT ipax:solve.py:365 ipax solving: 4 variables (bounds: 0 lower, 0 upper), 0 equalities, 0 inequalities | linear solver = dense | hessian = exact PROBLEM ipax:solve.py:378 problem structure: variables = 4 inequalities = 0 equalities = 0 nonlinear + 0 linear bounded vars = 0 lower, 0 upper SOLVER ipax:solve.py:390 solver setup: hessian = auto linear solver = auto (DenseSolver) globalization = filter mu schedule = monotone scaling = gradient-based corrections = none krylov method = cg ________ test_float32_solve_stays_float32_end_to_end[array_api_strict] _________ namespace = def test_float32_solve_stays_float32_end_to_end(namespace): target = namespace.asarray([1.0, -2.0], dtype=namespace.float32) > res = minimize_ipax( lambda x: namespace.sum((x - target) ** 2), namespace.zeros(2, dtype=namespace.float32), jac=lambda x: 2.0 * (x - target), bounds=Bounds([-np.inf, -1.5], [np.inf, np.inf]), constraints=[LinearConstraint(np.array([[1.0, 1.0]]), -np.inf, 1.0)], tol=1e-4, ) tests/unit/test_scipy_interface_backends.py:419: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/interfaces/scipy.py:1145: in minimize_ipax result = solve( ipax/solve.py:189: in solve problem_scaling = compute_scaling( ipax/problem/scaling.py:231: in compute_scaling _vector_factors( ipax/problem/scaling.py:207: in _vector_factors return xp.minimum(ones, max_gradient / safe) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float32), Array([100.], dtype=array_api_strict.float32)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function minimum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ____________ test_default_scale_is_the_flat_floor[array_api_strict] ____________ namespace = def test_default_scale_is_the_flat_floor(namespace): # slack_init_scale defaults to 0.0 -> the current flat _SLACK_FLOOR. xp = namespace x0 = array(xp, [0.0, 0.0]) lo, up, ml, mu = _bounds_free(xp, 2) g = array(xp, [5.0, -3.0]) # one violated (g>0), one satisfied (s = -g = 3) > start = initialize( xp=xp, x0=x0, lower_safe=lo, upper_safe=up, mask_l=ml, mask_u=mu, ineq_fn=lambda _x: g, mu_init=0.1, m=2, ) tests/unit/test_slack_init_scale.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _________ test_large_constraints_scale_the_floor_up[array_api_strict] __________ namespace = def test_large_constraints_scale_the_floor_up(namespace): xp = namespace x0 = array(xp, [0.0, 0.0]) lo, up, ml, mu = _bounds_free(xp, 2) g = array(xp, [5.0, -3.0]) # max|g| = 5 -> floor = max(1e-2, 0.1*5) = 0.5 > start = initialize( xp=xp, x0=x0, lower_safe=lo, upper_safe=up, mask_l=ml, mask_u=mu, ineq_fn=lambda _x: g, mu_init=0.1, m=2, slack_init_scale=0.1, ) tests/unit/test_slack_init_scale.py:55: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _____ test_small_constraints_collapse_to_the_flat_floor[array_api_strict] ______ namespace = def test_small_constraints_collapse_to_the_flat_floor(namespace): xp = namespace x0 = array(xp, [0.0, 0.0]) lo, up, ml, mu = _bounds_free(xp, 2) # max|g| = 0.05 -> 0.1*0.05 = 5e-3 < 1e-2, so the floor stays _SLACK_FLOOR. g = array(xp, [0.05, -0.02]) > start = initialize( xp=xp, x0=x0, lower_safe=lo, upper_safe=up, mask_l=ml, mask_u=mu, ineq_fn=lambda _x: g, mu_init=0.1, m=2, slack_init_scale=0.1, ) tests/unit/test_slack_init_scale.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1., 1.], dtype=array_api_strict.float64), Array([0., 0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _ test_larger_slack_floor_gives_proportionally_smaller_initial_duals[array_api_strict] _ namespace = def test_larger_slack_floor_gives_proportionally_smaller_initial_duals(namespace): # y_ineq = mu_init / s: the scale-aware floor's real lever is the *dual* # scale (a floored slack of 1e-2 gives y = 10; a floor of 0.5 gives y = 0.2). xp = namespace x0 = array(xp, [0.0]) lo, up, ml, mu = _bounds_free(xp, 1) g = array(xp, [5.0]) > flat = initialize( xp=xp, x0=x0, lower_safe=lo, upper_safe=up, mask_l=ml, mask_u=mu, ineq_fn=lambda _x: g, mu_init=0.1, m=1, ) tests/unit/test_slack_init_scale.py:100: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ipax/ipm/init.py:163: in initialize x = project_interior(xp, x0, lower_safe, upper_safe, mask_l, mask_u) ipax/ipm/init.py:95: in project_interior push_l = _KAPPA1 * xp.maximum(xp.ones_like(x0), xp.abs(lower_safe)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([1.], dtype=array_api_strict.float64), Array([0.], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ________________ test_non_numpy_namespaces_get_the_plain_block _________________ def test_non_numpy_namespaces_get_the_plain_block(): # The tiled kernel is host BLAS; any other namespace keeps the plain # CSROperator (lowered at the triplet level by the core). xp = pytest.importorskip("array_api_strict") problem = _split_problem(xp, tiled_gram=trots.TiledGramConfig(block_rows=128)) > op = problem.linear_ineq()[0] tests/unit/test_trots_tiled_gram.py:1276: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ benchmarks/corpus/trots.py:3975: in linear_ineq self._linear_block_operator(csr, hint, segments) benchmarks/corpus/trots.py:4036: in _linear_block_operator return self._csr_operator(csr, symmetric=False, values_dtype_hint=hint) benchmarks/corpus/trots.py:4111: in _csr_operator return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 0, 6, 7, 8, 8, 12, 16, 17, 20, 22, 24, 25, 29, 32, 35, ..., dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 1197, 1198, 1199], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError ___ test_non_numpy_namespaces_keep_gated_off_groups_plain[array_api_strict] ____ namespace = def test_non_numpy_namespaces_keep_gated_off_groups_plain(namespace): # The active-row Gram is host BLAS: on any other namespace (CuPy / Torch # device kernel, array_api_strict) a gated-off group stays the plain # CSROperator, lowered at the triplet level by the core, as before. if trots._is_host_numpy(namespace): pytest.skip("the host-NumPy namespace takes ActiveRowGramCSROperator") problem = _split_problem( namespace, tiled_gram=trots.TiledGramConfig(flop_ratio_threshold=0.0) ) > op = problem.linear_ineq()[0] tests/unit/test_trots_tiled_gram.py:1289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ benchmarks/corpus/trots.py:3975: in linear_ineq self._linear_block_operator(csr, hint, segments) benchmarks/corpus/trots.py:4036: in _linear_block_operator return self._csr_operator(csr, symmetric=False, values_dtype_hint=hint) benchmarks/corpus/trots.py:4111: in _csr_operator return CSROperator( ipax/backend/operators.py:1324: in __init__ rows = _expand_indptr(xp, indptr, int(data.shape[0])) ipax/backend/operators.py:1294: in _expand_indptr return xp.searchsorted(indptr, arange, side="right") - 1 # type: ignore[attr-defined] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([ 0, 0, 6, 7, 8, 8, 12, 16, 17, 20, 22, 24, 25, 29, 32, 35, ..., dtype=array_api_strict.int64), Array([ 0, 1, 2, ..., 1197, 1198, 1199], dtype=array_api_strict.int64)) kwargs = {'side': 'right'} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function searchsorted requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError _______ test_warm_start_floors_slacks_and_bound_duals[array_api_strict] ________ namespace = def test_warm_start_floors_slacks_and_bound_duals(namespace): xp = namespace mask_l = array(xp, [1.0, 0.0]) > 0.5 mask_u = array(xp, [0.0, 0.0]) > 0.5 warm = WarmStart( s=array(xp, [-5.0]), # negative → floored strictly positive y_eq=array(xp, [2.5]), # free sign, passes through z_lower=array(xp, [-3.0, 7.0]), # idx 0 active → floored; idx 1 → masked to 0 ) > s, y_eq, y_ineq, z_lower, z_upper = _apply( xp, warm, m=1, m_eq=1, n=2, mask_l=mask_l, mask_u=mask_u ) tests/unit/test_warm_start.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/unit/test_warm_start.py:19: in _apply return apply_warm_start( ipax/ipm/init.py:328: in apply_warm_start s = _floor_positive(xp, warm.s) ipax/ipm/init.py:288: in _floor_positive return xp.maximum(arr, xp.full_like(arr, _WARM_FLOOR)) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ args = (Array([-5.], dtype=array_api_strict.float64), Array([1.e-08], dtype=array_api_strict.float64)) kwargs = {} @functools.wraps(func) def wrapper(*args, **kwargs): if version > API_VERSION: > raise RuntimeError( f"The function {func.__name__} requires API version {version} or later, " f"but the current API version for array-api-strict is {API_VERSION}" ) E RuntimeError: The function maximum requires API version 2023.12 or later, but the current API version for array-api-strict is 2022.12 /usr/lib/python3.14/site-packages/array_api_strict/_flags.py:355: RuntimeError =============================== warnings summary =============================== tests/contracts/test_builtin_solver_contracts.py::TestDenseSolverAugmented::test_numerical_failure_is_classified[numpy] /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/backend/dense/numpy_scipy.py:231: RuntimeWarning: divide by zero encountered in scalar divide out[start] = rhs[start] / d[start, start] tests/integration/test_benchmark_crosscheck.py::test_format_crosscheck_renders_markdown /usr/lib64/python3.14/site-packages/scipy/optimize/_differentiable_functions.py:728: UserWarning: delta_grad == 0.0. Check if the approximated function is linear. If the function is linear better results can be obtained by defining the Hessian as zero instead of using quasi-Newton approximations. self.H.update(delta_x, delta_g) tests/integration/test_benchmark_crosscheck.py::test_format_crosscheck_renders_markdown /usr/lib64/python3.14/site-packages/scipy/optimize/_differentiable_functions.py:376: UserWarning: delta_grad == 0.0. Check if the approximated function is linear. If the function is linear better results can be obtained by defining the Hessian as zero instead of using quasi-Newton approximations. self.H.update(self.x - self.x_prev, self.g - self.g_prev) tests/regression/test_unbounded_detection.py::test_diverging_iterates_tol_none_disables_detection[numpy] /usr/lib/python3.14/site-packages/array_api_compat/common/_aliases.py:532: RuntimeWarning: overflow encountered in matmul return xp.matmul(x1, x2, **kwargs) tests/regression/test_unbounded_detection.py::test_diverging_iterates_tol_none_disables_detection[numpy] /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/regression/test_unbounded_detection.py:34: RuntimeWarning: overflow encountered in multiply return -0.5 * self.xp.sum(x * x) tests/regression/test_unbounded_detection.py::test_diverging_iterates_tol_none_disables_detection[numpy] /usr/lib64/python3.14/site-packages/numpy/_core/fromnumeric.py:86: RuntimeWarning: overflow encountered in reduce return ufunc.reduce(obj, axis, dtype, out, **passkwargs) tests/unit/test_cupy_sparse_adapter.py::test_cupy_adapter_builds_and_spsolve_fallback /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_cupy_sparse_adapter.py:235: RuntimeWarning: cuDSS is unavailable (missing cuDSS); falling back to CuPy spsolve, which re-factorizes on every solve solver.factor(operator) tests/unit/test_cupy_sparse_adapter.py::test_cudss_missing_runtime_uses_spsolve_fallback /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_cupy_sparse_adapter.py:1096: RuntimeWarning: cuDSS is unavailable (the user-managed NVIDIA cuDSS runtime could not be loaded); falling back to CuPy spsolve, which re-factorizes on every solve solver.factor(operator) tests/unit/test_cupy_sparse_adapter.py::test_cupy_gram_dense_strategy_nonfinite_weights_fall_back /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/backend/sparse/cupy.py:1092: RuntimeWarning: invalid value encountered in matmul out += block.T @ (w[start:end, None] * block) tests/unit/test_cupy_sparse_adapter.py::test_cupy_gram_dense_strategy_nonfinite_weights_fall_back /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_cupy_sparse_adapter.py:1485: RuntimeWarning: invalid value encountered in matmul expected = dense.T @ (weights[:, None] * dense) tests/unit/test_s2mpj_fasteval.py::test_batched_path_preserves_overflow_semantics :10: RuntimeWarning: overflow encountered in power tests/unit/test_scipy_interface.py: 8 warnings tests/unit/test_scipy_interface_backends.py: 5 warnings /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/solve.py:173: UserWarning: objective gradient resolved by finite differences; supply an analytic gradient or an autodiff backend for accuracy and speed resolved: Problem = resolve(problem, xp, opts) tests/unit/test_scipy_interface.py::test_dict_constraints_use_scipy_sign_and_args /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_scipy_interface.py:354: OptimizeWarning: some constraints have no callable jac; using central differences for those (supply jac for accuracy and speed) res = minimize_ipax( tests/unit/test_scipy_interface.py::test_dict_equality_constraint /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/solve.py:173: UserWarning: eq_constraints Jacobian resolved by finite differences; this is dense and only appropriate for small problems resolved: Problem = resolve(problem, xp, opts) tests/unit/test_scipy_interface.py::test_constraint_values_and_multipliers_follow_input_order /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_scipy_interface.py:381: OptimizeWarning: some constraints have no callable jac; using central differences for those (supply jac for accuracy and speed) res = minimize_ipax(_qp, np.zeros(4), jac=_qp_grad, constraints=cons) tests/unit/test_scipy_interface_backends.py::test_dict_constraints_and_callback_see_the_input_namespace[numpy] tests/unit/test_scipy_interface_backends.py::test_dict_constraints_and_callback_see_the_input_namespace[array_api_strict] /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/solve.py:173: UserWarning: ineq_constraints Jacobian resolved by finite differences; this is dense and only appropriate for small problems resolved: Problem = resolve(problem, xp, opts) tests/unit/test_sparse_gram_cache.py::test_gram_dense_strategy_nonfinite_weights_fall_back tests/unit/test_trots_tiled_gram.py::test_active_row_gram_non_finite_weights_agree_with_the_plain_verdict /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/backend/sparse/numpy_scipy.py:593: RuntimeWarning: invalid value encountered in multiply out += block.T @ (w[start:end, None] * block) tests/unit/test_sparse_gram_cache.py::test_gram_dense_strategy_nonfinite_weights_fall_back tests/unit/test_trots_tiled_gram.py::test_active_row_gram_non_finite_weights_agree_with_the_plain_verdict /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/ipax/backend/sparse/numpy_scipy.py:593: RuntimeWarning: invalid value encountered in matmul out += block.T @ (w[start:end, None] * block) tests/unit/test_sparse_gram_cache.py::test_gram_dense_strategy_nonfinite_weights_fall_back /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_sparse_gram_cache.py:49: RuntimeWarning: invalid value encountered in multiply return dense.T @ (weights[:, None] * dense) tests/unit/test_sparse_gram_cache.py::test_gram_dense_strategy_nonfinite_weights_fall_back /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/tests/unit/test_sparse_gram_cache.py:49: RuntimeWarning: invalid value encountered in matmul return dense.T @ (weights[:, None] * dense) tests/unit/test_trots_tiled_gram.py::test_densify_on_the_pool_is_bitwise_the_whole_tile_toarray[False-float64-float32] tests/unit/test_trots_tiled_gram.py::test_densify_on_the_pool_is_bitwise_the_whole_tile_toarray[True-float64-float32] /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/benchmarks/corpus/trots.py:1258: RuntimeWarning: overflow encountered in cast dense[r0:r1] = window.toarray() # the per-element astype cast tests/unit/test_trots_tiled_gram.py::test_active_row_gram_non_finite_weights_agree_with_the_plain_verdict /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/benchmarks/corpus/trots.py:2100: RuntimeWarning: invalid value encountered in multiply acc += block.T @ (wa[start:stop, None].astype(acc_dtype) * block) tests/unit/test_trots_tiled_gram.py::test_active_row_gram_non_finite_weights_agree_with_the_plain_verdict /builddir/build/BUILD/python-ipax-0.13.0-build/ipax-0.13.0/benchmarks/corpus/trots.py:2100: RuntimeWarning: invalid value encountered in matmul acc += block.T @ (wa[start:stop, None].astype(acc_dtype) * block) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ SKIPPED [1] tests/integration/test_baseline_ipyopt.py:17: could not import 'ipyopt': No module named 'ipyopt' SKIPPED [1] tests/integration/test_s2mpj_corpus.py:23: no S2MPJ checkout (set IPAX_S2MPJ_DIR) SKIPPED [1] tests/integration/test_trots_corpus.py:23: could not import 'h5py': No module named 'h5py' SKIPPED [1] tests/integration/test_trots_reference_dataset.py:24: no TROTS dataset (set IPAX_TROTS_DIR) SKIPPED [1] tests/unit/test_cudss_refinement_gpu.py:20: could not import 'cupy': No module named 'cupy' SKIPPED [1] tests/unit/test_cupy_sparse_determinism_gpu.py:29: could not import 'cupy': No module named 'cupy' SKIPPED [1] tests/unit/test_dense_cupy_ldl.py:15: could not import 'cupy': No module named 'cupy' SKIPPED [1] tests/unit/test_dense_torch_ldl.py:10: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_trots_loader.py:30: could not import 'h5py': No module named 'h5py' SKIPPED [4] tests/contracts/test_builtin_solver_contracts.py:142: no sparse adapter for backend 'array_api_strict' SKIPPED [1] tests/contracts/test_builtin_solver_contracts.py:72: no sparse adapter for backend 'array_api_strict' SKIPPED [1] tests/integration/test_benchmark_phase4.py:30: could not import 'matplotlib': No module named 'matplotlib' SKIPPED [1] tests/integration/test_benchmark_phase4.py:45: could not import 'matplotlib': No module named 'matplotlib' SKIPPED [1] tests/integration/test_benchmark_phase4.py:71: could not import 'osqp': No module named 'osqp' SKIPPED [1] tests/integration/test_benchmark_phase4.py:86: could not import 'osqp': No module named 'osqp' SKIPPED [2] tests/integration/test_corrections_solve.py:110: no sparse adapter for 'array_api_strict' SKIPPED [1] tests/integration/test_result_routes.py:98: no sparse adapter for backend 'array_api_strict' SKIPPED [4] tests/regression/test_driver_host_sync_budget.py:54: scalar-sync counting unavailable for SKIPPED [1] tests/regression/test_fraction_to_boundary_no_elementwise_sync.py:34: scalar-sync counting unavailable for SKIPPED [4] tests/regression/test_linear_ineq_lbfgs.py:20: backend has no sparse adapter SKIPPED [2] tests/unit/test_autodiff.py:41: backend has no autodiff adapter SKIPPED [2] tests/unit/test_autodiff.py:54: backend has no autodiff adapter SKIPPED [2] tests/unit/test_autodiff.py:70: backend has no autodiff adapter SKIPPED [2] tests/unit/test_autodiff.py:85: backend has no autodiff adapter SKIPPED [13] tests/unit/test_dense_cholesky_reuse.py:58: backend has no triangular-solve primitive SKIPPED [8] tests/unit/test_dense_cholesky_reuse.py:100: the CuPy adapter's triangular solves SKIPPED [1] tests/unit/test_dense_diagonal_adder.py:34: backend has no O(n) diagonal-add primitive SKIPPED [1] tests/unit/test_dense_diagonal_adder.py:47: backend has no O(n) diagonal-add primitive SKIPPED [1] tests/unit/test_dense_diagonal_adder.py:70: backend has no O(n) diagonal-add primitive SKIPPED [1] tests/unit/test_dense_diagonal_adder.py:93: backend has no O(n) diagonal-add primitive SKIPPED [1] tests/unit/test_dense_diagonal_adder.py:111: backend has no O(n) diagonal-add primitive SKIPPED [1] tests/unit/test_dense_diagonal_adder.py:188: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_dense_dispatch.py:29: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_dense_dispatch.py:44: could not import 'cupy': No module named 'cupy' SKIPPED [1] tests/unit/test_dense_dispatch.py:65: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_dense_dispatch.py:108: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_dense_dispatch.py:151: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_dense_dispatch.py:175: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_dense_dispatch.py:197: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_kkt.py:141: no sparse adapter for backend 'array_api_strict' SKIPPED [1] tests/unit/test_kkt.py:173: no sparse adapter for backend 'array_api_strict' SKIPPED [10] tests/unit/test_linear_ineq_lowering.py:293: no sparse adapter for backend 'array_api_strict' SKIPPED [1] tests/unit/test_operator_batched_hooks.py:91: no sparse adapter for backend 'array_api_strict' SKIPPED [6] tests/unit/test_public_sparse_operators.py:22: no sparse adapter for backend 'array_api_strict' SKIPPED [2] tests/unit/test_restoration.py:1024: no sparse Gram adapter for this backend SKIPPED [1] tests/unit/test_restoration_cholesky.py:247: no native triangular-solve adapter for this backend SKIPPED [1] tests/unit/test_scaling.py:235: no sparse adapter for backend 'array_api_strict' SKIPPED [2] tests/unit/test_scipy_interface_backends.py:281: needs an autodiff backend SKIPPED [1] tests/unit/test_scipy_interface_backends.py:315: needs a CUDA device (CuPy or a CUDA build of PyTorch) SKIPPED [1] tests/unit/test_scipy_interface_backends.py:402: array-api-strict has no sparse adapter (sparse needs one) SKIPPED [1] tests/unit/test_sparse_device_routing.py:95: no sparse adapter for 'array_api_strict' SKIPPED [1] tests/unit/test_sparse_device_routing.py:109: no sparse adapter for 'array_api_strict' SKIPPED [1] tests/unit/test_sparse_dispatch.py:48: torch namespace unavailable: backend 'torch' is not installed SKIPPED [1] tests/unit/test_trots_breedveld_start.py:423: on NumPy the problem is its own host twin SKIPPED [1] tests/unit/test_trots_breedveld_start.py:425: the TROTS linear block needs a sparse adapter to be applied SKIPPED [1] tests/unit/test_trots_breedveld_start.py:641: could not import 'cupy': No module named 'cupy' SKIPPED [1] tests/unit/test_trots_breedveld_start.py:716: the TROTS linear block needs a sparse adapter to be applied SKIPPED [2] tests/unit/test_trots_exact_hessian.py:438: device Hessian runs on CuPy / Torch namespaces only SKIPPED [2] tests/unit/test_trots_exact_hessian.py:467: device Hessian runs on CuPy / Torch namespaces only SKIPPED [2] tests/unit/test_trots_exact_hessian.py:485: device Hessian runs on CuPy / Torch namespaces only SKIPPED [12] tests/unit/test_trots_exact_hessian.py:528: device Hessian runs on CuPy / Torch namespaces only SKIPPED [1] tests/unit/test_trots_exact_hessian.py:896: tile plans run on NumPy / CuPy / Torch namespaces only SKIPPED [2] tests/unit/test_trots_exact_hessian.py:931: device Hessian runs on CuPy / Torch namespaces only SKIPPED [2] tests/unit/test_trots_exact_hessian.py:967: could not import 'numba': No module named 'numba' SKIPPED [7] tests/unit/test_trots_hessian_gram_merge.py:57: tiled plans run on NumPy / CuPy / Torch namespaces only SKIPPED [2] tests/unit/test_trots_hessian_gram_merge.py:258: device Hessian runs on CuPy / Torch namespaces only SKIPPED [1] tests/unit/test_trots_tiled_gram.py:1285: the host-NumPy namespace takes ActiveRowGramCSROperator SKIPPED [88] tests/unit/test_trots_tiled_gram.py:1323: device tiled Gram runs on CuPy / Torch namespaces only SKIPPED [1] tests/unit/test_trots_tiled_gram.py:1842: could not import 'torch': No module named 'torch' SKIPPED [1] tests/unit/test_trots_tiled_gram.py:1853: could not import 'cupy': No module named 'cupy' SKIPPED [32] tests/unit/test_trots_tiled_gram.py:2207: could not import 'numba': No module named 'numba' FAILED tests/backends/test_cross_backend_conformance.py::test_same_solution_across_backends FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_shape_consistency[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_matvec_matches_dense[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_adjoint_identity[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_matmat_matches_dense[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_dense_matrix_matches_dense_when_available[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_positive_definite_hint_is_honest[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_dense_matrix_with_gram_is_honest_when_offered[array_api_strict] FAILED tests/contracts/test_builtin_operator_contracts.py::TestSignedRowSelection::test_exact_lbfgs_inverse_claim_is_honest[array_api_strict] FAILED tests/integration/test_benchmark_harness.py::test_run_case_scores_a_known_optimum[array_api_strict] FAILED tests/integration/test_benchmark_harness.py::test_run_case_reports_soc_attempted_and_accepted[array_api_strict] FAILED tests/integration/test_benchmark_harness.py::test_run_case_converged_but_not_correct_when_objective_differs[array_api_strict] FAILED tests/integration/test_benchmark_harness.py::test_run_case_applies_prepare_solve[array_api_strict] FAILED tests/integration/test_breedveld_soc.py::test_soc_reaches_the_same_optimum_as_backtracking[array_api_strict] FAILED tests/integration/test_breedveld_soc.py::test_filter_soc_recorded_on_iteration_history[array_api_strict] FAILED tests/integration/test_breedveld_soc.py::test_soc_composes_with_common_step[array_api_strict] FAILED tests/integration/test_breedveld_soc.py::test_breedveld_soc_rounds_come_from_breedveld_options[array_api_strict] FAILED tests/integration/test_breedveld_soc.py::test_soc_leaves_hock_schittkowski_optima_unchanged[array_api_strict-HS71] FAILED tests/integration/test_breedveld_soc.py::test_soc_leaves_hock_schittkowski_optima_unchanged[array_api_strict-HS43] FAILED tests/integration/test_breedveld_soc.py::test_soc_trials_are_logged_at_debug_level[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_callback_is_invoked_once_per_recorded_iteration[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_callback_truthy_return_requests_stop[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_acceptable_stopping_is_integrated_with_the_driver[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_component_optimality_threshold_is_integrated_with_the_driver[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_wall_time_stopping_is_integrated_with_the_driver[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_objective_stagnation_is_guarded_and_skips_the_initial_record[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_convergence_takes_priority_over_stop_request[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_verbose_emits_iteration_log_to_ipax_logger[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_iteration_header_is_reprinted_periodically[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_iterates_meeting_acceptable_criteria_are_marked[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_restoration_jump_marks_the_resulting_iteration[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_verbosity_tiers_are_emitted_at_their_levels[array_api_strict] FAILED tests/integration/test_callback_and_logging.py::test_silent_by_default[array_api_strict] FAILED tests/integration/test_corrections_solve.py::test_corrections_match_optimum_on_bound_qp[array_api_strict-mehrotra] FAILED tests/integration/test_corrections_solve.py::test_corrections_match_optimum_on_bound_qp[array_api_strict-gondzio] FAILED tests/integration/test_corrections_solve.py::test_corrections_solve_inequality_qp[array_api_strict-mehrotra] FAILED tests/integration/test_corrections_solve.py::test_corrections_solve_inequality_qp[array_api_strict-gondzio] FAILED tests/integration/test_corrections_solve.py::test_corrections_reduce_outer_iterations_on_inequality_qp[array_api_strict] FAILED tests/integration/test_corrections_solve.py::test_corrections_work_across_repeated_solve_routes[array_api_strict-krylov-mehrotra] FAILED tests/integration/test_corrections_solve.py::test_corrections_work_across_repeated_solve_routes[array_api_strict-krylov-gondzio] FAILED tests/integration/test_dense_augmented_route.py::test_augmented_route_reaches_known_optimum[array_api_strict] FAILED tests/integration/test_dense_augmented_route.py::test_augmented_route_agrees_with_condensed_route[array_api_strict] FAILED tests/integration/test_dense_augmented_route.py::test_augmented_route_reports_itself_in_linear_solver[array_api_strict] FAILED tests/integration/test_dense_augmented_route.py::test_augmented_route_escapes_saddle_like_condensed[array_api_strict] FAILED tests/integration/test_dense_nonconvex.py::test_dense_route_pd_guard_escapes_saddle[array_api_strict] FAILED tests/integration/test_device_efficiency.py::test_measure_device_solve_populates_metrics[array_api_strict] FAILED tests/integration/test_device_efficiency.py::test_sync_counter_restores_dunders_after_window[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs1_rosenbrock_reaches_published_optimum[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs6_nonconvex_equality[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs7_log_objective_equality[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs8_two_quadratic_equalities[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs35_inequality_qp_with_bounds[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs43_rosen_suzuki_inequalities[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs21_active_bound_with_linear_inequality[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs28_equality_qp_degenerate_multiplier[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs9_nonunique_periodic_optimum[array_api_strict] FAILED tests/integration/test_hock_schittkowski.py::test_hs71_full_constraint_mix[array_api_strict] FAILED tests/integration/test_known_optima.py::test_unconstrained_quadratic_hits_closed_form[array_api_strict] FAILED tests/integration/test_known_optima.py::test_unreachable_optimality_stops_acceptable_not_max_iter[array_api_strict] FAILED tests/integration/test_known_optima.py::test_bound_constrained_qp_finds_known_active_bounds[array_api_strict] FAILED tests/integration/test_known_optima.py::test_inequality_qp_finds_known_active_set[array_api_strict] FAILED tests/integration/test_known_optima.py::test_equality_constrained_qp_satisfies_kkt[array_api_strict] FAILED tests/integration/test_known_optima.py::test_mixed_linear_and_nonlinear_equalities_slice_hessian_multipliers[array_api_strict] FAILED tests/integration/test_known_optima.py::test_fixed_variable_solves_via_bound_relaxation[array_api_strict] FAILED tests/integration/test_known_optima.py::test_infeasible_problem_reports_infeasible[array_api_strict] FAILED tests/integration/test_known_optima.py::test_inconsistent_equalities_report_infeasible[array_api_strict] FAILED tests/integration/test_known_optima.py::test_result_history_tracks_monotone_kkt_progress[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_unconstrained_quadratic[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_bound_constrained_qp[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_inequality_qp[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_jacobi_preconditioner_cuts_total_iterations[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_equality_constrained_qp_uses_minres[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_gmres_solves_bound_constrained_qp[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_lbfgs_preconditioner_solves_bound_constrained_qp[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_solves_synthetic_rt_like_problem[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_solve_never_materializes_the_kkt_matrix[array_api_strict] FAILED tests/integration/test_krylov_solve.py::test_krylov_operator_errors_propagate[array_api_strict] FAILED tests/integration/test_linear_inequalities.py::test_lower_bounded_linear_inequality[array_api_strict] FAILED tests/integration/test_linear_inequalities.py::test_two_sided_range_upper_active[array_api_strict] FAILED tests/integration/test_linear_inequalities.py::test_mixed_nonlinear_and_linear_inequalities[array_api_strict] FAILED tests/integration/test_linear_inequalities.py::test_linear_inequality_with_gradient_scaling[array_api_strict] FAILED tests/integration/test_linear_inequalities.py::test_hs21_via_linear_ineq_matches_known_optimum[array_api_strict] FAILED tests/integration/test_linear_inequalities.py::test_matrix_free_linear_ineq_is_lowered_and_solved[array_api_strict] FAILED tests/integration/test_result_routes.py::test_routes_record_the_default_auto_selection[array_api_strict] FAILED tests/integration/test_result_routes.py::test_routes_reflect_forced_krylov[array_api_strict] FAILED tests/integration/test_result_routes.py::test_routes_reflect_the_dense_augmented_form[array_api_strict] FAILED tests/integration/test_result_routes.py::test_routes_echo_configured_algorithm_pieces[array_api_strict] FAILED tests/integration/test_result_routes.py::test_routes_absent_on_pre_solver_exits[array_api_strict] FAILED tests/integration/test_result_routes.py::test_format_result_reports_routes[array_api_strict] FAILED tests/integration/test_scaling_solve.py::test_badly_scaled_qp_solves_with_scaling[array_api_strict] FAILED tests/integration/test_scaling_solve.py::test_options_accepts_simple_scaling_shorthand[array_api_strict] FAILED tests/integration/test_scaling_solve.py::test_history_and_callback_use_original_problem_units[array_api_strict] FAILED tests/integration/test_scaling_solve.py::test_callback_slacks_and_inequality_duals_use_original_units[array_api_strict] FAILED tests/integration/test_scaling_solve.py::test_scaling_off_by_default_leaves_problem_unscaled[array_api_strict] FAILED tests/integration/test_scaling_solve.py::test_scaling_matches_across_solver_routes[array_api_strict] FAILED tests/integration/test_warm_start_solve.py::test_warm_start_from_optimum_converges_immediately[array_api_strict] FAILED tests/integration/test_warm_start_solve.py::test_warm_start_with_scaling_round_trips[array_api_strict] FAILED tests/integration/test_warm_start_solve.py::test_warm_start_with_scaling_round_trips_inequalities[array_api_strict] FAILED tests/integration/test_warm_start_solve.py::test_warm_start_dimension_mismatch_raises[array_api_strict] FAILED tests/regression/test_adaptive_alpha_min.py::test_driver_derives_theta_min_from_the_initial_violation[array_api_strict] FAILED tests/regression/test_adaptive_alpha_min.py::test_theta_min_floors_at_one_for_a_feasible_start[array_api_strict] FAILED tests/regression/test_bound_only_lbfgs_structured_routes.py::test_dense_route_never_materializes_bound_only_lbfgs[array_api_strict] FAILED tests/regression/test_bound_only_lbfgs_structured_routes.py::test_krylov_route_uses_exact_lbfgs_inverse_on_bound_only[array_api_strict] FAILED tests/regression/test_bound_only_lbfgs_structured_routes.py::test_structured_routes_agree_with_each_other[array_api_strict] FAILED tests/regression/test_budget_exhaustion_acceptable.py::test_max_iter_within_relaxed_tolerance_reports_acceptable[array_api_strict] FAILED tests/regression/test_budget_exhaustion_acceptable.py::test_max_iter_far_from_tolerance_stays_max_iter[array_api_strict] FAILED tests/regression/test_callback_evaluation_counts.py::test_unconstrained_lbfgs_evaluates_each_point_once[array_api_strict] FAILED tests/regression/test_callback_evaluation_counts.py::test_constrained_without_soc_evaluates_each_point_once[array_api_strict-HS43-ineq] FAILED tests/regression/test_callback_evaluation_counts.py::test_constrained_without_soc_evaluates_each_point_once[array_api_strict-HS7-eq] FAILED tests/regression/test_callback_evaluation_counts.py::test_constrained_without_soc_evaluates_each_point_once[array_api_strict-HS71-eq-ineq-bounds] FAILED tests/regression/test_callback_evaluation_counts.py::test_constrained_with_soc_bounded_by_visited_points[array_api_strict-HS43-ineq] FAILED tests/regression/test_callback_evaluation_counts.py::test_constrained_with_soc_bounded_by_visited_points[array_api_strict-HS7-eq] FAILED tests/regression/test_callback_evaluation_counts.py::test_constrained_with_soc_bounded_by_visited_points[array_api_strict-HS71-eq-ineq-bounds] FAILED tests/regression/test_corrector_operator_counts.py::test_no_corrector_monotone_passes[array_api_strict] FAILED tests/regression/test_corrector_operator_counts.py::test_mehrotra_corrector_passes[array_api_strict-monotone-filter] FAILED tests/regression/test_corrector_operator_counts.py::test_mehrotra_corrector_passes[array_api_strict-monotone-breedveld] FAILED tests/regression/test_corrector_operator_counts.py::test_mehrotra_corrector_passes[array_api_strict-probing-filter] FAILED tests/regression/test_corrector_operator_counts.py::test_mehrotra_corrector_passes[array_api_strict-probing-breedveld] FAILED tests/regression/test_corrector_operator_counts.py::test_gondzio_corrector_passes[array_api_strict-filter] FAILED tests/regression/test_corrector_operator_counts.py::test_gondzio_corrector_passes[array_api_strict-breedveld] FAILED tests/regression/test_delta_c_rank_deficient_constraints.py::test_dense_solves_rank_deficient_equality[array_api_strict] FAILED tests/regression/test_delta_c_rank_deficient_constraints.py::test_lbfgs_solves_rank_deficient_equality[array_api_strict] FAILED tests/regression/test_driver_host_sync_budget.py::test_host_syncs_per_iteration_bounded[array_api_strict-rosenbrock-unconstrained] FAILED tests/regression/test_driver_host_sync_budget.py::test_host_syncs_per_iteration_bounded[array_api_strict-HS43-ineq] FAILED tests/regression/test_driver_host_sync_budget.py::test_host_syncs_per_iteration_bounded[array_api_strict-HS71-eq-ineq-bounds] FAILED tests/regression/test_driver_host_sync_budget.py::test_host_syncs_per_iteration_bounded[array_api_strict-bound-only-lbfgs-krylov-direct] FAILED tests/regression/test_false_infeasible_veto.py::test_infeasible_verdict_vetoed_by_feasible_history[array_api_strict] FAILED tests/regression/test_false_infeasible_veto.py::test_failure_status_returns_best_iterate[array_api_strict] FAILED tests/regression/test_false_infeasible_veto.py::test_genuine_infeasibility_still_reported[array_api_strict] FAILED tests/regression/test_feasible_ascent_stall.py::test_krylov_escapes_feasible_ascent_direction[array_api_strict] FAILED tests/regression/test_feasible_ascent_stall.py::test_stall_detector_terminates_honestly[array_api_strict] FAILED tests/regression/test_feasible_ascent_stall.py::test_stall_detector_disabled_runs_to_budget[array_api_strict] FAILED tests/regression/test_feasible_ascent_stall.py::test_descent_enforcement_reuses_step_when_already_descent[array_api_strict] FAILED tests/regression/test_feasible_point_restoration_recenter.py::test_feasible_entry_recenters_instead_of_restoring[array_api_strict] FAILED tests/regression/test_feasible_point_restoration_recenter.py::test_infeasible_entry_still_restores[array_api_strict] FAILED tests/regression/test_feasible_point_restoration_recenter.py::test_recenter_breaks_a_poisoned_dual_deadlock[array_api_strict] FAILED tests/regression/test_hs7_lbfgs_no_false_infeasible.py::test_hs7_lbfgs_dense_does_not_diverge[array_api_strict] FAILED tests/regression/test_hs7_lbfgs_no_false_infeasible.py::test_hs7_lbfgs_krylov_does_not_diverge[array_api_strict] FAILED tests/regression/test_hs9_krylov_zero_hessian.py::test_hs9_exact_krylov_recovers_from_zero_hessian_start[array_api_strict] FAILED tests/regression/test_iteration_operator_lifetime.py::test_previous_hessian_is_released_before_the_next_assembly[array_api_strict-filter] FAILED tests/regression/test_iteration_operator_lifetime.py::test_previous_hessian_is_released_before_the_next_assembly[array_api_strict-breedveld] FAILED tests/regression/test_lbfgs_gradient_overshoot.py::test_lbfgs_recovers_from_non_finite_gradient_overshoot[array_api_strict] FAILED tests/regression/test_linear_ineq_lbfgs.py::test_affine_lbfgs_active_inequality_and_bound[array_api_strict-linear_ineq-dense] FAILED tests/regression/test_linear_ineq_lbfgs.py::test_affine_lbfgs_active_inequality_and_bound[array_api_strict-linear_ineq-krylov] FAILED tests/regression/test_mu_oracle_inflation.py::test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-probing-none] FAILED tests/regression/test_mu_oracle_inflation.py::test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-probing-gondzio] FAILED tests/regression/test_mu_oracle_inflation.py::test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-adaptive-gondzio] FAILED tests/regression/test_mu_oracle_inflation.py::test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-breedveld-mehrotra] FAILED tests/regression/test_mu_oracle_inflation.py::test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-quality-none] FAILED tests/regression/test_mu_oracle_inflation.py::test_free_mode_oracles_do_not_run_away_on_ill_scaled_ls[array_api_strict-quality-gondzio] FAILED tests/regression/test_near_feasible_not_infeasible.py::test_near_feasible_restoration_stall_is_not_infeasible[array_api_strict] FAILED tests/regression/test_near_feasible_not_infeasible.py::test_genuinely_infeasible_restoration_still_reports_infeasible[array_api_strict] FAILED tests/regression/test_point_cache_lifetime.py::test_at_most_two_jacobians_alive_during_a_solve[array_api_strict] FAILED tests/regression/test_point_cache_lifetime.py::test_descent_retry_diagnostic_formats[array_api_strict] FAILED tests/regression/test_repeat_recenter_raises_mu.py::test_repeat_recenter_raise_sticks_in_the_loop[array_api_strict] FAILED tests/regression/test_restoration_on_step_failure.py::test_step_solve_failure_enters_restoration_not_numerical_error[array_api_strict-dense] FAILED tests/regression/test_restoration_on_step_failure.py::test_step_solve_failure_enters_restoration_not_numerical_error[array_api_strict-krylov] FAILED tests/regression/test_restoration_on_step_failure.py::test_matrix_free_restoration_does_not_pin_its_operator_after_returning[array_api_strict] FAILED tests/regression/test_restoration_on_step_failure.py::test_step_solve_failure_on_infeasible_problem_reports_honestly[array_api_strict] FAILED tests/regression/test_restoration_on_step_failure.py::test_step_failure_near_optimum_still_converges[array_api_strict] FAILED tests/regression/test_restoration_tall_gram_block_not_densified.py::test_tall_gram_block_through_restoration_is_not_densified[array_api_strict-operator] FAILED tests/regression/test_restoration_tall_gram_block_not_densified.py::test_tall_gram_block_through_restoration_is_not_densified[array_api_strict-dense] FAILED tests/regression/test_restoration_tall_gram_block_not_densified.py::test_operator_path_restoration_matches_the_densified_path[array_api_strict] FAILED tests/regression/test_second_chance_restoration.py::test_second_chance_restoration_rescues_a_bad_basin[array_api_strict] FAILED tests/regression/test_second_chance_restoration.py::test_second_chance_fires_at_most_once[array_api_strict] FAILED tests/regression/test_soc_factorization_reuse.py::test_soc_solves_reuse_the_step_factorization[array_api_strict-dense] FAILED tests/regression/test_soc_factorization_reuse.py::test_soc_solves_reuse_the_step_factorization[array_api_strict-krylov] FAILED tests/regression/test_soc_factorization_reuse.py::test_soc_gate_follows_a_regularized_fallback_inside_the_soc_loop[array_api_strict-dense] FAILED tests/regression/test_soc_factorization_reuse.py::test_soc_gate_follows_a_regularized_fallback_inside_the_soc_loop[array_api_strict-krylov] FAILED tests/regression/test_soc_factorization_reuse.py::test_direct_soc_never_reuses_the_steps_regularized_factorization[array_api_strict] FAILED tests/regression/test_soc_factorization_reuse.py::test_iterative_soc_reuses_the_steps_regularized_factorization[array_api_strict] FAILED tests/regression/test_soc_factorization_reuse.py::test_direct_soc_skips_the_correction_when_its_fresh_solve_fails[array_api_strict] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_linear_ineq_gram_type_error_propagates[array_api_strict-exact] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_linear_ineq_gram_type_error_propagates[array_api_strict-lbfgs] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_ineq_jacobian_gram_type_error_propagates[array_api_strict-exact] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_ineq_jacobian_gram_type_error_propagates[array_api_strict-lbfgs] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_mixed_precision_gram_keyword_bug_is_not_retried_away[array_api_strict] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_hessian_operator_materialization_type_error_propagates[array_api_strict] FAILED tests/regression/test_step_solve_callback_errors_propagate.py::test_lagrangian_hessian_callback_type_error_propagates[array_api_strict] FAILED tests/regression/test_step_solve_numerical_failure_ladder.py::test_numerical_failure_in_first_factorization_escalates_delta_w[array_api_strict-backend-linalg-error] FAILED tests/regression/test_step_solve_numerical_failure_ladder.py::test_numerical_failure_in_first_factorization_escalates_delta_w[array_api_strict-floating-point-error] FAILED tests/regression/test_step_solve_numerical_failure_ladder.py::test_numerical_failure_in_first_factorization_escalates_delta_w[array_api_strict-zero-division-error] FAILED tests/regression/test_step_solve_numerical_failure_ladder.py::test_exhausted_ladder_hands_the_step_to_restoration[array_api_strict-backend-linalg-error] FAILED tests/regression/test_step_solve_numerical_failure_ladder.py::test_exhausted_ladder_hands_the_step_to_restoration[array_api_strict-floating-point-error] FAILED tests/regression/test_step_solve_numerical_failure_ladder.py::test_exhausted_ladder_hands_the_step_to_restoration[array_api_strict-zero-division-error] FAILED tests/regression/test_terminal_dual_certificate.py::test_budget_exit_with_repairable_duals_reports_acceptable[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_certificate_declines_at_an_infeasible_point[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_stall_with_certifiable_gradient_reports_acceptable[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_stall_at_a_non_stationary_point_stays_stalled[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_stall_at_an_active_bound_stays_stalled[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_disabled_acceptable_stopping_disables_the_certificate[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_certificate_requires_the_dual_tolerance_enabled[array_api_strict-acceptable0] FAILED tests/regression/test_terminal_dual_certificate.py::test_certificate_requires_the_dual_tolerance_enabled[array_api_strict-acceptable1] FAILED tests/regression/test_terminal_dual_certificate.py::test_an_enabled_f_tol_is_honored_terminally[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_max_time_exit_is_certified_too[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_certificate_survives_a_raising_dual_estimator[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_certificate_declines_a_non_finite_dual_estimate[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_stall_returning_a_best_iterate_within_relaxed_tol[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_enabled_relative_change_tolerance_declines_the_certificate[array_api_strict] FAILED tests/regression/test_terminal_dual_certificate.py::test_a_failing_residual_declines_the_certificate_instead_of_raising[array_api_strict] FAILED tests/regression/test_theta_min_ftype_gate.py::test_ftype_branch_is_gated_by_the_driver_supplied_theta_min[array_api_strict] FAILED tests/regression/test_unbounded_detection.py::test_unbounded_problem_reports_unbounded[array_api_strict] FAILED tests/regression/test_unbounded_detection.py::test_well_posed_problem_is_not_flagged_unbounded[array_api_strict] FAILED tests/regression/test_unbounded_detection.py::test_far_optimum_is_not_misreported_unbounded[array_api_strict] FAILED tests/regression/test_unbounded_detection.py::test_diverging_iterates_tol_none_disables_detection[array_api_strict] FAILED tests/regression/test_uncertified_restoration_stall.py::test_non_progressing_uncertified_stall_is_restoration_failed[array_api_strict] FAILED tests/regression/test_uncertified_restoration_stall.py::test_progressing_uncertified_stalls_resume_the_main_loop[array_api_strict] FAILED tests/regression/test_uncertified_restoration_stall.py::test_uncertified_stall_still_gets_the_x0_anchored_rescue[array_api_strict] FAILED tests/regression/test_uncertified_restoration_stall.py::test_certified_stationary_claim_still_reports_infeasible[array_api_strict] FAILED tests/test_purity_gate.py::test_no_banned_imports_in_core - AssertionE... FAILED tests/test_purity_gate.py::test_core_may_not_import_the_interfaces_front_ends FAILED tests/test_purity_gate.py::test_relative_imports_of_the_interfaces_are_caught_too FAILED tests/unit/test_backend_namespace.py::test_capabilities_reports_real_devices[array_api_strict] FAILED tests/unit/test_breedveld.py::test_breedveld_globalization_solves_bound_qp[array_api_strict] FAILED tests/unit/test_breedveld.py::test_breedveld_globalization_uses_breedveld_tau[array_api_strict] FAILED tests/unit/test_breedveld.py::test_common_step_couples_the_primal_and_dual_step_lengths[array_api_strict] FAILED tests/unit/test_breedveld.py::test_common_step_hands_the_controller_the_smaller_length[array_api_strict] FAILED tests/unit/test_breedveld.py::test_common_step_backtracking_shrinks_both_updates[array_api_strict] FAILED tests/unit/test_breedveld.py::test_common_step_leaves_the_corrector_probes_separate[array_api_strict] FAILED tests/unit/test_breedveld.py::test_common_step_is_inert_under_the_filter_line_search[array_api_strict] FAILED tests/unit/test_breedveld.py::test_common_step_default_is_bit_identical[array_api_strict-HS21-breedveld] FAILED tests/unit/test_breedveld.py::test_common_step_default_is_bit_identical[array_api_strict-HS35-breedveld] FAILED tests/unit/test_breedveld.py::test_common_step_default_is_bit_identical[array_api_strict-HS43-breedveld] FAILED tests/unit/test_breedveld.py::test_common_step_default_is_bit_identical[array_api_strict-HS43-filter] FAILED tests/unit/test_breedveld.py::test_common_step_default_is_bit_identical[array_api_strict-HS71-breedveld] FAILED tests/unit/test_breedveld.py::test_common_step_default_is_bit_identical[array_api_strict-HS71-filter] FAILED tests/unit/test_condensed_curvature_gram.py::test_solve_through_the_hook_matches_the_two_pass_solve[array_api_strict] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_variant_targets_and_acceptance[array_api_strict] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_capped_corrections[array_api_strict-10.0-10.0--40.0] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_capped_corrections[array_api_strict-1.0-1.0--1.0524999999999984] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_capped_corrections[array_api_strict--1.0--1.0-0.0] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_capped_corrections[array_api_strict--3.5--5.0-0.18125000000000002] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_corrects_bound_blocks[array_api_strict] FAILED tests/unit/test_corrections.py::test_breedveld_gondzio_variant_rejects_small_growth[array_api_strict] FAILED tests/unit/test_corrections.py::test_mehrotra_second_order_targets_clipped_to_symmetric_box[array_api_strict] FAILED tests/unit/test_corrections.py::test_mehrotra_failed_corrector_matches_affine_zero_target[array_api_strict] FAILED tests/unit/test_corrections.py::test_mehrotra_falls_back_to_centered_when_correction_collapses_the_step[array_api_strict] FAILED tests/unit/test_corrections.py::test_mehrotra_keeps_a_correction_with_a_comparable_step[array_api_strict] FAILED tests/unit/test_corrections.py::test_mehrotra_fallback_returns_affine_when_the_centered_solve_fails[array_api_strict] FAILED tests/unit/test_corrections.py::test_gondzio_accumulates_partial_trial_residual_and_uses_gamma[array_api_strict] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-empty_matrix-[]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-rows_all_empty-[0, 0, 0, 0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-single_row-[7]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-single_empty_row-[0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-leading_trailing_empty-[0, 0, 3, 1, 0, 0, 2, 0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_0-[3, 0, 0, 3, 1, 2, 2, 5, 0, 0, 1, 1]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_1-[0, 5, 1]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_2-[0, 4, 0, 0, 0, 2, 2, 0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int64-random_3-[3, 4, 0, 0, 0, 5, 4, 2, 3, 1, 5, 0, 0, 4, 1, 0, 0, 3, 2, 5, 0, 1, 0, 1, 2, 0, 0, 0, 5, 0, 2, 1, 0, 0, 0, 5, 3, 2, 3, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 5, 3, 0, 2, 5, 5]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-empty_matrix-[]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-rows_all_empty-[0, 0, 0, 0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-single_row-[7]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-single_empty_row-[0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-leading_trailing_empty-[0, 0, 3, 1, 0, 0, 2, 0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_0-[3, 0, 0, 3, 1, 2, 2, 5, 0, 0, 1, 1]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_1-[0, 5, 1]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_2-[0, 4, 0, 0, 0, 2, 2, 0]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_matches_searchsorted[array_api_strict-int32-random_3-[3, 4, 0, 0, 0, 5, 4, 2, 3, 1, 5, 0, 0, 4, 1, 0, 0, 3, 2, 5, 0, 1, 0, 1, 2, 0, 0, 0, 5, 0, 2, 1, 0, 0, 0, 5, 3, 2, 3, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 5, 3, 0, 2, 5, 5]] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_falls_back_without_array_repeat[array_api_strict-_NoRepeat] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_falls_back_without_array_repeat[array_api_strict-_RejectingRepeat] FAILED tests/unit/test_expand_indptr.py::test_expand_indptr_rejects_indptr_nnz_mismatch[array_api_strict] FAILED tests/unit/test_expand_indptr.py::test_csr_csc_constructors_use_identical_expansion[array_api_strict] FAILED tests/unit/test_feasible_kkt_acceptance.py::test_driver_passes_certifier_at_feasible_iterates[array_api_strict] FAILED tests/unit/test_feasible_kkt_acceptance.py::test_certifier_disabled_by_default[array_api_strict] FAILED tests/unit/test_feasible_kkt_acceptance.py::test_certifier_computes_a_real_kkt_decrease_verdict[array_api_strict] FAILED tests/unit/test_feasible_kkt_acceptance.py::test_certifier_threshold_is_honoured[array_api_strict] FAILED tests/unit/test_feasible_kkt_acceptance.py::test_certifier_advances_duals_even_for_a_null_primal_step[array_api_strict] FAILED tests/unit/test_feasible_kkt_acceptance.py::test_certifier_absent_at_infeasible_iterates[array_api_strict] FAILED tests/unit/test_filter_reset_on_mu_update.py::test_filter_is_reset_when_mu_decreases[array_api_strict] FAILED tests/unit/test_free_mode_acceptance.py::test_free_oracle_runs_the_weak_acceptance[array_api_strict] FAILED tests/unit/test_free_mode_acceptance.py::test_monitor_trip_reinstates_the_rigorous_search[array_api_strict] FAILED tests/unit/test_free_mode_acceptance.py::test_free_mode_acceptance_defaults_to_rigorous[array_api_strict] FAILED tests/unit/test_free_mode_acceptance.py::test_free_search_failure_switches_to_monotone[array_api_strict] FAILED tests/unit/test_free_mode_acceptance.py::test_weak_acceptance_is_inert_under_the_monotone_default[array_api_strict] FAILED tests/unit/test_hessian_lbfgs.py::test_lbfgs_run_matches_exact_optimum_with_bounded_overhead[array_api_strict] FAILED tests/unit/test_init_bounds.py::test_fixed_bound_pair_is_widened_symmetrically[array_api_strict] FAILED tests/unit/test_init_bounds.py::test_one_sided_and_absent_bounds_are_untouched[array_api_strict] FAILED tests/unit/test_init_recenter.py::test_active_slack_is_refloored_on_mu_and_poisoned_dual_is_clipped[array_api_strict] FAILED tests/unit/test_init_recenter.py::test_inactive_slack_and_consistent_dual_pass_through[array_api_strict] FAILED tests/unit/test_init_recenter.py::test_vanished_dual_is_raised_to_the_band_floor[array_api_strict] FAILED tests/unit/test_init_recenter.py::test_violated_constraint_gets_the_mu_floor[array_api_strict] FAILED tests/unit/test_kkt.py::test_normal_equations_signature_is_none_without_a_stable_pattern[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_lowering_matches_reference[array_api_strict-opaque] FAILED tests/unit/test_linear_ineq_lowering.py::test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-coo] FAILED tests/unit/test_linear_ineq_lowering.py::test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-csr] FAILED tests/unit/test_linear_ineq_lowering.py::test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-csc] FAILED tests/unit/test_linear_ineq_lowering.py::test_sparse_lowering_is_triplet_level_and_keeps_the_family[array_api_strict-vstack] FAILED tests/unit/test_linear_ineq_lowering.py::test_vstack_lowering_keeps_per_block_precision_hints[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_sparse_lowering_keeps_a_declared_values_hint[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_sparse_lowering_derives_a_stable_pattern_key[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_lowering_rejects_inverted_ranges[array_api_strict-csr] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_lowering_rejects_inverted_ranges[array_api_strict-vstack] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_lowering_rejects_bound_length_mismatch[array_api_strict-csr] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_lowering_rejects_bound_length_mismatch[array_api_strict-vstack] FAILED tests/unit/test_linear_ineq_lowering.py::test_all_unbounded_operator_block_lowers_to_nothing[array_api_strict-opaque] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_block_without_nonlinear_inequalities[array_api_strict-opaque] FAILED tests/unit/test_linear_ineq_lowering.py::test_operator_block_multipliers_are_sliced_off[array_api_strict-opaque-1] FAILED tests/unit/test_linear_ineq_lowering.py::test_matrix_free_block_lowers_through_the_wrapper[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_wrapper_to_coo_remaps_a_structured_inner_operator[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_csr_linear_ineq_no_longer_raises[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_dense_subclass_is_wrapped_so_its_overrides_survive[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_wrapper_coo_values_reuse_the_cached_selection[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_wrapper_without_a_pattern_key_rederives_its_coo[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_vstack_multipliers_are_ordered_block_by_block[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_vstack_subclass_is_wrapped_so_its_overrides_survive[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_vstack_with_one_bounded_block_is_not_restacked[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_row_selection_without_rows_adjoint_is_zero[array_api_strict] FAILED tests/unit/test_linear_ineq_lowering.py::test_wrapper_forwards_gram_coo_with_folded_weights[array_api_strict] FAILED tests/unit/test_mixed_precision_dense.py::test_gram_accumulate_dtype_hint_protocol[array_api_strict] FAILED tests/unit/test_mixed_precision_dense.py::test_solve_hs35_with_mixed_gram_matches_reference[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_complementarity_measures_average_and_min[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_complementarity_measures_bounds_only[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_schedule_solves_hs35_and_changes_mu_trace[array_api_strict-adaptive] FAILED tests/unit/test_mu_schedule.py::test_schedule_solves_hs35_and_changes_mu_trace[array_api_strict-breedveld] FAILED tests/unit/test_mu_schedule.py::test_schedule_solves_hs35_and_changes_mu_trace[array_api_strict-quality] FAILED tests/unit/test_mu_schedule.py::test_schedule_solves_bound_qp[array_api_strict-adaptive] FAILED tests/unit/test_mu_schedule.py::test_schedule_solves_bound_qp[array_api_strict-breedveld] FAILED tests/unit/test_mu_schedule.py::test_schedule_solves_bound_qp[array_api_strict-quality] FAILED tests/unit/test_mu_schedule.py::test_breedveld_schedule_keeps_mu_until_first_step[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_probing_standalone_solves_and_changes_mu_trace[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_quality_standalone_solves_and_changes_mu_trace[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_default_schedule_is_monotone[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_adaptive_oracle_steers_the_corrector[array_api_strict-mehrotra] FAILED tests/unit/test_mu_schedule.py::test_adaptive_oracle_steers_the_corrector[array_api_strict-gondzio] FAILED tests/unit/test_mu_schedule.py::test_breedveld_oracle_with_corrector_solves[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_probing_sigma_default_never_consults_the_mehrotra_rule[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_mehrotra_probing_sigma_solves_and_uses_the_breedveld_tau[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_breedveld_mehrotra_and_gondzio_variant_solve_hs35[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_centrality_floor_steers_free_mode_mu[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_forced_fallback_steers_mu_and_still_converges[array_api_strict] FAILED tests/unit/test_mu_schedule.py::test_driver_passes_infeasibility_to_fallback_mu[array_api_strict] FAILED tests/unit/test_public_sparse_operators.py::test_csr_expands_to_correct_coo_structure[array_api_strict] FAILED tests/unit/test_public_sparse_operators.py::test_csc_expands_to_correct_coo_structure[array_api_strict] FAILED tests/unit/test_public_sparse_operators.py::test_coo_values_matches_to_coo_values[array_api_strict] FAILED tests/unit/test_recenter_mu_escalation.py::test_first_feasible_recenter_keeps_mu[array_api_strict] FAILED tests/unit/test_recenter_mu_escalation.py::test_repeat_feasible_recenter_raises_mu[array_api_strict] FAILED tests/unit/test_recenter_mu_escalation.py::test_repeat_recenter_mu_capped_at_mu_init[array_api_strict] FAILED tests/unit/test_restoration.py::test_restoration_reduces_equality_violation[array_api_strict] FAILED tests/unit/test_restoration.py::test_matrix_free_restoration_uses_only_jacobian_products[array_api_strict] FAILED tests/unit/test_restoration.py::test_matrix_free_restoration_uses_the_truncated_krylov_iterate[array_api_strict] FAILED tests/unit/test_restoration.py::test_matrix_free_restoration_tracks_dense_on_an_ill_conditioned_jacobian[array_api_strict] FAILED tests/unit/test_restoration.py::test_matrix_free_restoration_does_not_fall_back_on_krylov_failure[array_api_strict] FAILED tests/unit/test_restoration.py::test_matrix_free_and_dense_restoration_match_with_active_bounds_and_inequality[array_api_strict] FAILED tests/unit/test_restoration.py::test_matrix_free_restoration_requires_an_adjoint[array_api_strict] FAILED tests/unit/test_restoration.py::test_solve_rejects_matrix_free_restoration_without_an_adjoint_up_front[array_api_strict] FAILED tests/unit/test_restoration.py::test_restoration_flags_inconsistent_equalities[array_api_strict] FAILED tests/unit/test_restoration.py::test_restoration_keeps_projected_bound_point_strictly_interior[array_api_strict] FAILED tests/unit/test_restoration.py::test_restoration_survives_singular_gauss_newton_system[array_api_strict] FAILED tests/unit/test_restoration.py::test_dense_gauss_newton_solve_propagates_non_numerical_errors[array_api_strict-TypeError] FAILED tests/unit/test_restoration.py::test_dense_gauss_newton_solve_propagates_non_numerical_errors[array_api_strict-MemoryError] FAILED tests/unit/test_restoration.py::test_rejected_lm_trials_reuse_the_jacobian[array_api_strict] FAILED tests/unit/test_restoration.py::test_bound_blocked_infeasibility_is_box_stationary[array_api_strict] FAILED tests/unit/test_restoration.py::test_restoration_recovers_inequality_slack_without_filter_residual[array_api_strict] FAILED tests/unit/test_restoration.py::test_blocked_bound_solves_the_reduced_system_on_the_free_set[array_api_strict] FAILED tests/unit/test_restoration.py::test_budget_exit_is_not_an_infeasibility_certificate[array_api_strict] FAILED tests/unit/test_restoration.py::test_stall_window_exit_is_not_an_infeasibility_certificate[array_api_strict] FAILED tests/unit/test_restoration.py::test_restoration_escapes_a_symmetric_saddle_before_certifying[array_api_strict-dense] FAILED tests/unit/test_restoration.py::test_restoration_escapes_a_symmetric_saddle_before_certifying[array_api_strict-krylov] FAILED tests/unit/test_restoration.py::test_restoration_still_certifies_a_genuine_local_minimum[array_api_strict] FAILED tests/unit/test_restoration.py::test_dense_route_forms_a_large_gram_capable_block_through_the_operator[array_api_strict] FAILED tests/unit/test_restoration.py::test_dense_route_keeps_small_blocks_byte_identical[array_api_strict] FAILED tests/unit/test_restoration.py::test_dense_route_decides_per_block_by_size[array_api_strict] FAILED tests/unit/test_restoration.py::test_dense_route_densifies_a_block_that_is_not_gram_capable[array_api_strict] FAILED tests/unit/test_restoration.py::test_restore_never_densifies_a_large_gram_capable_block[array_api_strict] FAILED tests/unit/test_restoration.py::test_dense_route_real_sparse_gram_operators_match_the_densified_reference[array_api_strict-signed_selection] FAILED tests/unit/test_restoration_cholesky.py::test_default_restoration_reproduces_the_lu_reference[array_api_strict-mixed] FAILED tests/unit/test_restoration_cholesky.py::test_explicit_lu_is_the_default_bit_for_bit[array_api_strict-hs6] FAILED tests/unit/test_restoration_cholesky.py::test_explicit_lu_is_the_default_bit_for_bit[array_api_strict-mixed] FAILED tests/unit/test_restoration_cholesky.py::test_cholesky_reaches_the_lu_feasible_point[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_cholesky_on_a_rank_deficient_gram_stays_on_the_manifold[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_cholesky_without_a_triangular_solve_uses_lu[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_cholesky_breakdown_falls_back_to_lu[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_non_finite_cholesky_factor_falls_back_to_lu[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_non_finite_cholesky_solution_falls_back_to_lu[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_raising_cholesky_solve_falls_back_to_lu[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_non_numerical_cholesky_errors_propagate[array_api_strict-TypeError] FAILED tests/unit/test_restoration_cholesky.py::test_non_numerical_cholesky_errors_propagate[array_api_strict-MemoryError] FAILED tests/unit/test_restoration_cholesky.py::test_singular_gauss_newton_system_survives_with_cholesky[array_api_strict] FAILED tests/unit/test_restoration_cholesky.py::test_solve_passes_the_dense_factorization_to_restoration[array_api_strict-lu] FAILED tests/unit/test_restoration_cholesky.py::test_solve_passes_the_dense_factorization_to_restoration[array_api_strict-cholesky] FAILED tests/unit/test_scaling.py::test_constraint_row_factors[array_api_strict] FAILED tests/unit/test_scaling.py::test_matrix_free_scaling_accepts_bulk_row_norm_callback[array_api_strict] FAILED tests/unit/test_scaling.py::test_linear_eq_combined_factor_orders_nonlinear_then_linear[array_api_strict] FAILED tests/unit/test_scaling.py::test_scaled_problem_applies_factors[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_result_stays_in_the_input_namespace[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_missing_jac_resolves_in_the_input_namespace[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_nonlinear_constraint_with_exact_hessians[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_scipy_constraint_objects_are_converted_to_the_input_namespace[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_dict_constraints_and_callback_see_the_input_namespace[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_array_like_constraint_hessian_is_converted[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_objective_hess_may_return_an_ipax_operator[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_jac_true_and_hessp_on_every_backend[array_api_strict] FAILED tests/unit/test_scipy_interface_backends.py::test_float32_solve_stays_float32_end_to_end[array_api_strict] FAILED tests/unit/test_slack_init_scale.py::test_default_scale_is_the_flat_floor[array_api_strict] FAILED tests/unit/test_slack_init_scale.py::test_large_constraints_scale_the_floor_up[array_api_strict] FAILED tests/unit/test_slack_init_scale.py::test_small_constraints_collapse_to_the_flat_floor[array_api_strict] FAILED tests/unit/test_slack_init_scale.py::test_larger_slack_floor_gives_proportionally_smaller_initial_duals[array_api_strict] FAILED tests/unit/test_trots_tiled_gram.py::test_non_numpy_namespaces_get_the_plain_block FAILED tests/unit/test_trots_tiled_gram.py::test_non_numpy_namespaces_keep_gated_off_groups_plain[array_api_strict] FAILED tests/unit/test_warm_start.py::test_warm_start_floors_slacks_and_bound_duals[array_api_strict] = 400 failed, 2853 passed, 261 skipped, 256 deselected, 39 warnings in 32.01s == error: Bad exit status from /var/tmp/rpm-tmp.kNl1Rk (%check) Bad exit status from /var/tmp/rpm-tmp.kNl1Rk (%check) RPM build errors: Finish: rpmbuild python-ipax-0.13.0-1.fc43.src.rpm Finish: build phase for python-ipax-0.13.0-1.fc43.src.rpm INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-43-x86_64-1794038830.950905/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-ipax-0.13.0-1.fc43.src.rpm) Config(fedora-43-x86_64) 0 minutes 48 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 489a5fb1487f4771a4a0aaf8bf1fefde -D /var/lib/mock/fedora-43-x86_64-1794038830.950905/root -a -u mockbuild --capability=cap_ipc_lock --capability=cap_ipc_lock --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 --resolv-conf=off --resolv-conf=off --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 bash --login -c '/usr/bin/rpmbuild -ba --noprep --noclean --target x86_64 /builddir/build/originals/python-ipax.spec' Copr build error: Build failed