cool-seq-tool 0.11.0__tar.gz → 0.12.1__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 (62) hide show
  1. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/PKG-INFO +1 -1
  2. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/install.rst +5 -5
  3. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/usage.rst +1 -1
  4. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/schemas.py +10 -2
  5. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/sources/mane_transcript_mappings.py +46 -14
  6. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/sources/uta_database.py +1 -1
  7. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool.egg-info/PKG-INFO +1 -1
  8. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/conftest.py +12 -3
  9. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/mappers/test_mane_transcript.py +2 -2
  10. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/sources/test_mane_transcript_mappings.py +72 -10
  11. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.coveragerc +0 -0
  12. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
  13. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
  14. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.github/workflows/checks.yaml +0 -0
  15. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.github/workflows/pr-priority-label.yaml +0 -0
  16. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.github/workflows/release.yml +0 -0
  17. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.github/workflows/stale.yaml +0 -0
  18. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.gitignore +0 -0
  19. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.pre-commit-config.yaml +0 -0
  20. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/.readthedocs.yaml +0 -0
  21. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/CITATION.cff +0 -0
  22. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/LICENSE +0 -0
  23. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/README.md +0 -0
  24. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/Makefile +0 -0
  25. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/make.bat +0 -0
  26. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/_static/img/biomart.png +0 -0
  27. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/_templates/module_summary.rst +0 -0
  28. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/changelog.rst +0 -0
  29. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/conf.py +0 -0
  30. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/contributing.rst +0 -0
  31. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/index.rst +0 -0
  32. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/license.rst +0 -0
  33. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/reference/index.rst +0 -0
  34. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/docs/source/transcript_selection.rst +0 -0
  35. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/pyproject.toml +0 -0
  36. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/setup.cfg +0 -0
  37. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/__init__.py +0 -0
  38. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/app.py +0 -0
  39. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/handlers/__init__.py +0 -0
  40. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/handlers/seqrepo_access.py +0 -0
  41. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/mappers/__init__.py +0 -0
  42. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/mappers/alignment.py +0 -0
  43. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/mappers/exon_genomic_coords.py +0 -0
  44. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/mappers/liftover.py +0 -0
  45. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/mappers/mane_transcript.py +0 -0
  46. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/resources/__init__.py +0 -0
  47. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/resources/data_files.py +0 -0
  48. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/resources/status.py +0 -0
  49. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/resources/transcript_mapping.tsv +0 -0
  50. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/sources/__init__.py +0 -0
  51. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/sources/transcript_mappings.py +0 -0
  52. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool/utils.py +0 -0
  53. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool.egg-info/SOURCES.txt +0 -0
  54. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool.egg-info/dependency_links.txt +0 -0
  55. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool.egg-info/requires.txt +0 -0
  56. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/src/cool_seq_tool.egg-info/top_level.txt +0 -0
  57. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/handlers/test_seqrepo_access.py +0 -0
  58. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/mappers/test_alignment.py +0 -0
  59. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/mappers/test_exon_genomic_coords.py +0 -0
  60. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/mappers/test_liftover.py +0 -0
  61. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/sources/test_uta_database.py +0 -0
  62. {cool_seq_tool-0.11.0 → cool_seq_tool-0.12.1}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cool_seq_tool
3
- Version: 0.11.0
3
+ Version: 0.12.1
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
@@ -40,11 +40,11 @@ Cool-Seq-Tool requires an available instance of the Universal Transcript Archive
40
40
  createuser -U postgres anonymous
41
41
  createdb -U postgres -O uta_admin uta
42
42
 
43
- export UTA_VERSION=uta_20210129b.pgd.gz # most recent as of 2023/12/05
43
+ export UTA_VERSION=uta_20241220.pgd.gz # most recent as of 2025/03/10
44
44
  curl -O https://dl.biocommons.org/uta/$UTA_VERSION
45
45
  gzip -cdq ${UTA_VERSION} | psql -h localhost -U uta_admin --echo-errors --single-transaction -v ON_ERROR_STOP=1 -d uta -p 5432
46
46
 
47
- By default, Cool-Seq-Tool expects to connect to the UTA database via a PostgreSQL connection served local on port 5432, under the PostgreSQL username ``uta_admin`` and the schema ``uta_20210129b``.
47
+ By default, Cool-Seq-Tool expects to connect to the UTA database via a PostgreSQL connection served local on port 5432, under the PostgreSQL username ``uta_admin`` and the schema ``uta_20241220``.
48
48
 
49
49
  Set up SeqRepo
50
50
  --------------
@@ -56,20 +56,20 @@ Cool-Seq-Tool requires access to `SeqRepo <https://github.com/biocommons/biocomm
56
56
  .. code-block::
57
57
 
58
58
  pip install seqrepo
59
- export SEQREPO_VERSION=2024-02-20
59
+ export SEQREPO_VERSION=2024-12-20
60
60
  sudo mkdir /usr/local/share/seqrepo
61
61
  sudo chown $USER /usr/local/share/seqrepo
62
62
  seqrepo pull -i $SEQREPO_VERSION
63
63
 
64
64
  .. note::
65
65
 
66
- Our lab typically uses the latest SeqRepo release, which is ``2024-02-20`` as of this commit. To check for the presence of newer snapshots, use the ``seqrepo list-remote-instances`` CLI command.
66
+ Our lab typically uses the latest SeqRepo release, which is ``2024-12-20`` as of this commit. To check for the presence of newer snapshots, use the ``seqrepo list-remote-instances`` CLI command.
67
67
 
68
68
  While this should no longer occur with the latest SeqRepo release, some users in the past have reported experiencing the following error:
69
69
 
70
70
  .. code-block::
71
71
 
72
- PermissionError: [Error 13] Permission denied: '/usr/local/share/seqrepo/2024-02-20._fkuefgd' -> '/usr/local/share/seqrepo/2021-01-29'
72
+ PermissionError: [Error 13] Permission denied: '/usr/local/share/seqrepo/2024-12-20._fkuefgd' -> '/usr/local/share/seqrepo/2024-12-20'
73
73
 
74
74
  Try moving data manually with ``sudo``:
75
75
 
@@ -80,7 +80,7 @@ Individual classes will accept arguments upon initialization to set parameters r
80
80
  * - ``SEQREPO_ROOT_DIR``
81
81
  - Path to SeqRepo directory (i.e. contains ``aliases.sqlite3`` database file, and ``sequences`` directory). Used by :py:class:`SeqRepoAccess <cool_seq_tool.handlers.seqrepo_access.SeqRepoAccess>`. If not defined, defaults to ``/usr/local/share/seqrepo/latest``.
82
82
  * - ``UTA_DB_URL``
83
- - A `libpq connection string <https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING>`_, i.e. of the form ``postgresql://<user>:<password>@<host>:<port>/<database>/<schema>``, used by the :py:class:`UtaDatabase <cool_seq_tool.sources.uta_database.UtaDatabase>` class. By default, it is set to ``postgresql://uta_admin:uta@localhost:5432/uta/uta_20210129b``.
83
+ - A `libpq connection string <https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING>`_, i.e. of the form ``postgresql://<user>:<password>@<host>:<port>/<database>/<schema>``, used by the :py:class:`UtaDatabase <cool_seq_tool.sources.uta_database.UtaDatabase>` class. By default, it is set to ``postgresql://uta_admin:uta@localhost:5432/uta/uta_20241220``.
84
84
  * - ``LIFTOVER_CHAIN_37_TO_38``
85
85
  - A path to a `chainfile <https://genome.ucsc.edu/goldenPath/help/chain.html>`_ for lifting from GRCh37 to GRCh38. Used by the :py:class:`LiftOver <cool_seq_tool.mappers.liftover.LiftOver>` class as input to `agct <https://pypi.org/project/agct/>`_. If not provided, agct will fetch it automatically from UCSC.
86
86
  * - ``LIFTOVER_CHAIN_38_TO_37``
@@ -43,11 +43,18 @@ class Assembly(str, Enum):
43
43
  return [item.value for item in cls]
44
44
 
45
45
 
46
+ class ManeStatus(str, Enum):
47
+ """Define constraints for mane status"""
48
+
49
+ SELECT = "mane_select"
50
+ PLUS_CLINICAL = "mane_plus_clinical"
51
+
52
+
46
53
  class TranscriptPriority(str, Enum):
47
54
  """Create Enum for Transcript Priority labels"""
48
55
 
49
- MANE_SELECT = "mane_select"
50
- MANE_PLUS_CLINICAL = "mane_plus_clinical"
56
+ MANE_SELECT = ManeStatus.SELECT.value
57
+ MANE_PLUS_CLINICAL = ManeStatus.PLUS_CLINICAL.value
51
58
  LONGEST_COMPATIBLE_REMAINING = "longest_compatible_remaining"
52
59
  GRCH38 = "grch38"
53
60
 
@@ -137,6 +144,7 @@ class ManeGeneData(BaseModel, extra="forbid"):
137
144
  ncbi_gene_id: StrictInt
138
145
  hgnc_id: StrictInt | None
139
146
  symbol: StrictStr
147
+ status: list[ManeStatus]
140
148
 
141
149
 
142
150
  class ServiceMeta(BaseModelForbidExtra):
@@ -117,26 +117,58 @@ class ManeTranscriptMappings:
117
117
  :param end: Genomic end position. Assumes residue coordinates.
118
118
  :return: Unique MANE gene(s) found for a genomic location
119
119
  """
120
+ # Only interested in rows where genomic location lives
120
121
  mane_rows = self.df.filter(
121
122
  (start >= pl.col("chr_start"))
122
123
  & (end <= pl.col("chr_end"))
123
124
  & (pl.col("GRCh38_chr") == ac)
124
- ).unique(subset=["#NCBI_GeneID"])
125
+ )
125
126
 
126
- if len(mane_rows) == 0:
127
+ if mane_rows.is_empty():
127
128
  return []
128
129
 
129
- mane_rows = mane_rows.with_columns(
130
- pl.col("#NCBI_GeneID")
131
- .str.split_exact(":", 1)
132
- .struct.field("field_1")
133
- .cast(pl.Int32)
134
- .alias("ncbi_gene_id"),
135
- pl.col("HGNC_ID")
136
- .str.split_exact(":", 1)
137
- .struct.field("field_1")
138
- .cast(pl.Int32)
139
- .alias("hgnc_id"),
130
+ # Group rows by NCBI ID, transform values to representation we want, MANE status
131
+ # will be converted to list with DESC order
132
+ mane_rows = mane_rows.group_by("#NCBI_GeneID").agg(
133
+ [
134
+ pl.col("#NCBI_GeneID")
135
+ .first()
136
+ .str.split_exact(":", 1)
137
+ .struct.field("field_1")
138
+ .cast(pl.Int32)
139
+ .alias("ncbi_gene_id"),
140
+ pl.col("HGNC_ID")
141
+ .first()
142
+ .str.split_exact(":", 1)
143
+ .struct.field("field_1")
144
+ .cast(pl.Int32)
145
+ .alias("hgnc_id"),
146
+ pl.col("MANE_status")
147
+ .unique()
148
+ .str.to_lowercase()
149
+ .str.replace_all(" ", "_")
150
+ .alias("status")
151
+ .sort(descending=True),
152
+ pl.col("symbol").first(),
153
+ ]
154
+ )
155
+
156
+ # Sort final rows based on MANE status
157
+ # First by length (which means gene has both select and plus clinical)
158
+ # Then by DESC order
159
+ # Then by NCBI ID ASC order
160
+ mane_rows = (
161
+ mane_rows.with_columns(
162
+ [
163
+ pl.col("status").list.len().alias("status_count"),
164
+ pl.col("status").list.join("_").alias("status_str"),
165
+ pl.col("ncbi_gene_id"),
166
+ ]
167
+ )
168
+ .sort(
169
+ ["status_count", "status_str", "ncbi_gene_id"],
170
+ descending=[True, True, False],
171
+ )
172
+ .drop(["status_count", "status_str", "#NCBI_GeneID"])
140
173
  )
141
- mane_rows = mane_rows.select(["ncbi_gene_id", "hgnc_id", "symbol"])
142
174
  return [ManeGeneData(**mane_gene) for mane_gene in mane_rows.to_dicts()]
@@ -27,7 +27,7 @@ from cool_seq_tool.schemas import (
27
27
  UTADatabaseType = TypeVar("UTADatabaseType", bound="UtaDatabase")
28
28
 
29
29
  UTA_DB_URL = environ.get(
30
- "UTA_DB_URL", "postgresql://uta_admin:uta@localhost:5432/uta/uta_20210129b"
30
+ "UTA_DB_URL", "postgresql://uta_admin:uta@localhost:5432/uta/uta_20241220"
31
31
  )
32
32
 
33
33
  _logger = logging.getLogger(__name__)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cool_seq_tool
3
- Version: 0.11.0
3
+ Version: 0.12.1
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
@@ -340,10 +340,19 @@ def genomic_tx_data():
340
340
  @pytest.fixture(scope="session")
341
341
  def egfr_mane_gene():
342
342
  """Create test fixture for EGFR MANE gene"""
343
- return ManeGeneData(ncbi_gene_id=1956, hgnc_id=3236, symbol="EGFR")
343
+ return ManeGeneData(
344
+ ncbi_gene_id=1956, hgnc_id=3236, symbol="EGFR", status=["mane_select"]
345
+ )
344
346
 
345
347
 
346
348
  @pytest.fixture(scope="session")
347
- def braf_mane_gene():
349
+ def braf_mane_genes():
348
350
  """Create test fixture for BRAF MANE gene"""
349
- return ManeGeneData(ncbi_gene_id=673, hgnc_id=1097, symbol="BRAF")
351
+ return [
352
+ ManeGeneData(
353
+ ncbi_gene_id=673,
354
+ hgnc_id=1097,
355
+ symbol="BRAF",
356
+ status=["mane_select", "mane_plus_clinical"],
357
+ ),
358
+ ]
@@ -143,13 +143,13 @@ def grch38_egfr(egfr_mane_gene):
143
143
 
144
144
 
145
145
  @pytest.fixture(scope="module")
146
- def grch38_braf(braf_mane_gene):
146
+ def grch38_braf(braf_mane_genes):
147
147
  """Create a test fixture for grch38 responses BRAF V600E (genomic)."""
148
148
  params = {
149
149
  "pos": (140753335, 140753336),
150
150
  "status": TranscriptPriority.GRCH38.value,
151
151
  "ac": "NC_000007.14",
152
- "mane_genes": [braf_mane_gene],
152
+ "mane_genes": braf_mane_genes,
153
153
  }
154
154
  return GenomicRepresentation(**params)
155
155
 
@@ -209,28 +209,75 @@ def test_get_mane_data_from_chr_pos(
209
209
 
210
210
 
211
211
  def test_get_genomic_mane_genes(
212
- test_mane_transcript_mappings, braf_mane_gene, egfr_mane_gene
212
+ test_mane_transcript_mappings, braf_mane_genes, egfr_mane_gene
213
213
  ):
214
214
  """Test that get_genomic_mane_genes method works correctly"""
215
215
  new_df = pl.DataFrame(
216
216
  {
217
- "#NCBI_GeneID": ["GeneID:673", "GeneID:673", "GeneID:1956", "GeneID:1"],
217
+ "#NCBI_GeneID": [
218
+ "GeneID:673",
219
+ "GeneID:673",
220
+ "GeneID:1956",
221
+ "GeneID:1",
222
+ "GeneID:2",
223
+ "GeneID:2",
224
+ "GeneID:3",
225
+ ],
218
226
  "Ensembl_Gene": [
219
227
  "ENSG00000157764.14",
220
228
  "ENSG00000157764.14",
221
229
  "ENSG00000146648.21",
222
230
  "ENSG1.1",
231
+ "ENSG1.1",
232
+ "ENSG1.1",
233
+ "ENSG1.1",
234
+ ],
235
+ "HGNC_ID": [
236
+ "HGNC:1097",
237
+ "HGNC:1097",
238
+ "HGNC:3236",
239
+ "HGNC:1",
240
+ "HGNC:2",
241
+ "HGNC:2",
242
+ "HGNC:3",
223
243
  ],
224
- "HGNC_ID": ["HGNC:1097", "HGNC:1097", "HGNC:3236", "HGNC:2"],
225
- "symbol": ["BRAF", "BRAF", "EGFR", "Dummy"],
244
+ "symbol": ["BRAF", "BRAF", "EGFR", "Dummy1", "Dummy2", "Dummy2", "Dummy3"],
226
245
  "GRCh38_chr": [
227
246
  "NC_000007.14",
228
247
  "NC_000007.14",
229
248
  "NC_000007.14",
230
249
  "NC_000007.14",
250
+ "NC_000007.14",
251
+ "NC_000007.14",
252
+ "NC_000007.14",
253
+ ],
254
+ "chr_start": [
255
+ 140719337,
256
+ 140730665,
257
+ 55019017,
258
+ 55019017,
259
+ 55019017,
260
+ 55019017,
261
+ 55019017,
262
+ ],
263
+ "chr_end": [
264
+ 140924929,
265
+ 140924929,
266
+ 55211628,
267
+ 55211628,
268
+ 55211628,
269
+ 55211628,
270
+ 55211628,
271
+ ],
272
+ "MANE_status": [
273
+ "MANE Plus Clinical",
274
+ "MANE Select",
275
+ "MANE Select",
276
+ "MANE Plus Clinical",
277
+ "MANE Select",
278
+ "MANE Plus Clinical",
279
+ "MANE Select",
231
280
  ],
232
- "chr_start": [140719337, 140730665, 55019017, 55019017],
233
- "chr_end": [140924929, 140924929, 55211628, 55211628],
234
281
  }
235
282
  )
236
283
 
@@ -238,14 +285,29 @@ def test_get_genomic_mane_genes(
238
285
  mane_genes = test_mane_transcript_mappings.get_genomic_mane_genes(
239
286
  "NC_000007.14", 140753336, 140753336
240
287
  )
241
- assert mane_genes == [braf_mane_gene]
288
+ assert mane_genes == braf_mane_genes
242
289
 
243
290
  mane_genes = test_mane_transcript_mappings.get_genomic_mane_genes(
244
291
  "NC_000007.14", 55191822, 55191822
245
292
  )
246
- assert len(mane_genes) == 2
247
- assert egfr_mane_gene in mane_genes
248
- assert ManeGeneData(ncbi_gene_id=1, hgnc_id=2, symbol="Dummy") in mane_genes
293
+ assert mane_genes == [
294
+ ManeGeneData(
295
+ ncbi_gene_id=2,
296
+ hgnc_id=2,
297
+ symbol="Dummy2",
298
+ status=["mane_select", "mane_plus_clinical"],
299
+ ),
300
+ ManeGeneData(
301
+ ncbi_gene_id=3, hgnc_id=3, symbol="Dummy3", status=["mane_select"]
302
+ ),
303
+ egfr_mane_gene,
304
+ ManeGeneData(
305
+ ncbi_gene_id=1,
306
+ hgnc_id=1,
307
+ symbol="Dummy1",
308
+ status=["mane_plus_clinical"],
309
+ ),
310
+ ]
249
311
 
250
312
  # No MANE genes found for given genomic location
251
313
  mane_genes = test_mane_transcript_mappings.get_genomic_mane_genes(
File without changes
File without changes
File without changes