Skip to content

Release candidate: merge dev into main - #24

Merged
mcdigman merged 154 commits into
mainfrom
dev
Jul 10, 2026
Merged

Release candidate: merge dev into main#24
mcdigman merged 154 commits into
mainfrom
dev

Conversation

@mcdigman

Copy link
Copy Markdown
Owner

Release Candidate

Merges the accumulated work on dev into main for review. This is the first substantial release rolling up everything since PR #15 (the last change on main).

Highlights

  • Core library – substantial rework of pyakima/pyakima.py, integer control-point handling, and packaging metadata (pyproject.toml, tracked _version.py).
  • Demos – new pyakima/demos/ package: animated spline, irregular-grid animation, step, and speed demos with a shared _theme.
  • Docs – Sphinx docs site (docs/) with API, examples, performance, and benchmark pages; published docs URL and README restructuring.
  • Testing & CI – large test suite expansion (tests/test_pyakima.py), coverage, dependency-floor jobs, pylint/skylos/mypy/pyright/pydoclint tooling, and cross-OS benchmark workflow.
  • Packaging/release – PyPI Trusted Publishing workflow (guarded against tag/version mismatch), Zenodo DOI badge, SPDX license headers, and Action pin bumps off the deprecated Node 20 runtime.

Included PRs

#2#23 (see git log main..dev --merges).

Stats

49 files changed, ~6,700 insertions.

Please review as a release candidate before merging to main.

mcdigman and others added 30 commits July 7, 2026 17:57
Mirror the DTMCMC tooling setup:

- Replace pre-commit with prek (drop-in; reads the same config) and swap
  the mypy hook for pyrefly-check; bump all hook revs and add regression
  guards + actionlint.
- Add CI workflows: lint (prek), typecheck (mypy + pyright), test
  (placeholder tolerating "no tests collected"), and build (sdist/wheel
  + twine check + install matrix at dependency floors and modern versions).
- pyproject: raise floor to Python 3.10 with low dependency floors
  (numpy>=1.22, numba>=0.56), add [dev]/[demos] extras, and add
  pyrefly/pyright/mypy/pytest config (demos/ excluded from type checks).
- Add Apache-2.0 WITH LLVM-exception LICENSE (was referenced but missing,
  which broke the build), a .gitignore, and a tests/ placeholder.
- ruff target-version py39 -> py310.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add .github/workflows/docstrings.yml, mirroring the pydoclint job from
GalacticStochastic, to lint pyakima's numpy-style docstrings. Options come
from the [tool.pydoclint] block already in pyproject.toml (style = "numpy").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Migrate tooling to prek/pyrefly and add CI workflows and unit tests
mcdigman and others added 10 commits July 9, 2026 22:52
Add PyPI publish workflow (Trusted Publishing, Release-triggered)
Rework the Sphinx docs so the landing page and new pages pull their prose
directly from README.md instead of duplicating it, keeping a single source
of truth. Fenced HTML-comment markers (doc:intro, doc:install, etc.) delimit
the shared slices, which MyST {include} pulls in via start-after/end-before.

- index.md: landing page includes the intro, installation, and quick-start
  slices, plus a lightweight static figure (akima_step) and a link to the
  new Examples page.
- examples.md (new): hosts the demo and grid animations with their shared
  explanations and footnote references, keeping the heavier GIFs off the
  landing page.
- performance.md (new): includes the performance-snapshot slice.
- conf.py: serve the repo-root assets/ via html_static_path so pages can
  reference _static/akima_*.{gif,png} without moving or duplicating the
  folder; add custom.css for light/dark image switching that follows Furo's
  theme toggle (body[data-theme]) rather than the README's OS-based <picture>.

Builds clean under the strict -W CI flag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the broken shields.io PyPI placeholder with a placeholder Zenodo DOI
badge (to be wired up on release), and break the badge row after the license
badge so the CI badges wrap to a second line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Zenodo's badge URLs key off the numeric repository ID (972418978), not
owner/repo. The badge resolves once the Zenodo GitHub integration is enabled
and a release mints a DOI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Share README prose into docs; add Examples/Performance pages
Pull the `Copyright 2026 Matthew C. Digman` line out of each module
docstring and replace it with a two-line SPDX header at the top of the
file:

    # SPDX-FileCopyrightText: Copyright 2026 Matthew C. Digman
    # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

The `Copyright` prefix on the FileCopyrightText value keeps the notice
matching ruff's flake8-copyright (CPY001) default notice-rgx while still
being valid SPDX/REUSE. The license identifier matches the PEP 639
expression in pyproject.toml. The Sphinx `copyright =` config variable in
docs/conf.py is left as-is.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move docstring copyright notices to SPDX header comments
Both branches added .github/workflows/benchmark.yml; dev carries the
newer Action pins (checkout@v7, setup-uv@v7, upload-artifact@v7) from
PR #19. Resolved by keeping dev's version.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

# Conflicts:
#	.github/workflows/benchmark.yml
mcdigman and others added 2 commits July 10, 2026 00:50
Resolve benchmark.yml pin conflict for dev→main merge
- Relicense from Apache-2.0 WITH LLVM-exception to plain Apache-2.0:
  strip the exception from LICENSE and update the SPDX expression in
  pyproject.toml, every SPDX header, and the README license section
  (plain Apache-2.0 is also detectable by GitHub's license tooling).
- Add SPDX headers to the four files that were missing them.
- Fix the "Unsuported" -> "Unsupported" typo in error messages and the
  matching test assertions.
- README: use absolute raw.githubusercontent.com image URLs and replace
  GFM footnotes with a plain-numbered References section so the page
  renders correctly on PyPI (which resolves no relative URLs and does
  not support footnotes); link the benchmark file and LICENSE.
- Docs: add a Usage page including the README's Jitted Use and Spline
  Options sections (new doc:jitted/doc:options markers) so the
  numba-facing API is documented on the Sphinx site too.
- Packaging: sharpen the PyPI one-line description, add the
  Software Development :: Libraries classifier and a Changelog URL, and
  add MANIFEST.in so the sdist deliberately ships tests/, CHANGELOG.md,
  and CITATION.cff.
- Add CITATION.cff (with ORCID) for GitHub citation support and Zenodo
  release metadata, and a starter CHANGELOG.md.
- Harden workflows: pin all actions to commit SHAs, set a workflow-level
  read-only GITHUB_TOKEN everywhere, and disable checkout credential
  persistence.
- docs/conf.py: copyright year is now just 2026.

Verified: full pytest suite (183 passed), prek run --all-files, sphinx
-W docs build, uv build + twine check on both distributions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mcdigman and others added 14 commits July 10, 2026 02:42
Apply release-audit fixes for the 0.1.0 release candidate
Make inline [n] citations link to their specific reference entry via
per-item <a id="ref-n"> anchors. Jumps work on GitHub/ReadTheDocs; on
PyPI the anchors are stripped by readme_renderer but degrade gracefully
to inert, cleanly-rendered [n] link text (same as the existing TOC),
so nothing breaks there.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
MyST-Parser parses markdown [n](#ref-n) as a cross-reference and cannot
resolve it to the raw-HTML <a id> targets, so sphinx-build -W failed with
7 myst.xref_missing warnings. Write the citation links as raw HTML
(<a href="#ref-n">[n]</a>) too: MyST passes raw HTML through verbatim
without cross-reference resolution, so no warning is emitted, while GitHub
and PyPI render it identically (and this drops the \[ \] escapes). Jumps
now resolve in all three renderers on GitHub/Sphinx and degrade to inert
links on PyPI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(readme): hyperlink footnote citations to references
…c-call

Accept integer scalar cubic_call inputs at runtime
A large share of the recent Akima-spline literature is mHz
gravitational-wave / LISA PSD-estimation work (see the README
references), so add those terms to the PyPI keywords and the
CITATION.cff (Zenodo) keywords, plus the domain-neutral "curve
fitting" from the title of Akima's paper. The keyword comment now
records the rule: domain keywords are added only for applications the
README actually documents. Matching gravitational-waves/lisa GitHub
topics were added in the repository settings.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rewrite and standardize docstrings across pyakima.py: clarify corner_model
and ext options as enumerated lists, describe SplineCoeffs as a NamedTuple,
and expand the non-finite y and helper-dispatch notes.

Tighten AkimaSpline x/y annotations to NDArray[np.floating] and add
type: ignore[arg-type] on the integer-input tests accordingly. Adjust the
linear_vector_calls error message to use set notation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add gravitational-wave domain keywords for findability
Improve docstrings and tighten array type annotations
@mcdigman

Copy link
Copy Markdown
Owner Author

Everything checks good for the initial release

@mcdigman
mcdigman merged commit 5f41fdd into main Jul 10, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant