11[build-system ]
22build-backend = " hatchling.build"
3- requires = [" hatchling" , " uv-dynamic-versioning>=0.7 .0" ]
3+ requires = [" hatchling" , " uv-dynamic-versioning>=0.14 .0" ]
44
55[project ]
66name = " iohub"
77description = " N-dimensional bioimaging data I/O with OME metadata in Python"
88authors = [
9- {name = " CZ Biohub and iohub contributors" , email = " iohub@czbiohub.org" },
9+ {name = " Biohub and iohub contributors" , email = " iohub@czbiohub.org" },
1010]
1111license = {file = " LICENSE" }
1212readme = " README.md"
13- requires-python = " >=3.11 "
13+ requires-python = " >=3.12 "
1414classifiers = [
1515 " Development Status :: 3 - Alpha" ,
1616 " Intended Audience :: Science/Research" ,
1717 " License :: OSI Approved :: BSD License" ,
1818 " Programming Language :: Python :: 3 :: Only" ,
19- " Programming Language :: Python :: 3.11" ,
2019 " Programming Language :: Python :: 3.12" ,
2120 " Programming Language :: Python :: 3.13" ,
21+ " Programming Language :: Python :: 3.14" ,
2222 " Topic :: Scientific/Engineering" ,
2323 " Topic :: Scientific/Engineering :: Image Processing" ,
2424 " Operating System :: Microsoft :: Windows" ,
2525 " Operating System :: POSIX :: Linux" ,
2626 " Operating System :: MacOS :: MacOS X" ,
2727]
2828dependencies = [
29- " pandas>=1.5. 2" ,
29+ " pandas>=2" ,
3030 " pydantic>=2.8.2" ,
3131 " pydantic_extra_types>=2.9.0" ,
3232 " tifffile>=2025.5.21" ,
33- " natsort>=7.1.1 " ,
33+ " natsort>=8.4.0 " ,
3434 " ndtiff>=2.2.1" ,
35- " zarr>=3.0.8 " ,
35+ " zarr>=3.1.6 " ,
3636 " rich" ,
3737 " tqdm" ,
3838 " pillow>=9.4.0" ,
3939 " blosc2" ,
4040 " xarray>=2024.1.1" ,
4141 " dask[array]" ,
42+ " zarrs>=0.2.3" ,
4243]
4344dynamic = [" version" ]
4445
@@ -52,13 +53,18 @@ Source = "https://github.com/czbiohub-sf/iohub"
5253tensorstore = [
5354 " tensorstore>=0.1.64" ,
5455]
56+
57+ [project .entry-points ."iohub .zarr-implementations" ]
58+ zarr = " iohub.core.implementations.zarr_python:ZarrPythonImplementation"
59+ tensorstore = " iohub.core.implementations.tensorstore:TensorStoreImplementation"
60+
5561[dependency-groups ]
5662test = [
5763 " iohub[tensorstore]" ,
5864 " ngff-zarr[validate]" ,
59- " pytest>=5 .0.0 " ,
65+ " pytest>=9 .0.2 " ,
6066 " pytest-cov" ,
61- " hypothesis>=6.61 .0" ,
67+ " hypothesis>=6.151 .0" ,
6268 " requests>=2.22.0" ,
6369 " wget>=3.2" ,
6470 " ome-zarr>=0.12.0" ,
@@ -67,7 +73,7 @@ acquire-zarr = [
6773 " acquire-zarr" ,
6874]
6975doc = [
70- " zensical>=0.0.11 " ,
76+ " zensical>=0.0.29 " ,
7177 " mkdocstrings-python>=2.0.2" ,
7278 " mkdocs-click>=0.8" ,
7379]
@@ -93,15 +99,58 @@ style = "pep440"
9399bump = true
94100fallback-version = " 0.0.0"
95101
102+ [tool .pytest ]
103+ minversion =" 9.0"
104+ strict = true
105+ testpaths = [ " tests" ]
106+ addopts = [
107+ " -ra" ,
108+ " --import-mode=importlib" ,
109+ ]
110+
96111[tool .ruff ]
97112line-length = 120
98-
99- [tool .ruff .format ]
100- quote-style = " double"
101- indent-style = " space"
102- docstring-code-format = true
103- docstring-code-line-length = " dynamic"
104-
105- [tool .ruff .lint ]
106- select = [" E" , " F" , " W" , " I" ]
107- ignore = [" E203" , " E731" ]
113+ src = [ " src" ]
114+ extend-include = [ " *.ipynb" ]
115+ format.quote-style = " double"
116+ format.indent-style = " space"
117+ format.docstring-code-format = true
118+ format.docstring-code-line-length = " dynamic"
119+ lint.select = [
120+ " B" , # flake8-bugbear
121+ " BLE" , # flake8-blind-except
122+ " C4" , # flake8-comprehensions
123+ " D" , # pydocstyle
124+ " E" , # pycodestyle errors
125+ " F" , # pyflakes
126+ " I" , # isort
127+ " NPY" , # NumPy-specific rules
128+ " PERF" , # Perflint
129+ " PT" , # pytest
130+ " PTH" , # pathlib
131+ " RUF" , # Ruff-specific rules
132+ " TID" , # flake8-tidy-imports
133+ " UP" , # pyupgrade
134+ " W" , # pycodestyle warnings
135+ ]
136+ lint.ignore = [
137+ " B008" , # function calls in argument defaults are fine when result is immutable
138+ " D100" , # Missing docstring in public module
139+ " D101" , # Missing docstring in public class
140+ " D102" , # Missing docstring in public method
141+ " D103" , # Missing docstring in public function
142+ " D104" , # Missing docstring in public package
143+ " D105" , # __magic__ methods are often self-explanatory
144+ " D107" , # Missing docstring in __init__
145+ " D203" , # no blank line before class docstring (conflicts with D211)
146+ " D213" , # docstrings start immediately after opening triple quote (conflicts with D212)
147+ " D400" , # first line should end with period (doesn't work with single-line docstrings)
148+ " D401" , # first line in imperative mood
149+ " E203" , # slice whitespace (handled by formatter)
150+ " E501" , # line too long (formatter handles code; long comments are acceptable)
151+ " E731" , # lambda assignments are convenient
152+ ]
153+ lint.per-file-ignores."*/__init__.py" = [ " F401" ]
154+ lint.per-file-ignores."docs/*" = [ " D" , " I" , " NPY002" , " PTH" , " PERF401" , " BLE001" ]
155+ lint.per-file-ignores."tests/*" = [ " D" ]
156+ lint.pydocstyle.convention = " numpy"
0 commit comments