tacular 1.0.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.
Files changed (121) hide show
  1. tacular-1.0.0/.github/copilot-instructions.md +215 -0
  2. tacular-1.0.0/.github/workflows/pylint.yml +26 -0
  3. tacular-1.0.0/.github/workflows/python-package.yml +44 -0
  4. tacular-1.0.0/.github/workflows/python-publish.yml +37 -0
  5. tacular-1.0.0/.gitignore +122 -0
  6. tacular-1.0.0/HISTORY.md +5 -0
  7. tacular-1.0.0/MANIFEST.in +8 -0
  8. tacular-1.0.0/PKG-INFO +83 -0
  9. tacular-1.0.0/README.md +66 -0
  10. tacular-1.0.0/conftest.py +8 -0
  11. tacular-1.0.0/create_output_jsons.py +125 -0
  12. tacular-1.0.0/data_gen/README.md +52 -0
  13. tacular-1.0.0/data_gen/create_psi_csv_mismatch.py +185 -0
  14. tacular-1.0.0/data_gen/data/amino_acids.json +412 -0
  15. tacular-1.0.0/data_gen/data/elements.txt +2831 -0
  16. tacular-1.0.0/data_gen/data/fragment_ions.json +540 -0
  17. tacular-1.0.0/data_gen/data/monosaccharides.obo +267 -0
  18. tacular-1.0.0/data_gen/data/mzpaf_reference_molecules.json +408 -0
  19. tacular-1.0.0/data_gen/data/neutral_losses.json +80 -0
  20. tacular-1.0.0/data_gen/data/proteases.json +122 -0
  21. tacular-1.0.0/data_gen/generator/constants.py +18 -0
  22. tacular-1.0.0/data_gen/generator/elements/__init__.py +11 -0
  23. tacular-1.0.0/data_gen/generator/elements/data.py +4392 -0
  24. tacular-1.0.0/data_gen/generator/elements/dclass.py +109 -0
  25. tacular-1.0.0/data_gen/generator/elements/lookup.py +374 -0
  26. tacular-1.0.0/data_gen/generator/gen_amino_acids.py +224 -0
  27. tacular-1.0.0/data_gen/generator/gen_elements.py +415 -0
  28. tacular-1.0.0/data_gen/generator/gen_fragment_ions.py +150 -0
  29. tacular-1.0.0/data_gen/generator/gen_gno.py +239 -0
  30. tacular-1.0.0/data_gen/generator/gen_monosachs.py +217 -0
  31. tacular-1.0.0/data_gen/generator/gen_neutral_deltas.py +122 -0
  32. tacular-1.0.0/data_gen/generator/gen_proteases.py +93 -0
  33. tacular-1.0.0/data_gen/generator/gen_psimod.py +309 -0
  34. tacular-1.0.0/data_gen/generator/gen_refmol.py +130 -0
  35. tacular-1.0.0/data_gen/generator/gen_resid.py +333 -0
  36. tacular-1.0.0/data_gen/generator/gen_unimod.py +325 -0
  37. tacular-1.0.0/data_gen/generator/gen_xlmod.py +441 -0
  38. tacular-1.0.0/data_gen/generator/logging_utils.py +44 -0
  39. tacular-1.0.0/data_gen/generator/utils.py +230 -0
  40. tacular-1.0.0/data_gen/justfile +80 -0
  41. tacular-1.0.0/data_gen/output/psimod_mass_mismatches.csv +46 -0
  42. tacular-1.0.0/data_gen/output/psimod_missing_entries.txt +477 -0
  43. tacular-1.0.0/jsons/amino_acids.json +363 -0
  44. tacular-1.0.0/jsons/elements.json +3787 -0
  45. tacular-1.0.0/jsons/fragment_ions.json +430 -0
  46. tacular-1.0.0/jsons/gnome_modifications.json +46157 -0
  47. tacular-1.0.0/jsons/monosaccharides.json +309 -0
  48. tacular-1.0.0/jsons/neutral_losses.json +215 -0
  49. tacular-1.0.0/jsons/proteases.json +125 -0
  50. tacular-1.0.0/jsons/psimodifications.json +19051 -0
  51. tacular-1.0.0/jsons/refmols.json +979 -0
  52. tacular-1.0.0/jsons/resid_modifications.json +6270 -0
  53. tacular-1.0.0/jsons/unimodifications.json +19600 -0
  54. tacular-1.0.0/jsons/xlmodifications.json +2219 -0
  55. tacular-1.0.0/justfile +38 -0
  56. tacular-1.0.0/pyproject.toml +60 -0
  57. tacular-1.0.0/src/tacular/__init__.py +78 -0
  58. tacular-1.0.0/src/tacular/amino_acids/__init__.py +12 -0
  59. tacular-1.0.0/src/tacular/amino_acids/data.py +331 -0
  60. tacular-1.0.0/src/tacular/amino_acids/dclass.py +51 -0
  61. tacular-1.0.0/src/tacular/amino_acids/lookup.py +165 -0
  62. tacular-1.0.0/src/tacular/elements/__init__.py +11 -0
  63. tacular-1.0.0/src/tacular/elements/data.py +4392 -0
  64. tacular-1.0.0/src/tacular/elements/dclass.py +140 -0
  65. tacular-1.0.0/src/tacular/elements/lookup.py +389 -0
  66. tacular-1.0.0/src/tacular/gno/__init__.py +4 -0
  67. tacular-1.0.0/src/tacular/gno/data.py +28297 -0
  68. tacular-1.0.0/src/tacular/gno/dclass.py +14 -0
  69. tacular-1.0.0/src/tacular/gno/lookup.py +16 -0
  70. tacular-1.0.0/src/tacular/ion_types/__init__.py +12 -0
  71. tacular-1.0.0/src/tacular/ion_types/data.py +435 -0
  72. tacular-1.0.0/src/tacular/ion_types/dclass.py +108 -0
  73. tacular-1.0.0/src/tacular/ion_types/lookup.py +73 -0
  74. tacular-1.0.0/src/tacular/monosaccharides/__init__.py +9 -0
  75. tacular-1.0.0/src/tacular/monosaccharides/data.py +245 -0
  76. tacular-1.0.0/src/tacular/monosaccharides/dclass.py +5 -0
  77. tacular-1.0.0/src/tacular/monosaccharides/lookup.py +51 -0
  78. tacular-1.0.0/src/tacular/neutral_deltas/__init__.py +12 -0
  79. tacular-1.0.0/src/tacular/neutral_deltas/data.py +160 -0
  80. tacular-1.0.0/src/tacular/neutral_deltas/dclass.py +48 -0
  81. tacular-1.0.0/src/tacular/neutral_deltas/lookup.py +73 -0
  82. tacular-1.0.0/src/tacular/obo_entity.py +114 -0
  83. tacular-1.0.0/src/tacular/obo_lookup.py +212 -0
  84. tacular-1.0.0/src/tacular/proteases/__init__.py +11 -0
  85. tacular-1.0.0/src/tacular/proteases/data.py +169 -0
  86. tacular-1.0.0/src/tacular/proteases/dclass.py +27 -0
  87. tacular-1.0.0/src/tacular/proteases/lookup.py +57 -0
  88. tacular-1.0.0/src/tacular/psimod/__init__.py +12 -0
  89. tacular-1.0.0/src/tacular/psimod/data.py +12490 -0
  90. tacular-1.0.0/src/tacular/psimod/dclass.py +12 -0
  91. tacular-1.0.0/src/tacular/psimod/lookup.py +15 -0
  92. tacular-1.0.0/src/tacular/py.typed +0 -0
  93. tacular-1.0.0/src/tacular/refmol/__init__.py +11 -0
  94. tacular-1.0.0/src/tacular/refmol/data.py +799 -0
  95. tacular-1.0.0/src/tacular/refmol/dclass.py +41 -0
  96. tacular-1.0.0/src/tacular/refmol/lookup.py +79 -0
  97. tacular-1.0.0/src/tacular/resid/__init__.py +4 -0
  98. tacular-1.0.0/src/tacular/resid/data.py +4305 -0
  99. tacular-1.0.0/src/tacular/resid/dclass.py +14 -0
  100. tacular-1.0.0/src/tacular/resid/lookup.py +16 -0
  101. tacular-1.0.0/src/tacular/unimod/__init__.py +12 -0
  102. tacular-1.0.0/src/tacular/unimod/data.py +12433 -0
  103. tacular-1.0.0/src/tacular/unimod/dclass.py +12 -0
  104. tacular-1.0.0/src/tacular/unimod/lookup.py +15 -0
  105. tacular-1.0.0/src/tacular/xlmod/__init__.py +4 -0
  106. tacular-1.0.0/src/tacular/xlmod/data.py +1537 -0
  107. tacular-1.0.0/src/tacular/xlmod/dclass.py +11 -0
  108. tacular-1.0.0/src/tacular/xlmod/lookup.py +15 -0
  109. tacular-1.0.0/tests/test_amino_acids.py +273 -0
  110. tacular-1.0.0/tests/test_element_lookup.py +682 -0
  111. tacular-1.0.0/tests/test_elements.py +75 -0
  112. tacular-1.0.0/tests/test_gno.py +179 -0
  113. tacular-1.0.0/tests/test_ion_types.py +281 -0
  114. tacular-1.0.0/tests/test_monosaccharides.py +152 -0
  115. tacular-1.0.0/tests/test_neutral_deltas.py +279 -0
  116. tacular-1.0.0/tests/test_obo_entity.py +84 -0
  117. tacular-1.0.0/tests/test_obo_lookup.py +254 -0
  118. tacular-1.0.0/tests/test_proteases.py +243 -0
  119. tacular-1.0.0/tests/test_psimod.py +243 -0
  120. tacular-1.0.0/tests/test_refmol.py +321 -0
  121. tacular-1.0.0/tests/test_xlmod.py +196 -0
@@ -0,0 +1,215 @@
1
+
2
+
3
+
4
+ # ProForma Notation - Basic Summary
5
+
6
+
7
+ 1 - Never make summary documentation unles specifically asked.
8
+ 2 - check makfile for commands
9
+
10
+ ## Documentation & Comments
11
+
12
+ ### Docstring Format
13
+
14
+ Use **Google-style docstrings** but keep them minimal - type hints handle the rest.
15
+
16
+ **Simple function:**
17
+ ```python
18
+ def calculate_mass(sequence: str, charge: int = 1) -> float:
19
+ """Calculate the mass-to-charge ratio of a peptide."""
20
+ ```
21
+
22
+ **When you need more detail:**
23
+ ```python
24
+ def find_isotopes(mz: float, tolerance: float = 0.01) -> list[Peak]:
25
+ """Find isotopic peaks within the tolerance window.
26
+
27
+ Uses a greedy algorithm to identify the most intense peaks first,
28
+ then searches for their isotopic patterns.
29
+ """
30
+ ```
31
+
32
+ **Classes:**
33
+ ```python
34
+ class Peptide:
35
+ """Represents a peptide sequence with ProForma modifications."""
36
+ ```
37
+
38
+ ### What to Document
39
+
40
+ - **One-line summary** for all public functions/classes
41
+ - **Additional details** only when the implementation is non-obvious
42
+ - **Don't repeat** what's already in type hints
43
+ - **Private functions** (`_name`) can skip docstrings if obvious
44
+
45
+ ### Building Docs
46
+ ```bash
47
+ cd docs
48
+ make html
49
+ # View at docs/_build/html/index.html
50
+ ```
51
+
52
+ see **proforma.schema.json** for the full ProForma 2.0 json object specification.
53
+
54
+ ## What is ProForma?
55
+
56
+ ProForma is a **standardized text notation for representing peptides and proteins with modifications**. It's designed to be both human-readable and machine-parsable, allowing scientists to precisely describe modified peptide sequences in mass spectrometry data.
57
+
58
+ ## Core Concept
59
+
60
+ Think of it as a way to write: **"amino acid sequence + where modifications are located + what those modifications are"**
61
+
62
+ ## Basic Examples
63
+
64
+ ### 1. Simple Unmodified Peptide
65
+ ```
66
+ PEPTIDE
67
+ ```
68
+ Just amino acids using standard one-letter codes (A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y)
69
+
70
+ ### 2. Peptide with Modification
71
+ ```
72
+ PEM[Oxidation]TIDE
73
+ ```
74
+ - Methionine (M) is oxidized
75
+ - Modifications go in square brackets `[]` right after the modified amino acid
76
+
77
+ ### 3. Multiple Modifications
78
+ ```
79
+ PEM[Oxidation]TIS[Phospho]DE
80
+ ```
81
+ - M is oxidized
82
+ - S is phosphorylated
83
+
84
+ ### 4. Terminal Modifications
85
+ ```
86
+ [Acetyl]-PEPTIDE
87
+ [iTRAQ4plex]-PEPTIDE-[Amidated]
88
+ ```
89
+ - N-terminal modifications: `[mod]-` before sequence
90
+ - C-terminal modifications: `-[mod]` after sequence
91
+
92
+ ## Ways to Specify Modifications
93
+
94
+ ProForma supports multiple ways to describe the same modification:
95
+
96
+ ```
97
+ EM[Oxidation]TIDE # By name (Unimod)
98
+ EM[UNIMOD:35]TIDE # By accession number
99
+ EM[+15.995]TIDE # By mass change
100
+ EM[Formula:O]TIDE # By chemical formula
101
+ ```
102
+
103
+ ## Key Advanced Features
104
+
105
+ ### Ambiguous Modification Position
106
+ When you know a modification exists but not exactly where:
107
+ ```
108
+ [Phospho]?PEPTIDE # Phospho is somewhere, location unknown
109
+ ```
110
+
111
+ ### Multiple Possible Sites
112
+ ```
113
+ PEP[Phospho#g1]TIS[#g1]DE # Phospho is on either T or S
114
+ ```
115
+
116
+ ### Labile Modifications
117
+ Modifications that fall off during fragmentation:
118
+ ```
119
+ {Glycan:Hex}PEPTIDE # Glycan present but lost in MS2
120
+ ```
121
+
122
+ ### Cross-linked Peptides
123
+ This is somewhat handled at the parsing level but will not will not be implmented in the codebased. Dont worry about this too much.
124
+ ```
125
+ PEPTK[#XL1]IDE//SEQK[#XL1] # Two peptides linked together
126
+ ```
127
+
128
+ ### Chimeric Spectra
129
+ Multiple peptides in same spectrum:
130
+ This is somewhat handled at the parsing level but will not will not be implmented int eh codebased. Dont worry about this too much.
131
+ ```
132
+ PEPTIDE+SEQUENCE # Two co-eluting peptides
133
+ ```
134
+
135
+ ### Charge States
136
+ ```
137
+ PEPTIDE/2 # Charge state +2
138
+ ```
139
+
140
+ ### Charge Adducts
141
+ ```
142
+ PEPTIDE/[Na+:z+1] # Sodium adduct with +1 charge
143
+ PEPTIDE/[Na+:z+1^2] # added 2 times (total charge: +2)
144
+ EPT[Formula:Zn:z+2]IDE/[Na:z+1^2] # total +4
145
+
146
+ ```
147
+
148
+ both charge and charge adduct cannot occur simultaneously.
149
+
150
+ ```
151
+ PEPTIDE/[Na+:z+1^2] # Sodium adduct with +1 charge 2 times
152
+ ```
153
+
154
+
155
+
156
+ ## Compliance Levels
157
+
158
+ ProForma has different levels of complexity:
159
+
160
+ 1. **Base-ProForma** - Simple sequences with basic modifications
161
+ 2. **Level 2-ProForma** - Adds ambiguity, formulas, delta masses
162
+ 3. **Extensions** - Specialized features for:
163
+ - Top-down proteomics
164
+ - Cross-linking
165
+ - Glycoproteomics
166
+ - Advanced complexity
167
+
168
+ ## Common Use Cases
169
+
170
+ ### Bottom-up Proteomics
171
+ ```
172
+ [Acetyl]-EM[Oxidation]EVTSES[Phospho]PEK
173
+ ```
174
+ Typical tryptic peptide with PTMs
175
+
176
+ ### Top-down Proteomics
177
+ ```
178
+ <[Oxidation]@M>FULLPROTEINSEQUENCE...
179
+ ```
180
+ Full protein with fixed modifications
181
+
182
+ ### Glycopeptide
183
+ ```
184
+ NEEYN[Glycan:Hex5HexNAc4]K
185
+ ```
186
+ N-glycosylation site
187
+
188
+ ### Cross-linking
189
+ ```
190
+ PEPTK[XLMOD:02001#XL1]IDE//SEQK[#XL1]
191
+ ```
192
+ DSS cross-link between two lysines
193
+
194
+ ## Why ProForma?
195
+
196
+ **Before ProForma:** Everyone used different formats to describe modified peptides
197
+ - Hard to share data
198
+ - Hard to write software that works with different tools
199
+ - Ambiguous representations
200
+
201
+ **With ProForma:** Standard notation means:
202
+ - Data can be easily exchanged between labs
203
+ - Software tools can interoperate
204
+ - Unambiguous communication of results
205
+ - Integration with databases (Unimod, PSI-MOD, etc.)
206
+
207
+ ## Key Design Principles
208
+
209
+ 1. **Human readable** - Scientists can read and understand it
210
+ 2. **Machine parsable** - Software can reliably parse it
211
+ 3. **Extensible** - Can add new features as needs evolve
212
+ 4. **Precise** - Captures uncertainty and ambiguity when present
213
+ 5. **Standards-based** - Uses controlled vocabularies (Unimod, PSI-MOD, etc.)
214
+
215
+
@@ -0,0 +1,26 @@
1
+ name: Lint and Type Check
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ python-version: ["3.12"]
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - name: Set up Python ${{ matrix.python-version }}
14
+ uses: actions/setup-python@v5
15
+ with:
16
+ python-version: ${{ matrix.python-version }}
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v4
19
+ - name: Install just
20
+ uses: extractions/setup-just@v2
21
+ - name: Install dependencies
22
+ run: just install
23
+ - name: Lint with ruff
24
+ run: just lint
25
+ - name: Type check with ty
26
+ run: just check
@@ -0,0 +1,44 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
3
+
4
+ name: Python package
5
+
6
+ on:
7
+ push:
8
+ branches: [ "main" ]
9
+ pull_request:
10
+ branches: [ "main" ]
11
+
12
+ jobs:
13
+ build:
14
+
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.12"]
20
+
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@v4
29
+ - name: Install just
30
+ uses: extractions/setup-just@v2
31
+ - name: Install dependencies
32
+ run: just install
33
+ - name: Lint with ruff
34
+ run: just lint
35
+ - name: Type check with ty
36
+ run: just check
37
+ - name: Test with pytest
38
+ run: just test-cov
39
+ - name: Upload coverage reports to Codecov
40
+ uses: codecov/codecov-action@v5
41
+ with:
42
+ token: ${{ secrets.CODECOV_TOKEN }}
43
+ slug: tacular-omics/tacular
44
+ fail_ci_if_error: false
@@ -0,0 +1,37 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Upload Python Package
10
+
11
+ on:
12
+ release:
13
+ types: [published]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ deploy:
20
+
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: '3.x'
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v4
31
+ - name: Build package with uv
32
+ run: uv build
33
+ - name: Publish package
34
+ uses: pypa/gh-action-pypi-publish@release/v1
35
+ with:
36
+ user: __token__
37
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,122 @@
1
+ *GNOme.obo
2
+ *PSI-MOD.obo
3
+ *UNIMOD.obo
4
+ *XLMod.obo
5
+
6
+ *try_*.py
7
+
8
+ # Byte-compiled / optimized / DLL files
9
+ __pycache__/
10
+ *.py[cod]
11
+ *$py.class
12
+
13
+ # C extensions
14
+ *.so
15
+
16
+ # Distribution / packaging
17
+ .Python
18
+ build/
19
+ develop-eggs/
20
+ dist/
21
+ downloads/
22
+ eggs/
23
+ .eggs/
24
+ lib/
25
+ lib64/
26
+ parts/
27
+ sdist/
28
+ var/
29
+ wheels/
30
+ share/python-wheels/
31
+ *.egg-info/
32
+ .installed.cfg
33
+ *.egg
34
+ MANIFEST
35
+
36
+ # PyInstaller
37
+ # Usually these files are written by a python script from a template
38
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
39
+ *.manifest
40
+ *.spec
41
+
42
+ # Installer logs
43
+ pip-log.txt
44
+ pip-delete-this-directory.txt
45
+
46
+ # Unit test / coverage reports
47
+ htmlcov/
48
+ .tox/
49
+ .nox/
50
+ .coverage
51
+ .coverage.*
52
+ .cache
53
+ nosetests.xml
54
+ coverage.xml
55
+ *.cover
56
+ *.py,cover
57
+ .hypothesis/
58
+ .pytest_cache/
59
+ cover/
60
+
61
+ # Translations
62
+ *.mo
63
+ *.pot
64
+
65
+ # Django stuff:
66
+ *.log
67
+ local_settings.py
68
+ db.sqlite3
69
+ db.sqlite3-journal
70
+
71
+ # Flask stuff:
72
+ instance/
73
+ .webassets-cache
74
+
75
+ # Scrapy stuff:
76
+ .scrapy
77
+
78
+ # Sphinx documentation
79
+ docs/_build/
80
+
81
+ # PyBuilder
82
+ target/
83
+
84
+ # Jupyter Notebook
85
+ .ipynb_checkpoints
86
+
87
+ # IPython
88
+ profile_default/
89
+ ipython_config.py
90
+
91
+ # pyenv
92
+ .python-version
93
+
94
+ # pipenv
95
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
96
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
97
+ # with no cross-platform support, pipenv may install dependencies that don't work, or not
98
+ # install all needed dependencies.
99
+ #Pipfile.lock
100
+
101
+ # poetry
102
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
103
+ # This is especially recommended for binary packages to ensure reproducible builds.
104
+ # However, if you need to use different versions of dependencies on different environments,
105
+ # you may want to ignore it.
106
+ #poetry.lock
107
+
108
+ # uv
109
+ .venv
110
+ uv.lock
111
+
112
+ # ruff
113
+ .ruff_cache/
114
+
115
+ # mypy
116
+ .mypy_cache/
117
+ .dmypy.json
118
+ dmypy.json
119
+
120
+ # editors
121
+ .vscode/
122
+ .idea/
@@ -0,0 +1,5 @@
1
+ # History
2
+
3
+ ## 0.1.0 (2026-01-15)
4
+
5
+ * First release on PyPI.
@@ -0,0 +1,8 @@
1
+ include HISTORY.md
2
+ include README.md
3
+
4
+ recursive-include tests *
5
+ recursive-exclude * __pycache__
6
+ recursive-exclude * *.py[co]
7
+
8
+ recursive-include *.md justfile *.jpg *.png *.gif
tacular-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,83 @@
1
+ Metadata-Version: 2.4
2
+ Name: tacular
3
+ Version: 1.0.0
4
+ Summary: Includes lookups for modifications, amino acids, and other data types.
5
+ Author-email: Patrick Garrett <pgarrett@scripps.edu>
6
+ Maintainer-email: Patrick Garrett <pgarrett@scripps.edu>
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Intended Audience :: Science/Research
9
+ Classifier: Operating System :: OS Independent
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
13
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
14
+ Classifier: Typing :: Typed
15
+ Requires-Python: >=3.12
16
+ Description-Content-Type: text/markdown
17
+
18
+ # tacular
19
+
20
+ [![Python package](https://github.com/pgarrett-scripps/tacular/actions/workflows/python-package.yml/badge.svg)](https://github.com/pgarrett-scripps/tacular/actions/workflows/python-package.yml)
21
+ [![codecov](https://codecov.io/github/tacular-omics/tacular/graph/badge.svg?token=1CTVZVFXF7)](https://codecov.io/github/tacular-omics/tacular)
22
+ [![PyPI version](https://badge.fury.io/py/tacular.svg)](https://badge.fury.io/py/tacular)
23
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
24
+ [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
25
+
26
+ A helper package for peptacular and paftacular. Includes lookups for modifications, amino acids, and other data types.
27
+
28
+ ## Generate Data
29
+
30
+ See data_gen/README.md
31
+
32
+ ## Generating JSONs
33
+
34
+ It's possible to generate JSON objects for all parsed data used within tacular. This isn't used within tacular or its downstream packages, but may be useful in other projects, especially those not Python-based. This will be created from the data within the python package, so ensure that this is up to date. See data_gen/README.md for more info.
35
+
36
+ ```bash
37
+ just gen-jsons
38
+ ```
39
+
40
+ ## Overview
41
+
42
+ The following lookups are available:
43
+
44
+ ### Amino Acids
45
+ - Standard and non-standard amino acid lookups
46
+ - Query by single-letter code, three-letter code, or full name
47
+ - Access to molecular properties (mass, formula, etc.)
48
+
49
+ ### Modifications
50
+ - Post-translational modifications (PTMs)
51
+ - Query by modification name, ID, or delta mass
52
+ - Support for Unimod, PSI-MOD, RESID, XLMOD and GNOme
53
+
54
+ ### Elements
55
+ - Chemical element data
56
+ - Query by symbol, name
57
+ - Isotope information and masses
58
+
59
+ ### Additional Data Types
60
+ - Fragment ions
61
+ - Common neutral deltas (mainly neutral losses)
62
+ - mzPAF reference molecules
63
+ - Common Proteases
64
+
65
+ ## Architecture
66
+
67
+ Each lookup contains three core components:
68
+
69
+ - **data.py**: Auto-generated data file (should not be modified manually)
70
+ - **dclass.py**: Dataclass definitions for the data structures
71
+ - **lookup.py**: Lookup implementation with query methods
72
+
73
+ Each lookup provides multiple query options to enable data retrieval by various means. Lookups are cached for faster repeat queries.
74
+
75
+ ## Usage
76
+
77
+ ```python
78
+ import tacular as t
79
+
80
+ # Query amino acids
81
+ alanine = t.AA_LOOKUP['A']
82
+ carbon_13 = t.ELEMENT_LOOKUP['13C']
83
+ ```
@@ -0,0 +1,66 @@
1
+ # tacular
2
+
3
+ [![Python package](https://github.com/pgarrett-scripps/tacular/actions/workflows/python-package.yml/badge.svg)](https://github.com/pgarrett-scripps/tacular/actions/workflows/python-package.yml)
4
+ [![codecov](https://codecov.io/github/tacular-omics/tacular/graph/badge.svg?token=1CTVZVFXF7)](https://codecov.io/github/tacular-omics/tacular)
5
+ [![PyPI version](https://badge.fury.io/py/tacular.svg)](https://badge.fury.io/py/tacular)
6
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ A helper package for peptacular and paftacular. Includes lookups for modifications, amino acids, and other data types.
10
+
11
+ ## Generate Data
12
+
13
+ See data_gen/README.md
14
+
15
+ ## Generating JSONs
16
+
17
+ It's possible to generate JSON objects for all parsed data used within tacular. This isn't used within tacular or its downstream packages, but may be useful in other projects, especially those not Python-based. This will be created from the data within the python package, so ensure that this is up to date. See data_gen/README.md for more info.
18
+
19
+ ```bash
20
+ just gen-jsons
21
+ ```
22
+
23
+ ## Overview
24
+
25
+ The following lookups are available:
26
+
27
+ ### Amino Acids
28
+ - Standard and non-standard amino acid lookups
29
+ - Query by single-letter code, three-letter code, or full name
30
+ - Access to molecular properties (mass, formula, etc.)
31
+
32
+ ### Modifications
33
+ - Post-translational modifications (PTMs)
34
+ - Query by modification name, ID, or delta mass
35
+ - Support for Unimod, PSI-MOD, RESID, XLMOD and GNOme
36
+
37
+ ### Elements
38
+ - Chemical element data
39
+ - Query by symbol, name
40
+ - Isotope information and masses
41
+
42
+ ### Additional Data Types
43
+ - Fragment ions
44
+ - Common neutral deltas (mainly neutral losses)
45
+ - mzPAF reference molecules
46
+ - Common Proteases
47
+
48
+ ## Architecture
49
+
50
+ Each lookup contains three core components:
51
+
52
+ - **data.py**: Auto-generated data file (should not be modified manually)
53
+ - **dclass.py**: Dataclass definitions for the data structures
54
+ - **lookup.py**: Lookup implementation with query methods
55
+
56
+ Each lookup provides multiple query options to enable data retrieval by various means. Lookups are cached for faster repeat queries.
57
+
58
+ ## Usage
59
+
60
+ ```python
61
+ import tacular as t
62
+
63
+ # Query amino acids
64
+ alanine = t.AA_LOOKUP['A']
65
+ carbon_13 = t.ELEMENT_LOOKUP['13C']
66
+ ```
@@ -0,0 +1,8 @@
1
+ import pytest
2
+
3
+ from tacular.elements import ELEMENT_LOOKUP
4
+
5
+
6
+ @pytest.fixture(autouse=True)
7
+ def add_lookup(doctest_namespace):
8
+ doctest_namespace["lookup"] = ELEMENT_LOOKUP