Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
140 lines (128 loc) · 5.22 KB
/
Copy pathpyproject.toml
File metadata and controls
140 lines (128 loc) · 5.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "tdfpy"
dynamic = ["version"]
description = "Python package for parsing Bruker timsTOF data with centroiding and noise filtering"
authors = [
{name = "Patrick T. Garrett", email = "pgarrett@scripps.edu"},
{name = "John R. Yates III", email = "jyates@scripps.edu"},
]
maintainers = [
{name = "Patrick T. Garrett", email = "pgarrett@scripps.edu"},
]
dependencies = [
# 1.26 is the oldest numpy with a CPython 3.12 wheel, and the full suite passes on
# it unchanged: nothing in src uses a numpy 2 only API. Python 3.13 and 3.14 have no
# numpy 1.x wheel at all, so this floor only ever applies on 3.12.
"numpy>=1.26",
# 2.1.2 rather than 2.1.1, which is not a typo. 2.1.1 declares numpy>=1.26.0 with no
# upper bound while shipping the numpy 1.x ABI, so a resolver may legally pair it with
# numpy 2 and importing pandas then raises
# `ValueError: numpy.dtype size changed, may indicate binary incompatibility`.
# 2.1.2 is the first release that caps numpy<2 itself. 2.0.x has no CPython 3.12
# wheel and its source distribution does not build on 3.12.
"pandas>=2.1.2",
# Frames in analysis.tdf_bin are zstd-compressed. Python 3.14 ships zstd in
# the standard library (PEP 784), so the wheel only needs this on older
# interpreters. A 3.14 build made without libzstd will raise an ImportError
# naming this package.
# 0.22.0 is the oldest release with a CPython 3.12 wheel. 0.20.0 and 0.21.0 do pass
# the suite, but only after compiling from source, which would make installing tdfpy
# depend on the user having a C toolchain.
"zstandard>=0.22; python_version < '3.14'",
# Required so the centroiding stack runs JIT-compiled, which its documented
# performance assumes. The code does not need it to import: every kernel has
# a pure-Python fallback, used if numba cannot be imported.
# 0.59.0 is the oldest release with a CPython 3.12 wheel. It caps numpy<1.27 itself,
# so no resolution can pair it with a numpy it cannot use.
"numba>=0.59",
]
classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Development Status :: 5 - Production/Stable",
"Operating System :: OS Independent",
"Topic :: Scientific/Engineering :: Bio-Informatics",
"Topic :: Scientific/Engineering :: Chemistry",
"Intended Audience :: Science/Research",
"Typing :: Typed",
]
readme = "README.md"
requires-python = ">=3.12"
license = "MIT"
license-files = ["LICENSE"]
keywords = ["bruker", "timstof", "mass-spectrometry", "proteomics", "tdf", "dia", "dda", "pasef", "ion-mobility"]
[project.urls]
Homepage = "https://github.com/tacular-omics/tdfpy"
Documentation = "https://tacular-omics.github.io/tdfpy/"
Repository = "https://github.com/tacular-omics/tdfpy"
Issues = "https://github.com/tacular-omics/tdfpy/issues"
Changelog = "https://github.com/tacular-omics/tdfpy/blob/main/CHANGELOG.md"
DOI = "https://doi.org/10.5281/zenodo.19100532"
[project.optional-dependencies]
# 3.7.3 is the oldest matplotlib with a CPython 3.12 wheel and, separately, the oldest
# that caps numpy<2 itself. Both matter: 3.7.0 through 3.7.2 declare no numpy bound at
# all, so a resolver could pair them with numpy 2, where matplotlib fails at import with
# `ImportError: numpy.core.multiarray failed to import`.
viz = ["matplotlib>=3.7.3"]
# pydantic is imported directly by tdfpy.mcp, so it is declared here rather than relied
# on through the MCP SDK. mcp 2.1 requires pydantic 2.12, which makes 2.12 the lowest
# floor any resolver can actually reach.
mcp = ["mcp>=2.1,<3", "pydantic>=2.12,<3"]
[project.scripts]
tdfpy = "tdfpy.__main__:main"
tdfpy-mcp = "tdfpy.mcp:main"
[tool.hatch.version]
path = "src/tdfpy/__init__.py"
[tool.hatch.build.targets.sdist]
# Source and paperwork only. The tests need ~80 MB of example timsTOF .d folders,
# so they run from the repo, not the sdist.
only-include = [
"src/tdfpy",
"README.md",
"CHANGELOG.md",
"CITATION.cff",
"LICENSE",
"pyproject.toml",
]
[tool.hatch.build.targets.wheel]
packages = ["src/tdfpy"]
[dependency-groups]
docs = [
"mkdocs-material>=9.0",
"mkdocstrings[python]>=0.25",
]
dev = [
"pytest>=9",
"pytest-examples>=0.0.14",
"ty>=0.0.83",
"ruff>=0.16.8",
"pyupgrade>=3.21.0",
"pytest-cov>=6.0.0",
# Kept at the viz extra's floor, not above it: --resolution lowest-direct takes the
# highest of two direct requirements, so a dev pin above the runtime floor would
# shadow it and the lowest CI job would never test the floor we declare.
"matplotlib>=3.7.3",
"hypothesis>=6.100",
]
[tool.pytest.ini_options]
markers = ["slow: slower than ~2 s; skipped unless --run-slow or RUN_SLOW=1 (CI runs them)"]
[tool.ruff]
target-version = "py312"
line-length = 160
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort
"B", # flake8-bugbear
"UP", # pyupgrade
]
[tool.ruff.lint.per-file-ignores]
# HEADER holds Markdown table rows, which cannot be wrapped.
"scripts/build_llms_full.py" = ["E501"]