Skip to content

Commit 20e8b1f

Browse files
authored
Merge branch 'master' into mnt/mark-tests-slow
2 parents 8a2071a + 0c2ad9f commit 20e8b1f

29 files changed

+1219
-779
lines changed

.circleci/config.yml

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,19 @@ jobs:
1010

1111
steps:
1212
- checkout
13-
- restore_cache:
14-
keys:
15-
- env-v6-{{ .Branch }}-
16-
- env-v6-master-
17-
- env-v6-
13+
- run:
14+
name: Ensure uv is present
15+
command: uv -V || curl -LsSf https://astral.sh/uv/install.sh | sh
1816
- run:
1917
name: Setup git-annex
2018
command: |
21-
sudo apt update && sudo apt-get install apt-transport-https ca-certificates -y && sudo update-ca-certificates
22-
if [[ ! -d /opt/circleci/git-annex.linux ]]; then
23-
cd /tmp
24-
wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
25-
tar xzf git-annex-standalone-amd64.tar.gz -C /opt/circleci/
26-
fi
19+
uv tool install git-annex
2720
git config --global user.name 'NiPy'
2821
git config --global user.email '[email protected]'
2922
- run:
3023
name: Setup DataLad
3124
command: |
32-
python3 -m pip install --no-cache-dir -U pip "setuptools >= 45.0" "setuptools_scm[toml] >= 6.2"
33-
python3 -m pip install --no-cache-dir -U datalad datalad-osf
34-
35-
- save_cache:
36-
key: env-v6-{{ .Branch }}-{{ .BuildNum }}
37-
paths:
38-
- /opt/circleci/git-annex.linux
39-
- /opt/circleci/.pyenv/versions
25+
uv tool install --with-executables-from=datalad-osf,datalad-next datalad
4026
4127
- restore_cache:
4228
keys:
@@ -46,9 +32,6 @@ jobs:
4632
- run:
4733
name: Install test data from GIN
4834
command: |
49-
export PATH=/opt/circleci/git-annex.linux:$PATH
50-
pyenv local 3
51-
eval "$(pyenv init --path)"
5235
mkdir -p /tmp/data
5336
cd /tmp/data
5437
datalad install -r https://gin.g-node.org/oesteban/nitransforms-tests
@@ -61,10 +44,10 @@ jobs:
6144

6245
- restore_cache:
6346
keys:
64-
- build-v1-{{ .Branch }}-{{ epoch }}
65-
- build-v1-{{ .Branch }}-
66-
- build-v1-master-
67-
- build-v1-
47+
- build-v2-{{ .Branch }}-{{ epoch }}
48+
- build-v2-{{ .Branch }}-
49+
- build-v2-master-
50+
- build-v2-
6851
paths:
6952
- /tmp/docker
7053
- run:
@@ -81,13 +64,13 @@ jobs:
8164
set -e
8265
if [[ "$success" = "0" ]]; then
8366
echo "Pulling from local registry"
84-
docker tag localhost:5000/ubuntu ubuntu:xenial-20200114
67+
docker tag localhost:5000/ubuntu ubuntu:jammy-20250730
8568
docker pull localhost:5000/nitransforms
8669
docker tag localhost:5000/nitransforms nitransforms:latest
8770
else
8871
echo "Pulling from Docker Hub"
89-
docker pull ubuntu:xenial-20200114
90-
docker tag ubuntu:xenial-20200114 localhost:5000/ubuntu
72+
docker pull ubuntu:jammy-20250730
73+
docker tag ubuntu:jammy-20250730 localhost:5000/ubuntu
9174
docker push localhost:5000/ubuntu
9275
fi
9376
- run:
@@ -99,7 +82,7 @@ jobs:
9982
-t nitransforms:latest \
10083
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
10184
--build-arg VCS_REF=`git rev-parse --short HEAD` \
102-
--build-arg VERSION=$( python3 -m setuptools_scm ) . \
85+
--build-arg VERSION=$( uv run --no-project -w setuptools_scm -m setuptools_scm ) . \
10386
&& e=0 && break || sleep 15
10487
done && [ "$e" -eq "0" ]
10588
docker tag nitransforms:latest localhost:5000/nitransforms
@@ -110,13 +93,13 @@ jobs:
11093
docker exec -it registry /bin/registry garbage-collect --delete-untagged \
11194
/etc/docker/registry/config.yml
11295
- save_cache:
113-
key: build-v1-{{ .Branch }}-{{ epoch }}
96+
key: build-v2-{{ .Branch }}-{{ epoch }}
11497
paths:
11598
- /tmp/docker
11699
- run:
117100
name: Check version packaged in Docker image
118101
command: |
119-
THISVERSION=${CIRCLE_TAG:-$(python3 -m setuptools_scm)}
102+
THISVERSION=${CIRCLE_TAG:-$( uv run --no-project -w setuptools_scm -m setuptools_scm )}
120103
INSTALLED_VERSION=$(\
121104
docker run -it --rm --entrypoint=python nitransforms \
122105
-c 'import nitransforms as nit; print(nit.__version__, end="")' )
@@ -136,21 +119,22 @@ jobs:
136119
name: Run unit tests
137120
no_output_timeout: 2h
138121
command: |
139-
mkdir -p /tmp/tests/{artifacts,summaries}
122+
mkdir -p /tmp/tests/{artifacts,summaries,coverage}
140123
docker run -u $( id -u ) -it --rm \
141124
-w /src/nitransforms -v $PWD:/src/nitransforms \
142125
-v /tmp/data/nitransforms-tests:/data -e TEST_DATA_HOME=/data \
143-
-e COVERAGE_FILE=/tmp/summaries/.pytest.coverage \
144-
-v /tmp/fslicense/license.txt:/opt/freesurfer/license.txt:ro \
126+
-e COVERAGE_FILE=/tmp/coverage/.pytest.coverage \
127+
-v /tmp/fslicense/license.txt:/usr/local/freesurfer/license.txt:ro \
145128
-v /tmp/tests:/tmp nitransforms:latest \
146129
pytest --junit-xml=/tmp/summaries/pytest.xml \
147-
--cov nitransforms --cov-report xml:/tmp/summaries/unittests.xml \
130+
--cov nitransforms --cov-report xml:/tmp/coverage/unittests.xml \
131+
-n auto \
148132
nitransforms/
149133
- run:
150134
name: Submit unit test coverage
151135
command: |
152136
cd /tmp/src/nitransforms
153-
python3 -m codecov --file /tmp/tests/summaries/unittests.xml \
137+
python3 -m codecov --file /tmp/tests/coverage/unittests.xml \
154138
--flags unittests -e CIRCLE_JOB
155139
- run:
156140
name: Clean up tests directory

.github/workflows/tox.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ jobs:
8383
DEPENDS: ${{ matrix.dependencies }}
8484

8585
steps:
86-
- uses: actions/checkout@v4
86+
- uses: actions/checkout@v5
8787
with:
8888
submodules: recursive
8989
fetch-depth: 0
@@ -166,7 +166,7 @@ jobs:
166166
check: ['style']
167167

168168
steps:
169-
- uses: actions/checkout@v4
169+
- uses: actions/checkout@v5
170170
- name: Install the latest version of uv
171171
uses: astral-sh/setup-uv@v6
172172
- name: Show tox config

CHANGES.rst

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,48 @@
1-
25.0.0 (TBD)
2-
============
3-
A new major release with critical updates.
4-
The new release includes a critical hotfix for 4D resamplings.
5-
The second major improvement is the inclusion of a first implementation of the X5 format (BIDS).
6-
The X5 implementation is currently restricted to reading/writing of linear transforms.
1+
25.0.1 (August 14, 2025)
2+
========================
3+
A patch release addressing a critical issue in the ``ImageGrid`` class relating coordinates,
4+
and bolstered the testing of ANTs' generated displacements fields by cross-comparing against
5+
``antsApplyTransformsToPoints`` in several new tests.
6+
7+
CHANGES
8+
-------
9+
* FIX: ``ImageGrid._coords`` was somehow overwritten + re-enable tests by @oesteban in https://github.com/nipy/nitransforms/pull/276
10+
* FIX: Revision of index and RAS coordinate grids generation by @oesteban in https://github.com/nipy/nitransforms/pull/271
11+
* ENH: Implement ITK densefields checks vs ``antsApplyTransformsToPoints`` by @oesteban in https://github.com/nipy/nitransforms/pull/277
12+
* ENH: Add unit test on dense fields (extracted from #266) by @oesteban in https://github.com/nipy/nitransforms/pull/274
13+
* RF: Move tests to better locations by @oesteban in https://github.com/nipy/nitransforms/pull/272
14+
* MNT: Minimal housekeeping of tests by @oesteban in https://github.com/nipy/nitransforms/pull/275
15+
* MNT: Fix coverage XML path in CircleCI by @oesteban in https://github.com/nipy/nitransforms/pull/265
16+
* MNT: Add test cases demonstrating ordering bug reading composite ITK's HDF5 files by @oesteban in https://github.com/nipy/nitransforms/pull/263
17+
* STY: Run ruff at the source root by @oesteban in https://github.com/nipy/nitransforms/pull/273
18+
19+
**Full Changelog**: https://github.com/nipy/nitransforms/compare/25.0.0...25.0.1
20+
21+
25.0.0 (July 22, 2025)
22+
======================
23+
A new major release introducing critical fixes and important new functionality.
24+
Most notably, it includes a hotfix for 4D resampling (also backported to 24.1.4) and adds **experimental support for the X5 format** (*BIDS*).
25+
The X5 support enables I/O for linear and nonlinear transforms and includes partial support for transformation chains—marking a first step
26+
toward full *BIDS* interoperability.
27+
This release also drops support for *Python* 3.9 and earlier, aligning with modern *Python* standards and paving the way for future improvements.
728

829
CHANGES
930
-------
31+
* FIX: BSpline mapping of individual points by @oesteban in https://github.com/nipy/nitransforms/pull/256
32+
* FIX: Remove implementation of an abstract class by @oesteban in https://github.com/nipy/nitransforms/pull/255
33+
* FIX: Add test for ``DenseFieldTransform`` handling of OOB points by @oesteban in https://github.com/nipy/nitransforms/pull/254
34+
* ENH: X5 read/write support of ``TransformChain`` by @oesteban in https://github.com/nipy/nitransforms/pull/253
1035
* ENH: Loading of X5 (linear) transforms by @oesteban in https://github.com/nipy/nitransforms/pull/243
1136
* ENH: Implement X5 representation and output to filesystem by @oesteban in https://github.com/nipy/nitransforms/pull/241
1237
* DOC: Fix references to ``os.PathLike`` by @oesteban in https://github.com/nipy/nitransforms/pull/242
38+
* MNT: Drop Python 3.9 by @oesteban in https://github.com/nipy/nitransforms/pull/259
1339
* MNT: Increase coverage by testing edge cases and adding docstrings by @oesteban in https://github.com/nipy/nitransforms/pull/248
1440
* MNT: Refactor io/lta to reduce one partial line by @oesteban in https://github.com/nipy/nitransforms/pull/246
1541
* MNT: Move flake8 config into ``pyproject.toml`` by @oesteban in https://github.com/nipy/nitransforms/pull/245
1642
* MNT: Configure coverage to omit tests by @oesteban in https://github.com/nipy/nitransforms/pull/244
1743

44+
**Full Changelog**: https://github.com/nipy/nitransforms/compare/24.1.4...25.0.0
45+
1846
24.1.4 (July 20, 2025)
1947
======================
2048
Hotfix release addressing an issue in dense displacements fields.

0 commit comments

Comments
 (0)