Warning: Permanently added '34.230.19.157' (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-44-aarch64 --chroot fedora-44-aarch64 Version: 1.11 PID: 11805 Logging PID: 11807 Task: {'allow_user_ssh': False, 'appstream': False, 'background': False, 'build_id': 11283246, 'buildroot_pkgs': [], 'chroot': 'fedora-44-aarch64', '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-44-aarch64/', '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-44-aarch64', '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-ckvcp98m/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-ckvcp98m/python-ipax', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-ckvcp98m/python-ipax'... Running: git checkout 0cf6bdb9f45cbfcbd95c656ed02fcc80a2144fc9 -- cmd: ['git', 'checkout', '0cf6bdb9f45cbfcbd95c656ed02fcc80a2144fc9', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-ckvcp98m/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-ckvcp98m/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 57.43M 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-ckvcp98m/python-ipax/python-ipax.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-ckvcp98m/python-ipax --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1794038831.330226 -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-ckvcp98m/python-ipax/python-ipax.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-ckvcp98m/python-ipax --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1794038831.330226 -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-ckvcp98m/python-ipax/python-ipax.spec) Config(fedora-44-aarch64) 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-44-aarch64-bootstrap-1794038831.330226/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:44 INFO: Pulling image: registry.fedoraproject.org/fedora:44 INFO: Tagging container image as mock-bootstrap-f26a5f66-b624-49cb-a0c0-abee5dee19e7 INFO: Checking that 7ae77108e07e055ffe24cb699c4ae0b4449f550ac645d185debf3a67c621ab39 image matches host's architecture INFO: Copy content of container 7ae77108e07e055ffe24cb699c4ae0b4449f550ac645d185debf3a67c621ab39 to /var/lib/mock/fedora-44-aarch64-bootstrap-1794038831.330226/root INFO: mounting 7ae77108e07e055ffe24cb699c4ae0b4449f550ac645d185debf3a67c621ab39 with podman image mount INFO: image 7ae77108e07e055ffe24cb699c4ae0b4449f550ac645d185debf3a67c621ab39 as /var/lib/containers/storage/overlay/984fd31702ef95a47582f03380de3842e6594ff420de1593ea8da3ed483f1f53/merged INFO: umounting image 7ae77108e07e055ffe24cb699c4ae0b4449f550ac645d185debf3a67c621ab39 (/var/lib/containers/storage/overlay/984fd31702ef95a47582f03380de3842e6594ff420de1593ea8da3ed483f1f53/merged) with podman image umount INFO: Removing image mock-bootstrap-f26a5f66-b624-49cb-a0c0-abee5dee19e7 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-44-aarch64-1794038831.330226/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.fc44.aarch64 rpm-sequoia-1.10.3-1.fc44.aarch64 dnf5-5.4.6.0-1.fc44.aarch64 dnf5-plugins-5.4.6.0-1.fc44.aarch64 Start: installing minimal buildroot with dnf5 Updating and loading repositories: updates 100% | 15.3 MiB/s | 12.2 MiB | 00m01s Copr repository 100% | 912.4 KiB/s | 806.6 KiB | 00m01s fedora 100% | 29.6 MiB/s | 35.5 MiB | 00m01s Repositories loaded. Package Arch Version Repository Size Installing group/module packages: bash aarch64 0:5.3.9-3.fc44 fedora 8.4 MiB bzip2 aarch64 0:1.0.8-23.fc44 fedora 171.1 KiB coreutils aarch64 0:9.10-5.fc44 updates 8.2 MiB cpio aarch64 0:2.15-9.fc44 fedora 1.1 MiB diffutils aarch64 0:3.12-5.fc44 fedora 1.6 MiB fedora-release-common noarch 0:44-18 updates 20.6 KiB findutils aarch64 1:4.10.0-7.fc44 fedora 1.9 MiB gawk aarch64 0:5.3.2-3.fc44 fedora 2.6 MiB glibc-minimal-langpack aarch64 0:2.43-9.fc44 updates 0.0 B grep aarch64 0:3.12-3.fc44 fedora 1.0 MiB gzip aarch64 0:1.14-2.fc44 fedora 437.5 KiB info aarch64 0:7.2-9.fc44 fedora 421.5 KiB patch aarch64 0:2.8-4.fc44 fedora 262.4 KiB redhat-rpm-config noarch 0:344-2.fc44 updates 183.7 KiB rpm-build aarch64 0:6.0.2-1.fc44 updates 598.7 KiB sed aarch64 0:4.9-7.fc44 fedora 873.1 KiB shadow-utils aarch64 2:4.19.0-7.fc44 updates 4.4 MiB tar aarch64 2:1.35-9.fc44 updates 3.0 MiB unzip aarch64 0:6.0-69.fc44 fedora 533.8 KiB util-linux aarch64 0:2.41.6-1.fc44 updates 6.8 MiB which aarch64 0:2.25-1.fc44 updates 123.6 KiB xz aarch64 1:5.8.2-2.fc44 fedora 1.4 MiB Installing dependencies: R-srpm-macros noarch 0:1.3.7-2.fc44 updates 3.5 KiB add-determinism aarch64 0:0.7.3-2.fc44 updates 2.0 MiB alternatives aarch64 0:1.33-5.fc44 fedora 90.1 KiB ansible-srpm-macros noarch 0:1-20.1.fc44 fedora 35.7 KiB audit-libs aarch64 0:4.2.1-1.fc44 updates 486.7 KiB binutils aarch64 0:2.46.1-1.fc44 updates 31.5 MiB build-reproducibility-srpm-macros noarch 0:0.7.3-2.fc44 updates 1.2 KiB bzip2-libs aarch64 0:1.0.8-23.fc44 fedora 72.5 KiB ca-certificates noarch 0:2026.2.92_v9.0.319-2.fc44 updates 2.7 MiB cmake-srpm-macros noarch 0:4.3.0-1.fc44 fedora 524.0 B coreutils-common aarch64 0:9.10-5.fc44 updates 10.7 MiB crypto-policies noarch 0:20251128-3.git19878fe.fc44 fedora 132.6 KiB curl aarch64 0:8.18.0-14.fc44 updates 464.2 KiB cyrus-sasl-lib aarch64 0:2.1.28-35.fc44 fedora 2.4 MiB debugedit aarch64 0:5.3-2.fc44 updates 320.9 KiB dwz aarch64 0:0.16-3.fc44 fedora 322.4 KiB ed aarch64 0:1.22.5-2.fc44 fedora 157.8 KiB efi-srpm-macros noarch 0:6-6.fc44 fedora 40.2 KiB elfutils aarch64 0:0.197-1.fc44 updates 3.6 MiB elfutils-debuginfod-client aarch64 0:0.197-1.fc44 updates 144.0 KiB elfutils-default-yama-scope noarch 0:0.197-1.fc44 updates 1.8 KiB elfutils-libelf aarch64 0:0.197-1.fc44 updates 1.6 MiB elfutils-libs aarch64 0:0.197-1.fc44 updates 746.7 KiB erlang-srpm-macros noarch 0:0.4.0-1.fc44 updates 2.0 KiB fedora-gpg-keys noarch 0:44-2 updates 257.6 KiB fedora-release noarch 0:44-18 updates 0.0 B fedora-release-identity-basic noarch 0:44-18 updates 629.0 B fedora-repos noarch 0:44-2 updates 4.9 KiB file aarch64 0:5.48-2.fc44 updates 141.9 KiB file-libs aarch64 0:5.48-2.fc44 updates 12.4 MiB filesystem aarch64 0:3.18-52.fc44 fedora 112.0 B filesystem-srpm-macros noarch 0:3.18-52.fc44 fedora 38.2 KiB fonts-srpm-macros noarch 1:5.0.0-2.fc44 fedora 55.8 KiB forge-srpm-macros noarch 0:0.4.0-4.fc44 fedora 38.9 KiB fpc-srpm-macros noarch 0:1.3-16.fc44 fedora 144.0 B gap-srpm-macros noarch 0:2-2.fc44 fedora 2.1 KiB gdb-minimal aarch64 0:18.1-1.fc44 updates 13.8 MiB gdbm-libs aarch64 1:1.23-11.fc44 fedora 233.7 KiB ghc-srpm-macros noarch 0:1.10-1.fc44 fedora 792.0 B glibc aarch64 0:2.43-9.fc44 updates 6.4 MiB glibc-common aarch64 0:2.43-9.fc44 updates 1.3 MiB glibc-gconv-extra aarch64 0:2.43-9.fc44 updates 18.5 MiB gmp aarch64 1:6.3.0-5.fc44 fedora 657.9 KiB gnat-srpm-macros noarch 0:7-2.fc44 fedora 1.0 KiB gnome-srpm-macros noarch 0:1.0-1.fc44 updates 3.5 KiB gnulib-l10n noarch 0:20241231-2.fc44 fedora 655.0 KiB gnupg2 aarch64 0:2.4.9-16.fc44 updates 6.4 MiB gnupg2-dirmngr aarch64 0:2.4.9-16.fc44 updates 646.1 KiB gnupg2-gpg-agent aarch64 0:2.4.9-16.fc44 updates 846.9 KiB gnupg2-gpgconf aarch64 0:2.4.9-16.fc44 updates 321.8 KiB gnupg2-keyboxd aarch64 0:2.4.9-16.fc44 updates 233.3 KiB gnupg2-verify aarch64 0:2.4.9-16.fc44 updates 364.3 KiB gnutls aarch64 0:3.8.13-1.fc44 updates 3.7 MiB go-srpm-macros noarch 0:3.8.0-2.fc44 fedora 61.9 KiB gpgverify noarch 0:2.2-4.fc44 fedora 8.7 KiB ima-evm-utils-libs aarch64 0:1.6.2-8.fc44 fedora 92.6 KiB jansson aarch64 0:2.14-4.fc44 fedora 93.0 KiB java-srpm-macros noarch 0:1-8.fc44 fedora 870.0 B json-c aarch64 0:0.18-8.fc44 fedora 138.5 KiB kernel-srpm-macros noarch 0:1.0-28.fc44 fedora 1.9 KiB keyutils-libs aarch64 0:1.6.3-7.fc44 fedora 98.2 KiB krb5-libs aarch64 0:1.22.2-4.fc44 updates 2.5 MiB libacl aarch64 0:2.4.0-1.fc44 updates 67.9 KiB libarchive aarch64 0:3.8.7-1.fc44 updates 975.5 KiB libassuan aarch64 0:2.5.7-5.fc44 fedora 215.8 KiB libattr aarch64 0:2.6.0-1.fc44 updates 68.4 KiB libblkid aarch64 0:2.41.6-1.fc44 updates 290.3 KiB libbrotli aarch64 0:1.2.1-1.fc44 updates 909.2 KiB libcap aarch64 0:2.78-1.fc44 updates 508.4 KiB libcap-ng aarch64 0:0.9.6-1.fc44 updates 160.9 KiB libcbor aarch64 0:0.13.0-2.fc44 fedora 139.5 KiB libcom_err aarch64 0:1.47.3-4.fc44 fedora 111.0 KiB libcurl aarch64 0:8.18.0-14.fc44 updates 980.9 KiB libeconf aarch64 0:0.7.9-3.fc44 fedora 80.8 KiB libevent aarch64 0:2.1.13-1.fc44 updates 1.1 MiB libfdisk aarch64 0:2.41.6-1.fc44 updates 418.8 KiB libffi aarch64 0:3.5.2-2.fc44 fedora 155.7 KiB libfido2 aarch64 0:1.16.0-5.fc44 fedora 278.6 KiB libfsverity aarch64 0:1.6-4.fc44 fedora 68.4 KiB libgcc aarch64 0:16.2.1-3.fc44 updates 222.3 KiB libgcrypt aarch64 0:1.12.2-1.fc44 updates 1.2 MiB libgomp aarch64 0:16.2.1-3.fc44 updates 592.9 KiB libgpg-error aarch64 0:1.58-2.fc44 fedora 989.6 KiB libidn2 aarch64 0:2.3.8-3.fc44 fedora 560.4 KiB libksba aarch64 0:1.6.7-5.fc44 fedora 398.3 KiB liblastlog2 aarch64 0:2.41.6-1.fc44 updates 137.8 KiB libmount aarch64 0:2.41.6-1.fc44 updates 420.2 KiB libnghttp2 aarch64 0:1.68.0-5.fc44 updates 197.9 KiB libnghttp3 aarch64 0:1.18.0-1.fc44 updates 206.8 KiB libpfm aarch64 0:4.14.1-2.fc44 updates 513.2 KiB libpkgconf aarch64 0:2.5.1-1.fc44 fedora 134.1 KiB libpsl aarch64 0:0.21.5-7.fc44 fedora 132.3 KiB libselinux aarch64 0:3.11-2.fc44 updates 265.2 KiB libselinux-utils aarch64 0:3.11-2.fc44 updates 1.3 MiB libsemanage aarch64 0:3.11-1.fc44 updates 360.1 KiB libsepol aarch64 0:3.11-1.fc44 updates 809.9 KiB libsmartcols aarch64 0:2.41.6-1.fc44 updates 224.4 KiB libssh aarch64 0:0.12.2-1.fc44 updates 721.3 KiB libssh-config noarch 0:0.12.2-1.fc44 updates 277.0 B libstdc++ aarch64 0:16.2.1-3.fc44 updates 3.0 MiB libtasn1 aarch64 0:4.21.0-1.fc44 fedora 220.7 KiB libtool-ltdl aarch64 0:2.5.4-10.fc44 fedora 93.9 KiB libunistring aarch64 0:1.1-11.fc44 fedora 1.7 MiB libusb1 aarch64 0:1.0.30-1.fc44 updates 179.7 KiB libuuid aarch64 0:2.41.6-1.fc44 updates 69.3 KiB libverto aarch64 0:0.3.2-12.fc44 fedora 69.3 KiB libxcrypt aarch64 0:4.5.2-3.fc44 fedora 273.2 KiB libxml2 aarch64 0:2.12.10-6.fc44 fedora 1.9 MiB libzstd aarch64 0:1.5.7-5.fc44 fedora 860.2 KiB linkdupes aarch64 0:0.7.3-2.fc44 updates 713.7 KiB lua-libs aarch64 0:5.4.8-5.fc44 fedora 329.8 KiB lua-srpm-macros noarch 0:1-17.fc44 fedora 1.3 KiB lz4-libs aarch64 0:1.10.0-4.fc44 fedora 197.3 KiB mpfr aarch64 0:4.2.2-3.fc44 fedora 755.4 KiB ncurses-base noarch 0:6.6-1.fc44 fedora 329.7 KiB ncurses-libs aarch64 0:6.6-1.fc44 fedora 1.2 MiB nettle aarch64 0:3.10.1-3.fc44 fedora 765.0 KiB ngtcp2 aarch64 0:1.22.1-1.fc44 updates 341.1 KiB ngtcp2-crypto-ossl aarch64 0:1.22.1-1.fc44 updates 67.5 KiB npth aarch64 0:1.8-4.fc44 fedora 93.3 KiB ocaml-srpm-macros noarch 0:11-3.fc44 fedora 1.9 KiB openblas-srpm-macros noarch 0:2-21.fc44 fedora 112.0 B openldap aarch64 0:2.6.16-1.fc44 updates 766.1 KiB openssl-libs aarch64 1:3.5.9-1.fc44 updates 7.5 MiB p11-kit aarch64 0:0.26.5-1.fc44 updates 2.8 MiB p11-kit-trust aarch64 0:0.26.5-1.fc44 updates 530.1 KiB package-notes-srpm-macros noarch 0:0.20-1.fc44 updates 1.6 KiB pam-libs aarch64 0:1.7.2-2.fc44 updates 222.7 KiB pcre2 aarch64 0:10.47-1.fc44.1 fedora 714.3 KiB pcre2-syntax noarch 0:10.47-1.fc44.1 fedora 281.9 KiB perl-srpm-macros noarch 0:1-61.fc44 fedora 861.0 B pkgconf aarch64 0:2.5.1-1.fc44 fedora 116.8 KiB pkgconf-m4 noarch 0:2.5.1-1.fc44 fedora 14.3 KiB pkgconf-pkg-config aarch64 0:2.5.1-1.fc44 fedora 990.0 B policycoreutils aarch64 0:3.11-2.fc44 updates 1.5 MiB popt aarch64 0:1.19-10.fc44 fedora 144.6 KiB publicsuffix-list-dafsa noarch 0:20260116-1.fc44 fedora 70.4 KiB pyproject-srpm-macros noarch 0:1.24.0-1.fc44 updates 3.4 KiB python-srpm-macros noarch 0:3.14-12.fc44 fedora 51.6 KiB qt5-srpm-macros noarch 0:5.15.18-2.fc44 fedora 500.0 B qt6-srpm-macros noarch 0:6.11.2-1.fc44 updates 472.0 B readline aarch64 0:8.3-4.fc44 fedora 563.5 KiB rpm aarch64 0:6.0.2-1.fc44 updates 3.3 MiB rpm-build-libs aarch64 0:6.0.2-1.fc44 updates 264.1 KiB rpm-libs aarch64 0:6.0.2-1.fc44 updates 995.2 KiB rpm-plugin-selinux aarch64 0:6.0.2-1.fc44 updates 67.9 KiB rpm-sequoia aarch64 0:1.10.3-1.fc44 updates 2.3 MiB rpm-sign-libs aarch64 0:6.0.2-1.fc44 updates 67.7 KiB rust-srpm-macros noarch 0:28.5-1.fc44 updates 5.5 KiB selinux-policy noarch 0:44.11-1.fc44 updates 32.1 KiB selinux-policy-targeted noarch 0:44.11-1.fc44 updates 18.6 MiB setup noarch 0:2.15.0-28.fc44 fedora 724.9 KiB sqlite-libs aarch64 0:3.51.2-2.fc44 updates 1.6 MiB systemd-libs aarch64 0:259.10-1.fc44 updates 2.5 MiB systemd-standalone-sysusers aarch64 0:259.10-1.fc44 updates 329.6 KiB tpm2-tss aarch64 0:4.1.5-1.fc44 updates 2.1 MiB tree-sitter-srpm-macros noarch 0:0.4.2-2.fc44 fedora 8.3 KiB util-linux-core aarch64 0:2.41.6-1.fc44 updates 2.4 MiB xxhash-libs aarch64 0:0.8.4-2.fc44 updates 85.8 KiB xz-libs aarch64 1:5.8.2-2.fc44 fedora 265.4 KiB zig-srpm-macros noarch 0:1-8.fc44 fedora 1.3 KiB zip aarch64 0:3.0-45.fc44 fedora 762.0 KiB zlib-ng-compat aarch64 0:2.3.3-3.fc44 fedora 133.4 KiB zstd aarch64 0:1.5.7-5.fc44 fedora 562.2 KiB Installing groups: Buildsystem building group Transaction Summary: Installing: 186 packages Total size of inbound packages is 67 MiB. Need to download 67 MiB. After this operation, 252 MiB extra will be used (install 252 MiB, remove 0 B). [ 1/186] bzip2-0:1.0.8-23.fc44.aarch64 100% | 3.6 MiB/s | 51.9 KiB | 00m00s [ 2/186] cpio-0:2.15-9.fc44.aarch64 100% | 14.9 MiB/s | 289.7 KiB | 00m00s [ 3/186] bash-0:5.3.9-3.fc44.aarch64 100% | 83.7 MiB/s | 1.8 MiB | 00m00s [ 4/186] diffutils-0:3.12-5.fc44.aarch 100% | 38.3 MiB/s | 391.9 KiB | 00m00s [ 5/186] findutils-1:4.10.0-7.fc44.aar 100% | 89.9 MiB/s | 552.0 KiB | 00m00s [ 6/186] grep-0:3.12-3.fc44.aarch64 100% | 57.9 MiB/s | 296.3 KiB | 00m00s [ 7/186] gzip-0:1.14-2.fc44.aarch64 100% | 33.7 MiB/s | 172.8 KiB | 00m00s [ 8/186] gawk-0:5.3.2-3.fc44.aarch64 100% | 93.1 MiB/s | 1.1 MiB | 00m00s [ 9/186] info-0:7.2-9.fc44.aarch64 100% | 35.0 MiB/s | 179.0 KiB | 00m00s [ 10/186] patch-0:2.8-4.fc44.aarch64 100% | 21.7 MiB/s | 111.1 KiB | 00m00s [ 11/186] sed-0:4.9-7.fc44.aarch64 100% | 76.9 MiB/s | 314.8 KiB | 00m00s [ 12/186] unzip-0:6.0-69.fc44.aarch64 100% | 39.2 MiB/s | 200.9 KiB | 00m00s [ 13/186] fedora-release-common-0:44-18 100% | 5.8 MiB/s | 23.6 KiB | 00m00s [ 14/186] xz-1:5.8.2-2.fc44.aarch64 100% | 59.2 MiB/s | 606.6 KiB | 00m00s [ 15/186] coreutils-0:9.10-5.fc44.aarch 100% | 112.5 MiB/s | 1.1 MiB | 00m00s [ 16/186] glibc-minimal-langpack-0:2.43 100% | 20.8 MiB/s | 85.4 KiB | 00m00s [ 17/186] redhat-rpm-config-0:344-2.fc4 100% | 19.1 MiB/s | 78.1 KiB | 00m00s [ 18/186] rpm-build-0:6.0.2-1.fc44.aarc 100% | 63.8 MiB/s | 130.6 KiB | 00m00s [ 19/186] tar-2:1.35-9.fc44.aarch64 100% | 76.0 MiB/s | 855.9 KiB | 00m00s [ 20/186] util-linux-0:2.41.6-1.fc44.aa 100% | 98.8 MiB/s | 1.2 MiB | 00m00s [ 21/186] shadow-utils-2:4.19.0-7.fc44. 100% | 75.9 MiB/s | 1.3 MiB | 00m00s [ 22/186] which-0:2.25-1.fc44.aarch64 100% | 10.1 MiB/s | 41.6 KiB | 00m00s [ 23/186] bzip2-libs-0:1.0.8-23.fc44.aa 100% | 10.1 MiB/s | 41.2 KiB | 00m00s [ 24/186] ncurses-libs-0:6.6-1.fc44.aar 100% | 52.9 MiB/s | 324.8 KiB | 00m00s [ 25/186] filesystem-0:3.18-52.fc44.aar 100% | 133.4 MiB/s | 1.3 MiB | 00m00s [ 26/186] gmp-1:6.3.0-5.fc44.aarch64 100% | 44.1 MiB/s | 271.0 KiB | 00m00s [ 27/186] mpfr-0:4.2.2-3.fc44.aarch64 100% | 52.1 MiB/s | 320.0 KiB | 00m00s [ 28/186] readline-0:8.3-4.fc44.aarch64 100% | 36.0 MiB/s | 221.1 KiB | 00m00s [ 29/186] pcre2-0:10.47-1.fc44.1.aarch6 100% | 48.9 MiB/s | 250.2 KiB | 00m00s [ 30/186] ed-0:1.22.5-2.fc44.aarch64 100% | 16.3 MiB/s | 83.5 KiB | 00m00s [ 31/186] xz-libs-1:5.8.2-2.fc44.aarch6 100% | 18.2 MiB/s | 111.7 KiB | 00m00s [ 32/186] glibc-common-0:2.43-9.fc44.aa 100% | 39.1 MiB/s | 360.3 KiB | 00m00s [ 33/186] glibc-0:2.43-9.fc44.aarch64 100% | 121.9 MiB/s | 2.0 MiB | 00m00s [ 34/186] coreutils-common-0:9.10-5.fc4 100% | 112.2 MiB/s | 2.1 MiB | 00m00s [ 35/186] gnome-srpm-macros-0:1.0-1.fc4 100% | 1.4 MiB/s | 8.7 KiB | 00m00s [ 36/186] ansible-srpm-macros-0:1-20.1. 100% | 9.8 MiB/s | 20.1 KiB | 00m00s [ 37/186] cmake-srpm-macros-0:4.3.0-1.f 100% | 5.1 MiB/s | 10.4 KiB | 00m00s [ 38/186] dwz-0:0.16-3.fc44.aarch64 100% | 42.8 MiB/s | 131.3 KiB | 00m00s [ 39/186] efi-srpm-macros-0:6-6.fc44.no 100% | 7.3 MiB/s | 22.6 KiB | 00m00s [ 40/186] filesystem-srpm-macros-0:3.18 100% | 13.0 MiB/s | 26.6 KiB | 00m00s [ 41/186] forge-srpm-macros-0:0.4.0-4.f 100% | 9.8 MiB/s | 20.0 KiB | 00m00s [ 42/186] fpc-srpm-macros-0:1.3-16.fc44 100% | 3.9 MiB/s | 7.9 KiB | 00m00s [ 43/186] fonts-srpm-macros-1:5.0.0-2.f 100% | 6.7 MiB/s | 27.4 KiB | 00m00s [ 44/186] gap-srpm-macros-0:2-2.fc44.no 100% | 4.5 MiB/s | 9.1 KiB | 00m00s [ 45/186] ghc-srpm-macros-0:1.10-1.fc44 100% | 4.3 MiB/s | 8.8 KiB | 00m00s [ 46/186] gnat-srpm-macros-0:7-2.fc44.n 100% | 2.8 MiB/s | 8.7 KiB | 00m00s [ 47/186] java-srpm-macros-0:1-8.fc44.n 100% | 7.9 MiB/s | 8.1 KiB | 00m00s [ 48/186] go-srpm-macros-0:3.8.0-2.fc44 100% | 9.2 MiB/s | 28.2 KiB | 00m00s [ 49/186] kernel-srpm-macros-0:1.0-28.f 100% | 2.9 MiB/s | 9.0 KiB | 00m00s [ 50/186] lua-srpm-macros-0:1-17.fc44.n 100% | 4.3 MiB/s | 8.9 KiB | 00m00s [ 51/186] ocaml-srpm-macros-0:11-3.fc44 100% | 4.5 MiB/s | 9.3 KiB | 00m00s [ 52/186] openblas-srpm-macros-0:2-21.f 100% | 3.8 MiB/s | 7.8 KiB | 00m00s [ 53/186] python-srpm-macros-0:3.14-12. 100% | 7.8 MiB/s | 24.0 KiB | 00m00s [ 54/186] perl-srpm-macros-0:1-61.fc44. 100% | 2.1 MiB/s | 8.4 KiB | 00m00s [ 55/186] qt5-srpm-macros-0:5.15.18-2.f 100% | 4.2 MiB/s | 8.7 KiB | 00m00s [ 56/186] zig-srpm-macros-0:1-8.fc44.no 100% | 4.3 MiB/s | 8.8 KiB | 00m00s [ 57/186] tree-sitter-srpm-macros-0:0.4 100% | 4.4 MiB/s | 13.5 KiB | 00m00s [ 58/186] rpm-0:6.0.2-1.fc44.aarch64 100% | 187.3 MiB/s | 575.3 KiB | 00m00s [ 59/186] pkgconf-pkg-config-0:2.5.1-1. 100% | 3.1 MiB/s | 9.4 KiB | 00m00s [ 60/186] zip-0:3.0-45.fc44.aarch64 100% | 37.1 MiB/s | 265.6 KiB | 00m00s [ 61/186] popt-0:1.19-10.fc44.aarch64 100% | 31.9 MiB/s | 65.2 KiB | 00m00s [ 62/186] zstd-0:1.5.7-5.fc44.aarch64 100% | 44.7 MiB/s | 183.1 KiB | 00m00s [ 63/186] libeconf-0:0.7.9-3.fc44.aarch 100% | 11.4 MiB/s | 35.0 KiB | 00m00s [ 64/186] libblkid-0:2.41.6-1.fc44.aarc 100% | 39.9 MiB/s | 122.5 KiB | 00m00s [ 65/186] libxcrypt-0:4.5.2-3.fc44.aarc 100% | 20.4 MiB/s | 125.1 KiB | 00m00s [ 66/186] setup-0:2.15.0-28.fc44.noarch 100% | 30.7 MiB/s | 157.2 KiB | 00m00s [ 67/186] libfdisk-0:2.41.6-1.fc44.aarc 100% | 50.5 MiB/s | 155.2 KiB | 00m00s [ 68/186] liblastlog2-0:2.41.6-1.fc44.a 100% | 7.9 MiB/s | 24.4 KiB | 00m00s [ 69/186] libmount-0:2.41.6-1.fc44.aarc 100% | 52.2 MiB/s | 160.2 KiB | 00m00s [ 70/186] libsmartcols-0:2.41.6-1.fc44. 100% | 40.6 MiB/s | 83.1 KiB | 00m00s [ 71/186] libuuid-0:2.41.6-1.fc44.aarch 100% | 12.9 MiB/s | 26.5 KiB | 00m00s [ 72/186] util-linux-core-0:2.41.6-1.fc 100% | 132.7 MiB/s | 543.7 KiB | 00m00s [ 73/186] zlib-ng-compat-0:2.3.3-3.fc44 100% | 23.6 MiB/s | 72.4 KiB | 00m00s [ 74/186] ncurses-base-0:6.6-1.fc44.noa 100% | 28.6 MiB/s | 88.0 KiB | 00m00s [ 75/186] pcre2-syntax-0:10.47-1.fc44.1 100% | 53.6 MiB/s | 164.7 KiB | 00m00s [ 76/186] gnulib-l10n-0:20241231-2.fc44 100% | 36.7 MiB/s | 150.3 KiB | 00m00s [ 77/186] pkgconf-0:2.5.1-1.fc44.aarch6 100% | 9.4 MiB/s | 48.2 KiB | 00m00s [ 78/186] glibc-gconv-extra-0:2.43-9.fc 100% | 143.3 MiB/s | 1.7 MiB | 00m00s [ 79/186] pkgconf-m4-0:2.5.1-1.fc44.noa 100% | 1.7 MiB/s | 13.8 KiB | 00m00s [ 80/186] libzstd-0:1.5.7-5.fc44.aarch6 100% | 64.3 MiB/s | 329.2 KiB | 00m00s [ 81/186] rpm-libs-0:6.0.2-1.fc44.aarch 100% | 183.9 MiB/s | 376.6 KiB | 00m00s [ 82/186] libpkgconf-0:2.5.1-1.fc44.aar 100% | 13.2 MiB/s | 40.7 KiB | 00m00s [ 83/186] lua-libs-0:5.4.8-5.fc44.aarch 100% | 42.1 MiB/s | 129.4 KiB | 00m00s [ 84/186] rpm-build-libs-0:6.0.2-1.fc44 100% | 37.5 MiB/s | 115.1 KiB | 00m00s [ 85/186] rpm-sign-libs-0:6.0.2-1.fc44. 100% | 8.1 MiB/s | 25.0 KiB | 00m00s [ 86/186] ima-evm-utils-libs-0:1.6.2-8. 100% | 7.2 MiB/s | 29.5 KiB | 00m00s [ 87/186] libfsverity-0:1.6-4.fc44.aarc 100% | 9.2 MiB/s | 18.7 KiB | 00m00s [ 88/186] libgcc-0:16.2.1-3.fc44.aarch6 100% | 39.5 MiB/s | 121.3 KiB | 00m00s [ 89/186] libacl-0:2.4.0-1.fc44.aarch64 100% | 12.9 MiB/s | 26.5 KiB | 00m00s [ 90/186] libstdc++-0:16.2.1-3.fc44.aar 100% | 150.4 MiB/s | 924.0 KiB | 00m00s [ 91/186] libselinux-0:3.11-2.fc44.aarc 100% | 16.2 MiB/s | 99.7 KiB | 00m00s [ 92/186] libsepol-0:3.11-1.fc44.aarch6 100% | 63.7 MiB/s | 325.9 KiB | 00m00s [ 93/186] libattr-0:2.6.0-1.fc44.aarch6 100% | 8.6 MiB/s | 17.5 KiB | 00m00s [ 94/186] crypto-policies-0:20251128-3. 100% | 24.0 MiB/s | 98.3 KiB | 00m00s [ 95/186] tpm2-tss-0:4.1.5-1.fc44.aarch 100% | 65.6 MiB/s | 403.3 KiB | 00m00s [ 96/186] json-c-0:0.18-8.fc44.aarch64 100% | 8.8 MiB/s | 44.9 KiB | 00m00s [ 97/186] openssl-libs-1:3.5.9-1.fc44.a 100% | 176.8 MiB/s | 2.5 MiB | 00m00s [ 98/186] elfutils-libelf-0:0.197-1.fc4 100% | 42.7 MiB/s | 262.4 KiB | 00m00s [ 99/186] elfutils-libs-0:0.197-1.fc44. 100% | 51.9 MiB/s | 265.8 KiB | 00m00s [100/186] elfutils-0:0.197-1.fc44.aarch 100% | 118.4 MiB/s | 606.2 KiB | 00m00s [101/186] elfutils-debuginfod-client-0: 100% | 9.0 MiB/s | 45.9 KiB | 00m00s [102/186] systemd-libs-0:259.10-1.fc44. 100% | 129.0 MiB/s | 792.4 KiB | 00m00s [103/186] libcap-ng-0:0.9.6-1.fc44.aarc 100% | 17.1 MiB/s | 35.1 KiB | 00m00s [104/186] audit-libs-0:4.2.1-1.fc44.aar 100% | 34.6 MiB/s | 141.8 KiB | 00m00s [105/186] pam-libs-0:1.7.2-2.fc44.aarch 100% | 18.4 MiB/s | 56.5 KiB | 00m00s [106/186] libusb1-0:1.0.30-1.fc44.aarch 100% | 38.6 MiB/s | 79.0 KiB | 00m00s [107/186] libsemanage-0:3.11-1.fc44.aar 100% | 38.8 MiB/s | 119.3 KiB | 00m00s [108/186] gpgverify-0:2.2-4.fc44.noarch 100% | 3.7 MiB/s | 11.2 KiB | 00m00s [109/186] gnupg2-dirmngr-0:2.4.9-16.fc4 100% | 51.3 MiB/s | 262.9 KiB | 00m00s [110/186] gnupg2-0:2.4.9-16.fc44.aarch6 100% | 161.1 MiB/s | 1.6 MiB | 00m00s [111/186] gnupg2-gpg-agent-0:2.4.9-16.f 100% | 37.1 MiB/s | 265.8 KiB | 00m00s [112/186] gnupg2-gpgconf-0:2.4.9-16.fc4 100% | 37.0 MiB/s | 113.5 KiB | 00m00s [113/186] gnupg2-keyboxd-0:2.4.9-16.fc4 100% | 22.1 MiB/s | 90.6 KiB | 00m00s [114/186] gnupg2-verify-0:2.4.9-16.fc44 100% | 31.8 MiB/s | 162.8 KiB | 00m00s [115/186] libassuan-0:2.5.7-5.fc44.aarc 100% | 13.1 MiB/s | 66.9 KiB | 00m00s [116/186] libgpg-error-0:1.58-2.fc44.aa 100% | 48.5 MiB/s | 248.3 KiB | 00m00s [117/186] npth-0:1.8-4.fc44.aarch64 100% | 6.1 MiB/s | 25.0 KiB | 00m00s [118/186] libksba-0:1.6.7-5.fc44.aarch6 100% | 25.7 MiB/s | 157.8 KiB | 00m00s [119/186] libcap-0:2.78-1.fc44.aarch64 100% | 21.4 MiB/s | 87.8 KiB | 00m00s [120/186] rpm-sequoia-0:1.10.3-1.fc44.a 100% | 123.4 MiB/s | 884.8 KiB | 00m00s [121/186] sqlite-libs-0:3.51.2-2.fc44.a 100% | 104.6 MiB/s | 749.6 KiB | 00m00s [122/186] file-libs-0:5.48-2.fc44.aarch 100% | 95.2 MiB/s | 877.5 KiB | 00m00s [123/186] file-0:5.48-2.fc44.aarch64 100% | 8.2 MiB/s | 50.1 KiB | 00m00s [124/186] libgomp-0:16.2.1-3.fc44.aarch 100% | 93.8 MiB/s | 384.1 KiB | 00m00s [125/186] alternatives-0:1.33-5.fc44.aa 100% | 13.2 MiB/s | 40.4 KiB | 00m00s [126/186] jansson-0:2.14-4.fc44.aarch64 100% | 7.6 MiB/s | 46.5 KiB | 00m00s [127/186] debugedit-0:5.3-2.fc44.aarch6 100% | 21.2 MiB/s | 86.7 KiB | 00m00s [128/186] libarchive-0:3.8.7-1.fc44.aar 100% | 67.7 MiB/s | 416.0 KiB | 00m00s [129/186] libxml2-0:2.12.10-6.fc44.aarc 100% | 74.0 MiB/s | 682.0 KiB | 00m00s [130/186] lz4-libs-0:1.10.0-4.fc44.aarc 100% | 12.5 MiB/s | 76.6 KiB | 00m00s [131/186] curl-0:8.18.0-14.fc44.aarch64 100% | 57.5 MiB/s | 235.4 KiB | 00m00s [132/186] R-srpm-macros-0:1.3.7-2.fc44. 100% | 2.7 MiB/s | 11.0 KiB | 00m00s [133/186] build-reproducibility-srpm-ma 100% | 3.3 MiB/s | 13.3 KiB | 00m00s [134/186] binutils-0:2.46.1-1.fc44.aarc 100% | 189.1 MiB/s | 6.4 MiB | 00m00s [135/186] linkdupes-0:0.7.3-2.fc44.aarc 100% | 35.6 MiB/s | 328.1 KiB | 00m00s [136/186] erlang-srpm-macros-0:0.4.0-1. 100% | 4.9 MiB/s | 10.0 KiB | 00m00s [137/186] add-determinism-0:0.7.3-2.fc4 100% | 65.2 MiB/s | 800.6 KiB | 00m00s [138/186] package-notes-srpm-macros-0:0 100% | 10.1 MiB/s | 10.4 KiB | 00m00s [139/186] pyproject-srpm-macros-0:1.24. 100% | 7.5 MiB/s | 15.4 KiB | 00m00s [140/186] qt6-srpm-macros-0:6.11.2-1.fc 100% | 8.9 MiB/s | 9.1 KiB | 00m00s [141/186] rust-srpm-macros-0:28.5-1.fc4 100% | 5.5 MiB/s | 11.2 KiB | 00m00s [142/186] ca-certificates-0:2026.2.92_v 100% | 191.5 MiB/s | 980.4 KiB | 00m00s [143/186] libffi-0:3.5.2-2.fc44.aarch64 100% | 9.7 MiB/s | 39.6 KiB | 00m00s [144/186] libgcrypt-0:1.12.2-1.fc44.aar 100% | 87.2 MiB/s | 535.9 KiB | 00m00s [145/186] libidn2-0:2.3.8-3.fc44.aarch6 100% | 85.2 MiB/s | 174.6 KiB | 00m00s [146/186] gnutls-0:3.8.13-1.fc44.aarch6 100% | 144.6 MiB/s | 1.3 MiB | 00m00s [147/186] libunistring-0:1.1-11.fc44.aa 100% | 75.1 MiB/s | 538.3 KiB | 00m00s [148/186] libtasn1-0:4.21.0-1.fc44.aarc 100% | 8.0 MiB/s | 73.4 KiB | 00m00s [149/186] openldap-0:2.6.16-1.fc44.aarc 100% | 49.4 MiB/s | 252.8 KiB | 00m00s [150/186] cyrus-sasl-lib-0:2.1.28-35.fc 100% | 107.8 MiB/s | 772.9 KiB | 00m00s [151/186] libtool-ltdl-0:2.5.4-10.fc44. 100% | 11.6 MiB/s | 35.6 KiB | 00m00s [152/186] gdbm-libs-1:1.23-11.fc44.aarc 100% | 18.3 MiB/s | 56.3 KiB | 00m00s [153/186] fedora-repos-0:44-2.noarch 100% | 4.4 MiB/s | 9.1 KiB | 00m00s [154/186] nettle-0:3.10.1-3.fc44.aarch6 100% | 24.4 MiB/s | 425.5 KiB | 00m00s [155/186] fedora-gpg-keys-0:44-2.noarch 100% | 36.6 MiB/s | 187.6 KiB | 00m00s [156/186] elfutils-default-yama-scope-0 100% | 2.8 MiB/s | 11.5 KiB | 00m00s [157/186] libpfm-0:4.14.1-2.fc44.aarch6 100% | 40.5 MiB/s | 82.9 KiB | 00m00s [158/186] p11-kit-trust-0:0.26.5-1.fc44 100% | 45.4 MiB/s | 139.4 KiB | 00m00s [159/186] p11-kit-0:0.26.5-1.fc44.aarch 100% | 104.3 MiB/s | 534.2 KiB | 00m00s [160/186] fedora-release-0:44-18.noarch 100% | 6.1 MiB/s | 12.5 KiB | 00m00s [161/186] libevent-0:2.1.13-1.fc44.aarc 100% | 66.6 MiB/s | 272.6 KiB | 00m00s [162/186] systemd-standalone-sysusers-0 100% | 46.0 MiB/s | 141.3 KiB | 00m00s [163/186] xxhash-libs-0:0.8.4-2.fc44.aa 100% | 11.1 MiB/s | 34.0 KiB | 00m00s [164/186] fedora-release-identity-basic 100% | 4.3 MiB/s | 13.2 KiB | 00m00s [165/186] libcurl-0:8.18.0-14.fc44.aarc 100% | 51.9 MiB/s | 424.9 KiB | 00m00s [166/186] libnghttp3-0:1.18.0-1.fc44.aa 100% | 9.8 MiB/s | 70.1 KiB | 00m00s [167/186] gdb-minimal-0:18.1-1.fc44.aar 100% | 191.0 MiB/s | 4.4 MiB | 00m00s [168/186] libssh-0:0.12.2-1.fc44.aarch6 100% | 27.1 MiB/s | 277.1 KiB | 00m00s [169/186] ngtcp2-0:1.22.1-1.fc44.aarch6 100% | 14.4 MiB/s | 147.2 KiB | 00m00s [170/186] libpsl-0:0.21.5-7.fc44.aarch6 100% | 31.7 MiB/s | 64.9 KiB | 00m00s [171/186] libssh-config-0:0.12.2-1.fc44 100% | 4.4 MiB/s | 8.9 KiB | 00m00s [172/186] libfido2-0:1.16.0-5.fc44.aarc 100% | 31.3 MiB/s | 96.2 KiB | 00m00s [173/186] publicsuffix-list-dafsa-0:202 100% | 19.6 MiB/s | 60.3 KiB | 00m00s [174/186] libcbor-0:0.13.0-2.fc44.aarch 100% | 11.2 MiB/s | 34.4 KiB | 00m00s [175/186] ngtcp2-crypto-ossl-0:1.22.1-1 100% | 8.5 MiB/s | 26.0 KiB | 00m00s [176/186] selinux-policy-0:44.11-1.fc44 100% | 8.8 MiB/s | 27.0 KiB | 00m00s [177/186] rpm-plugin-selinux-0:6.0.2-1. 100% | 5.6 MiB/s | 17.1 KiB | 00m00s [178/186] policycoreutils-0:3.11-2.fc44 100% | 63.6 MiB/s | 260.6 KiB | 00m00s [179/186] libselinux-utils-0:3.11-2.fc4 100% | 24.1 MiB/s | 123.4 KiB | 00m00s [180/186] keyutils-libs-0:1.6.3-7.fc44. 100% | 7.7 MiB/s | 31.5 KiB | 00m00s [181/186] krb5-libs-0:1.22.2-4.fc44.aar 100% | 67.6 MiB/s | 761.3 KiB | 00m00s [182/186] libcom_err-0:1.47.3-4.fc44.aa 100% | 3.3 MiB/s | 27.0 KiB | 00m00s [183/186] selinux-policy-targeted-0:44. 100% | 199.6 MiB/s | 6.8 MiB | 00m00s [184/186] libverto-0:0.3.2-12.fc44.aarc 100% | 1.7 MiB/s | 20.5 KiB | 00m00s [185/186] libbrotli-0:1.2.1-1.fc44.aarc 100% | 34.0 MiB/s | 348.6 KiB | 00m00s [186/186] libnghttp2-0:1.68.0-5.fc44.aa 100% | 36.1 MiB/s | 74.0 KiB | 00m00s -------------------------------------------------------------------------------- [186/186] Total 100% | 167.5 MiB/s | 66.8 MiB | 00m00s Running transaction Importing OpenPGP key 0x6D9F90A6: UserID : "Fedora (44) " Fingerprint: 36F612DCF27F7D1A48A835E4DBFCF71C6D9F90A6 From : file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-44-primary The key was successfully imported. [ 1/188] Verify package files 100% | 768.0 B/s | 186.0 B | 00m00s [ 2/188] Prepare transaction 100% | 2.5 KiB/s | 186.0 B | 00m00s [ 3/188] Installing libgcc-0:16.2.1-3. 100% | 109.4 MiB/s | 224.0 KiB | 00m00s [ 4/188] Installing publicsuffix-list- 100% | 69.4 MiB/s | 71.1 KiB | 00m00s [ 5/188] Installing libssh-config-0:0. 100% | 0.0 B/s | 816.0 B | 00m00s [ 6/188] Installing fedora-release-ide 100% | 867.2 KiB/s | 888.0 B | 00m00s [ 7/188] Installing fedora-gpg-keys-0: 100% | 31.5 MiB/s | 355.3 KiB | 00m00s [ 8/188] Installing fedora-repos-0:44- 100% | 0.0 B/s | 5.7 KiB | 00m00s [ 9/188] Installing fedora-release-com 100% | 24.3 MiB/s | 24.9 KiB | 00m00s [ 10/188] Installing fedora-release-0:4 100% | 15.1 KiB/s | 124.0 B | 00m00s >>> Running sysusers scriptlet: setup-0:2.15.0-28.fc44.noarch >>> Finished sysusers scriptlet: setup-0:2.15.0-28.fc44.noarch >>> Scriptlet output: >>> Creating group 'adm' with GID 4. >>> Creating group 'audio' with GID 63. >>> Creating group 'cdrom' with GID 11. >>> Creating group 'clock' with GID 103. >>> Creating group 'dialout' with GID 18. >>> Creating group 'disk' with GID 6. >>> Creating group 'floppy' with GID 19. >>> Creating group 'ftp' with GID 50. >>> Creating group 'games' with GID 20. >>> Creating group 'input' with GID 104. >>> Creating group 'kmem' with GID 9. >>> Creating group 'kvm' with GID 36. >>> Creating group 'lock' with GID 54. >>> Creating group 'lp' with GID 7. >>> Creating group 'mail' with GID 12. >>> Creating group 'man' with GID 15. >>> Creating group 'mem' with GID 8. >>> Creating group 'nobody' with GID 65534. >>> Creating group 'render' with GID 105. >>> Creating group 'root' with GID 0. >>> Creating group 'sgx' with GID 106. >>> Creating group 'sys' with GID 3. >>> Creating group 'tape' with GID 33. >>> Creating group 'tty' with GID 5. >>> Creating group 'users' with GID 100. >>> Creating group 'utmp' with GID 22. >>> Creating group 'video' with GID 39. >>> Creating group 'wheel' with GID 10. >>> Creating user 'adm' (adm) with UID 3 and GID 4. >>> Creating group 'bin' with GID 1. >>> Creating user 'bin' (bin) with UID 1 and GID 1. >>> Creating group 'daemon' with GID 2. >>> Creating user 'daemon' (daemon) with UID 2 and GID 2. >>> Creating user 'ftp' (FTP User) with UID 14 and GID 50. >>> Creating user 'games' (games) with UID 12 and GID 100. >>> Creating user 'halt' (halt) with UID 7 and GID 0. >>> Creating user 'lp' (lp) with UID 4 and GID 7. >>> Creating user 'mail' (mail) with UID 8 and GID 12. >>> Creating user 'nobody' (Kernel Overflow User) with UID 65534 and GID 65534. >>> Creating user 'operator' (operator) with UID 11 and GID 0. >>> Creating user 'root' (Super User) with UID 0 and GID 0. >>> Creating user 'shutdown' (shutdown) with UID 6 and GID 0. >>> Creating user 'sync' (sync) with UID 5 and GID 0. >>> [ 11/188] Installing setup-0:2.15.0-28. 100% | 39.6 MiB/s | 730.6 KiB | 00m00s >>> [RPM] /etc/hosts created as /etc/hosts.rpmnew [ 12/188] Installing filesystem-0:3.18- 100% | 2.0 MiB/s | 212.8 KiB | 00m00s [ 13/188] Installing rust-srpm-macros-0 100% | 6.2 MiB/s | 6.4 KiB | 00m00s [ 14/188] Installing qt6-srpm-macros-0: 100% | 0.0 B/s | 748.0 B | 00m00s [ 15/188] Installing package-notes-srpm 100% | 0.0 B/s | 2.1 KiB | 00m00s [ 16/188] Installing pkgconf-m4-0:2.5.1 100% | 14.4 MiB/s | 14.7 KiB | 00m00s [ 17/188] Installing gnulib-l10n-0:2024 100% | 129.3 MiB/s | 661.9 KiB | 00m00s [ 18/188] Installing coreutils-common-0 100% | 314.3 MiB/s | 10.7 MiB | 00m00s [ 19/188] Installing pcre2-syntax-0:10. 100% | 138.8 MiB/s | 284.3 KiB | 00m00s [ 20/188] Installing ncurses-base-0:6.6 100% | 49.6 MiB/s | 355.3 KiB | 00m00s [ 21/188] Installing bash-0:5.3.9-3.fc4 100% | 210.8 MiB/s | 8.4 MiB | 00m00s [ 22/188] Installing glibc-common-0:2.4 100% | 60.2 MiB/s | 1.3 MiB | 00m00s [ 23/188] Installing glibc-gconv-extra- 100% | 388.3 MiB/s | 18.6 MiB | 00m00s [ 24/188] Installing glibc-0:2.43-9.fc4 100% | 148.5 MiB/s | 6.4 MiB | 00m00s [ 25/188] Installing ncurses-libs-0:6.6 100% | 249.2 MiB/s | 1.2 MiB | 00m00s [ 26/188] Installing glibc-minimal-lang 100% | 0.0 B/s | 124.0 B | 00m00s [ 27/188] Installing zlib-ng-compat-0:2 100% | 131.1 MiB/s | 134.2 KiB | 00m00s [ 28/188] Installing bzip2-libs-0:1.0.8 100% | 71.9 MiB/s | 73.6 KiB | 00m00s [ 29/188] Installing libgpg-error-0:1.5 100% | 48.6 MiB/s | 995.5 KiB | 00m00s [ 30/188] Installing libstdc++-0:16.2.1 100% | 297.1 MiB/s | 3.0 MiB | 00m00s [ 31/188] Installing libassuan-0:2.5.7- 100% | 212.6 MiB/s | 217.7 KiB | 00m00s [ 32/188] Installing libgcrypt-0:1.12.2 100% | 240.0 MiB/s | 1.2 MiB | 00m00s [ 33/188] Installing readline-0:8.3-4.f 100% | 276.2 MiB/s | 565.6 KiB | 00m00s [ 34/188] Installing gmp-1:6.3.0-5.fc44 100% | 214.9 MiB/s | 660.1 KiB | 00m00s [ 35/188] Installing xz-libs-1:5.8.2-2. 100% | 260.2 MiB/s | 266.5 KiB | 00m00s [ 36/188] Installing libuuid-0:2.41.6-1 100% | 68.7 MiB/s | 70.3 KiB | 00m00s [ 37/188] Installing libzstd-0:1.5.7-5. 100% | 280.4 MiB/s | 861.5 KiB | 00m00s [ 38/188] Installing elfutils-libelf-0: 100% | 329.6 MiB/s | 1.6 MiB | 00m00s [ 39/188] Installing libacl-0:2.4.0-1.f 100% | 67.1 MiB/s | 68.8 KiB | 00m00s [ 40/188] Installing popt-0:1.19-10.fc4 100% | 49.2 MiB/s | 151.3 KiB | 00m00s [ 41/188] Installing systemd-libs-0:259 100% | 307.7 MiB/s | 2.5 MiB | 00m00s [ 42/188] Installing npth-0:1.8-4.fc44. 100% | 92.2 MiB/s | 94.4 KiB | 00m00s [ 43/188] Installing libblkid-0:2.41.6- 100% | 142.3 MiB/s | 291.3 KiB | 00m00s [ 44/188] Installing libxcrypt-0:4.5.2- 100% | 134.7 MiB/s | 275.9 KiB | 00m00s [ 45/188] Installing libsepol-0:3.11-1. 100% | 264.0 MiB/s | 810.9 KiB | 00m00s [ 46/188] Installing sqlite-libs-0:3.51 100% | 261.2 MiB/s | 1.6 MiB | 00m00s [ 47/188] Installing gnupg2-gpgconf-0:2 100% | 18.6 MiB/s | 323.9 KiB | 00m00s [ 48/188] Installing pcre2-0:10.47-1.fc 100% | 233.0 MiB/s | 715.7 KiB | 00m00s [ 49/188] Installing libselinux-0:3.11- 100% | 130.1 MiB/s | 266.4 KiB | 00m00s [ 50/188] Installing grep-0:3.12-3.fc44 100% | 47.2 MiB/s | 1.0 MiB | 00m00s [ 51/188] Installing sed-0:4.9-7.fc44.a 100% | 41.0 MiB/s | 881.3 KiB | 00m00s [ 52/188] Installing findutils-1:4.10.0 100% | 83.5 MiB/s | 1.9 MiB | 00m00s [ 53/188] Installing json-c-0:0.18-8.fc 100% | 136.5 MiB/s | 139.7 KiB | 00m00s [ 54/188] Installing libtasn1-0:4.21.0- 100% | 217.3 MiB/s | 222.5 KiB | 00m00s [ 55/188] Installing libunistring-0:1.1 100% | 291.0 MiB/s | 1.7 MiB | 00m00s [ 56/188] Installing libidn2-0:2.3.8-3. 100% | 50.3 MiB/s | 566.6 KiB | 00m00s [ 57/188] Installing crypto-policies-0: 100% | 22.0 MiB/s | 157.7 KiB | 00m00s [ 58/188] Installing xz-1:5.8.2-2.fc44. 100% | 60.3 MiB/s | 1.4 MiB | 00m00s [ 59/188] Installing libmount-0:2.41.6- 100% | 205.7 MiB/s | 421.3 KiB | 00m00s [ 60/188] Installing gnupg2-verify-0:2. 100% | 21.0 MiB/s | 365.7 KiB | 00m00s [ 61/188] Installing dwz-0:0.16-3.fc44. 100% | 18.6 MiB/s | 323.8 KiB | 00m00s [ 62/188] Installing mpfr-0:4.2.2-3.fc4 100% | 184.8 MiB/s | 757.1 KiB | 00m00s [ 63/188] Installing gawk-0:5.3.2-3.fc4 100% | 107.5 MiB/s | 2.6 MiB | 00m00s [ 64/188] Installing libksba-0:1.6.7-5. 100% | 195.7 MiB/s | 400.8 KiB | 00m00s [ 65/188] Installing unzip-0:6.0-69.fc4 100% | 29.2 MiB/s | 537.3 KiB | 00m00s [ 66/188] Installing file-libs-0:5.48-2 100% | 618.0 MiB/s | 12.4 MiB | 00m00s [ 67/188] Installing file-0:5.48-2.fc44 100% | 8.2 MiB/s | 143.4 KiB | 00m00s [ 68/188] Installing diffutils-0:3.12-5 100% | 73.8 MiB/s | 1.6 MiB | 00m00s [ 69/188] Installing libeconf-0:0.7.9-3 100% | 80.5 MiB/s | 82.5 KiB | 00m00s [ 70/188] Installing libsmartcols-0:2.4 100% | 220.1 MiB/s | 225.4 KiB | 00m00s [ 71/188] Installing lua-libs-0:5.4.8-5 100% | 161.7 MiB/s | 331.3 KiB | 00m00s [ 72/188] Installing libattr-0:2.6.0-1. 100% | 67.7 MiB/s | 69.3 KiB | 00m00s [ 73/188] Installing libcap-ng-0:0.9.6- 100% | 159.0 MiB/s | 162.8 KiB | 00m00s [ 74/188] Installing audit-libs-0:4.2.1 100% | 238.9 MiB/s | 489.3 KiB | 00m00s [ 75/188] Installing pam-libs-0:1.7.2-2 100% | 219.7 MiB/s | 225.0 KiB | 00m00s [ 76/188] Installing libcap-0:2.78-1.fc 100% | 27.9 MiB/s | 513.5 KiB | 00m00s [ 77/188] Installing libsemanage-0:3.11 100% | 176.7 MiB/s | 361.8 KiB | 00m00s [ 78/188] Installing alternatives-0:1.3 100% | 5.6 MiB/s | 91.6 KiB | 00m00s [ 79/188] Installing libffi-0:3.5.2-2.f 100% | 153.4 MiB/s | 157.1 KiB | 00m00s [ 80/188] Installing p11-kit-0:0.26.5-1 100% | 100.0 MiB/s | 2.8 MiB | 00m00s [ 81/188] Installing p11-kit-trust-0:0. 100% | 21.6 MiB/s | 531.9 KiB | 00m00s [ 82/188] Installing ngtcp2-0:1.22.1-1. 100% | 167.3 MiB/s | 342.7 KiB | 00m00s [ 83/188] Installing openssl-libs-1:3.5 100% | 325.4 MiB/s | 7.5 MiB | 00m00s [ 84/188] Installing coreutils-0:9.10-5 100% | 186.9 MiB/s | 8.2 MiB | 00m00s [ 85/188] Installing ca-certificates-0: 100% | 1.6 MiB/s | 2.5 MiB | 00m02s [ 86/188] Installing gzip-0:1.14-2.fc44 100% | 22.8 MiB/s | 443.0 KiB | 00m00s [ 87/188] Installing libfsverity-0:1.6- 100% | 67.7 MiB/s | 69.3 KiB | 00m00s [ 88/188] Installing rpm-sequoia-0:1.10 100% | 286.5 MiB/s | 2.3 MiB | 00m00s [ 89/188] Installing libevent-0:2.1.13- 100% | 271.7 MiB/s | 1.1 MiB | 00m00s [ 90/188] Installing ngtcp2-crypto-ossl 100% | 66.7 MiB/s | 68.3 KiB | 00m00s [ 91/188] Installing liblastlog2-0:2.41 100% | 19.5 MiB/s | 139.8 KiB | 00m00s [ 92/188] Installing util-linux-core-0: 100% | 94.8 MiB/s | 2.5 MiB | 00m00s [ 93/188] Installing zip-0:3.0-45.fc44. 100% | 39.4 MiB/s | 765.8 KiB | 00m00s [ 94/188] Installing gnupg2-keyboxd-0:2 100% | 32.7 MiB/s | 234.5 KiB | 00m00s [ 95/188] Installing libpsl-0:0.21.5-7. 100% | 130.3 MiB/s | 133.4 KiB | 00m00s [ 96/188] Installing tar-2:1.35-9.fc44. 100% | 111.3 MiB/s | 3.0 MiB | 00m00s [ 97/188] Installing linkdupes-0:0.7.3- 100% | 36.8 MiB/s | 715.1 KiB | 00m00s [ 98/188] Installing libselinux-utils-0 100% | 64.6 MiB/s | 1.4 MiB | 00m00s [ 99/188] Installing systemd-standalone 100% | 19.0 MiB/s | 330.2 KiB | 00m00s [100/188] Installing rpm-libs-0:6.0.2-1 100% | 243.3 MiB/s | 996.7 KiB | 00m00s [101/188] Installing libfdisk-0:2.41.6- 100% | 136.7 MiB/s | 419.9 KiB | 00m00s [102/188] Installing util-linux-0:2.41. 100% | 139.9 MiB/s | 6.9 MiB | 00m00s [103/188] Installing policycoreutils-0: 100% | 43.7 MiB/s | 1.5 MiB | 00m00s [104/188] Installing selinux-policy-0:4 100% | 1.5 MiB/s | 34.5 KiB | 00m00s [105/188] Installing selinux-policy-tar 100% | 134.3 MiB/s | 14.9 MiB | 00m00s [106/188] Installing libusb1-0:1.0.30-1 100% | 19.7 MiB/s | 181.4 KiB | 00m00s >>> Running sysusers scriptlet: tpm2-tss-0:4.1.5-1.fc44.aarch64 >>> Finished sysusers scriptlet: tpm2-tss-0:4.1.5-1.fc44.aarch64 >>> Scriptlet output: >>> Creating group 'tss' with GID 59. >>> Creating user 'tss' (Account used for TPM access) with UID 59 and GID 59. >>> [107/188] Installing tpm2-tss-0:4.1.5-1 100% | 270.0 MiB/s | 2.2 MiB | 00m00s [108/188] Installing ima-evm-utils-libs 100% | 91.7 MiB/s | 93.9 KiB | 00m00s [109/188] Installing gnupg2-gpg-agent-0 100% | 29.7 MiB/s | 850.9 KiB | 00m00s [110/188] Installing zstd-0:1.5.7-5.fc4 100% | 29.1 MiB/s | 565.8 KiB | 00m00s [111/188] Installing libxml2-0:2.12.10- 100% | 82.2 MiB/s | 1.9 MiB | 00m00s [112/188] Installing nettle-0:3.10.1-3. 100% | 250.1 MiB/s | 768.2 KiB | 00m00s [113/188] Installing gnutls-0:3.8.13-1. 100% | 309.1 MiB/s | 3.7 MiB | 00m00s [114/188] Installing bzip2-0:1.0.8-23.f 100% | 10.1 MiB/s | 175.6 KiB | 00m00s [115/188] Installing add-determinism-0: 100% | 89.6 MiB/s | 2.0 MiB | 00m00s [116/188] Installing build-reproducibil 100% | 1.5 MiB/s | 1.5 KiB | 00m00s [117/188] Installing cpio-0:2.15-9.fc44 100% | 52.2 MiB/s | 1.1 MiB | 00m00s [118/188] Installing ed-0:1.22.5-2.fc44 100% | 9.2 MiB/s | 160.1 KiB | 00m00s [119/188] Installing patch-0:2.8-4.fc44 100% | 15.2 MiB/s | 263.9 KiB | 00m00s [120/188] Installing libpkgconf-0:2.5.1 100% | 132.0 MiB/s | 135.2 KiB | 00m00s [121/188] Installing pkgconf-0:2.5.1-1. 100% | 6.9 MiB/s | 119.3 KiB | 00m00s [122/188] Installing pkgconf-pkg-config 100% | 110.8 KiB/s | 1.8 KiB | 00m00s [123/188] Installing libgomp-0:16.2.1-3 100% | 290.2 MiB/s | 594.3 KiB | 00m00s [124/188] Installing jansson-0:2.14-4.f 100% | 92.2 MiB/s | 94.4 KiB | 00m00s [125/188] Installing lz4-libs-0:1.10.0- 100% | 193.7 MiB/s | 198.4 KiB | 00m00s [126/188] Installing libarchive-0:3.8.7 100% | 238.7 MiB/s | 977.5 KiB | 00m00s [127/188] Installing libtool-ltdl-0:2.5 100% | 92.8 MiB/s | 95.0 KiB | 00m00s [128/188] Installing gdbm-libs-1:1.23-1 100% | 229.9 MiB/s | 235.4 KiB | 00m00s [129/188] Installing cyrus-sasl-lib-0:2 100% | 100.7 MiB/s | 2.4 MiB | 00m00s [130/188] Installing openldap-0:2.6.16- 100% | 188.0 MiB/s | 769.9 KiB | 00m00s [131/188] Installing gnupg2-dirmngr-0:2 100% | 24.4 MiB/s | 648.9 KiB | 00m00s [132/188] Installing gnupg2-0:2.4.9-16. 100% | 174.5 MiB/s | 6.5 MiB | 00m00s [133/188] Installing rpm-sign-libs-0:6. 100% | 66.9 MiB/s | 68.5 KiB | 00m00s [134/188] Installing gpgverify-0:2.2-4. 100% | 9.2 MiB/s | 9.4 KiB | 00m00s [135/188] Installing libpfm-0:4.14.1-2. 100% | 251.3 MiB/s | 514.6 KiB | 00m00s [136/188] Installing xxhash-libs-0:0.8. 100% | 85.1 MiB/s | 87.2 KiB | 00m00s [137/188] Installing libnghttp3-0:1.18. 100% | 203.3 MiB/s | 208.2 KiB | 00m00s [138/188] Installing libcbor-0:0.13.0-2 100% | 137.6 MiB/s | 140.9 KiB | 00m00s [139/188] Installing libfido2-0:1.16.0- 100% | 136.8 MiB/s | 280.1 KiB | 00m00s [140/188] Installing keyutils-libs-0:1. 100% | 97.3 MiB/s | 99.6 KiB | 00m00s [141/188] Installing libcom_err-0:1.47. 100% | 109.5 MiB/s | 112.1 KiB | 00m00s [142/188] Installing libverto-0:0.3.2-1 100% | 69.4 MiB/s | 71.1 KiB | 00m00s [143/188] Installing krb5-libs-0:1.22.2 100% | 253.4 MiB/s | 2.5 MiB | 00m00s [144/188] Installing libssh-0:0.12.2-1. 100% | 235.5 MiB/s | 723.4 KiB | 00m00s [145/188] Installing libbrotli-0:1.2.1- 100% | 222.5 MiB/s | 911.5 KiB | 00m00s [146/188] Installing libnghttp2-0:1.68. 100% | 194.4 MiB/s | 199.1 KiB | 00m00s [147/188] Installing libcurl-0:8.18.0-1 100% | 239.8 MiB/s | 982.0 KiB | 00m00s [148/188] Installing curl-0:8.18.0-14.f 100% | 16.3 MiB/s | 466.8 KiB | 00m00s [149/188] Installing rpm-0:6.0.2-1.fc44 100% | 63.5 MiB/s | 2.8 MiB | 00m00s [150/188] Installing cmake-srpm-macros- 100% | 785.2 KiB/s | 804.0 B | 00m00s [151/188] Installing efi-srpm-macros-0: 100% | 40.2 MiB/s | 41.2 KiB | 00m00s [152/188] Installing java-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [153/188] Installing lua-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [154/188] Installing tree-sitter-srpm-m 100% | 9.1 MiB/s | 9.3 KiB | 00m00s [155/188] Installing zig-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [156/188] Installing filesystem-srpm-ma 100% | 38.0 MiB/s | 38.9 KiB | 00m00s [157/188] Installing elfutils-default-y 100% | 340.5 KiB/s | 2.0 KiB | 00m00s [158/188] Installing elfutils-libs-0:0. 100% | 182.7 MiB/s | 748.5 KiB | 00m00s [159/188] Installing elfutils-debuginfo 100% | 7.9 MiB/s | 146.1 KiB | 00m00s [160/188] Installing elfutils-0:0.197-1 100% | 135.5 MiB/s | 3.7 MiB | 00m00s [161/188] Installing binutils-0:2.46.1- 100% | 297.1 MiB/s | 31.5 MiB | 00m00s [162/188] Installing gdb-minimal-0:18.1 100% | 241.9 MiB/s | 13.8 MiB | 00m00s [163/188] Installing debugedit-0:5.3-2. 100% | 17.6 MiB/s | 324.2 KiB | 00m00s [164/188] Installing rpm-build-libs-0:6 100% | 129.4 MiB/s | 264.9 KiB | 00m00s [165/188] Installing qt5-srpm-macros-0: 100% | 0.0 B/s | 776.0 B | 00m00s [166/188] Installing perl-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [167/188] Installing openblas-srpm-macr 100% | 0.0 B/s | 392.0 B | 00m00s [168/188] Installing ocaml-srpm-macros- 100% | 0.0 B/s | 2.1 KiB | 00m00s [169/188] Installing kernel-srpm-macros 100% | 0.0 B/s | 2.3 KiB | 00m00s [170/188] Installing gnat-srpm-macros-0 100% | 0.0 B/s | 1.3 KiB | 00m00s [171/188] Installing ghc-srpm-macros-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [172/188] Installing gap-srpm-macros-0: 100% | 0.0 B/s | 2.7 KiB | 00m00s [173/188] Installing fpc-srpm-macros-0: 100% | 0.0 B/s | 420.0 B | 00m00s [174/188] Installing ansible-srpm-macro 100% | 0.0 B/s | 36.2 KiB | 00m00s [175/188] Installing gnome-srpm-macros- 100% | 4.0 MiB/s | 4.1 KiB | 00m00s [176/188] Installing redhat-rpm-config- 100% | 61.8 MiB/s | 189.9 KiB | 00m00s [177/188] Installing forge-srpm-macros- 100% | 39.3 MiB/s | 40.3 KiB | 00m00s [178/188] Installing rpm-build-0:6.0.2- 100% | 29.7 MiB/s | 607.8 KiB | 00m00s [179/188] Installing erlang-srpm-macros 100% | 2.5 MiB/s | 2.6 KiB | 00m00s [180/188] Installing pyproject-srpm-mac 100% | 665.4 KiB/s | 4.0 KiB | 00m00s [181/188] Installing fonts-srpm-macros- 100% | 55.7 MiB/s | 57.0 KiB | 00m00s [182/188] Installing go-srpm-macros-0:3 100% | 61.6 MiB/s | 63.0 KiB | 00m00s [183/188] Installing python-srpm-macros 100% | 51.7 MiB/s | 52.9 KiB | 00m00s [184/188] Installing R-srpm-macros-0:1. 100% | 4.3 MiB/s | 4.4 KiB | 00m00s [185/188] Installing rpm-plugin-selinux 100% | 67.3 MiB/s | 68.9 KiB | 00m00s [186/188] Installing which-0:2.25-1.fc4 100% | 6.5 MiB/s | 125.8 KiB | 00m00s [187/188] Installing shadow-utils-2:4.1 100% | 109.6 MiB/s | 4.5 MiB | 00m00s [188/188] Installing info-0:7.2-9.fc44. 100% | 51.1 KiB/s | 421.9 KiB | 00m08s Complete! Finish: installing minimal buildroot with dnf5 Start: creating root cache Finish: creating root cache Finish: chroot init INFO: Installed packages: INFO: R-srpm-macros-1.3.7-2.fc44.noarch add-determinism-0.7.3-2.fc44.aarch64 alternatives-1.33-5.fc44.aarch64 ansible-srpm-macros-1-20.1.fc44.noarch audit-libs-4.2.1-1.fc44.aarch64 bash-5.3.9-3.fc44.aarch64 binutils-2.46.1-1.fc44.aarch64 build-reproducibility-srpm-macros-0.7.3-2.fc44.noarch bzip2-1.0.8-23.fc44.aarch64 bzip2-libs-1.0.8-23.fc44.aarch64 ca-certificates-2026.2.92_v9.0.319-2.fc44.noarch cmake-srpm-macros-4.3.0-1.fc44.noarch coreutils-9.10-5.fc44.aarch64 coreutils-common-9.10-5.fc44.aarch64 cpio-2.15-9.fc44.aarch64 crypto-policies-20251128-3.git19878fe.fc44.noarch curl-8.18.0-14.fc44.aarch64 cyrus-sasl-lib-2.1.28-35.fc44.aarch64 debugedit-5.3-2.fc44.aarch64 diffutils-3.12-5.fc44.aarch64 dwz-0.16-3.fc44.aarch64 ed-1.22.5-2.fc44.aarch64 efi-srpm-macros-6-6.fc44.noarch elfutils-0.197-1.fc44.aarch64 elfutils-debuginfod-client-0.197-1.fc44.aarch64 elfutils-default-yama-scope-0.197-1.fc44.noarch elfutils-libelf-0.197-1.fc44.aarch64 elfutils-libs-0.197-1.fc44.aarch64 erlang-srpm-macros-0.4.0-1.fc44.noarch fedora-gpg-keys-44-2.noarch fedora-release-44-18.noarch fedora-release-common-44-18.noarch fedora-release-identity-basic-44-18.noarch fedora-repos-44-2.noarch file-5.48-2.fc44.aarch64 file-libs-5.48-2.fc44.aarch64 filesystem-3.18-52.fc44.aarch64 filesystem-srpm-macros-3.18-52.fc44.noarch findutils-4.10.0-7.fc44.aarch64 fonts-srpm-macros-5.0.0-2.fc44.noarch forge-srpm-macros-0.4.0-4.fc44.noarch fpc-srpm-macros-1.3-16.fc44.noarch gap-srpm-macros-2-2.fc44.noarch gawk-5.3.2-3.fc44.aarch64 gdb-minimal-18.1-1.fc44.aarch64 gdbm-libs-1.23-11.fc44.aarch64 ghc-srpm-macros-1.10-1.fc44.noarch glibc-2.43-9.fc44.aarch64 glibc-common-2.43-9.fc44.aarch64 glibc-gconv-extra-2.43-9.fc44.aarch64 glibc-minimal-langpack-2.43-9.fc44.aarch64 gmp-6.3.0-5.fc44.aarch64 gnat-srpm-macros-7-2.fc44.noarch gnome-srpm-macros-1.0-1.fc44.noarch gnulib-l10n-20241231-2.fc44.noarch gnupg2-2.4.9-16.fc44.aarch64 gnupg2-dirmngr-2.4.9-16.fc44.aarch64 gnupg2-gpg-agent-2.4.9-16.fc44.aarch64 gnupg2-gpgconf-2.4.9-16.fc44.aarch64 gnupg2-keyboxd-2.4.9-16.fc44.aarch64 gnupg2-verify-2.4.9-16.fc44.aarch64 gnutls-3.8.13-1.fc44.aarch64 go-srpm-macros-3.8.0-2.fc44.noarch gpg-pubkey-36f612dcf27f7d1a48a835e4dbfcf71c6d9f90a6-6786af3b gpgverify-2.2-4.fc44.noarch grep-3.12-3.fc44.aarch64 gzip-1.14-2.fc44.aarch64 ima-evm-utils-libs-1.6.2-8.fc44.aarch64 info-7.2-9.fc44.aarch64 jansson-2.14-4.fc44.aarch64 java-srpm-macros-1-8.fc44.noarch json-c-0.18-8.fc44.aarch64 kernel-srpm-macros-1.0-28.fc44.noarch keyutils-libs-1.6.3-7.fc44.aarch64 krb5-libs-1.22.2-4.fc44.aarch64 libacl-2.4.0-1.fc44.aarch64 libarchive-3.8.7-1.fc44.aarch64 libassuan-2.5.7-5.fc44.aarch64 libattr-2.6.0-1.fc44.aarch64 libblkid-2.41.6-1.fc44.aarch64 libbrotli-1.2.1-1.fc44.aarch64 libcap-2.78-1.fc44.aarch64 libcap-ng-0.9.6-1.fc44.aarch64 libcbor-0.13.0-2.fc44.aarch64 libcom_err-1.47.3-4.fc44.aarch64 libcurl-8.18.0-14.fc44.aarch64 libeconf-0.7.9-3.fc44.aarch64 libevent-2.1.13-1.fc44.aarch64 libfdisk-2.41.6-1.fc44.aarch64 libffi-3.5.2-2.fc44.aarch64 libfido2-1.16.0-5.fc44.aarch64 libfsverity-1.6-4.fc44.aarch64 libgcc-16.2.1-3.fc44.aarch64 libgcrypt-1.12.2-1.fc44.aarch64 libgomp-16.2.1-3.fc44.aarch64 libgpg-error-1.58-2.fc44.aarch64 libidn2-2.3.8-3.fc44.aarch64 libksba-1.6.7-5.fc44.aarch64 liblastlog2-2.41.6-1.fc44.aarch64 libmount-2.41.6-1.fc44.aarch64 libnghttp2-1.68.0-5.fc44.aarch64 libnghttp3-1.18.0-1.fc44.aarch64 libpfm-4.14.1-2.fc44.aarch64 libpkgconf-2.5.1-1.fc44.aarch64 libpsl-0.21.5-7.fc44.aarch64 libselinux-3.11-2.fc44.aarch64 libselinux-utils-3.11-2.fc44.aarch64 libsemanage-3.11-1.fc44.aarch64 libsepol-3.11-1.fc44.aarch64 libsmartcols-2.41.6-1.fc44.aarch64 libssh-0.12.2-1.fc44.aarch64 libssh-config-0.12.2-1.fc44.noarch libstdc++-16.2.1-3.fc44.aarch64 libtasn1-4.21.0-1.fc44.aarch64 libtool-ltdl-2.5.4-10.fc44.aarch64 libunistring-1.1-11.fc44.aarch64 libusb1-1.0.30-1.fc44.aarch64 libuuid-2.41.6-1.fc44.aarch64 libverto-0.3.2-12.fc44.aarch64 libxcrypt-4.5.2-3.fc44.aarch64 libxml2-2.12.10-6.fc44.aarch64 libzstd-1.5.7-5.fc44.aarch64 linkdupes-0.7.3-2.fc44.aarch64 lua-libs-5.4.8-5.fc44.aarch64 lua-srpm-macros-1-17.fc44.noarch lz4-libs-1.10.0-4.fc44.aarch64 mpfr-4.2.2-3.fc44.aarch64 ncurses-base-6.6-1.fc44.noarch ncurses-libs-6.6-1.fc44.aarch64 nettle-3.10.1-3.fc44.aarch64 ngtcp2-1.22.1-1.fc44.aarch64 ngtcp2-crypto-ossl-1.22.1-1.fc44.aarch64 npth-1.8-4.fc44.aarch64 ocaml-srpm-macros-11-3.fc44.noarch openblas-srpm-macros-2-21.fc44.noarch openldap-2.6.16-1.fc44.aarch64 openssl-libs-3.5.9-1.fc44.aarch64 p11-kit-0.26.5-1.fc44.aarch64 p11-kit-trust-0.26.5-1.fc44.aarch64 package-notes-srpm-macros-0.20-1.fc44.noarch pam-libs-1.7.2-2.fc44.aarch64 patch-2.8-4.fc44.aarch64 pcre2-10.47-1.fc44.1.aarch64 pcre2-syntax-10.47-1.fc44.1.noarch perl-srpm-macros-1-61.fc44.noarch pkgconf-2.5.1-1.fc44.aarch64 pkgconf-m4-2.5.1-1.fc44.noarch pkgconf-pkg-config-2.5.1-1.fc44.aarch64 policycoreutils-3.11-2.fc44.aarch64 popt-1.19-10.fc44.aarch64 publicsuffix-list-dafsa-20260116-1.fc44.noarch pyproject-srpm-macros-1.24.0-1.fc44.noarch python-srpm-macros-3.14-12.fc44.noarch qt5-srpm-macros-5.15.18-2.fc44.noarch qt6-srpm-macros-6.11.2-1.fc44.noarch readline-8.3-4.fc44.aarch64 redhat-rpm-config-344-2.fc44.noarch rpm-6.0.2-1.fc44.aarch64 rpm-build-6.0.2-1.fc44.aarch64 rpm-build-libs-6.0.2-1.fc44.aarch64 rpm-libs-6.0.2-1.fc44.aarch64 rpm-plugin-selinux-6.0.2-1.fc44.aarch64 rpm-sequoia-1.10.3-1.fc44.aarch64 rpm-sign-libs-6.0.2-1.fc44.aarch64 rust-srpm-macros-28.5-1.fc44.noarch sed-4.9-7.fc44.aarch64 selinux-policy-44.11-1.fc44.noarch selinux-policy-targeted-44.11-1.fc44.noarch setup-2.15.0-28.fc44.noarch shadow-utils-4.19.0-7.fc44.aarch64 sqlite-libs-3.51.2-2.fc44.aarch64 systemd-libs-259.10-1.fc44.aarch64 systemd-standalone-sysusers-259.10-1.fc44.aarch64 tar-1.35-9.fc44.aarch64 tpm2-tss-4.1.5-1.fc44.aarch64 tree-sitter-srpm-macros-0.4.2-2.fc44.noarch unzip-6.0-69.fc44.aarch64 util-linux-2.41.6-1.fc44.aarch64 util-linux-core-2.41.6-1.fc44.aarch64 which-2.25-1.fc44.aarch64 xxhash-libs-0.8.4-2.fc44.aarch64 xz-5.8.2-2.fc44.aarch64 xz-libs-5.8.2-2.fc44.aarch64 zig-srpm-macros-1-8.fc44.noarch zip-3.0-45.fc44.aarch64 zlib-ng-compat-2.3.3-3.fc44.aarch64 zstd-1.5.7-5.fc44.aarch64 Start: buildsrpm Start: rpmbuild -bs Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc44.src.rpm Finish: rpmbuild -bs INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-44-aarch64-1794038831.330226/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-ckvcp98m/python-ipax/python-ipax.spec) Config(child) 0 minutes 28 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.fc44.src.rpm) Config(fedora-44-aarch64) Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-44-aarch64-bootstrap-1794038831.330226/root. INFO: reusing tmpfs at /var/lib/mock/fedora-44-aarch64-bootstrap-1794038831.330226/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-44-aarch64-1794038831.330226/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.fc44.aarch64 rpm-sequoia-1.10.3-1.fc44.aarch64 dnf5-5.4.6.0-1.fc44.aarch64 dnf5-plugins-5.4.6.0-1.fc44.aarch64 Finish: chroot init Start: build phase for python-ipax-0.13.0-1.fc44.src.rpm Start: build setup for python-ipax-0.13.0-1.fc44.src.rpm Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc44.src.rpm Updating and loading repositories: updates 100% | 13.8 KiB/s | 5.3 KiB | 00m00s fedora 100% | 24.2 KiB/s | 9.3 KiB | 00m00s Copr repository 100% | 5.6 KiB/s | 1.5 KiB | 00m00s Repositories loaded. Package Arch Version Repository Size Installing: pyproject-rpm-macros noarch 0:1.24.0-1.fc44 updates 169.0 KiB python3-array-api-strict noarch 0:2.0.1-8.fc44 fedora 694.1 KiB python3-devel aarch64 0:3.14.10-1.fc44 updates 2.0 MiB python3-hypothesis noarch 0:6.123.0-8.fc44 fedora 5.0 MiB python3-numpy aarch64 1:2.4.6-1.fc44 updates 36.3 MiB python3-pytest noarch 0:8.4.2-2.fc44 fedora 22.5 MiB python3-scipy aarch64 0:1.16.2-3.fc44 fedora 63.3 MiB python3-sympy noarch 0:1.14.0-11.fc44 fedora 84.3 MiB Installing dependencies: expat aarch64 0:2.9.0-1.fc44 updates 389.5 KiB flexiblas aarch64 0:3.5.0-2.fc44 fedora 38.0 KiB flexiblas-netlib aarch64 0:3.5.0-2.fc44 fedora 14.2 MiB flexiblas-openblas-openmp aarch64 0:3.5.0-2.fc44 fedora 67.2 KiB libgfortran aarch64 0:16.2.1-3.fc44 updates 1.7 MiB mpdecimal aarch64 0:4.0.1-3.fc44 fedora 281.1 KiB openblas aarch64 0:0.3.29-2.fc43 fedora 111.7 KiB openblas-openmp aarch64 0:0.3.29-2.fc43 fedora 20.4 MiB python-pip-wheel noarch 0:26.0.1-3.fc44 updates 1.2 MiB python-rpm-macros noarch 0:3.14-12.fc44 fedora 28.0 KiB python3 aarch64 0:3.14.10-1.fc44 updates 84.7 KiB python3-attrs noarch 0:25.4.0-2.fc44 fedora 436.8 KiB python3-charset-normalizer noarch 0:3.4.4-2.fc44 fedora 356.2 KiB python3-idna noarch 0:3.18-1.fc44 updates 522.3 KiB python3-iniconfig noarch 0:2.3.0-2.fc44 fedora 49.8 KiB python3-libs aarch64 0:3.14.10-1.fc44 updates 45.8 MiB python3-mpmath noarch 0:1.4.1-2.fc44 updates 4.1 MiB python3-numpy-f2py aarch64 1:2.4.6-1.fc44 updates 2.1 MiB python3-packaging noarch 0:25.0-8.fc44 fedora 607.4 KiB python3-platformdirs noarch 0:4.9.1-1.fc44 fedora 236.5 KiB python3-pluggy noarch 0:1.6.0-5.fc44 fedora 211.5 KiB python3-pooch noarch 0:1.9.0-1.fc44 fedora 657.1 KiB python3-pygments noarch 0:2.19.1-9.fc44 fedora 11.3 MiB python3-requests noarch 0:2.33.1-1.fc44 updates 477.3 KiB python3-rpm-generators noarch 0:14-14.fc44 fedora 81.7 KiB python3-rpm-macros noarch 0:3.14-12.fc44 fedora 6.5 KiB python3-sortedcontainers noarch 0:2.4.0-26.fc44 fedora 392.9 KiB python3-urllib3 noarch 0:2.8.0-3.fc44 updates 1.2 MiB tzdata noarch 0:2026f-1.fc44 updates 1.3 MiB Transaction Summary: Installing: 37 packages Total size of inbound packages is 68 MiB. Need to download 68 MiB. After this operation, 322 MiB extra will be used (install 322 MiB, remove 0 B). [ 1/37] python3-array-api-strict-0:2.0. 100% | 10.7 MiB/s | 164.1 KiB | 00m00s [ 2/37] python3-pytest-0:8.4.2-2.fc44.n 100% | 74.7 MiB/s | 2.3 MiB | 00m00s [ 3/37] python3-hypothesis-0:6.123.0-8. 100% | 36.4 MiB/s | 1.2 MiB | 00m00s [ 4/37] pyproject-rpm-macros-0:1.24.0-1 100% | 4.7 MiB/s | 58.1 KiB | 00m00s [ 5/37] python3-devel-0:3.14.10-1.fc44. 100% | 54.7 MiB/s | 448.1 KiB | 00m00s [ 6/37] python3-scipy-0:1.16.2-3.fc44.a 100% | 155.5 MiB/s | 15.2 MiB | 00m00s [ 7/37] python3-numpy-1:2.4.6-1.fc44.aa 100% | 98.0 MiB/s | 7.0 MiB | 00m00s [ 8/37] python3-attrs-0:25.4.0-2.fc44.n 100% | 8.6 MiB/s | 140.4 KiB | 00m00s [ 9/37] python3-sympy-0:1.14.0-11.fc44. 100% | 133.8 MiB/s | 15.9 MiB | 00m00s [10/37] python3-sortedcontainers-0:2.4. 100% | 2.6 MiB/s | 64.0 KiB | 00m00s [11/37] python3-iniconfig-0:2.3.0-2.fc4 100% | 1.2 MiB/s | 26.3 KiB | 00m00s [12/37] python3-pluggy-0:1.6.0-5.fc44.n 100% | 20.1 MiB/s | 61.6 KiB | 00m00s [13/37] python3-packaging-0:25.0-8.fc44 100% | 39.4 MiB/s | 161.2 KiB | 00m00s [14/37] python3-pooch-0:1.9.0-1.fc44.no 100% | 47.5 MiB/s | 145.9 KiB | 00m00s [15/37] python-rpm-macros-0:3.14-12.fc4 100% | 6.5 MiB/s | 20.0 KiB | 00m00s [16/37] python3-rpm-macros-0:3.14-12.fc 100% | 4.0 MiB/s | 12.4 KiB | 00m00s [17/37] flexiblas-netlib-0:3.5.0-2.fc44 100% | 181.6 MiB/s | 4.0 MiB | 00m00s [18/37] python3-0:3.14.10-1.fc44.aarch6 100% | 2.6 MiB/s | 29.8 KiB | 00m00s [19/37] python3-numpy-f2py-1:2.4.6-1.fc 100% | 125.1 MiB/s | 512.5 KiB | 00m00s [20/37] flexiblas-0:3.5.0-2.fc44.aarch6 100% | 5.6 MiB/s | 23.0 KiB | 00m00s [21/37] flexiblas-openblas-openmp-0:3.5 100% | 5.3 MiB/s | 16.3 KiB | 00m00s [22/37] python3-platformdirs-0:4.9.1-1. 100% | 19.2 MiB/s | 59.1 KiB | 00m00s [23/37] expat-0:2.9.0-1.fc44.aarch64 100% | 32.0 MiB/s | 131.1 KiB | 00m00s [24/37] mpdecimal-0:4.0.1-3.fc44.aarch6 100% | 31.1 MiB/s | 95.4 KiB | 00m00s [25/37] openblas-openmp-0:0.3.29-2.fc43 100% | 155.0 MiB/s | 3.9 MiB | 00m00s [26/37] openblas-0:0.3.29-2.fc43.aarch6 100% | 13.7 MiB/s | 42.2 KiB | 00m00s [27/37] python3-mpmath-0:1.4.1-2.fc44.n 100% | 92.6 MiB/s | 853.8 KiB | 00m00s [28/37] python3-libs-0:3.14.10-1.fc44.a 100% | 134.1 MiB/s | 9.9 MiB | 00m00s [29/37] libgfortran-0:16.2.1-3.fc44.aar 100% | 41.9 MiB/s | 472.0 KiB | 00m00s [30/37] python3-requests-0:2.33.1-1.fc4 100% | 39.2 MiB/s | 160.6 KiB | 00m00s [31/37] python3-charset-normalizer-0:3. 100% | 38.2 MiB/s | 117.3 KiB | 00m00s [32/37] python3-idna-0:3.18-1.fc44.noar 100% | 25.4 MiB/s | 104.1 KiB | 00m00s [33/37] python3-urllib3-0:2.8.0-3.fc44. 100% | 75.8 MiB/s | 310.7 KiB | 00m00s [34/37] tzdata-0:2026f-1.fc44.noarch 100% | 139.4 MiB/s | 713.6 KiB | 00m00s [35/37] python-pip-wheel-0:26.0.1-3.fc4 100% | 127.7 MiB/s | 1.1 MiB | 00m00s [36/37] python3-rpm-generators-0:14-14. 100% | 14.0 MiB/s | 28.6 KiB | 00m00s [37/37] python3-pygments-0:2.19.1-9.fc4 100% | 21.0 MiB/s | 2.7 MiB | 00m00s -------------------------------------------------------------------------------- [37/37] Total 100% | 242.4 MiB/s | 68.1 MiB | 00m00s Running transaction [ 1/39] Verify package files 100% | 171.0 B/s | 37.0 B | 00m00s [ 2/39] Prepare transaction 100% | 321.0 B/s | 37.0 B | 00m00s [ 3/39] Installing libgfortran-0:16.2.1 100% | 285.2 MiB/s | 1.7 MiB | 00m00s [ 4/39] Installing python-rpm-macros-0: 100% | 28.2 MiB/s | 28.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% | 27.9 MiB/s | 171.5 KiB | 00m00s [ 7/39] Installing tzdata-0:2026f-1.fc4 100% | 29.3 MiB/s | 1.5 MiB | 00m00s [ 8/39] Installing python-pip-wheel-0:2 100% | 407.8 MiB/s | 1.2 MiB | 00m00s [ 9/39] Installing openblas-0:0.3.29-2. 100% | 110.8 MiB/s | 113.5 KiB | 00m00s [10/39] Installing openblas-openmp-0:0. 100% | 424.8 MiB/s | 20.4 MiB | 00m00s [11/39] Installing flexiblas-netlib-0:3 100% | 244.7 MiB/s | 14.2 MiB | 00m00s [12/39] Installing flexiblas-0:3.5.0-2. 100% | 38.2 MiB/s | 39.2 KiB | 00m00s [13/39] Installing flexiblas-openblas-o 100% | 66.4 MiB/s | 68.0 KiB | 00m00s [14/39] Installing mpdecimal-0:4.0.1-3. 100% | 138.0 MiB/s | 282.6 KiB | 00m00s [15/39] Installing expat-0:2.9.0-1.fc44 100% | 15.9 MiB/s | 391.6 KiB | 00m00s [16/39] Installing python3-libs-0:3.14. 100% | 249.5 MiB/s | 46.2 MiB | 00m00s [17/39] Installing python3-0:3.14.10-1. 100% | 4.0 MiB/s | 86.5 KiB | 00m00s [18/39] Installing python3-numpy-1:2.4. 100% | 237.8 MiB/s | 36.6 MiB | 00m00s [19/39] Installing python3-numpy-f2py-1 100% | 64.1 MiB/s | 2.2 MiB | 00m00s [20/39] Installing python3-packaging-0: 100% | 121.1 MiB/s | 619.9 KiB | 00m00s [21/39] Installing python3-idna-0:3.18- 100% | 25.9 MiB/s | 530.2 KiB | 00m00s [22/39] Installing python3-urllib3-0:2. 100% | 147.5 MiB/s | 1.2 MiB | 00m00s [23/39] Installing python3-rpm-generato 100% | 81.0 MiB/s | 82.9 KiB | 00m00s [24/39] Installing python3-attrs-0:25.4 100% | 110.1 MiB/s | 451.1 KiB | 00m00s [25/39] Installing python3-sortedcontai 100% | 194.0 MiB/s | 397.3 KiB | 00m00s [26/39] Installing python3-iniconfig-0: 100% | 26.4 MiB/s | 54.1 KiB | 00m00s [27/39] Installing python3-pluggy-0:1.6 100% | 42.6 MiB/s | 217.9 KiB | 00m00s [28/39] Installing python3-pygments-0:2 100% | 153.2 MiB/s | 11.5 MiB | 00m00s [29/39] Installing python3-platformdirs 100% | 79.2 MiB/s | 243.4 KiB | 00m00s [30/39] Installing python3-mpmath-0:1.4 100% | 258.2 MiB/s | 4.1 MiB | 00m00s [31/39] Installing python3-charset-norm 100% | 17.9 MiB/s | 366.4 KiB | 00m00s [32/39] Installing python3-requests-0:2 100% | 119.5 MiB/s | 489.5 KiB | 00m00s [33/39] Installing python3-pooch-0:1.9. 100% | 59.8 MiB/s | 673.1 KiB | 00m00s [34/39] Installing python3-scipy-0:1.16 100% | 254.0 MiB/s | 63.8 MiB | 00m00s [35/39] Installing python3-sympy-0:1.14 100% | 221.3 MiB/s | 85.2 MiB | 00m00s [36/39] Installing python3-pytest-0:8.4 100% | 260.6 MiB/s | 22.7 MiB | 00m00s [37/39] Installing python3-hypothesis-0 100% | 123.5 MiB/s | 5.1 MiB | 00m00s [38/39] Installing python3-devel-0:3.14 100% | 64.0 MiB/s | 2.0 MiB | 00m00s [39/39] Installing python3-array-api-st 100% | 13.0 MiB/s | 717.6 KiB | 00m00s Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc44.src.rpm Updating and loading repositories: updates 100% | 26.7 KiB/s | 5.3 KiB | 00m00s fedora 100% | 46.8 KiB/s | 9.3 KiB | 00m00s Copr repository 100% | 15.9 KiB/s | 1.5 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.24.0-1.fc44.noarch" is already installed. Package "python3-array-api-strict-2.0.1-8.fc44.noarch" is already installed. Package "python3-devel-3.14.10-1.fc44.aarch64" is already installed. Package "python3-hypothesis-6.123.0-8.fc44.noarch" is already installed. Package "python3-numpy-1:2.4.6-1.fc44.aarch64" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-scipy-1.16.2-3.fc44.aarch64" is already installed. Package "python3-sympy-1.14.0-11.fc44.noarch" is already installed. Nothing to do. Finish: build setup for python-ipax-0.13.0-1.fc44.src.rpm Start: rpmbuild python-ipax-0.13.0-1.fc44.src.rpm Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.8aqrjW Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.u6EYYN + 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.EAFArz + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-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.fc44.aarch64-pyproject-buildrequires + rm -rfv '*.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-ipax-0.13.0-1.fc44.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: updates 100% | 21.4 KiB/s | 5.3 KiB | 00m00s fedora 100% | 37.5 KiB/s | 9.3 KiB | 00m00s Copr repository 100% | 14.0 KiB/s | 1.5 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.24.0-1.fc44.noarch" is already installed. Package "python3-array-api-strict-2.0.1-8.fc44.noarch" is already installed. Package "python3-devel-3.14.10-1.fc44.aarch64" is already installed. Package "python3-hypothesis-6.123.0-8.fc44.noarch" is already installed. Package "python3-numpy-1:2.4.6-1.fc44.aarch64" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-scipy-1.16.2-3.fc44.aarch64" is already installed. Package "python3-sympy-1.14.0-11.fc44.noarch" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package Arch Version Repository Size Installing: python3-hatchling noarch 0:1.31.0-1.fc44 updates 681.6 KiB python3-pip noarch 0:26.0.1-3.fc44 updates 11.5 MiB Installing dependencies: python3-pathspec noarch 0:1.0.3-2.fc44 fedora 372.4 KiB python3-trove-classifiers noarch 0:2026.1.14.14-2.fc44 fedora 111.9 KiB Transaction Summary: Installing: 4 packages Total size of inbound packages is 3 MiB. Need to download 3 MiB. After this operation, 13 MiB extra will be used (install 13 MiB, remove 0 B). [1/4] python3-pathspec-0:1.0.3-2.fc44.n 100% | 6.2 MiB/s | 107.8 KiB | 00m00s [2/4] python3-hatchling-0:1.31.0-1.fc44 100% | 12.0 MiB/s | 233.3 KiB | 00m00s [3/4] python3-trove-classifiers-0:2026. 100% | 11.1 MiB/s | 34.2 KiB | 00m00s [4/4] python3-pip-0:26.0.1-3.fc44.noarc 100% | 95.1 MiB/s | 2.7 MiB | 00m00s -------------------------------------------------------------------------------- [4/4] Total 100% | 104.5 MiB/s | 3.0 MiB | 00m00s Running transaction [1/6] Verify package files 100% | 400.0 B/s | 4.0 B | 00m00s [2/6] Prepare transaction 100% | 121.0 B/s | 4.0 B | 00m00s [3/6] Installing python3-trove-classifi 100% | 6.3 MiB/s | 115.7 KiB | 00m00s [4/6] Installing python3-pathspec-0:1.0 100% | 64.2 MiB/s | 394.6 KiB | 00m00s [5/6] Installing python3-hatchling-0:1. 100% | 24.6 MiB/s | 730.8 KiB | 00m00s [6/6] Installing python3-pip-0:26.0.1-3 100% | 111.8 MiB/s | 11.7 MiB | 00m00s Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.pfK1ny + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-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.fc44.aarch64-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.fc44.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: updates 100% | 32.0 KiB/s | 5.3 KiB | 00m00s fedora 100% | 56.2 KiB/s | 9.3 KiB | 00m00s Copr repository 100% | 15.3 KiB/s | 1.5 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.24.0-1.fc44.noarch" is already installed. Package "python3-array-api-strict-2.0.1-8.fc44.noarch" is already installed. Package "python3-devel-3.14.10-1.fc44.aarch64" is already installed. Package "python3-hypothesis-6.123.0-8.fc44.noarch" is already installed. Package "python3-numpy-1:2.4.6-1.fc44.aarch64" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-scipy-1.16.2-3.fc44.aarch64" is already installed. Package "python3-sympy-1.14.0-11.fc44.noarch" is already installed. Package "python3-hatchling-1.31.0-1.fc44.noarch" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-pip-26.0.1-3.fc44.noarch" is already installed. Package Arch Version Repository Size Installing: python3-array-api-compat noarch 0:1.15.0-1.fc44 copr_base 506.6 KiB python3-array-api-extra noarch 0:0.11.5-1.fc44 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-extra-0:0.11.5- 100% | 1.0 MiB/s | 272.1 KiB | 00m00s [2/2] python3-array-api-compat-0:1.15.0 100% | 378.9 KiB/s | 123.1 KiB | 00m00s -------------------------------------------------------------------------------- [2/2] Total 100% | 1.2 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% | 111.0 B/s | 2.0 B | 00m00s [3/4] Installing python3-array-api-comp 100% | 86.2 MiB/s | 529.3 KiB | 00m00s [4/4] Installing python3-array-api-extr 100% | 56.9 MiB/s | 1.4 MiB | 00m00s Warning: skipped OpenPGP checks for 2 packages from repository: copr_base Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.A95YWJ + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-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.fc44.aarch64-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.fc44.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: updates 100% | 25.8 KiB/s | 5.3 KiB | 00m00s fedora 100% | 45.2 KiB/s | 9.3 KiB | 00m00s Copr repository 100% | 11.8 KiB/s | 1.5 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.24.0-1.fc44.noarch" is already installed. Package "python3-array-api-strict-2.0.1-8.fc44.noarch" is already installed. Package "python3-devel-3.14.10-1.fc44.aarch64" is already installed. Package "python3-hypothesis-6.123.0-8.fc44.noarch" is already installed. Package "python3-numpy-1:2.4.6-1.fc44.aarch64" is already installed. Package "python3-pytest-8.4.2-2.fc44.noarch" is already installed. Package "python3-scipy-1.16.2-3.fc44.aarch64" is already installed. Package "python3-sympy-1.14.0-11.fc44.noarch" is already installed. Package "python3-array-api-compat-1.15.0-1.fc44.noarch" is already installed. Package "python3-array-api-extra-0.11.5-1.fc44.noarch" is already installed. Package "python3-hatchling-1.31.0-1.fc44.noarch" is already installed. Package "python3-packaging-25.0-8.fc44.noarch" is already installed. Package "python3-pip-26.0.1-3.fc44.noarch" is already installed. Nothing to do. Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1793923200 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.zTmFF8 + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-ipax-0.13.0-build/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=44 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-ipax-0.13.0-build/pyproject-wheeldir --output /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-pyproject-buildrequires --dep-overrides-file /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-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.fc44.aarch64-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.iMxBy0 + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-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 ./. 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.6Dms8t + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd 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 26.0.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.fc44.aarch64-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.fc44.aarch64-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.fc44.aarch64-pyproject-dep-overrides ']' ++ wc -l /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-pyproject-ghost-distinfo ++ cut -f1 '-d ' + lines=1 + '[' 1 -ne 1 ']' + RPM_FILES_ESCAPE=4.19 + /usr/bin/python3 /usr/lib/rpm/redhat/pyproject_save_files.py --output-files /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-pyproject-files --output-modules /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-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.fc44.aarch64-pyproject-record --prefix /usr ipax + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + COMPRESS='gzip -9 -n' + COMPRESS_EXT=.gz + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs + /usr/lib/rpm/brp-remove-la-files + /usr/lib/rpm/redhat/brp-python-rpm-in-distinfo + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j4 Bytecompiling .py files below /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr/lib/python3.14 using python3.14 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-det --brp -j4 /builddir/build/BUILD/python-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__/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/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__/_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/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__/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__/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/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/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__/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/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/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/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/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.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__/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__/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__/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__/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__/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__/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__/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__/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__/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__/__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__/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__/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__/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__/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__/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__/__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__/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__/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.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/__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__/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__/__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/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__/_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.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.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__/__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.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__/cupy.cpython-314.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 + /usr/bin/linkdupes --brp /builddir/build/BUILD/python-ipax-0.13.0-build/BUILDROOT/usr Scanned 26 directories and 168 files, considered 168 files, read 0 files, linked 0 files, 0 errors sum of sizes of linked files: 0 bytes Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.xtHZi9 + 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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd ipax-0.13.0 + '[' '!' -f /builddir/build/BUILD/python-ipax-0.13.0-build/python-ipax-0.13.0-1.fc44.aarch64-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.fc44.aarch64-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 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + PATH=/builddir/build/BUILD/python-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.10, pytest-8.4.2, 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 0xffffa500f490> 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...rrent API version for array-api-strict is 2022.12', prepare_time=0.050149099999998725, 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 0xffffa4ace300> 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 0xffffa51339d0> 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 0xffffa92c56e0> 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 0xffffa51c72f0> monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0xffffa94f5ef0> 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 0xffffa494a580> 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 0xffffa5f257e0> caplog = <_pytest.logging.LogCaptureFixture object at 0xffffa5347050> 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 0xffffa4acf6b0> 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 0xffffa93603d0> 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 0xffffa5681cd0> 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 0xffffa562b070> 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 0xffffa564a900> 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 0xffffa65fd2b0> 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 0xffffa56120b0> 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 0xffffa4aa3310> 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 0xffffa56b5470> 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 0xffffa63c7e00> 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 0xffffa56b6d60> 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 0xffffa56b74d0> 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 0xffffa56b7bd0> 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 0xffffa56b7930> 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 0xffffa56b6580> 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 0xffffa63ff3d0> 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 0xffffa63ddc50> 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 0xffffa4afa200> 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 0xffffa4afae40> 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 0xffffa4afb690> 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 0xffffa63de350> 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 0xffffa4afa120> 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 0xffffa4afa9e0> 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 0xffffa4afb3f0> 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 0xffffa4bafb60> 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 0xffffa4badf60> 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 0xffffa4bafee0> caplog = <_pytest.logging.LogCaptureFixture object at 0xffffa515b110> 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 0xffffa4bad1d0> 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 0xffffa4baedd0> 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 0xffffa514d710> 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 0xffffa4baedd0> 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 0xffffa6253540> 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 0xffffa514d1d0> 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 0xffffa514c3d0> 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 0xffffa514f850> 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 0xffffa514f9a0> 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 0xffffa6252200> 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 0xffffa514e580> 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 0xffffa62d4fa0> @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 0xffffa49aaba0> @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 0xffffa49ab0e0> 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 0xffffa49ab7e0> 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 0xffffa49abd20> 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 0xffffa49ab930> 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 0xffffa62d7e00> 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 0xffffa514fcb0> 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 0xffffa49aa740> 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 0xffffa49a9e80> 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 0xffffa62d4de0> 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 0xffffa49e4130> 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 0xffffa49e5cc0> 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 0xffffa49e5f60> 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 0xffffa49e5390> 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 0xffffa62d7230> 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 0xffffa49e4f30> 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 0xffffa49e64a0> 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 0xffffa49e7c40> 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 0xffffa49e6ba0> 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 0xffffa4b9e580> 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 0xffffa4b9e9e0> 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 0xffffa4b9d710> 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 0xffffa4b9edd0> 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 0xffffa4b9f460> 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 0xffffa4b9f0e0> 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 0xffffa4b9d5c0> 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 0xffffa4b9f380> 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 0xffffa4b9c4b0> 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 0xffffa4b9eeb0> 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 0xffffa54ab930> 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 0xffffa54aac80> 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 0xffffa4b9d5c0> 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 0xffffa49e5470> 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 0xffffa49ab620> 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 0xffffa4bab350> 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 0xffffa4bb6b70> 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 0xffffa49e5d30> 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 0xffffa4d27cb0> 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 0xffffa4d27930> 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 0xffffa4d25f60> 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 0xffffa508e200> 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 0xffffa4b9f460> 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 0xffffa4dd8a60> 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 0xffffa4dd80c0> 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 0xffffa61ca580> 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 0xffffa61852b0> 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 0xffffa5c855c0> 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 0xffffa5c85320> 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 0xffffa5ce0fa0> 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 0xffffa5ce1ef0> 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 0xffffa4dd9c50> 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 0xffffa5ce2510> 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 0xffffa4ce8d00> 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 0xffffa2710910> 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 0xffffa60b8fa0> 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 0xffffa2710440> 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 0xffffa60ba040> 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 0xffffa5a419b0> 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 0xffffa5a42820> 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 0xffffa27bd080> 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 0xffffa27bf850> 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 0xffffa27be120> 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 0xffffa27631c0> 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 0xffffa27633f0> 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 0xffffa2763af0> 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 0xffffa5a4d080> 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 0xffffa4ce4520> 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 0xffffa4ce5ef0> 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 0xffffa4ce67b0> 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 0xffffa4ce4e50> 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 0xffffa5a4f7e0> 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 0xffffa4ce5a90> 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 0xffffa4ce6a50> 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 0xffffa4ce42f0> 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 0xffffa59fc8a0> 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 0xffffa27108a0> 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/_trustregion_constr/minimize_trustregion_constr.py:341: UserWarning: 'where' used without 'out', expect unitialized memory in output. If this is intentional, use out=None. modified_lb = np.nextafter(bounds.lb, -np.inf, where=bounds.lb > -np.inf) tests/integration/test_benchmark_crosscheck.py::test_format_crosscheck_renders_markdown /usr/lib64/python3.14/site-packages/scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py:342: UserWarning: 'where' used without 'out', expect unitialized memory in output. If this is intentional, use out=None. modified_ub = np.nextafter(bounds.ub, np.inf, where=bounds.ub < np.inf) 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/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_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, 36 warnings in 43.97s == error: Bad exit status from /var/tmp/rpm-tmp.xtHZi9 (%check) Bad exit status from /var/tmp/rpm-tmp.xtHZi9 (%check) RPM build errors: Finish: rpmbuild python-ipax-0.13.0-1.fc44.src.rpm Finish: build phase for python-ipax-0.13.0-1.fc44.src.rpm INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-44-aarch64-1794038831.330226/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.fc44.src.rpm) Config(fedora-44-aarch64) 1 minutes 5 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_failure=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot ERROR: Command failed: # /usr/bin/systemd-nspawn -q -M 10bd56e168eb4dde9edda5bbfd8ca435 -D /var/lib/mock/fedora-44-aarch64-1794038831.330226/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 aarch64 /builddir/build/originals/python-ipax.spec' Copr build error: Build failed