tacular-omics 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ # Copilot instructions
2
+
3
+ The canonical guide for AI agents in this repo is [`CLAUDE.md`](../CLAUDE.md). Read it
4
+ first. The rules that matter most:
5
+
6
+ 1. This is a meta-package: no functionality beyond `versions()`. Do not add features;
7
+ they belong in a member package.
8
+ 2. Every member dependency has a floor and a cap (`peptacular>=4.2,<5`,
9
+ `mzmlpy>=0.9.3,<0.10`). Keep `PACKAGES` in `src/tacular_omics/__init__.py` in step
10
+ with `[project] dependencies`.
11
+ 3. Before pushing, run what CI runs:
12
+ `uv run ruff check src tests scripts/smoke.py && uv run ruff format --check src tests scripts/smoke.py && uv run ty check src && uv run pytest tests`.
13
+ 4. Never bump the version, tag or publish: only the tacular-omics overseer releases.
@@ -0,0 +1,16 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: uv
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ groups:
8
+ python-dependencies:
9
+ patterns: ["*"]
10
+ - package-ecosystem: github-actions
11
+ directory: /
12
+ schedule:
13
+ interval: monthly
14
+ groups:
15
+ github-actions:
16
+ patterns: ["*"]
@@ -0,0 +1,85 @@
1
+ # Standard tacular-omics CI (canonical copy: tacular-omics workspace templates/),
2
+ # adapted for the meta-package: the tests are install smoke tests, and the extra
3
+ # jobs install the built wheel into a fresh environment from PyPI, like a user would.
4
+ name: CI
5
+
6
+ on:
7
+ push:
8
+ branches: [main]
9
+ pull_request:
10
+ workflow_dispatch:
11
+ schedule:
12
+ # Weekly: catches a member release inside the caps that breaks the set.
13
+ - cron: "0 6 * * 1"
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ concurrency:
19
+ group: ci-${{ github.ref }}
20
+ cancel-in-progress: true
21
+
22
+ jobs:
23
+ lint:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
27
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
28
+ - run: uv sync --locked --all-extras --all-groups
29
+ - run: uv run ruff check src tests scripts/smoke.py
30
+ - run: uv run ruff format --check src tests scripts/smoke.py
31
+ - run: uv run ty check src
32
+ - run: python scripts/release_version.py check
33
+
34
+ test:
35
+ strategy:
36
+ fail-fast: false
37
+ matrix:
38
+ os: [ubuntu-latest]
39
+ python: ["3.12", "3.13", "3.14"]
40
+ include:
41
+ - { os: macos-latest, python: "3.13" }
42
+ - { os: windows-latest, python: "3.13" }
43
+ runs-on: ${{ matrix.os }}
44
+ steps:
45
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
47
+ with:
48
+ python-version: ${{ matrix.python }}
49
+ - run: uv sync --locked --all-extras --all-groups
50
+ - run: uv run pytest tests
51
+
52
+ # The floors are the tested releases: install exactly those.
53
+ lowest:
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
57
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
58
+ with:
59
+ python-version: "3.12"
60
+ - run: uv sync --resolution lowest-direct --all-groups
61
+ - run: uv run pytest tests
62
+
63
+ # Build the wheel, install it into a fresh environment from PyPI (no lock file,
64
+ # newest versions inside the caps) and import every member.
65
+ wheel:
66
+ strategy:
67
+ fail-fast: false
68
+ matrix:
69
+ os: [ubuntu-latest, macos-latest, windows-latest]
70
+ extra: ["", "[all]"]
71
+ runs-on: ${{ matrix.os }}
72
+ steps:
73
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
74
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
75
+ with:
76
+ python-version: "3.13"
77
+ - run: uv build
78
+ - run: python scripts/release_version.py check --dist dist
79
+ - name: Smoke test the built wheel outside the checkout
80
+ shell: bash
81
+ working-directory: ${{ runner.temp }}
82
+ run: |
83
+ whl=$(ls "${{ github.workspace }}"/dist/*.whl)
84
+ uv run --isolated --no-project --with "${whl}${{ matrix.extra }}" python "${{ github.workspace }}/scripts/smoke.py"
85
+ uv run --isolated --no-project --with "${whl}${{ matrix.extra }}" python -m tacular_omics
@@ -0,0 +1,46 @@
1
+ # Standard tacular-omics release. Canonical copy: tacular-omics workspace templates/.
2
+ # Runs when a GitHub release is published. Publishes with PyPI trusted publishing:
3
+ # the PyPI project must list this repo, workflow "publish.yml", environment "pypi".
4
+ name: Publish
5
+
6
+ on:
7
+ release:
8
+ types: [published]
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ build:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
18
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
19
+ - name: Release tag, version and changelog agree
20
+ run: python scripts/release_version.py check --tag "${{ github.event.release.tag_name }}"
21
+ - run: uv sync --locked --all-extras --all-groups
22
+ - run: uv run ruff check src tests
23
+ - run: uv run ty check src
24
+ - run: uv run pytest tests
25
+ - run: uv build
26
+ - name: Smoke test the built wheel outside the checkout
27
+ working-directory: ${{ runner.temp }}
28
+ run: uv run --isolated --no-project --with "$(ls ${{ github.workspace }}/dist/*.whl)" python "${{ github.workspace }}/scripts/smoke.py"
29
+ - run: python scripts/release_version.py check --tag "${{ github.event.release.tag_name }}" --dist dist
30
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
31
+ with:
32
+ name: dist
33
+ path: dist/
34
+
35
+ publish:
36
+ needs: build
37
+ runs-on: ubuntu-latest
38
+ environment: pypi
39
+ permissions:
40
+ id-token: write
41
+ steps:
42
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
43
+ with:
44
+ name: dist
45
+ path: dist/
46
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -0,0 +1,83 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .nox/
41
+ .coverage
42
+ .coverage.*
43
+ .cache
44
+ nosetests.xml
45
+ coverage.xml
46
+ junit.xml
47
+ *.cover
48
+ *.py,cover
49
+ .hypothesis/
50
+ .pytest_cache/
51
+ cover/
52
+
53
+ # Translations
54
+ *.mo
55
+ *.pot
56
+
57
+ # Sphinx documentation
58
+ docs/_build/
59
+
60
+ # Jupyter Notebook
61
+ .ipynb_checkpoints
62
+
63
+ # IPython
64
+ profile_default/
65
+ ipython_config.py
66
+
67
+ # pyenv
68
+ .python-version
69
+
70
+ # uv
71
+ .venv
72
+
73
+ # ruff
74
+ .ruff_cache/
75
+
76
+ # mypy
77
+ .mypy_cache/
78
+ .dmypy.json
79
+ dmypy.json
80
+
81
+ # editors
82
+ .vscode/
83
+ .idea/
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "tacular-omics: Install the tacular-omics proteomics packages together",
3
+ "description": "tacular-omics is a meta-package that installs the tacular-omics core Python packages for mass-spectrometry proteomics (tacular, psimodpy, unimodpy, uniprotptmpy, fastatacular, pefftacular, mzmlpy, tdfpy, peptacular, paftacular and spxtacular) at a set of released versions tested together, each pinned with a floor and a major-version cap. It has no functionality of its own beyond reporting the installed member versions. It requires Python 3.12 or later.",
4
+ "creators": [
5
+ {
6
+ "name": "Garrett, Patrick T.",
7
+ "orcid": "0000-0002-8434-9693",
8
+ "affiliation": "Scripps Research Institute"
9
+ },
10
+ {
11
+ "name": "Yates, John R. III",
12
+ "orcid": "0000-0001-5267-1672",
13
+ "affiliation": "Scripps Research Institute"
14
+ }
15
+ ],
16
+ "upload_type": "software",
17
+ "access_right": "open",
18
+ "license": "mit",
19
+ "language": "eng",
20
+ "keywords": [
21
+ "Python",
22
+ "Proteomics",
23
+ "Mass spectrometry",
24
+ "Bioinformatics"
25
+ ],
26
+ "related_identifiers": [
27
+ {
28
+ "identifier": "https://github.com/tacular-omics/tacular-omics",
29
+ "relation": "isSupplementTo",
30
+ "scheme": "url"
31
+ },
32
+ {
33
+ "identifier": "https://pypi.org/project/tacular-omics/",
34
+ "relation": "isAlternateIdentifier",
35
+ "scheme": "url"
36
+ }
37
+ ],
38
+ "communities": [
39
+ {
40
+ "identifier": "proteomics"
41
+ }
42
+ ]
43
+ }
@@ -0,0 +1,6 @@
1
+ # AGENTS.md
2
+
3
+ See [`CLAUDE.md`](CLAUDE.md) for the guide for AI coding agents working in this repo
4
+ (commands, layout, pins, releasing). That file is
5
+ canonical; this one exists because some tools look for `AGENTS.md` specifically.
6
+ Users of the library: see [`llms.txt`](llms.txt) and [`llms-full.txt`](llms-full.txt).
@@ -0,0 +1,16 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [0.1.0] (2026-09-24)
8
+
9
+ ### Added
10
+
11
+ - First release. Installs the tacular-omics core packages at their current released
12
+ versions: tacular 1.2, psimodpy 1.0, unimodpy 1.0, uniprotptmpy 1.0, fastatacular
13
+ 1.0, pefftacular 1.0, mzmlpy 0.9.3, tdfpy 4.1.1, peptacular 4.2, paftacular 1.4,
14
+ spxtacular 0.8. Extras `mcp` and `all`.
15
+ - `tacular_omics.versions()` and `python -m tacular_omics` report the installed
16
+ version of each member package.
@@ -0,0 +1,31 @@
1
+ cff-version: 1.2.0
2
+ message: "Please cite the member packages you use; each has its own CITATION.cff and Zenodo DOI (see README)."
3
+ type: software
4
+ title: "tacular-omics: Install the tacular-omics proteomics packages together"
5
+ abstract: >-
6
+ tacular-omics is a meta-package that installs the tacular-omics core Python
7
+ packages for mass-spectrometry proteomics (tacular, psimodpy, unimodpy,
8
+ uniprotptmpy, fastatacular, pefftacular, mzmlpy, tdfpy, peptacular,
9
+ paftacular and spxtacular) at a set of released versions tested together,
10
+ each pinned with a floor and a major-version cap. It has no functionality of
11
+ its own beyond reporting the installed member versions. It requires Python
12
+ 3.12 or later.
13
+ version: "0.1.0"
14
+ date-released: "2026-09-24"
15
+ authors:
16
+ - family-names: Garrett
17
+ given-names: Patrick T.
18
+ orcid: https://orcid.org/0000-0002-8434-9693
19
+ affiliation: Scripps Research Institute
20
+ - family-names: Yates
21
+ given-names: John R.
22
+ name-suffix: III
23
+ orcid: https://orcid.org/0000-0001-5267-1672
24
+ affiliation: Scripps Research Institute
25
+ repository-code: https://github.com/tacular-omics/tacular-omics
26
+ license: MIT
27
+ keywords:
28
+ - Python
29
+ - Proteomics
30
+ - Mass spectrometry
31
+ - Bioinformatics
@@ -0,0 +1,84 @@
1
+ # tacular-omics — Claude Code Guide
2
+
3
+ ## Project overview
4
+
5
+ `tacular-omics` is a meta-package: `pip install tacular-omics` installs every core
6
+ tacular-omics package at a set of released versions tested together. It has no
7
+ functionality of its own beyond `versions()` and `python -m tacular_omics`, which report
8
+ the installed member versions.
9
+
10
+ Place in the tacular-omics graph: the top. It depends on all eleven core packages
11
+ (tacular, psimodpy, unimodpy, uniprotptmpy, fastatacular, pefftacular, mzmlpy, tdfpy,
12
+ peptacular, paftacular, spxtacular) and nothing depends on it. It is always released
13
+ **last** in a batch, after every member it pins is on PyPI.
14
+
15
+ ## Commands
16
+
17
+ ```bash
18
+ just install # uv sync --all-extras
19
+ just lint # ruff check src tests scripts/smoke.py
20
+ just format # ruff isort fix + ruff format -- WRITES FILES
21
+ just ty # ty check src
22
+ just test # pytest tests (imports every member, checks pins)
23
+ just check # lint + ty + test
24
+ just smoke # build the wheel, install it fresh from PyPI, import every member
25
+ just check-version # python scripts/release_version.py check
26
+ ```
27
+
28
+ CI (`.github/workflows/ci.yml`): lint, pytest on 3.12-3.14 + macOS/Windows from the
29
+ lock, a lowest-direct run (the floors), and a `wheel` job that installs the built wheel
30
+ (plain and `[all]`) into a fresh env from PyPI on Linux/macOS/Windows and runs
31
+ `scripts/smoke.py`. CI also runs weekly, to catch a member release inside the caps that
32
+ breaks the set.
33
+
34
+ ## Architecture
35
+
36
+ ```
37
+ src/tacular_omics/
38
+ __init__.py # __version__ (version source), PACKAGES (member names, dependency order), versions()
39
+ __main__.py # main(): prints the versions; exit 1 if a member is missing. Also the `tacular-omics` script
40
+ tests/test_members.py # PACKAGES == dependencies, every member imports, installed versions satisfy the pins
41
+ scripts/smoke.py # import every member from an installed wheel (CI wheel job, publish.yml)
42
+ scripts/release_version.py # version sync/check, byte-identical copy of the workspace template
43
+ ```
44
+
45
+ ## Public API
46
+
47
+ - `tacular_omics.versions() -> dict[str, str | None]`: installed version of each member
48
+ (`None` if missing), from `importlib.metadata`; imports nothing.
49
+ - `tacular_omics.PACKAGES`: member distribution names in dependency order.
50
+ - `tacular_omics.__version__`.
51
+
52
+ ## Conventions
53
+
54
+ - **Pins**: every member in `[project] dependencies` has a floor (the released version
55
+ of the tested set) and a cap (next major, or next minor for 0.x), per the workspace
56
+ sibling pin policy. The `mcp` and `all` extras repeat the same specifiers.
57
+ - `PACKAGES` must list exactly the `dependencies` names in the same order (a test
58
+ enforces it). Distribution name == import name for every member.
59
+ - Ruff rules E, W, F, I, B, UP; line length 120; `ty check src` clean.
60
+
61
+ ## Gotchas
62
+
63
+ - Inside the workspace, the members resolve to the local checkouts, so
64
+ `test_installed_versions_satisfy_pins` fails as soon as a local member is bumped past
65
+ a cap. That is the signal to raise the pins in the next tacular-omics release.
66
+ - Extras names differ per member: the MCP server extra is `server` for psimodpy,
67
+ unimodpy and uniprotptmpy, and `mcp` elsewhere. tacular, fastatacular, pefftacular and
68
+ spxtacular have no MCP server.
69
+
70
+ ## Releasing
71
+
72
+ Only the tacular-omics overseer bumps versions or publishes. See `just --list`
73
+ (`set-version`, `sync-version`, `check-version`) and the workspace CLAUDE.md release
74
+ checklist. Version source: `__version__` in `src/tacular_omics/__init__.py`
75
+ (`[tool.hatch.version]`), mirrored in `CITATION.cff` by `scripts/release_version.py`.
76
+ A release raises the pins to the member versions just released, then refreshes
77
+ `uv.lock` (`just lock tacular-omics` from the workspace root). Publishing is
78
+ `publish.yml` on a GitHub release (PyPI trusted publishing, environment `pypi`).
79
+
80
+ ## Workspace note
81
+
82
+ This repo is also developed inside the tacular-omics uv workspace
83
+ (`~/Repos/tacular-omics/packages/tacular-omics`); there `uv run` uses the shared
84
+ `.venv` and root `uv.lock`, not this repo's `uv.lock`. See the workspace CLAUDE.md.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Patrick Garrett
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,143 @@
1
+ Metadata-Version: 2.5
2
+ Name: tacular-omics
3
+ Version: 0.1.0
4
+ Summary: Install the tacular-omics proteomics packages together.
5
+ Project-URL: Homepage, https://github.com/tacular-omics/tacular-omics
6
+ Project-URL: Documentation, https://github.com/tacular-omics/tacular-omics#readme
7
+ Project-URL: Repository, https://github.com/tacular-omics/tacular-omics
8
+ Project-URL: Issues, https://github.com/tacular-omics/tacular-omics/issues
9
+ Project-URL: Changelog, https://github.com/tacular-omics/tacular-omics/blob/main/CHANGELOG.md
10
+ Author-email: Patrick Garrett <pgarrett@scripps.edu>
11
+ Maintainer-email: Patrick Garrett <pgarrett@scripps.edu>
12
+ License-Expression: MIT
13
+ License-File: LICENSE
14
+ Keywords: bioinformatics,fasta,mass spectrometry,mzml,mzpaf,proforma,proteomics
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
22
+ Classifier: Typing :: Typed
23
+ Requires-Python: >=3.12
24
+ Requires-Dist: fastatacular<2,>=1.0
25
+ Requires-Dist: mzmlpy<0.10,>=0.9.3
26
+ Requires-Dist: paftacular<2,>=1.4
27
+ Requires-Dist: pefftacular<2,>=1.0
28
+ Requires-Dist: peptacular<5,>=4.2
29
+ Requires-Dist: psimodpy<2,>=1.0
30
+ Requires-Dist: spxtacular<0.9,>=0.8
31
+ Requires-Dist: tacular<2,>=1.2
32
+ Requires-Dist: tdfpy<5,>=4.1.1
33
+ Requires-Dist: unimodpy<2,>=1.0
34
+ Requires-Dist: uniprotptmpy<2,>=1.0
35
+ Provides-Extra: all
36
+ Requires-Dist: mzmlpy[mcp]<0.10,>=0.9.3; extra == 'all'
37
+ Requires-Dist: mzmlpy[numpress,rapidgzip,zstd]<0.10,>=0.9.3; extra == 'all'
38
+ Requires-Dist: paftacular[all]<2,>=1.4; extra == 'all'
39
+ Requires-Dist: paftacular[mcp]<2,>=1.4; extra == 'all'
40
+ Requires-Dist: peptacular[interop]<5,>=4.2; extra == 'all'
41
+ Requires-Dist: peptacular[mcp]<5,>=4.2; extra == 'all'
42
+ Requires-Dist: psimodpy[server]<2,>=1.0; extra == 'all'
43
+ Requires-Dist: spxtacular[all]<0.9,>=0.8; extra == 'all'
44
+ Requires-Dist: tdfpy[mcp]<5,>=4.1.1; extra == 'all'
45
+ Requires-Dist: tdfpy[viz]<5,>=4.1.1; extra == 'all'
46
+ Requires-Dist: unimodpy[server]<2,>=1.0; extra == 'all'
47
+ Requires-Dist: uniprotptmpy[server]<2,>=1.0; extra == 'all'
48
+ Provides-Extra: mcp
49
+ Requires-Dist: mzmlpy[mcp]<0.10,>=0.9.3; extra == 'mcp'
50
+ Requires-Dist: paftacular[mcp]<2,>=1.4; extra == 'mcp'
51
+ Requires-Dist: peptacular[mcp]<5,>=4.2; extra == 'mcp'
52
+ Requires-Dist: psimodpy[server]<2,>=1.0; extra == 'mcp'
53
+ Requires-Dist: tdfpy[mcp]<5,>=4.1.1; extra == 'mcp'
54
+ Requires-Dist: unimodpy[server]<2,>=1.0; extra == 'mcp'
55
+ Requires-Dist: uniprotptmpy[server]<2,>=1.0; extra == 'mcp'
56
+ Description-Content-Type: text/markdown
57
+
58
+ # tacular-omics
59
+
60
+ [![PyPI](https://img.shields.io/pypi/v/tacular-omics)](https://pypi.org/project/tacular-omics/)
61
+ [![CI](https://github.com/tacular-omics/tacular-omics/actions/workflows/ci.yml/badge.svg)](https://github.com/tacular-omics/tacular-omics/actions/workflows/ci.yml)
62
+ [![License](https://img.shields.io/github/license/tacular-omics/tacular-omics)](https://github.com/tacular-omics/tacular-omics/blob/main/LICENSE)
63
+ [![Python](https://img.shields.io/pypi/pyversions/tacular-omics)](https://pypi.org/project/tacular-omics/)
64
+
65
+ One install for the [tacular-omics](https://github.com/tacular-omics) proteomics packages.
66
+ `tacular-omics` has no code of its own: it depends on every core package at a set of
67
+ released versions that were tested together. Import the member packages directly.
68
+
69
+ ## Install
70
+
71
+ ```bash
72
+ pip install tacular-omics
73
+ ```
74
+
75
+ Optional extras:
76
+
77
+ ```bash
78
+ pip install "tacular-omics[mcp]" # the MCP servers of every package that ships one
79
+ pip install "tacular-omics[all]" # every optional feature of every package
80
+ ```
81
+
82
+ Check what you got:
83
+
84
+ ```bash
85
+ python -m tacular_omics # or: tacular-omics
86
+ ```
87
+
88
+ ```python
89
+ import tacular_omics
90
+ tacular_omics.versions() # {"tacular": "1.2.0", "psimodpy": "1.0.0", ...}
91
+ ```
92
+
93
+ ## Member packages
94
+
95
+ | Package | What it does |
96
+ |---|---|
97
+ | [tacular](https://github.com/tacular-omics/tacular) | Proteomics ontology and reference-data lookups (UNIMOD, PSI-MOD, elements, amino acids, proteases, ...). |
98
+ | [psimodpy](https://github.com/tacular-omics/psimodpy) | The PSI-MOD protein modification ontology. |
99
+ | [unimodpy](https://github.com/tacular-omics/unimodpy) | Parse and query the UNIMOD modifications database. |
100
+ | [uniprotptmpy](https://github.com/tacular-omics/uniprotptmpy) | Parse and query the UniProt PTM controlled vocabulary. |
101
+ | [fastatacular](https://github.com/tacular-omics/fastatacular) | Read and write FASTA sequence files. |
102
+ | [pefftacular](https://github.com/tacular-omics/pefftacular) | Read and write PEFF (PSI Extended FASTA Format) files. |
103
+ | [mzmlpy](https://github.com/tacular-omics/mzmlpy) | Lightweight mzML mass spectrometry file parser. |
104
+ | [tdfpy](https://github.com/tacular-omics/tdfpy) | Bruker timsTOF (`.d` / TDF) data with centroiding and noise filtering. |
105
+ | [peptacular](https://github.com/tacular-omics/peptacular) | Parse, annotate and analyze ProForma 2.1 peptide and protein sequences. |
106
+ | [paftacular](https://github.com/tacular-omics/paftacular) | Parse, serialize and analyze HUPO-PSI mzPAF peak annotations. |
107
+ | [spxtacular](https://github.com/tacular-omics/spxtacular) | Mass spectrometry spectrum processing. |
108
+
109
+ ## How versions are chosen
110
+
111
+ Each `tacular-omics` release pins the member packages to the set that was released
112
+ and tested together: every requirement has a floor (the tested release) and a cap (the
113
+ next major version, or the next minor for 0.x packages such as `mzmlpy>=0.9.3,<0.10`).
114
+ You get bug-fix and feature releases of each member automatically, but never a breaking
115
+ release that has not been tested with the others. When the members release a new
116
+ batch, a new `tacular-omics` version raises the pins. The exact pins are in
117
+ [`pyproject.toml`](pyproject.toml).
118
+
119
+ To use a newer member than the cap allows, install that package without
120
+ `tacular-omics`.
121
+
122
+ ## Citation
123
+
124
+ Please cite the packages you use, not this installer. Each member repository has a
125
+ `CITATION.cff` (GitHub's "Cite this repository" button) and a Zenodo DOI:
126
+
127
+ | Package | DOI |
128
+ |---|---|
129
+ | tacular | [10.5281/zenodo.18475556](https://doi.org/10.5281/zenodo.18475556) |
130
+ | psimodpy | [10.5281/zenodo.22926360](https://doi.org/10.5281/zenodo.22926360) |
131
+ | unimodpy | [10.5281/zenodo.22926362](https://doi.org/10.5281/zenodo.22926362) |
132
+ | uniprotptmpy | [10.5281/zenodo.22926364](https://doi.org/10.5281/zenodo.22926364) |
133
+ | fastatacular | [10.5281/zenodo.22926358](https://doi.org/10.5281/zenodo.22926358) |
134
+ | pefftacular | [10.5281/zenodo.22925639](https://doi.org/10.5281/zenodo.22925639) |
135
+ | mzmlpy | [10.5281/zenodo.21960079](https://doi.org/10.5281/zenodo.21960079) |
136
+ | tdfpy | [10.5281/zenodo.19100532](https://doi.org/10.5281/zenodo.19100532) |
137
+ | peptacular | [10.5281/zenodo.15054278](https://doi.org/10.5281/zenodo.15054278) |
138
+ | paftacular | [10.5281/zenodo.19076277](https://doi.org/10.5281/zenodo.19076277) |
139
+ | spxtacular | [10.5281/zenodo.19342437](https://doi.org/10.5281/zenodo.19342437) |
140
+
141
+ ## License
142
+
143
+ MIT. Each member package has its own license; see its repository.