Skip to content

Commit 99636c5

Browse files
shaneahmedmeastyJiaqi-Lvaacicpre-commit-ci[bot]
authored
πŸ”– Release 2.1.0 (#1064)
## TIAToolbox v2.1.0 (2026-05-19) ### ✨ Major Updates and Feature Improvements - Python β‰₯3.11 required - Supports up to 3.14 (#1035) - Drops support for 3.10 (#1034) - Zarr v3 Support (#904) - New storage APIs (zarr.Array, LocalStore, FsspecStore) - Removal of object arrays β†’ rectangular storage via pad_contours - Update `FsspecJsonWSIReader` to support Zarr v3 (#1049), thanks to @aacic ### ⚠️ API Changes - Python requirement updated β†’ >=3.11, \<3.15 ### 🐞 Bug Fixes and Other Changes - Fixed - Contour serialization and padding issues (Zarr compatibility) (#904) - Invalid Geometry in JSON Outputs (#1057) - Fix typographical errors in `pre-trained` documentation (#1043, #1062) ### πŸ› οΈ Development-Related Changes - Use `uv` to set up CI environments, reduces installation time - Update instructions for `uv` install - Use `max_image` for `remove_small_objects` in `scikit-image` usage (#1048) - Improve `mypy` workflow and typing errors (#1045) --------- Signed-off-by: Shan E Ahmed Raza <13048456+shaneahmed@users.noreply.github.com> Co-authored-by: measty <20169086+measty@users.noreply.github.com> Co-authored-by: Jiaqi-Lv <60471431+Jiaqi-Lv@users.noreply.github.com> Co-authored-by: Aleksandar Acic <32873451+aacic@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: adamshephard <39619155+adamshephard@users.noreply.github.com> Co-authored-by: Aakash Madhav Rao <axr1154@student.bham.ac.uk> Co-authored-by: Yijie Zhu <120978607+YijieZhu15@users.noreply.github.com> Co-authored-by: gozdeg <gozdegunesli@gmail.com> Co-authored-by: Abdol A <u2271662@live.warwick.ac.uk> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
1 parent 26f099f commit 99636c5

73 files changed

Lines changed: 1397 additions & 596 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# This workflow will build a conda environment to check that it resolves in a reasonable time
1+
# This workflow will build a conda environment to check that it resolves
22

33
name: Solve Conda Environment
44

@@ -7,48 +7,70 @@ permissions:
77

88
on:
99
push:
10-
paths: [ "requirements/requirements*.yml", "conda-env-create.yml", "requirement*.txt"]
10+
paths:
11+
- "requirements/requirements*.txt"
12+
- "requirements/generate_conda_env.py"
13+
- ".github/workflows/conda-env-create.yml"
1114
pull_request:
12-
paths: [ "requirements/requirements*.yml", "conda-env-create.yml", "requirement*.txt"]
13-
schedule: # Run on the 1st of every month at midnight
14-
- cron: "0 0 1 * *"
15+
paths:
16+
- "requirements/requirements*.txt"
17+
- "requirements/generate_conda_env.py"
18+
- ".github/workflows/conda-env-create.yml"
1519

1620
jobs:
1721
conda_solve:
1822
strategy:
19-
fail-fast: true
23+
fail-fast: false
2024
matrix:
21-
os: [ubuntu-latest, windows-latest]
22-
kind: ["dev", "prod"]
23-
include:
24-
- os: ubuntu-latest
25-
kind: prod
26-
requirements: requirements/requirements.conda.yml
27-
- os: ubuntu-latest
28-
kind: dev
29-
requirements: requirements/requirements.dev.conda.yml
30-
- os: windows-latest
31-
kind: prod
32-
requirements: requirements/requirements.win64.conda.yml
33-
- os: windows-latest
34-
kind: dev
35-
requirements: requirements/requirements.win64.dev.conda.yml
25+
os: [ubuntu-latest, windows-latest, macos-latest]
26+
python-version: ["3.11", "3.12", "3.13", "3.14"]
27+
3628
runs-on: ${{ matrix.os }}
37-
timeout-minutes: 20
29+
timeout-minutes: 30
30+
3831
steps:
3932
- uses: actions/checkout@v4
40-
- name: Copy requirements files
41-
shell: bash
42-
run: |
43-
cp ./requirements/requirements*.txt /tmp/
44-
mkdir /tmp/docs/
45-
cp ./docs/requirements*.txt /tmp/docs/
33+
34+
# βœ… Generate environment
35+
- name: Generate conda environment
36+
env:
37+
PYTHON_VERSION: ${{ matrix.python-version }}
38+
run: python requirements/generate_conda_env.py
39+
40+
# βœ… Install via micromamba
4641
- uses: mamba-org/setup-micromamba@v1
4742
with:
4843
environment-name: tiatoolbox
49-
environment-file: ${{ matrix.requirements }}
50-
- shell: bash -l {0}
44+
environment-file: requirements/requirements.conda.generated.yml
45+
46+
# βœ… Validate environment
47+
- name: Test environment
48+
shell: bash -l {0}
5149
run: |
52-
micromamba info
5350
micromamba list
54-
python -c "import torch, numpy; print(torch.__version__, numpy.__version__)"
51+
52+
python - <<EOF
53+
import sys
54+
print("Python:", sys.version)
55+
56+
import numpy, pandas
57+
print("Core OK")
58+
59+
try:
60+
import torch
61+
print("Torch OK")
62+
except Exception as e:
63+
print("Torch issue:", e)
64+
65+
try:
66+
import cv2
67+
print("OpenCV OK")
68+
except Exception as e:
69+
print("OpenCV issue:", e)
70+
71+
try:
72+
import openslide
73+
print("OpenSlide OK")
74+
except Exception as e:
75+
print("OpenSlide issue:", e)
76+
EOF

β€Ž.github/workflows/docker-publish.ymlβ€Ž

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ env:
66
REGISTRY: ghcr.io
77
IMAGE_NAME: TissueImageAnalytics/tiatoolbox
88
image: ghcr.io/tissueimageanalytics/tiatoolbox
9-
TOOLBOX_VER: 2.0.1
9+
TOOLBOX_VER: 2.1.0
1010

1111
jobs:
1212
build-and-push-image:
@@ -15,10 +15,6 @@ jobs:
1515
fail-fast: true
1616
matrix:
1717
include:
18-
- dockerfile: ./docker/3.10/Debian/Dockerfile
19-
mtag: py3.10-debian
20-
- dockerfile: ./docker/3.10/Ubuntu/Dockerfile
21-
mtag: py3.10-ubuntu
2218
- dockerfile: ./docker/3.11/Debian/Dockerfile
2319
mtag: py3.11-debian
2420
- dockerfile: ./docker/3.11/Ubuntu/Dockerfile

β€Ž.github/workflows/mypy-type-check.ymlβ€Ž

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818

1919
strategy:
2020
matrix:
21-
python-version: ["3.10", "3.11", "3.12", "3.13"]
21+
python-version: ["3.11", "3.12", "3.13", "3.14"]
2222

2323
steps:
2424

@@ -35,12 +35,19 @@ jobs:
3535
sudo apt update
3636
sudo apt-get install -y libopenslide-dev openslide-tools libopenjp2-7 libopenjp2-tools
3737
python -m pip install --upgrade pip
38-
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
39-
pip install -r requirements/requirements_dev.txt
38+
pip install uv
39+
uv pip install --system torch torchvision --index-url https://download.pytorch.org/whl/cpu
40+
uv pip install --system -r requirements/requirements_dev.txt
41+
42+
- name: Debug typing environment
43+
run: |
44+
python --version
45+
mypy --version
46+
pip freeze | grep -E '^(mypy|types-)'
4047
4148
- name: Perform type checking
4249
run: |
43-
mypy --install-types --non-interactive --follow-imports=skip \
50+
mypy --install-types --non-interactive --follow-imports=skip --ignore-missing-imports \
4451
tiatoolbox/__init__.py \
4552
tiatoolbox/__main__.py \
4653
tiatoolbox/type_hints.py \

β€Ž.github/workflows/pip-install.ymlβ€Ž

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
strategy:
3232
fail-fast: false
3333
matrix:
34-
python-version: ["3.10", "3.11", "3.12", "3.13"]
34+
python-version: ["3.11", "3.12", "3.13", "3.14"]
3535
os: [ubuntu-24.04, windows-latest, macos-latest]
3636

3737
# Force UTF-8 everywhere (Windows is the one that really needs it)
@@ -42,6 +42,8 @@ jobs:
4242
steps:
4343
- name: Checkout
4444
uses: actions/checkout@v4
45+
with:
46+
fetch-depth: 0
4547

4648
- name: Install Miniconda
4749
uses: conda-incubator/setup-miniconda@v3
@@ -58,7 +60,7 @@ jobs:
5860
shell: bash
5961
run: |
6062
source $CONDA/etc/profile.d/conda.sh
61-
conda create -y -n test-env python=${{ matrix.python-version }}
63+
conda create -y -n test-env python=${{ matrix.python-version }} pip
6264
conda activate test-env
6365
conda install -y openjpeg sqlite
6466
python -m pip install --upgrade pip setuptools wheel
@@ -70,7 +72,7 @@ jobs:
7072
if: runner.os == 'Windows'
7173
shell: pwsh
7274
run: |
73-
conda create -y -n test-env python=${{ matrix.python-version }}
75+
conda create -y -n test-env python=${{ matrix.python-version }} pip
7476
conda activate test-env
7577
conda install -y openjpeg sqlite
7678
python -m pip install --upgrade pip setuptools wheel
@@ -122,14 +124,16 @@ jobs:
122124
run: |
123125
source $CONDA/etc/profile.d/conda.sh
124126
conda activate test-env
125-
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
127+
pip install uv
128+
uv pip install --system torch torchvision --index-url https://download.pytorch.org/whl/cpu
126129
127130
- name: Install CPU-only PyTorch (Windows)
128131
if: runner.os == 'Windows'
129132
shell: pwsh
130133
run: |
131134
conda activate test-env
132-
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
135+
pip install uv
136+
uv pip install --system torch torchvision --index-url https://download.pytorch.org/whl/cpu
133137
134138
# -------------------------------
135139
# (Windows only) make console UTF-8 (extra safety)
@@ -151,14 +155,22 @@ jobs:
151155
run: |
152156
source $CONDA/etc/profile.d/conda.sh
153157
conda activate test-env
154-
pip install git+https://github.com/TissueImageAnalytics/tiatoolbox@${GITHUB_SHA}
158+
pip install uv
159+
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
160+
REF="${{ github.event.pull_request.head.sha }}"
161+
else
162+
REF="${GITHUB_SHA}"
163+
fi
164+
echo "Installing tiatoolbox at ref: $REF"
165+
uv pip install --system git+https://github.com/TissueImageAnalytics/tiatoolbox@$REF
155166
156167
- name: Install tiatoolbox (Windows)
157168
if: runner.os == 'Windows'
158169
shell: pwsh
159170
run: |
160171
conda activate test-env
161-
pip install git+https://github.com/TissueImageAnalytics/tiatoolbox@$env:GITHUB_SHA
172+
pip install uv
173+
uv pip install --system git+https://github.com/TissueImageAnalytics/tiatoolbox@$env:GITHUB_SHA
162174
163175
# -------------------------------
164176
# Test Imports

β€Ž.github/workflows/python-package.ymlβ€Ž

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
strategy:
2121
fail-fast: true
2222
matrix:
23-
python-version: ["3.10", "3.11", "3.12", "3.13"]
23+
python-version: ["3.11", "3.12", "3.13", "3.14"]
2424

2525
steps:
2626
- uses: actions/checkout@v4
@@ -33,9 +33,10 @@ jobs:
3333
sudo apt update
3434
sudo apt-get install -y libopenjp2-7 libopenjp2-tools
3535
python -m pip install --upgrade pip
36-
python -m pip install ruff==0.15.4 pytest pytest-cov pytest-runner
37-
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
38-
pip install -r requirements/requirements.txt
36+
python -m pip install ruff==0.15.12 pytest pytest-cov pytest-runner
37+
pip install uv
38+
uv pip install --system torch torchvision --index-url https://download.pytorch.org/whl/cpu
39+
uv pip install --system -r requirements/requirements.txt
3940
- name: Cache tiatoolbox static assets
4041
uses: actions/cache@v4
4142
with:
@@ -101,19 +102,20 @@ jobs:
101102
steps:
102103
- uses: actions/checkout@v4
103104

104-
- name: Set up Python 3.10
105+
- name: Set up Python 3.11
105106
uses: actions/setup-python@v4
106107
with:
107-
python-version: '3.10'
108+
python-version: '3.11'
108109
cache: 'pip'
109110

110111
- name: Install dependencies
111112
run: |
112113
sudo apt-get install -y libopenslide-dev libopenjp2-7
113114
python -m pip install --upgrade pip
114-
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
115-
pip install -r requirements/requirements.txt
116-
pip install build
115+
pip install uv
116+
uv pip install --system torch torchvision --index-url https://download.pytorch.org/whl/cpu
117+
uv pip install --system -r requirements/requirements.txt
118+
uv pip install --system build
117119
- name: Build package
118120
run: python -m build
119121

β€Ž.pre-commit-config.yamlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ repos:
6060
- id: rst-inline-touching-normal # Detect mistake of inline code touching normal text in rst.
6161
- repo: https://github.com/astral-sh/ruff-pre-commit
6262
# Ruff version.
63-
rev: v0.15.4
63+
rev: v0.15.12
6464
hooks:
6565
- id: ruff
6666
args: [--fix, --exit-non-zero-on-fix]

β€ŽAUTHORS.mdβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- Abishekraj Vinayagar Gnanasambandam \<@AbishekRajVG>
2323
- Wenqi Lu \<@wenqi006>
2424
- Saad Bashir \<@rajasaad>
25+
- Aakash Madhav Rao \<@mraoaakash>
2526
- Behnaz Elhaminia \<@behnazelhaminia>
2627

2728
## Contributors

β€ŽCITATION.cffβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ authors:
4444
given-names: "Shan E Ahmed"
4545
orcid: "https://orcid.org/0000-0002-1097-1738"
4646
title: "TIAToolbox as an end-to-end library for advanced tissue image analytics"
47-
version: 2.0.1 # TIAToolbox version
47+
version: 2.1.0 # TIAToolbox version
4848
doi: 10.5281/zenodo.5802442
4949
date-released: 2022-10-20
5050
url: "https://github.com/TissueImageAnalytics/tiatoolbox"

β€ŽCONTRIBUTING.rstβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Before you submit a pull request, check that it meets these guidelines:
9898

9999
1. The pull request should include tests.
100100
2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the pull request description.
101-
3. The pull request should work for Python 3.10, 3.11, 3.12 and 3.13, and for PyPy. Check https://github.com/TissueImageAnalytics/tiatoolbox/actions/workflows/python-package.yml and make sure that the tests pass for all supported Python versions.
101+
3. The pull request should work for all Python versions supported by the project (including CPython and PyPy). Check https://github.com/TissueImageAnalytics/tiatoolbox/actions/workflows/python-package.yml and make sure that the tests pass for all supported Python versions.
102102

103103
Tips
104104
----

β€ŽHISTORY.mdβ€Ž

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# History
22

3+
## TIAToolbox v2.1.0 (2026-05-19)
4+
5+
### ✨ Major Updates and Feature Improvements
6+
7+
- Python β‰₯3.11 required
8+
- Supports up to 3.14 (#1035)
9+
- Drops support for 3.10 (#1034)
10+
- Zarr v3 Support (#904)
11+
- New storage APIs (zarr.Array, LocalStore, FsspecStore)
12+
- Removal of object arrays β†’ rectangular storage via pad_contours
13+
- Update `FsspecJsonWSIReader` to support Zarr v3 (#1049), thanks to @aacic
14+
15+
### ⚠️ API Changes
16+
17+
- Python requirement updated β†’ >=3.11, \<3.15
18+
19+
### 🐞 Bug Fixes and Other Changes
20+
21+
- Fixed
22+
- Contour serialization and padding issues (Zarr compatibility) (#904)
23+
- Invalid Geometry in JSON Outputs (#1057)
24+
- Fix typographical errors in `pre-trained` documentation (#1043, #1062)
25+
26+
### πŸ› οΈ Development-Related Changes
27+
28+
- Use `uv` to set up CI environments, reduces installation time
29+
- Update instructions for `uv` install
30+
- Use `max_image` for `remove_small_objects` in `scikit-image` usage (#1048)
31+
- Improve `mypy` workflow and typing errors (#1045)
32+
33+
______________________________________________________________________
34+
335
## TIAToolbox v2.0.1 (2026-03-16)
436

537
### Bug Fixes and Other Changes

0 commit comments

Comments
Β (0)