@@ -26,8 +26,8 @@ classifiers = [
2626 " Programming Language :: Python :: 3.11" ,
2727 " Programming Language :: Python :: 3.12" ,
2828 " Programming Language :: Python :: 3.13" ,
29+ " Programming Language :: Python :: 3.14" ,
2930]
30-
3131dynamic = [ " version" ]
3232dependencies = [
3333 " adjusttext" ,
@@ -46,7 +46,6 @@ dependencies = [
4646 " scipy<1.16" , # see https://github.com/statsmodels/statsmodels/issues/9584
4747 " session-info" ,
4848]
49-
5049optional-dependencies.dev = [
5150 " furo" ,
5251 " myst-nb" ,
@@ -67,7 +66,7 @@ optional-dependencies.docs = [
6766 " myst-nb>=1.1" ,
6867 " pandas" ,
6968 " scvi-tools>=1.3.1" ,
70- " setuptools" , # Until pybtex >0.23.0 releases: https://bitbucket.org/pybtex-devs/pybtex/issues/169/
69+ " setuptools" , # Until pybtex >0.23.0 releases: https://bitbucket.org/pybtex-devs/pybtex/issues/169/
7170 " sphinx>=8" ,
7271 " sphinx-autodoc-typehints" ,
7372 " sphinx-book-theme>=1" ,
@@ -99,23 +98,19 @@ optional-dependencies.test = [
9998 " pytest-split" ,
10099 " pytest-xdist>=3" ,
101100]
102-
103101urls.Documentation = " https://cellflow.readthedocs.io/"
104102urls.Home-page = " https://github.com/theislab/cellflow"
105103urls.Source = " https://github.com/theislab/cellflow"
106104
107- [tool .hatch .build .targets .wheel ]
108- packages = [ ' src/cellflow' ]
109-
110- [tool .hatch .version ]
111- source = " vcs"
112- fallback-version = " 0.1.0"
105+ [tool .hatch ]
106+ build.targets.wheel.packages = [ " src/cellflow" ]
107+ version.source = " vcs"
108+ version.fallback-version = " 0.1.0"
113109
114110[tool .ruff ]
115111line-length = 120
116112src = [ " src" ]
117113extend-include = [ " *.ipynb" ]
118-
119114format.docstring-code-format = true
120115lint.select = [
121116 " B" , # flake8-bugbear
@@ -162,35 +157,59 @@ lint.per-file-ignores."docs/*" = [ "I" ]
162157lint.per-file-ignores."tests/*" = [ " D" ]
163158lint.pydocstyle.convention = " numpy"
164159
165- [tool .pytest .ini_options ]
166- testpaths = [ " tests" ]
167- xfail_strict = true
168- addopts = [
160+ [tool .mypy ]
161+ mypy_path = " $MYPY_CONFIG_FILE_DIR/src"
162+ python_version = " 3.11"
163+ plugins = " numpy.typing.mypy_plugin"
164+ ignore_errors = false
165+ warn_redundant_casts = true
166+ warn_unused_configs = true
167+ warn_unused_ignores = true
168+ disallow_untyped_calls = false
169+ disallow_untyped_defs = true
170+ disallow_incomplete_defs = true
171+ disallow_any_generics = true
172+ strict_optional = true
173+ strict_equality = true
174+ warn_return_any = false
175+ warn_unreachable = false
176+ check_untyped_defs = true
177+ no_implicit_optional = true
178+ no_implicit_reexport = true
179+ no_warn_no_return = true
180+ show_error_codes = true
181+ show_column_numbers = true
182+ error_summary = true
183+ ignore_missing_imports = true
184+ disable_error_code = [ " assignment" , " comparison-overlap" , " no-untyped-def" , " override" ]
185+
186+ [tool .pytest ]
187+ ini_options.testpaths = [ " tests" ]
188+ ini_options.xfail_strict = true
189+ ini_options.addopts = [
169190 " --import-mode=importlib" , # allow using test files with same name
170191]
171- markers = [
192+ ini_options. markers = [
172193 " slow: marks tests as slow (deselect with '-m \" not slow\" ')" ,
173194 " internet: marks tests that require internet access (deselect with '-m \" not internet\" ')" ,
174195]
175196
176- [tool .coverage .run ]
177- branch = true
178- source = [ " src/" ]
179- concurrency = [ " multiprocessing" ]
180- parallel = " true"
181-
182- [tool .coverage .report ]
183- exclude_lines = [
184- ' \#.*pragma:\s*no.?cover' ,
197+ [tool .coverage ]
198+ run.branch = true
199+ run.concurrency = [ " multiprocessing" ]
200+ run.parallel = " true"
201+ run.source = [ " src/" ]
202+ report.exclude_lines = [
203+ " \\ #.*pragma:\\ s*no.?cover" ,
204+ " ^\\ s*raise AssertionError\\ b" ,
205+ " ^\\ s*raise NotImplementedError\\ b" ,
206+ " ^\\ s*return NotImplemented\\ b" ,
185207 " ^if __name__ == .__main__.:$" ,
186- ' ^\s*raise AssertionError\b' ,
187- ' ^\s*raise NotImplementedError\b' ,
188- ' ^\s*return NotImplemented\b' ,
189208]
190- precision = 2
191- show_missing = true
192- skip_empty = true
193- sort = " Miss"
209+ report. precision = 2
210+ report. show_missing = true
211+ report. skip_empty = true
212+ report. sort = " Miss"
194213
195214[tool .tox ]
196215legacy_tox_ini = """
@@ -286,38 +305,6 @@ commands = biber --tool --output_file={tox_root}{/}docs{/}references.bib --nolog
286305 {tox_root}{/}docs{/}references.bib
287306"""
288307
289- [tool .mypy ]
290- mypy_path = " $MYPY_CONFIG_FILE_DIR/src"
291- python_version = " 3.11"
292- plugins = " numpy.typing.mypy_plugin"
293-
294- ignore_errors = false
295-
296- warn_redundant_casts = true
297- warn_unused_configs = true
298- warn_unused_ignores = true
299-
300- disallow_untyped_calls = false
301- disallow_untyped_defs = true
302- disallow_incomplete_defs = true
303- disallow_any_generics = true
304-
305- strict_optional = true
306- strict_equality = true
307- warn_return_any = false
308- warn_unreachable = false
309- check_untyped_defs = true
310- no_implicit_optional = true
311- no_implicit_reexport = true
312- no_warn_no_return = true
313-
314- show_error_codes = true
315- show_column_numbers = true
316- error_summary = true
317- ignore_missing_imports = true
318-
319- disable_error_code = [ " assignment" , " comparison-overlap" , " no-untyped-def" , " override" ]
320-
321308[tool .cruft ]
322309skip = [
323310 " tests" ,
0 commit comments