55[tox]
66requires =
77 tox>=4
8+ tox-uv
89envlist =
910 # No preinstallations
10- py3{9,10,11,12,13}-none
11- # Minimum Python
12- py39-{min,full}
13- # x86 support range
14- py3{9,10,11}-{full,pre}-{x86,x64}
15- py3{9,10,11}-pre-{x86,x64}
16- # x64-only range
17- py3{12,13}-{full,pre}-x64
18- # Special environment for numpy 2.0-dev testing
19- py313-dev-x64
11+ py3{9,10,11,12,13,13t}-none
12+ # Minimum Python with minimum deps
13+ py39-min
14+ # Run full and pre dependencies against all archs
15+ py3{9,10,11,12,13,13t}-{full,pre}-{x86,x64,arm64}
2016 install
2117 doctest
2218 style
@@ -31,12 +27,12 @@ python =
3127 3.11: py311
3228 3.12: py312
3329 3.13: py313
30+ 3.13t: py313t
3431
3532[gh-actions:env]
3633DEPENDS =
37- none: none, install
34+ none: none
3835 pre: pre
39- dev: dev
4036 full: full, install
4137 min: min
4238
@@ -48,14 +44,8 @@ ARCH =
4844[testenv]
4945description = Pytest with coverage
5046labels = test
51- install_command =
52- python -I -m pip install -v \
53- dev: --only-binary numpy,scipy,h5py \
54- !dev: --only-binary numpy,scipy,h5py,pillow,matplotlib \
55- pre,dev: --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
56- {opts} {packages}
5747pip_pre =
58- pre,dev : true
48+ pre: true
5949pass_env =
6050 # getpass.getuser() sources for Windows:
6151 LOGNAME
@@ -70,41 +60,45 @@ pass_env =
7060 NO_COLOR
7161 CLICOLOR
7262 CLICOLOR_FORCE
63+ # uv needs help in this case
64+ py313t-x86: UV_PYTHON
7365set_env =
74- py313: PYTHON_GIL =0
75- extras = test
66+ pre: PIP_EXTRA_INDEX_URL =https://pypi.anaconda.org/scientific-python-nightly-wheels/simple
67+ pre: UV_EXTRA_INDEX_URL =https://pypi.anaconda.org/scientific-python-nightly-wheels/simple
68+ py313t: PYTHONGIL ={env:PYTHONGIL:0}
69+ extras =
70+ test
71+
72+ # Simple, thanks Hugo and Paul
73+ !none: dicomfs
74+ !none: indexed_gzip
75+
76+ # Minimum dependencies
77+ min: minc2
78+ min: spm
79+ min: viewers
80+ min: zstd
81+
82+ # Matplotlib has wheels for everything except win32 (x86)
83+ {full,pre}-{x,arm}64: viewers
84+
85+ # Nightly, but not released cp313t wheels for: scipy
86+ # When released, remove the py3* line and add full to the pre line
87+ py3{9,10,11,12,13}-full-{x,arm}64: spm
88+ pre-{x,arm}64: spm
89+
90+ # No cp313t wheels for: h5py, pyzstd
91+ py3{9,10,11,12,13}-{full,pre}-{x,arm}64: minc2
92+ py3{9,10,11,12,13}-{full,pre}-{x,arm}64: zstd
93+
94+ # win32 (x86) wheels still exist for scipy+py39
95+ py39-full-x86: spm
96+
7697deps =
77- # General minimum dependencies: pin based on API usage
78- # matplotlib 3.5 requires packaging 20
79- min: packaging ==20
80- min: importlib_resources ==5.12; python_version < '3.12'
81- min: typing_extensions ==4.6; python_version < '3.13'
82- # NEP29/SPEC0 + 1yr: Test on minor release series within the last 3 years
83- # We're extending this to all optional dependencies
84- # This only affects the range that we test on; numpy is the only non-optional
85- # dependency, and will be the only one to affect pip environment resolution.
86- min: numpy ==1.22
87- min: h5py ==3.5
88- min: indexed_gzip ==1.6
89- min: matplotlib ==3.5
90- min: pillow ==8.4
91- min: pydicom ==2.3
92- min: pyzstd ==0.15.2
93- min: scipy ==1.8
94- # Numpy 2.0 is a major breaking release; we cannot put much effort into
95- # supporting until it's at least RC stable
96- dev: numpy >=2.1.dev0
97- # Scipy stopped producing win32 wheels at py310
98- py39-full-x86,x64,arm64: scipy >=1.8
99- # Matplotlib depends on scipy, so cannot be built for py310 on x86
100- py39-full-x86,x64,arm64: matplotlib >=3.5
101- # h5py stopped producing win32 wheels at py39
102- {full,pre}-{x64,arm64}: h5py >=3.5
103- full,pre,dev: pillow >=8.4
104- full,pre: indexed_gzip >=1.6
105- full,pre,dev: pyzstd >=0.15.2
106- full,pre: pydicom >=2.3
107- dev: pydicom @ git+https://github.com/pydicom/pydicom.git@main
98+ pre: pydicom @ git+https://github.com/pydicom/pydicom.git@main
99+
100+ uv_resolution =
101+ min: lowest-direct
108102
109103commands =
110104 pytest --doctest-modules --doctest-plus \
@@ -118,7 +112,6 @@ description = Install and verify import succeeds
118112labels = test
119113deps =
120114extras =
121- install_command = python -I -m pip install {opts} {packages}
122115commands =
123116 python -c " import nibabel; print(nibabel.__version__)"
124117
0 commit comments