Conversation
There was a problem hiding this comment.
Pull request overview
This PR targets the 0.1.1 release housekeeping: it fixes CI failures caused by optional-backend adapters being imported during --doctest-modules collection, adds enforcement hooks for changelog/pyproject validity, and introduces packaging + release automation while making the package version single-sourced from ipax.__version__.
Changes:
- Add a root
conftest.py+ regression test to skip doctest collection of adapter modules when their concrete backend isn’t installed. - Enforce
CHANGELOG.md/pyproject.tomlvalidity via new pre-commit hooks and CIlintjob checks. - Add packaging build job to CI and a tag-driven
release.ymlworkflow; switchpyproject.tomlto dynamic version derived fromipax/__init__.pyand bump to0.1.1.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
tests/regression/test_doctest_collection_adapters.py |
Regression test ensuring adapter skip-map stays consistent with top-level concrete imports. |
conftest.py |
Root pytest config to ignore optional-backend adapter modules during doctest collection when deps are missing. |
pyproject.toml |
Dynamic version via Hatch, mypy overrides for optional deps, pytest doctest configuration referenced by the CI fix. |
ipax/__init__.py |
Bump __version__ to 0.1.1 (single source of truth). |
.github/workflows/ci.yml |
Add develop trigger, run new pre-commit checks in lint, add package build job. |
.github/workflows/release.yml |
New release workflow for tag builds, PyPI publish (Trusted Publishing), and GitHub release notes from changelog/tag annotation. |
.pre-commit-config.yaml |
Add validate-pyproject and kacl-verify hooks. |
CHANGELOG.md |
Add 0.1.1 entry and Keep a Changelog-compliant formatting + link references. |
README.md |
Add PyPI badge and remove hardcoded version prose. |
CONTRIBUTING.md |
Remove hardcoded version in beta statement. |
AGENTS.md |
Remove hardcoded version in beta statement. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…copes - Ship root conftest.py in the sdist so the suite collects from an sdist (it now requires the root conftest for --doctest-modules). - Fix README CI badge URL: niklaswahl/ipax -> wahln/ipax. - Add explicit `actions: read` to the release.yml jobs that run actions/download-artifact (defensive least-privilege; same-run artifacts use the runtime token, but being explicit de-risks restricted-default orgs). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Owner
Author
|
Thanks @copilot — addressed in da15f40:
|
wahln
added a commit
that referenced
this pull request
Jun 21, 2026
wahln
added a commit
that referenced
this pull request
Jun 22, 2026
Feasibility restoration's damped Gauss-Newton step called xp.linalg.solve on the normal matrix without guarding the factorization. Far from feasibility a constraint Jacobian can blow up (e.g. HS7 reaching ~1e201 at a bad iterate), making the matrix numerically singular; numpy then raised a LinAlgError and crashed the entire solve, while torch silently returned a non-finite step. Treat a raised or non-finite solve as a failed Levenberg-Marquardt step: grow the damping (up to a ceiling) and retry, exactly as for a rejected step. The solve now degrades to a reported status instead of raising. The exception type is backend-specific and cannot be named without importing a concrete library (invariant #1), so it is caught broadly in this localized step. Surfaced by the S2MPJ HS7 sweep. Regression test reproduces the exact failure mode via a direct restore() call and asserts it returns finite and infeasible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
0.1.1 — CI fixes, changelog/pyproject enforcement, packaging & release, single-source version
Fixes the failing
mainpipelinetestjobs:pytest --doctest-modulesimports everyipaxmodule during collection, but the JAX/CuPy autodiff and sparse adapters import their concrete library at module top level (invariant 0.1.1: fix CI, add changelog/pyproject hooks, packaging + release workflows, single-source version #1 carve-out). CI installs neither JAX nor CuPy, so collection errored. A rootconftest.pynow skips those adapter modules during collection unless the backend is importable (runtime dispatch already tolerated their absence).lintjob:mypyerrored on the NumPy/SciPy sparse adapter when NumPy isn't installed in the minimal[lint]env.numpy.*joins the optional-backendignore_missing_importsoverrides.tests/regression/test_doctest_collection_adapters.py) so a new top-level-importing adapter can't silently re-break collection.Both failures were reproduced locally (a fresh
[lint]-only venv for mypy; an import-blocker for the doctest collection) and confirmed fixed.Pre-commit hooks
kacl-verify(python-kaclv0.7.3) — enforces Keep a Changelog format;CHANGELOG.mdreformatted to comply.validate-pyproject(v0.25) — schema-validatespyproject.toml.lintjob.Packaging & publishing
ci.yml: addeddevelopto triggers and apackagejob (sdist + wheel +twine check) on main/develop/PR.release.yml(tagsv*only): builds, publishes to PyPI via Trusted Publishing, and creates a GitHub release with notes from the changelog + tag annotation.Single source of truth for the version
ipax.__version__is the only literal version;pyproject.tomlderives it via[tool.hatch.version](dynamic = ["version"]).0.1.1.Verification
scripts/check.pygreen (format/lint/types/purity/test, 780 passed);validate-pyprojectandkacl-verifypass;python -m buildproducesipax-0.1.1.*.🤖 Generated with Claude Code