Releases: vanandrew/warpkit
Releases · vanandrew/warpkit
Release list
v1.4.0
What's Changed
- ♻️ Unify field-map reconstruction, dedup CLIs, and thread the unwrap stage by @vanandrew in #29
Full Changelog: v1.3.0...v1.4.0
v1.3.0
What's Changed
- 📝 Forbid AI attribution in commits and PR bodies by @vanandrew in #28
- 🐛 Invert MEDIC displacement in data space; drop redundant flip_sign by @vanandrew in #27
Full Changelog: v1.2.2...v1.3.0
v1.2.2
What's Changed
- ✨ enable free-threaded Python 3.14t support by @vanandrew in #23
- 📝 Update citation to published Imaging Neuroscience paper by @vanandrew in #25
Full Changelog: v1.2.1...v1.2.2
v1.2.1
v1.2.1
Added
- Typed Python API for all seven
wk-*operations (#21). Each
warpkit.scripts.<name>module now exports a typed function
(medic,unwrap_phase,compute_fieldmap,apply_warp,
convert_warp,convert_fieldmap,compute_jacobian) alongside a
frozenResultdataclass. The newwarpkit.apimodule re-exports all
seven functions forfrom warpkit.api import medicusage by library
integrators (nipype, fmriprep, etc.). Functions accept paths or
nib.Nifti1Imageinputs and raiseValueErrorinstead of
SystemExit; CLI behaviour is preserved exactly. - BIDS sidecar resolution, mutex acquisition validation, image coercion,
and noise-frame trimming consolidated into a new private
warpkit.scripts._metadatamodule (previously duplicated across
three scripts).
Changed
- ROMEO
weights.handvoxel_quality.hkernels streamlined into
single-pass(k, j, i)loops — boundary edges are skipped by
construction, and themasked_magshadow buffer is gone (#22).
Per-edge FP arithmetic is unchanged, so the ROMEO goldens remain
bit-exact. - Ship the ROMEO MIT notice with binary distributions (#22). Declared
via PEP 639license-files = ["LICENSE", "include/romeo/LICENSE"],
so wheels now carry both notices under*.dist-info/licenses/. The
standalonewk-*bundles drop both LICENSE files into aLICENSES/
directory.
Full diff: v1.2.0...v1.2.1
v1.2.0
v1.2.0
Changed
- Build backend migrated from setuptools to
scikit-build-core
(#20). The CMake build directory is now persisted at
build/{wheel_tag}/, so ITK FetchContent and object files survive
acrossuv syncinvocations — cold builds still take ~80s for ITK
5.4, but incremental rebuilds are quick. - Eigen3 is now vendored via
FetchContent+OVERRIDE_FIND_PACKAGE+
ITK_USE_SYSTEM_EIGEN=ON, bypassing ITK's nestedITKInternalEigen3
inner-CMake configure (whose cache would otherwise dangle when uv
tears down its ninja env between syncs). setup.py,MANIFEST.in, and the_version.pypathway are gone.
warpkit.__version__now reads fromimportlib.metadata.version(),
and theWARPKIT_DEVescape hatch is dropped.- After editing
src/warpkit.cpp, force a rebuild with
uv sync --group dev --reinstall-package warpkit— editable
auto-rebuild on import is disabled (uv's ephemeral isolated build
env bakes a non-persistent ninja path intoCMakeCache.txt).
Fixed
- Pin
cmake<4andEigen 3.4.0in the build environment to dodge two
upstream regressions that crash the manylinux wheel build:
CMake 4.2.3's manylinux wheel and Eigen 3.4.1's
EIGEN_BUILD_CMAKE_PACKAGEinteraction.
Full diff: v1.1.0...v1.2.0
v1.1.0
v1.1.0
Added
- Each GitHub release now ships standalone PyInstaller bundles for every
wk-*CLI (wk-medic,wk-unwrap-phase,wk-compute-fieldmap,
wk-apply-warp,wk-convert-warp,wk-convert-fieldmap,
wk-compute-jacobian) onlinux-x86_64,linux-aarch64, and
macos-arm64, so users can run the pipeline without a Python install
(#18).
Full diff: v1.0.1...v1.1.0
v1.0.1
v1.0.1
Fixed
- CI:
py-publishwas downloading every artifact in the run (including
the Docker digest files fromdocker-build) intodist/, causing
twine to reject the digests asInvalidDistributionand aborting the
v1.0.0 PyPI upload. The download is now filtered to{wheel-*,sdist}.
Full diff: v1.0.0...v1.0.1
v1.0.0
v1.0.0
Tags now use the
vprefix. Previous tags (0.0.1,0.1.0,0.1.1)
were unprefixed.
Changed
- Julia runtime removed. Phase unwrapping is now a self-contained
C++17 port of ROMEO underinclude/romeo/. macOS wheels re-enabled. wk-*CLI suite replacesmedic+extract_field_from_maps:
wk-medic,wk-unwrap-phase,wk-compute-fieldmap,wk-apply-warp,
wk-convert-warp,wk-convert-fieldmap,wk-compute-jacobian.wk-medic:--out-prefixrequired; acquisition params via
--metadataor--TEs/--total-readout-time/--phase-encoding-direction
(mutually exclusive); all flags dash-form.--from=auto/--transform-type=autoremoved — input type must be
declared explicitly. Multi-file--transformrequires
--transform-type=field.- Dockerfile entrypoint:
medic→wk-medic.
Added
- Type stubs for the compiled extension (
warpkit_cpp.pyi+py.typed). - linux/aarch64 wheels (native ARM runners), Python 3.11–3.14 matrix.
- Multi-arch Docker images (
linux/amd64+linux/arm64).
Fixed
invert_displacement_fieldreturned(X, Y, Z, 5)instead of
(X, Y, Z, 3)(channel-axis padding bug).convert_warp5D shape check rejected the canonical ANTs/AFNI
single-warp layout(X, Y, Z, 1, 3).- Stale vector intent codes are cleared on map outputs so 1-channel
maps aren't misclassified as fields downstream. wk-unwrap-phasevalidates--magnitude/--metadatacounts and
--noiseframesup front;compute_field_mapsvalidates mask shape.
Tooling
- Python ≥ 3.11; lowercase snake_case enforced (incl. MR-physics symbols).
- uv + ruff + pyright + setuptools-scm; gitmoji
commit-msghook. - Tests 14 → 201; coverage 71% → 99% on scripts + utilities.
Full diff: 0.1.1...v1.0.0
0.1.1
https://pypi.org/project/warpkit/0.1.1/
- Fix for docker build release
0.1.0
https://pypi.org/project/warpkit/0.1.0/
- Initial Release