cool-seq-tool 0.7.1__tar.gz → 0.9.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.
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/PKG-INFO +15 -15
- cool_seq_tool-0.9.0/README.md +59 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/contributing.rst +1 -1
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/index.rst +4 -4
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/install.rst +1 -1
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/transcript_selection.rst +4 -3
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/usage.rst +1 -1
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/pyproject.toml +2 -2
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/mappers/exon_genomic_coords.py +32 -15
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/sources/mane_transcript_mappings.py +3 -1
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool.egg-info/PKG-INFO +15 -15
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool.egg-info/SOURCES.txt +0 -1
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool.egg-info/requires.txt +2 -2
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/conftest.py +15 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/mappers/test_exon_genomic_coords.py +42 -10
- cool_seq_tool-0.7.1/.github/workflows/close_issue.yml +0 -18
- cool_seq_tool-0.7.1/README.md +0 -59
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.coveragerc +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.github/workflows/checks.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.github/workflows/pr-priority-label.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.github/workflows/release.yml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.github/workflows/stale.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.gitignore +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.pre-commit-config.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/.readthedocs.yaml +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/CITATION.cff +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/LICENSE +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/Makefile +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/make.bat +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/_static/img/biomart.png +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/_templates/module_summary.rst +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/changelog.rst +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/conf.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/license.rst +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/docs/source/reference/index.rst +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/setup.cfg +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/__init__.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/app.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/handlers/__init__.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/handlers/seqrepo_access.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/mappers/__init__.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/mappers/alignment.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/mappers/liftover.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/mappers/mane_transcript.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/resources/__init__.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/resources/data_files.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/resources/status.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/resources/transcript_mapping.tsv +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/schemas.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/sources/__init__.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/sources/transcript_mappings.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/sources/uta_database.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/utils.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool.egg-info/dependency_links.txt +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool.egg-info/top_level.txt +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/handlers/test_seqrepo_access.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/mappers/test_alignment.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/mappers/test_liftover.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/mappers/test_mane_transcript.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/sources/test_mane_transcript_mappings.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/sources/test_uta_database.py +0 -0
- {cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: cool_seq_tool
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.9.0
|
4
4
|
Summary: Common Operation on Lots of Sequences Tool
|
5
5
|
Author: Kori Kuzma, James Stevenson, Katie Stahl, Alex Wagner
|
6
6
|
License: MIT License
|
@@ -53,7 +53,7 @@ Requires-Dist: hgvs
|
|
53
53
|
Requires-Dist: biocommons.seqrepo
|
54
54
|
Requires-Dist: pydantic==2.*
|
55
55
|
Requires-Dist: ga4gh.vrs~=2.0.0a10
|
56
|
-
Requires-Dist: wags-tails~=0.
|
56
|
+
Requires-Dist: wags-tails~=0.2.2
|
57
57
|
Requires-Dist: bioutils
|
58
58
|
Provides-Extra: dev
|
59
59
|
Requires-Dist: pre-commit>=3.7.1; extra == "dev"
|
@@ -61,11 +61,11 @@ Requires-Dist: ipython; extra == "dev"
|
|
61
61
|
Requires-Dist: ipykernel; extra == "dev"
|
62
62
|
Requires-Dist: psycopg2-binary; extra == "dev"
|
63
63
|
Requires-Dist: ruff==0.5.0; extra == "dev"
|
64
|
-
Provides-Extra:
|
65
|
-
Requires-Dist: pytest; extra == "
|
66
|
-
Requires-Dist: pytest-cov; extra == "
|
67
|
-
Requires-Dist: pytest-asyncio==0.18.3; extra == "
|
68
|
-
Requires-Dist: mock; extra == "
|
64
|
+
Provides-Extra: tests
|
65
|
+
Requires-Dist: pytest; extra == "tests"
|
66
|
+
Requires-Dist: pytest-cov; extra == "tests"
|
67
|
+
Requires-Dist: pytest-asyncio==0.18.3; extra == "tests"
|
68
|
+
Requires-Dist: mock; extra == "tests"
|
69
69
|
Provides-Extra: docs
|
70
70
|
Requires-Dist: sphinx==6.1.3; extra == "docs"
|
71
71
|
Requires-Dist: sphinx-autodoc-typehints==1.22.0; extra == "docs"
|
@@ -76,10 +76,10 @@ Requires-Dist: furo==2023.3.27; extra == "docs"
|
|
76
76
|
Requires-Dist: sphinx-github-changelog==1.2.1; extra == "docs"
|
77
77
|
|
78
78
|
<h1 align="center">
|
79
|
-
|
79
|
+
Cool-Seq-Tool
|
80
80
|
</h1>
|
81
81
|
|
82
|
-
[](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://github.com/genomicmedlab/cool-seq-tool/actions/checks.yaml)
|
82
|
+
[](https://pypi.python.org/pypi/cool-seq-tool) [](https://doi.org/10.5281/zenodo.14007783) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://github.com/genomicmedlab/cool-seq-tool/actions/checks.yaml)
|
83
83
|
|
84
84
|
---
|
85
85
|
|
@@ -90,18 +90,18 @@ CoolSeqTool
|
|
90
90
|
## Overview
|
91
91
|
|
92
92
|
<!-- description -->
|
93
|
-
The **
|
93
|
+
The Common Operations On Lots-Of Sequences Tool, **Cool-Seq-Tool**, provides:
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
|
95
|
+
- A Pythonic API on top of sequence data of interest to tertiary analysis tools, including mappings between gene names and transcripts, [MANE transcript](https://www.ncbi.nlm.nih.gov/refseq/MANE/) descriptions, and transcript alignment data from the [Universal Transcript Archive](https://github.com/biocommons/uta)
|
96
|
+
- Augmented access to the [SeqRepo](https://github.com/biocommons/biocommons.seqrepo) database, including multiple additional methods and tools
|
97
|
+
- Mapping tools, including a transcript selection algorithm for selecting a representative transcript defined [here](https://coolseqtool.readthedocs.io/stable/transcript_selection.html), that combine the above to support translation between references sequences, annotation layers, and transcripts
|
98
98
|
<!-- /description -->
|
99
99
|
|
100
100
|
---
|
101
101
|
|
102
102
|
## Install
|
103
103
|
|
104
|
-
|
104
|
+
Cool-Seq-Tool is available on [PyPI](https://pypi.org/project/cool-seq-tool)
|
105
105
|
|
106
106
|
```shell
|
107
107
|
python3 -m pip install cool-seq-tool
|
@@ -113,7 +113,7 @@ See the [installation instructions](https://coolseqtool.readthedocs.io/stable/in
|
|
113
113
|
|
114
114
|
## Usage
|
115
115
|
|
116
|
-
All
|
116
|
+
All Cool-Seq-Tool resources can be initialized by way of a top-level class instance:
|
117
117
|
|
118
118
|
```pycon
|
119
119
|
>>> from cool_seq_tool import CoolSeqTool
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<h1 align="center">
|
2
|
+
Cool-Seq-Tool
|
3
|
+
</h1>
|
4
|
+
|
5
|
+
[](https://pypi.python.org/pypi/cool-seq-tool) [](https://doi.org/10.5281/zenodo.14007783) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://github.com/genomicmedlab/cool-seq-tool/actions/checks.yaml)
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
**[Documentation](https://coolseqtool.readthedocs.io/stable/)** · [Installation](https://coolseqtool.readthedocs.io/stable/install.html) · [Usage](https://coolseqtool.readthedocs.io/stable/usage.html) · [API reference](https://coolseqtool.readthedocs.io/stable/reference/index.html)
|
10
|
+
|
11
|
+
---
|
12
|
+
|
13
|
+
## Overview
|
14
|
+
|
15
|
+
<!-- description -->
|
16
|
+
The Common Operations On Lots-Of Sequences Tool, **Cool-Seq-Tool**, provides:
|
17
|
+
|
18
|
+
- A Pythonic API on top of sequence data of interest to tertiary analysis tools, including mappings between gene names and transcripts, [MANE transcript](https://www.ncbi.nlm.nih.gov/refseq/MANE/) descriptions, and transcript alignment data from the [Universal Transcript Archive](https://github.com/biocommons/uta)
|
19
|
+
- Augmented access to the [SeqRepo](https://github.com/biocommons/biocommons.seqrepo) database, including multiple additional methods and tools
|
20
|
+
- Mapping tools, including a transcript selection algorithm for selecting a representative transcript defined [here](https://coolseqtool.readthedocs.io/stable/transcript_selection.html), that combine the above to support translation between references sequences, annotation layers, and transcripts
|
21
|
+
<!-- /description -->
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
## Install
|
26
|
+
|
27
|
+
Cool-Seq-Tool is available on [PyPI](https://pypi.org/project/cool-seq-tool)
|
28
|
+
|
29
|
+
```shell
|
30
|
+
python3 -m pip install cool-seq-tool
|
31
|
+
```
|
32
|
+
|
33
|
+
See the [installation instructions](https://coolseqtool.readthedocs.io/stable/install.html) in the documentation for a description of dependency setup requirements.
|
34
|
+
|
35
|
+
---
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
All Cool-Seq-Tool resources can be initialized by way of a top-level class instance:
|
40
|
+
|
41
|
+
```pycon
|
42
|
+
>>> from cool_seq_tool import CoolSeqTool
|
43
|
+
>>> from cool_seq_tool.schemas import AnnotationLayer, CoordinateType
|
44
|
+
>>> cst = CoolSeqTool()
|
45
|
+
>>> result = await cst.mane_transcript.get_mane_transcript(
|
46
|
+
... "NP_004324.2",
|
47
|
+
... 599,
|
48
|
+
... AnnotationLayer.PROTEIN,
|
49
|
+
... coordinate_type=CoordinateType.INTER_RESIDUE,
|
50
|
+
... )
|
51
|
+
>>> result.gene, result.refseq, result.status
|
52
|
+
('EGFR', 'NM_005228.5', <TranscriptPriority.MANE_SELECT: 'mane_select'>)
|
53
|
+
```
|
54
|
+
|
55
|
+
---
|
56
|
+
|
57
|
+
## Feedback and contributing
|
58
|
+
|
59
|
+
We welcome bug reports, feature requests, and code contributions from users and interested collaborators. The [documentation](https://coolseqtool.readthedocs.io/stable/contributing.html) contains guidance for submitting feedback and contributing new code.
|
@@ -17,7 +17,7 @@ Create a virtual environment and install :ref:`all dependency groups<dependency-
|
|
17
17
|
|
18
18
|
python3 -m venv venv
|
19
19
|
source venv/bin/activate
|
20
|
-
python3 -m pip install -e ".[dev,
|
20
|
+
python3 -m pip install -e ".[dev,tests,docs]"
|
21
21
|
|
22
22
|
We use `pre-commit <https://pre-commit.com/#usage>`_ to run conformance tests before commits. This provides checks for:
|
23
23
|
|
@@ -16,15 +16,15 @@ Cool-Seq-Tool |version|
|
|
16
16
|
:alt: tests status
|
17
17
|
:target: https://github.com/genomicmedlab/cool-seq-tool/actions/workflows/checks.yaml
|
18
18
|
|
19
|
-
The **
|
19
|
+
The Common Operations On Lots-Of Sequences Tool, **Cool-Seq-Tool**, provides:
|
20
20
|
|
21
|
-
* A Pythonic API on top of sequence data of interest to tertiary analysis tools, including mappings between gene names and transcripts, `MANE transcript <https://www.ncbi.nlm.nih.gov/refseq/MANE/>`_ descriptions, and the `Universal Transcript Archive <https://github.com/biocommons/uta>`_
|
21
|
+
* A Pythonic API on top of sequence data of interest to tertiary analysis tools, including mappings between gene names and transcripts, `MANE transcript <https://www.ncbi.nlm.nih.gov/refseq/MANE/>`_ descriptions, and transcript alignment data from the `Universal Transcript Archive <https://github.com/biocommons/uta>`_
|
22
22
|
* Augmented access to the `SeqRepo <https://github.com/biocommons/biocommons.seqrepo>`_ database, including multiple additional methods and tools
|
23
|
-
* Mapping tools that combine the above to support translation between various references sequences and annotation layers, and
|
23
|
+
* Mapping tools, including a transcript selection algorithm for selecting a representative transcript defined :ref:`here <transcript_selection_policy>`, that combine the above to support translation between various references sequences and annotation layers, and transcripts
|
24
24
|
|
25
25
|
See the :ref:`Installation <installation>` and :ref:`Usage <usage>` pages for information on getting started. Individual classes and methods are documented within the :ref:`API reference <api_reference>`.
|
26
26
|
|
27
|
-
|
27
|
+
Cool-Seq-Tool was created to support the `Knowledgebase Integration Project <https://cancervariants.org/projects/integration/>`_ of the `Variant Interpretation for Cancer Consortium (VICC) <https://cancervariants.org/>`_. It is developed primarily by the `Wagner Lab <https://www.nationwidechildrens.org/specialties/institute-for-genomic-medicine/research-labs/wagner-lab>`_. Full source code is available on `GitHub <https://github.com/genomicmedlab/cool-seq-tool>`_.
|
28
28
|
|
29
29
|
.. toctree::
|
30
30
|
:hidden:
|
@@ -24,7 +24,7 @@ Install Cool-Seq-Tool from `PyPI <https://pypi.org/project/cool-seq-tool/>`_:
|
|
24
24
|
Cool-Seq-Tool provides extra dependency groups for development and testing purposes. Most users won't need to install them.
|
25
25
|
|
26
26
|
* ``dev`` includes packages for linting and performing other kinds of quality checks
|
27
|
-
* ``
|
27
|
+
* ``tests`` includes packages for running tests
|
28
28
|
* ``docs`` includes packages for writing and building documentation
|
29
29
|
|
30
30
|
Set up UTA
|
@@ -28,8 +28,9 @@ All compatible transcripts are evaluated and ordered against the below criteria.
|
|
28
28
|
#. Transcript is annotated as a `MANE Select` transcript
|
29
29
|
#. Transcript is annotated as a `MANE Plus Clinical` transcript
|
30
30
|
#. Transcript is the longest-compatible remaining transcript
|
31
|
-
#. Transcript is the first-published (lowest-numbered RefSeq/Ensembl accession) remaining transcript
|
32
31
|
|
33
|
-
|
32
|
+
#. If there is a tie, choose the first-published (lowest-numbered RefSeq/Ensembl accession) transcript
|
34
33
|
|
35
|
-
|
34
|
+
.. note::
|
35
|
+
|
36
|
+
We always prefer the most recent version of a transcript associated with an assembly.
|
@@ -30,7 +30,7 @@ Descriptions and examples of functions can be found in the :ref:`API Reference <
|
|
30
30
|
|
31
31
|
.. note::
|
32
32
|
|
33
|
-
Many component classes in
|
33
|
+
Many component classes in Cool-Seq-Tool, including :py:class:`UtaDatabase <cool_seq_tool.sources.uta_database.UtaDatabase>`, :py:class:`ExonGenomicCoordsMapper <cool_seq_tool.mappers.exon_genomic_coords.ExonGenomicCoordsMapper>`, and :py:class:`ManeTranscript <cool_seq_tool.mappers.mane_transcript>`, define public methods as ``async``. This means that, when used inside another function, they must be called with ``await``:
|
34
34
|
|
35
35
|
.. code-block:: python
|
36
36
|
|
@@ -33,14 +33,14 @@ dependencies = [
|
|
33
33
|
"biocommons.seqrepo",
|
34
34
|
"pydantic == 2.*",
|
35
35
|
"ga4gh.vrs ~= 2.0.0a10",
|
36
|
-
"wags-tails ~= 0.
|
36
|
+
"wags-tails ~= 0.2.2",
|
37
37
|
"bioutils",
|
38
38
|
]
|
39
39
|
dynamic = ["version"]
|
40
40
|
|
41
41
|
[project.optional-dependencies]
|
42
42
|
dev = ["pre-commit>=3.7.1", "ipython", "ipykernel", "psycopg2-binary", "ruff==0.5.0"]
|
43
|
-
|
43
|
+
tests = ["pytest", "pytest-cov", "pytest-asyncio==0.18.3", "mock"]
|
44
44
|
docs = [
|
45
45
|
"sphinx==6.1.3",
|
46
46
|
"sphinx-autodoc-typehints==1.22.0",
|
{cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/mappers/exon_genomic_coords.py
RENAMED
@@ -87,7 +87,9 @@ class GenomicTxSeg(BaseModelForbidExtra):
|
|
87
87
|
"""Model for representing a boundary for a transcript segment."""
|
88
88
|
|
89
89
|
seg: TxSegment | None = Field(None, description="Transcript segment.")
|
90
|
-
gene: StrictStr | None = Field(
|
90
|
+
gene: StrictStr | None = Field(
|
91
|
+
None, description="Valid, case-sensitive HGNC gene symbol."
|
92
|
+
)
|
91
93
|
genomic_ac: StrictStr | None = Field(None, description="RefSeq genomic accession.")
|
92
94
|
tx_ac: StrictStr | None = Field(None, description="RefSeq transcript accession.")
|
93
95
|
errors: list[StrictStr] = Field([], description="Error messages.")
|
@@ -139,7 +141,9 @@ class GenomicTxSeg(BaseModelForbidExtra):
|
|
139
141
|
class GenomicTxSegService(BaseModelForbidExtra):
|
140
142
|
"""Service model for genomic and transcript data."""
|
141
143
|
|
142
|
-
gene: StrictStr | None = Field(
|
144
|
+
gene: StrictStr | None = Field(
|
145
|
+
None, description="Valid, case-sensitive HGNC gene symbol."
|
146
|
+
)
|
143
147
|
genomic_ac: StrictStr | None = Field(None, description="RefSeq genomic accession.")
|
144
148
|
tx_ac: StrictStr | None = Field(None, description="RefSeq transcript accession.")
|
145
149
|
seg_start: TxSegment | None = Field(None, description="Start transcript segment.")
|
@@ -292,7 +296,7 @@ class ExonGenomicCoordsMapper:
|
|
292
296
|
('NC_000001.11', 154192135, 154170399)
|
293
297
|
|
294
298
|
:param transcript: RefSeq transcript accession
|
295
|
-
:param gene: HGNC gene symbol
|
299
|
+
:param gene: Valid, case-sensitive HGNC gene symbol
|
296
300
|
:param exon_start: Starting transcript exon number (1-based). If not provided,
|
297
301
|
must provide ``exon_end``
|
298
302
|
:param exon_start_offset: Starting exon offset
|
@@ -335,9 +339,6 @@ class ExonGenomicCoordsMapper:
|
|
335
339
|
if errors:
|
336
340
|
return _return_service_errors(errors)
|
337
341
|
|
338
|
-
if gene:
|
339
|
-
gene = gene.upper()
|
340
|
-
|
341
342
|
# Get aligned genomic data (hgnc gene, alt_ac, alt_start_i, alt_end_i, strand)
|
342
343
|
# for exon(s)
|
343
344
|
(
|
@@ -455,7 +456,7 @@ class ExonGenomicCoordsMapper:
|
|
455
456
|
following the breakpoint for the 3' end. For the negative strand, adjacent
|
456
457
|
is defined as the exon following the breakpoint for the 5' end and the exon
|
457
458
|
preceding the breakpoint for the 3' end.
|
458
|
-
:param gene:
|
459
|
+
:param gene: A valid, case-sensitive HGNC symbol. Must be given if no ``transcript``
|
459
460
|
value is provided.
|
460
461
|
:param coordinate_type: Coordinate type for ``seg_start_genomic`` and
|
461
462
|
``seg_end_genomic``
|
@@ -473,9 +474,6 @@ class ExonGenomicCoordsMapper:
|
|
473
474
|
if errors:
|
474
475
|
return _return_service_errors(errors)
|
475
476
|
|
476
|
-
if gene is not None:
|
477
|
-
gene = gene.upper()
|
478
|
-
|
479
477
|
params = {}
|
480
478
|
|
481
479
|
if seg_start_genomic:
|
@@ -630,7 +628,7 @@ class ExonGenomicCoordsMapper:
|
|
630
628
|
must provide ``tx_exon_end``
|
631
629
|
:param tx_exon_end: Transcript's exon end coordinates. If not provided, must
|
632
630
|
provide ``tx_exon_start``
|
633
|
-
:param gene: HGNC gene symbol
|
631
|
+
:param gene: A valid, case-sensitive HGNC gene symbol
|
634
632
|
:return: Tuple containing aligned genomic data for start and end exon and
|
635
633
|
warnings if found
|
636
634
|
"""
|
@@ -755,7 +753,7 @@ class ExonGenomicCoordsMapper:
|
|
755
753
|
:param transcript: The transcript to use. If this is not given, we will try the
|
756
754
|
following transcripts: MANE Select, MANE Clinical Plus, Longest Remaining
|
757
755
|
Compatible Transcript
|
758
|
-
:param gene: HGNC gene symbol
|
756
|
+
:param gene: Valid, case-sensitive HGNC gene symbol
|
759
757
|
:param get_nearest_transcript_junction: If ``True``, this will return the
|
760
758
|
adjacent exon if the position specified by``seg_start_genomic`` or
|
761
759
|
``seg_end_genomic`` does not occur on an exon. For the positive strand, adjacent
|
@@ -1062,7 +1060,7 @@ class ExonGenomicCoordsMapper:
|
|
1062
1060
|
:param genomic_ac: Genomic RefSeq accession
|
1063
1061
|
:param genomic_pos: Genomic position where the transcript segment occurs
|
1064
1062
|
:param is_seg_start: Whether or not ``genomic_pos`` represents the start position.
|
1065
|
-
:param gene: HGNC gene symbol
|
1063
|
+
:param gene: Valid, case-sensitive HGNC gene symbol
|
1066
1064
|
:param tx_ac: Transcript RefSeq accession. If not provided, will use MANE
|
1067
1065
|
transcript
|
1068
1066
|
:return: Transcript segment data and associated genomic metadata
|
@@ -1171,14 +1169,32 @@ class ExonGenomicCoordsMapper:
|
|
1171
1169
|
:param end: Genomic coordinate of breakpoint
|
1172
1170
|
:return: Exon number corresponding to adjacent exon. Will be 0-based
|
1173
1171
|
"""
|
1174
|
-
|
1172
|
+
# If a transcript has only one exon, return 0
|
1173
|
+
if len(tx_exons_genomic_coords) == 1:
|
1174
|
+
return 0
|
1175
|
+
|
1176
|
+
# Check if a breakpoint occurs before/after the transcript boundaries
|
1177
|
+
bp = start if start else end
|
1178
|
+
exon_list_len = len(tx_exons_genomic_coords) - 1
|
1179
|
+
|
1180
|
+
if strand == Strand.POSITIVE:
|
1181
|
+
if bp < tx_exons_genomic_coords[0].alt_start_i:
|
1182
|
+
return 0
|
1183
|
+
if bp > tx_exons_genomic_coords[exon_list_len].alt_end_i:
|
1184
|
+
return exon_list_len
|
1185
|
+
if strand == Strand.NEGATIVE:
|
1186
|
+
if bp > tx_exons_genomic_coords[0].alt_end_i:
|
1187
|
+
return 0
|
1188
|
+
if bp < tx_exons_genomic_coords[exon_list_len].alt_start_i:
|
1189
|
+
return exon_list_len
|
1190
|
+
|
1191
|
+
for i in range(exon_list_len):
|
1175
1192
|
exon = tx_exons_genomic_coords[i]
|
1176
1193
|
if start == exon.alt_start_i:
|
1177
1194
|
break
|
1178
1195
|
if end == exon.alt_end_i:
|
1179
1196
|
break
|
1180
1197
|
next_exon = tx_exons_genomic_coords[i + 1]
|
1181
|
-
bp = start if start else end
|
1182
1198
|
if strand == Strand.POSITIVE:
|
1183
1199
|
lte_exon = exon
|
1184
1200
|
gte_exon = next_exon
|
@@ -1187,6 +1203,7 @@ class ExonGenomicCoordsMapper:
|
|
1187
1203
|
gte_exon = exon
|
1188
1204
|
if bp >= lte_exon.alt_end_i and bp <= gte_exon.alt_start_i:
|
1189
1205
|
break
|
1206
|
+
|
1190
1207
|
# Return current exon if end position is provided, next exon if start position
|
1191
1208
|
# is provided.
|
1192
1209
|
return exon.ord if end else exon.ord + 1
|
{cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/sources/mane_transcript_mappings.py
RENAMED
@@ -61,7 +61,9 @@ class ManeTranscriptMappings:
|
|
61
61
|
location information). The list is sorted so that a MANE Select entry comes
|
62
62
|
first, followed by a MANE Plus Clinical entry, if available.
|
63
63
|
"""
|
64
|
-
data = self.df.filter(
|
64
|
+
data = self.df.filter(
|
65
|
+
pl.col("symbol").str.to_uppercase() == gene_symbol.upper()
|
66
|
+
)
|
65
67
|
|
66
68
|
if len(data) == 0:
|
67
69
|
_logger.warning(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: cool_seq_tool
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.9.0
|
4
4
|
Summary: Common Operation on Lots of Sequences Tool
|
5
5
|
Author: Kori Kuzma, James Stevenson, Katie Stahl, Alex Wagner
|
6
6
|
License: MIT License
|
@@ -53,7 +53,7 @@ Requires-Dist: hgvs
|
|
53
53
|
Requires-Dist: biocommons.seqrepo
|
54
54
|
Requires-Dist: pydantic==2.*
|
55
55
|
Requires-Dist: ga4gh.vrs~=2.0.0a10
|
56
|
-
Requires-Dist: wags-tails~=0.
|
56
|
+
Requires-Dist: wags-tails~=0.2.2
|
57
57
|
Requires-Dist: bioutils
|
58
58
|
Provides-Extra: dev
|
59
59
|
Requires-Dist: pre-commit>=3.7.1; extra == "dev"
|
@@ -61,11 +61,11 @@ Requires-Dist: ipython; extra == "dev"
|
|
61
61
|
Requires-Dist: ipykernel; extra == "dev"
|
62
62
|
Requires-Dist: psycopg2-binary; extra == "dev"
|
63
63
|
Requires-Dist: ruff==0.5.0; extra == "dev"
|
64
|
-
Provides-Extra:
|
65
|
-
Requires-Dist: pytest; extra == "
|
66
|
-
Requires-Dist: pytest-cov; extra == "
|
67
|
-
Requires-Dist: pytest-asyncio==0.18.3; extra == "
|
68
|
-
Requires-Dist: mock; extra == "
|
64
|
+
Provides-Extra: tests
|
65
|
+
Requires-Dist: pytest; extra == "tests"
|
66
|
+
Requires-Dist: pytest-cov; extra == "tests"
|
67
|
+
Requires-Dist: pytest-asyncio==0.18.3; extra == "tests"
|
68
|
+
Requires-Dist: mock; extra == "tests"
|
69
69
|
Provides-Extra: docs
|
70
70
|
Requires-Dist: sphinx==6.1.3; extra == "docs"
|
71
71
|
Requires-Dist: sphinx-autodoc-typehints==1.22.0; extra == "docs"
|
@@ -76,10 +76,10 @@ Requires-Dist: furo==2023.3.27; extra == "docs"
|
|
76
76
|
Requires-Dist: sphinx-github-changelog==1.2.1; extra == "docs"
|
77
77
|
|
78
78
|
<h1 align="center">
|
79
|
-
|
79
|
+
Cool-Seq-Tool
|
80
80
|
</h1>
|
81
81
|
|
82
|
-
[](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://github.com/genomicmedlab/cool-seq-tool/actions/checks.yaml)
|
82
|
+
[](https://pypi.python.org/pypi/cool-seq-tool) [](https://doi.org/10.5281/zenodo.14007783) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://github.com/genomicmedlab/cool-seq-tool/actions/checks.yaml)
|
83
83
|
|
84
84
|
---
|
85
85
|
|
@@ -90,18 +90,18 @@ CoolSeqTool
|
|
90
90
|
## Overview
|
91
91
|
|
92
92
|
<!-- description -->
|
93
|
-
The **
|
93
|
+
The Common Operations On Lots-Of Sequences Tool, **Cool-Seq-Tool**, provides:
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
|
95
|
+
- A Pythonic API on top of sequence data of interest to tertiary analysis tools, including mappings between gene names and transcripts, [MANE transcript](https://www.ncbi.nlm.nih.gov/refseq/MANE/) descriptions, and transcript alignment data from the [Universal Transcript Archive](https://github.com/biocommons/uta)
|
96
|
+
- Augmented access to the [SeqRepo](https://github.com/biocommons/biocommons.seqrepo) database, including multiple additional methods and tools
|
97
|
+
- Mapping tools, including a transcript selection algorithm for selecting a representative transcript defined [here](https://coolseqtool.readthedocs.io/stable/transcript_selection.html), that combine the above to support translation between references sequences, annotation layers, and transcripts
|
98
98
|
<!-- /description -->
|
99
99
|
|
100
100
|
---
|
101
101
|
|
102
102
|
## Install
|
103
103
|
|
104
|
-
|
104
|
+
Cool-Seq-Tool is available on [PyPI](https://pypi.org/project/cool-seq-tool)
|
105
105
|
|
106
106
|
```shell
|
107
107
|
python3 -m pip install cool-seq-tool
|
@@ -113,7 +113,7 @@ See the [installation instructions](https://coolseqtool.readthedocs.io/stable/in
|
|
113
113
|
|
114
114
|
## Usage
|
115
115
|
|
116
|
-
All
|
116
|
+
All Cool-Seq-Tool resources can be initialized by way of a top-level class instance:
|
117
117
|
|
118
118
|
```pycon
|
119
119
|
>>> from cool_seq_tool import CoolSeqTool
|
@@ -9,7 +9,6 @@ pyproject.toml
|
|
9
9
|
.github/ISSUE_TEMPLATE/bug-report.yaml
|
10
10
|
.github/ISSUE_TEMPLATE/feature-request.yaml
|
11
11
|
.github/workflows/checks.yaml
|
12
|
-
.github/workflows/close_issue.yml
|
13
12
|
.github/workflows/pr-priority-label.yaml
|
14
13
|
.github/workflows/release.yml
|
15
14
|
.github/workflows/stale.yaml
|
@@ -7,7 +7,7 @@ hgvs
|
|
7
7
|
biocommons.seqrepo
|
8
8
|
pydantic==2.*
|
9
9
|
ga4gh.vrs~=2.0.0a10
|
10
|
-
wags-tails~=0.
|
10
|
+
wags-tails~=0.2.2
|
11
11
|
bioutils
|
12
12
|
|
13
13
|
[dev]
|
@@ -26,7 +26,7 @@ sphinxext-opengraph==0.8.2
|
|
26
26
|
furo==2023.3.27
|
27
27
|
sphinx-github-changelog==1.2.1
|
28
28
|
|
29
|
-
[
|
29
|
+
[tests]
|
30
30
|
pytest
|
31
31
|
pytest-cov
|
32
32
|
pytest-asyncio==0.18.3
|
@@ -277,6 +277,21 @@ def nm_001105539_exons_genomic_coords():
|
|
277
277
|
]
|
278
278
|
|
279
279
|
|
280
|
+
@pytest.fixture(scope="session")
|
281
|
+
def mm_001005183_1_exons():
|
282
|
+
"""Create test fixture for NM_001005183.1 exons and genomic coordinates"""
|
283
|
+
return [
|
284
|
+
_ExonCoord(
|
285
|
+
ord=0,
|
286
|
+
tx_start_i=0,
|
287
|
+
tx_end_i=939,
|
288
|
+
alt_start_i=55426253,
|
289
|
+
alt_end_i=55427192,
|
290
|
+
alt_strand=Strand.POSITIVE,
|
291
|
+
)
|
292
|
+
]
|
293
|
+
|
294
|
+
|
280
295
|
@pytest.fixture(scope="session")
|
281
296
|
def tpm3_1_8_start_genomic():
|
282
297
|
"""Create test fixture for genomic data for exon 1, 8"""
|
@@ -806,7 +806,10 @@ async def test_get_start_end_exon_coords(test_egc_mapper):
|
|
806
806
|
|
807
807
|
@pytest.mark.asyncio()
|
808
808
|
async def test_get_adjacent_exon(
|
809
|
-
test_egc_mapper,
|
809
|
+
test_egc_mapper,
|
810
|
+
nm_152263_exons_genomic_coords,
|
811
|
+
nm_001105539_exons_genomic_coords,
|
812
|
+
mm_001005183_1_exons,
|
810
813
|
):
|
811
814
|
"""Test that get_adjacent_exon works properly"""
|
812
815
|
resp = test_egc_mapper._get_adjacent_exon(
|
@@ -840,6 +843,41 @@ async def test_get_adjacent_exon(
|
|
840
843
|
)
|
841
844
|
assert resp == 4
|
842
845
|
|
846
|
+
# Check cases where breakpoint occurs in before/after transcript boundaries
|
847
|
+
resp = test_egc_mapper._get_adjacent_exon(
|
848
|
+
tx_exons_genomic_coords=nm_001105539_exons_genomic_coords,
|
849
|
+
start=80486220,
|
850
|
+
strand=Strand.POSITIVE,
|
851
|
+
)
|
852
|
+
assert resp == 0
|
853
|
+
resp = test_egc_mapper._get_adjacent_exon(
|
854
|
+
tx_exons_genomic_coords=nm_001105539_exons_genomic_coords,
|
855
|
+
start=80526285,
|
856
|
+
strand=Strand.POSITIVE,
|
857
|
+
)
|
858
|
+
assert resp == 5
|
859
|
+
resp = test_egc_mapper._get_adjacent_exon(
|
860
|
+
tx_exons_genomic_coords=nm_152263_exons_genomic_coords,
|
861
|
+
end=154192110,
|
862
|
+
strand=Strand.NEGATIVE,
|
863
|
+
)
|
864
|
+
assert resp == 0
|
865
|
+
resp = test_egc_mapper._get_adjacent_exon(
|
866
|
+
tx_exons_genomic_coords=nm_152263_exons_genomic_coords,
|
867
|
+
end=154161809,
|
868
|
+
strand=Strand.NEGATIVE,
|
869
|
+
)
|
870
|
+
assert resp == 9
|
871
|
+
|
872
|
+
# Check cases where transcript only has one exon and breakpoint does not occur
|
873
|
+
# exon
|
874
|
+
resp = test_egc_mapper._get_adjacent_exon(
|
875
|
+
tx_exons_genomic_coords=mm_001005183_1_exons,
|
876
|
+
start=55411058,
|
877
|
+
strand=Strand.POSITIVE,
|
878
|
+
)
|
879
|
+
assert resp == 0
|
880
|
+
|
843
881
|
|
844
882
|
def test_is_exonic_breakpoint(test_egc_mapper, nm_001105539_exons_genomic_coords):
|
845
883
|
"""Test is breakpoint occurs on exon"""
|
@@ -1162,7 +1200,7 @@ async def test_wee1(test_egc_mapper, wee1_exon2_exon11, mane_wee1_exon2_exon11):
|
|
1162
1200
|
"seg_start_genomic": 9597639,
|
1163
1201
|
"seg_end_genomic": 9609996,
|
1164
1202
|
"transcript": "NM_003390.3",
|
1165
|
-
"gene": "
|
1203
|
+
"gene": "WEE1",
|
1166
1204
|
}
|
1167
1205
|
g_to_t_resp = await test_egc_mapper.genomic_to_tx_segment(**inputs)
|
1168
1206
|
genomic_tx_seg_service_checks(g_to_t_resp, wee1_exon2_exon11)
|
@@ -1177,7 +1215,7 @@ async def test_wee1(test_egc_mapper, wee1_exon2_exon11, mane_wee1_exon2_exon11):
|
|
1177
1215
|
"genomic_ac": "NC_000011.9",
|
1178
1216
|
"seg_start_genomic": 9597639, # GRCh38 coords: 9576092
|
1179
1217
|
"seg_end_genomic": 9609996, # GRCh38 coords: 9588449
|
1180
|
-
"gene": "
|
1218
|
+
"gene": "WEE1",
|
1181
1219
|
}
|
1182
1220
|
g_to_t_resp = await test_egc_mapper.genomic_to_tx_segment(**inputs)
|
1183
1221
|
genomic_tx_seg_service_checks(g_to_t_resp, mane_wee1_exon2_exon11)
|
@@ -1216,12 +1254,6 @@ async def test_transcript_to_genomic(
|
|
1216
1254
|
expected.seg_end.genomic_location.start = 154170399
|
1217
1255
|
genomic_tx_seg_service_checks(resp, expected)
|
1218
1256
|
|
1219
|
-
resp = await test_egc_mapper.tx_segment_to_genomic(
|
1220
|
-
exon_start=None, exon_end=8, gene="tpm3", transcript="NM_152263.3"
|
1221
|
-
)
|
1222
|
-
expected.seg_end.genomic_location.start = 154170399
|
1223
|
-
genomic_tx_seg_service_checks(resp, expected)
|
1224
|
-
|
1225
1257
|
expected = tpm3_exon1_exon8.model_copy(deep=True)
|
1226
1258
|
resp = await test_egc_mapper.tx_segment_to_genomic(
|
1227
1259
|
exon_start=1, exon_end=8, exon_end_offset=-5, transcript="NM_152263.3"
|
@@ -1371,7 +1403,7 @@ async def test_invalid(test_egc_mapper):
|
|
1371
1403
|
gene="dummy gene",
|
1372
1404
|
)
|
1373
1405
|
genomic_tx_seg_service_checks(resp, is_valid=False)
|
1374
|
-
assert resp.errors == ["Expected gene,
|
1406
|
+
assert resp.errors == ["Expected gene, dummy gene, but found TPM3"]
|
1375
1407
|
|
1376
1408
|
# Invalid accession
|
1377
1409
|
resp = await test_egc_mapper.genomic_to_tx_segment(
|
@@ -1,18 +0,0 @@
|
|
1
|
-
name: Close issues related to a merged pull request based on staging branch.
|
2
|
-
|
3
|
-
on:
|
4
|
-
pull_request:
|
5
|
-
types: [closed]
|
6
|
-
branches:
|
7
|
-
- staging
|
8
|
-
|
9
|
-
jobs:
|
10
|
-
closeIssueOnPrMergeTrigger:
|
11
|
-
|
12
|
-
runs-on: ubuntu-latest
|
13
|
-
|
14
|
-
steps:
|
15
|
-
- name: Closes issues related to a merged pull request.
|
16
|
-
uses: ldez/gha-mjolnir@v1.0.3
|
17
|
-
env:
|
18
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
cool_seq_tool-0.7.1/README.md
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
<h1 align="center">
|
2
|
-
CoolSeqTool
|
3
|
-
</h1>
|
4
|
-
|
5
|
-
[](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://pypi.python.org/pypi/cool-seq-tool) [](https://github.com/genomicmedlab/cool-seq-tool/actions/checks.yaml)
|
6
|
-
|
7
|
-
---
|
8
|
-
|
9
|
-
**[Documentation](https://coolseqtool.readthedocs.io/stable/)** · [Installation](https://coolseqtool.readthedocs.io/stable/install.html) · [Usage](https://coolseqtool.readthedocs.io/stable/usage.html) · [API reference](https://coolseqtool.readthedocs.io/stable/reference/index.html)
|
10
|
-
|
11
|
-
---
|
12
|
-
|
13
|
-
## Overview
|
14
|
-
|
15
|
-
<!-- description -->
|
16
|
-
The **CoolSeqTool** provides:
|
17
|
-
|
18
|
-
- A Pythonic API on top of sequence data of interest to tertiary analysis tools, including mappings between gene names and transcripts, [MANE transcript](https://www.ncbi.nlm.nih.gov/refseq/MANE/) descriptions, and the [Universal Transcript Archive](https://github.com/biocommons/uta)
|
19
|
-
- Augmented access to the [SeqRepo](https://github.com/biocommons/biocommons.seqrepo) database, including multiple additional methods and tools
|
20
|
-
- Mapping tools that combine the above to support translation between references sequences, annotation layers, and MANE transcripts
|
21
|
-
<!-- /description -->
|
22
|
-
|
23
|
-
---
|
24
|
-
|
25
|
-
## Install
|
26
|
-
|
27
|
-
CoolSeqTool is available on [PyPI](https://pypi.org/project/cool-seq-tool)
|
28
|
-
|
29
|
-
```shell
|
30
|
-
python3 -m pip install cool-seq-tool
|
31
|
-
```
|
32
|
-
|
33
|
-
See the [installation instructions](https://coolseqtool.readthedocs.io/stable/install.html) in the documentation for a description of dependency setup requirements.
|
34
|
-
|
35
|
-
---
|
36
|
-
|
37
|
-
## Usage
|
38
|
-
|
39
|
-
All CoolSeqTool resources can be initialized by way of a top-level class instance:
|
40
|
-
|
41
|
-
```pycon
|
42
|
-
>>> from cool_seq_tool import CoolSeqTool
|
43
|
-
>>> from cool_seq_tool.schemas import AnnotationLayer, CoordinateType
|
44
|
-
>>> cst = CoolSeqTool()
|
45
|
-
>>> result = await cst.mane_transcript.get_mane_transcript(
|
46
|
-
... "NP_004324.2",
|
47
|
-
... 599,
|
48
|
-
... AnnotationLayer.PROTEIN,
|
49
|
-
... coordinate_type=CoordinateType.INTER_RESIDUE,
|
50
|
-
... )
|
51
|
-
>>> result.gene, result.refseq, result.status
|
52
|
-
('EGFR', 'NM_005228.5', <TranscriptPriority.MANE_SELECT: 'mane_select'>)
|
53
|
-
```
|
54
|
-
|
55
|
-
---
|
56
|
-
|
57
|
-
## Feedback and contributing
|
58
|
-
|
59
|
-
We welcome bug reports, feature requests, and code contributions from users and interested collaborators. The [documentation](https://coolseqtool.readthedocs.io/stable/contributing.html) contains guidance for submitting feedback and contributing new code.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/resources/transcript_mapping.tsv
RENAMED
File without changes
|
File without changes
|
File without changes
|
{cool_seq_tool-0.7.1 → cool_seq_tool-0.9.0}/src/cool_seq_tool/sources/transcript_mappings.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|