allelix 1.8.3__tar.gz → 1.8.4__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.
- {allelix-1.8.3 → allelix-1.8.4}/PKG-INFO +6 -6
- {allelix-1.8.3 → allelix-1.8.4}/README.md +5 -5
- {allelix-1.8.3 → allelix-1.8.4}/allelix/cli.py +22 -5
- {allelix-1.8.3 → allelix-1.8.4}/allelix.egg-info/PKG-INFO +6 -6
- {allelix-1.8.3 → allelix-1.8.4}/pyproject.toml +1 -1
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_cli.py +52 -0
- {allelix-1.8.3 → allelix-1.8.4}/LICENSE +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/alphamissense.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/base.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/cadd.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/clinvar.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/gnomad.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/gwas.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/pharmgkb.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/annotators/snpedia.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/compare.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/config.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/data/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/data/high_value_snps.yaml +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/_versions.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/alphamissense_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/cadd_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/cpic_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/gnomad_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/gwas_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/loader_utils.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/manager.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/pharmgkb_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/schema.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/snpedia_loader.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/databases/snpedia_parser.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/exporters/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/exporters/plink.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/models.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/_helpers.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/ancestrydna.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/base.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/ftdna.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/livingdna.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/myhappygenes.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/myheritage.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/parsers/twentythreeandme.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/py.typed +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/_pipeline.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/diff.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/high_value.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/html.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/json_report.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/methylation.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/reports/terminal.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/utils/__init__.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/utils/allele.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix/utils/build_detect.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix.egg-info/SOURCES.txt +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix.egg-info/dependency_links.txt +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix.egg-info/entry_points.txt +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix.egg-info/requires.txt +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/allelix.egg-info/top_level.txt +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/setup.cfg +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_cli_helpers.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_compare.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_config.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_end_to_end.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_mock_data_invariants.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_models.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_registry.py +0 -0
- {allelix-1.8.3 → allelix-1.8.4}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: allelix
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.4
|
|
4
4
|
Summary: Open-source genotype analysis toolkit. Format-agnostic ingestion, database-agnostic annotation, offline-first.
|
|
5
5
|
Author-email: dial481 <dial481@users.noreply.github.com>
|
|
6
6
|
License-Expression: AGPL-3.0-or-later
|
|
@@ -44,8 +44,8 @@ Open-source command-line toolkit for analyzing raw genotype files from consumer
|
|
|
44
44
|
> HTML/JSON/terminal reports, methylation + pharmacogenomics focused
|
|
45
45
|
> commands, report diffing, persistent config with commercial-mode
|
|
46
46
|
> safety switch. Build auto-detection from position data (ADR-0021).
|
|
47
|
-
> No regex on prose anywhere in production. **Latest: v1.8.
|
|
48
|
-
>
|
|
47
|
+
> No regex on prose anywhere in production. **Latest: v1.8.4** —
|
|
48
|
+
> `--no-cadd` flag for licensing exclusion parity.
|
|
49
49
|
> Release notes:
|
|
50
50
|
> [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
51
51
|
|
|
@@ -98,7 +98,7 @@ Adding a new format means adding one file to `allelix/parsers/` and registering
|
|
|
98
98
|
| GWAS Catalog | ✓ | Public domain (EBI/NHGRI). Trait–SNP associations with p-values and effect sizes. Carrier rule (ADR-0007) requires the user to carry the risk allele. P-value magnitude scoring (ADR-0024) maps continuous p-values to the 0–10 scale; unknown-risk-allele entries fire on rsID match alone but are capped at 3.0. |
|
|
99
99
|
| gnomAD | ✓ | ODbL v1.0. **Enrichment annotator** — adds population allele frequency context to existing annotations. Shows how common each variant is in the general population (~16M exome variants from 730K individuals). A pathogenic variant that 35% of people carry reads very differently from one seen in 0.001%. Pre-built cache downloaded via `db update` (~6GB on disk). Use `--no-gnomad` to skip. |
|
|
100
100
|
| AlphaMissense | ✓ | CC BY 4.0. **Enrichment annotator** — adds DeepMind's protein-structure-based pathogenicity predictions to existing annotations. Scores 71M missense variants on a 0–1 scale: <0.34 = likely benign, >0.564 = likely pathogenic. Complements ClinVar's expert classifications with computational predictions — especially valuable for variants ClinVar hasn't reviewed yet. Pre-built cache downloaded via `db update` (~8GB on disk). Use `--no-alphamissense` to skip. |
|
|
101
|
-
| CADD | ✓ | LicenseRef-CADD (non-commercial). **Enrichment annotator** — adds PHRED-scaled deleteriousness scores from CADD v1.7. Ranks how deleterious any single-nucleotide variant is using 100+ annotation tracks (coding, non-coding, regulatory). PHRED 10 = top 10% most deleterious, 20 = top 1%, 30 = top 0.1%. **Opt-in** — disabled by default (`sources.cadd = false`). Enable via `allelix db update --cadd` or `allelix config set sources.cadd true`. Pre-built cache (~5 GB on disk, ~120M variant keys). Full mode available via pysam for GRCh38 data (`options.cadd_full = true`). Cache mode covers the large majority of variants present in gnomAD, AlphaMissense, and ClinVar — nearly every position allelix can annotate from its other databases. For genotyping chip data (23andMe, AncestryDNA, MyHappyGenes, etc.), cache and full mode produce effectively identical results because chip probes overwhelmingly target known, cataloged variants. Full mode adds coverage for novel or private variants that appear only in whole-genome or whole-exome sequencing data and are not in any pre-computed database. If your input is a genotyping chip file, cache mode is all you need. |
|
|
101
|
+
| CADD | ✓ | LicenseRef-CADD (non-commercial). **Enrichment annotator** — adds PHRED-scaled deleteriousness scores from CADD v1.7. Ranks how deleterious any single-nucleotide variant is using 100+ annotation tracks (coding, non-coding, regulatory). PHRED 10 = top 10% most deleterious, 20 = top 1%, 30 = top 0.1%. **Opt-in** — disabled by default (`sources.cadd = false`). Enable via `allelix db update --cadd` or `allelix config set sources.cadd true`. Use `--no-cadd` to skip enrichment for a single run. Pre-built cache (~5 GB on disk, ~120M variant keys). Full mode available via pysam for GRCh38 data (`options.cadd_full = true`). Cache mode covers the large majority of variants present in gnomAD, AlphaMissense, and ClinVar — nearly every position allelix can annotate from its other databases. For genotyping chip data (23andMe, AncestryDNA, MyHappyGenes, etc.), cache and full mode produce effectively identical results because chip probes overwhelmingly target known, cataloged variants. Full mode adds coverage for novel or private variants that appear only in whole-genome or whole-exome sequencing data and are not in any pre-computed database. If your input is a genotyping chip file, cache mode is all you need. |
|
|
102
102
|
|
|
103
103
|
### Known PharmGKB limitation: reference-genotype rows where ClinVar and CPIC both lack data
|
|
104
104
|
|
|
@@ -155,7 +155,7 @@ allelix config set license.commercial true
|
|
|
155
155
|
allelix config set license.cadd true
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
CLI flags (`--no-gnomad`, `--no-alphamissense`, `--exclude-snpedia`, `--cadd`) override the config for a single run. The config sets the baseline; flags override per-invocation.
|
|
158
|
+
CLI flags (`--no-gnomad`, `--no-alphamissense`, `--no-cadd`, `--exclude-snpedia`, `--cadd`) override the config for a single run. The config sets the baseline; flags override per-invocation.
|
|
159
159
|
|
|
160
160
|
### Database sizes and download times
|
|
161
161
|
|
|
@@ -187,7 +187,7 @@ Allelix source code is licensed under the **GNU Affero General Public License v3
|
|
|
187
187
|
| SNPedia | snpedia.com | CC BY-NC-SA 3.0 US | Attribution required, **non-commercial only**. Use `--exclude-snpedia` to omit. |
|
|
188
188
|
| gnomAD | gnomad.broadinstitute.org | ODbL v1.0 | Attribution required. Population allele frequencies for context; not a clinical annotator. Use `--no-gnomad` to omit. |
|
|
189
189
|
| AlphaMissense | zenodo.org/records/10813168 | CC BY 4.0 | Attribution required. Cheng et al., Science 2023. Missense variant pathogenicity predictions. Use `--no-alphamissense` to omit. |
|
|
190
|
-
| CADD | cadd.gs.washington.edu | LicenseRef-CADD | Attribution required, **non-commercial by default**. Commercial licenses available from UW CoMotion. Opt-in via `allelix db update --cadd`. |
|
|
190
|
+
| CADD | cadd.gs.washington.edu | LicenseRef-CADD | Attribution required, **non-commercial by default**. Commercial licenses available from UW CoMotion. Opt-in via `allelix db update --cadd`. Use `--no-cadd` to omit. |
|
|
191
191
|
|
|
192
192
|
**Commercial users:** When `license.commercial = true`, non-commercial sources are gated by a three-state permission model. SNPedia is permanently blocked (no commercial license is available). CADD is blocked by default but can be unlocked — the University of Washington offers commercial licenses at `https://els2.comotion.uw.edu/product/cadd-scores`; after purchasing, assert your license with `allelix config set license.cadd true` to re-enable CADD in commercial mode. All other databases (ClinVar, PharmGKB, GWAS Catalog, gnomAD, AlphaMissense) are compatible with commercial use. `allelix config show` displays the permission state for each source.
|
|
193
193
|
|
|
@@ -10,8 +10,8 @@ Open-source command-line toolkit for analyzing raw genotype files from consumer
|
|
|
10
10
|
> HTML/JSON/terminal reports, methylation + pharmacogenomics focused
|
|
11
11
|
> commands, report diffing, persistent config with commercial-mode
|
|
12
12
|
> safety switch. Build auto-detection from position data (ADR-0021).
|
|
13
|
-
> No regex on prose anywhere in production. **Latest: v1.8.
|
|
14
|
-
>
|
|
13
|
+
> No regex on prose anywhere in production. **Latest: v1.8.4** —
|
|
14
|
+
> `--no-cadd` flag for licensing exclusion parity.
|
|
15
15
|
> Release notes:
|
|
16
16
|
> [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
17
17
|
|
|
@@ -64,7 +64,7 @@ Adding a new format means adding one file to `allelix/parsers/` and registering
|
|
|
64
64
|
| GWAS Catalog | ✓ | Public domain (EBI/NHGRI). Trait–SNP associations with p-values and effect sizes. Carrier rule (ADR-0007) requires the user to carry the risk allele. P-value magnitude scoring (ADR-0024) maps continuous p-values to the 0–10 scale; unknown-risk-allele entries fire on rsID match alone but are capped at 3.0. |
|
|
65
65
|
| gnomAD | ✓ | ODbL v1.0. **Enrichment annotator** — adds population allele frequency context to existing annotations. Shows how common each variant is in the general population (~16M exome variants from 730K individuals). A pathogenic variant that 35% of people carry reads very differently from one seen in 0.001%. Pre-built cache downloaded via `db update` (~6GB on disk). Use `--no-gnomad` to skip. |
|
|
66
66
|
| AlphaMissense | ✓ | CC BY 4.0. **Enrichment annotator** — adds DeepMind's protein-structure-based pathogenicity predictions to existing annotations. Scores 71M missense variants on a 0–1 scale: <0.34 = likely benign, >0.564 = likely pathogenic. Complements ClinVar's expert classifications with computational predictions — especially valuable for variants ClinVar hasn't reviewed yet. Pre-built cache downloaded via `db update` (~8GB on disk). Use `--no-alphamissense` to skip. |
|
|
67
|
-
| CADD | ✓ | LicenseRef-CADD (non-commercial). **Enrichment annotator** — adds PHRED-scaled deleteriousness scores from CADD v1.7. Ranks how deleterious any single-nucleotide variant is using 100+ annotation tracks (coding, non-coding, regulatory). PHRED 10 = top 10% most deleterious, 20 = top 1%, 30 = top 0.1%. **Opt-in** — disabled by default (`sources.cadd = false`). Enable via `allelix db update --cadd` or `allelix config set sources.cadd true`. Pre-built cache (~5 GB on disk, ~120M variant keys). Full mode available via pysam for GRCh38 data (`options.cadd_full = true`). Cache mode covers the large majority of variants present in gnomAD, AlphaMissense, and ClinVar — nearly every position allelix can annotate from its other databases. For genotyping chip data (23andMe, AncestryDNA, MyHappyGenes, etc.), cache and full mode produce effectively identical results because chip probes overwhelmingly target known, cataloged variants. Full mode adds coverage for novel or private variants that appear only in whole-genome or whole-exome sequencing data and are not in any pre-computed database. If your input is a genotyping chip file, cache mode is all you need. |
|
|
67
|
+
| CADD | ✓ | LicenseRef-CADD (non-commercial). **Enrichment annotator** — adds PHRED-scaled deleteriousness scores from CADD v1.7. Ranks how deleterious any single-nucleotide variant is using 100+ annotation tracks (coding, non-coding, regulatory). PHRED 10 = top 10% most deleterious, 20 = top 1%, 30 = top 0.1%. **Opt-in** — disabled by default (`sources.cadd = false`). Enable via `allelix db update --cadd` or `allelix config set sources.cadd true`. Use `--no-cadd` to skip enrichment for a single run. Pre-built cache (~5 GB on disk, ~120M variant keys). Full mode available via pysam for GRCh38 data (`options.cadd_full = true`). Cache mode covers the large majority of variants present in gnomAD, AlphaMissense, and ClinVar — nearly every position allelix can annotate from its other databases. For genotyping chip data (23andMe, AncestryDNA, MyHappyGenes, etc.), cache and full mode produce effectively identical results because chip probes overwhelmingly target known, cataloged variants. Full mode adds coverage for novel or private variants that appear only in whole-genome or whole-exome sequencing data and are not in any pre-computed database. If your input is a genotyping chip file, cache mode is all you need. |
|
|
68
68
|
|
|
69
69
|
### Known PharmGKB limitation: reference-genotype rows where ClinVar and CPIC both lack data
|
|
70
70
|
|
|
@@ -121,7 +121,7 @@ allelix config set license.commercial true
|
|
|
121
121
|
allelix config set license.cadd true
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
CLI flags (`--no-gnomad`, `--no-alphamissense`, `--exclude-snpedia`, `--cadd`) override the config for a single run. The config sets the baseline; flags override per-invocation.
|
|
124
|
+
CLI flags (`--no-gnomad`, `--no-alphamissense`, `--no-cadd`, `--exclude-snpedia`, `--cadd`) override the config for a single run. The config sets the baseline; flags override per-invocation.
|
|
125
125
|
|
|
126
126
|
### Database sizes and download times
|
|
127
127
|
|
|
@@ -153,7 +153,7 @@ Allelix source code is licensed under the **GNU Affero General Public License v3
|
|
|
153
153
|
| SNPedia | snpedia.com | CC BY-NC-SA 3.0 US | Attribution required, **non-commercial only**. Use `--exclude-snpedia` to omit. |
|
|
154
154
|
| gnomAD | gnomad.broadinstitute.org | ODbL v1.0 | Attribution required. Population allele frequencies for context; not a clinical annotator. Use `--no-gnomad` to omit. |
|
|
155
155
|
| AlphaMissense | zenodo.org/records/10813168 | CC BY 4.0 | Attribution required. Cheng et al., Science 2023. Missense variant pathogenicity predictions. Use `--no-alphamissense` to omit. |
|
|
156
|
-
| CADD | cadd.gs.washington.edu | LicenseRef-CADD | Attribution required, **non-commercial by default**. Commercial licenses available from UW CoMotion. Opt-in via `allelix db update --cadd`. |
|
|
156
|
+
| CADD | cadd.gs.washington.edu | LicenseRef-CADD | Attribution required, **non-commercial by default**. Commercial licenses available from UW CoMotion. Opt-in via `allelix db update --cadd`. Use `--no-cadd` to omit. |
|
|
157
157
|
|
|
158
158
|
**Commercial users:** When `license.commercial = true`, non-commercial sources are gated by a three-state permission model. SNPedia is permanently blocked (no commercial license is available). CADD is blocked by default but can be unlocked — the University of Washington offers commercial licenses at `https://els2.comotion.uw.edu/product/cadd-scores`; after purchasing, assert your license with `allelix config set license.cadd true` to re-enable CADD in commercial mode. All other databases (ClinVar, PharmGKB, GWAS Catalog, gnomAD, AlphaMissense) are compatible with commercial use. `allelix config show` displays the permission state for each source.
|
|
159
159
|
|
|
@@ -214,6 +214,7 @@ def _run_analysis_command(
|
|
|
214
214
|
no_update: bool = False,
|
|
215
215
|
no_gnomad: bool = False,
|
|
216
216
|
no_alphamissense: bool = False,
|
|
217
|
+
no_cadd: bool = False,
|
|
217
218
|
) -> None:
|
|
218
219
|
resolved = resolve_data_dir(data_dir)
|
|
219
220
|
if not no_update:
|
|
@@ -256,12 +257,13 @@ def _run_analysis_command(
|
|
|
256
257
|
ready = [a for a in ready if a.name != "alphamissense"]
|
|
257
258
|
|
|
258
259
|
cadd_annotator = None
|
|
259
|
-
|
|
260
|
+
if not no_cadd:
|
|
261
|
+
from allelix.annotators.cadd import CaddAnnotator
|
|
260
262
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
for a in ready:
|
|
264
|
+
if isinstance(a, CaddAnnotator):
|
|
265
|
+
cadd_annotator = a
|
|
266
|
+
break
|
|
265
267
|
ready = [a for a in ready if a.name != "cadd"]
|
|
266
268
|
|
|
267
269
|
if not_ready:
|
|
@@ -576,6 +578,12 @@ _NO_ALPHAMISSENSE_OPT = click.option(
|
|
|
576
578
|
default=False,
|
|
577
579
|
help="Skip AlphaMissense variant pathogenicity enrichment.",
|
|
578
580
|
)
|
|
581
|
+
_NO_CADD_OPT = click.option(
|
|
582
|
+
"--no-cadd",
|
|
583
|
+
is_flag=True,
|
|
584
|
+
default=False,
|
|
585
|
+
help="Skip CADD deleteriousness score enrichment.",
|
|
586
|
+
)
|
|
579
587
|
_BUILD_OPT = click.option(
|
|
580
588
|
"--build",
|
|
581
589
|
type=click.Choice(["grch37", "grch38", "auto"], case_sensitive=False),
|
|
@@ -672,6 +680,7 @@ def _emit_build_diagnostics(result: object) -> None:
|
|
|
672
680
|
@_NO_UPDATE_OPT
|
|
673
681
|
@_NO_GNOMAD_OPT
|
|
674
682
|
@_NO_ALPHAMISSENSE_OPT
|
|
683
|
+
@_NO_CADD_OPT
|
|
675
684
|
def analyze(
|
|
676
685
|
file_path: Path,
|
|
677
686
|
fmt: str | None,
|
|
@@ -690,6 +699,7 @@ def analyze(
|
|
|
690
699
|
no_update: bool,
|
|
691
700
|
no_gnomad: bool,
|
|
692
701
|
no_alphamissense: bool,
|
|
702
|
+
no_cadd: bool,
|
|
693
703
|
) -> None:
|
|
694
704
|
"""Annotate a genotype file against all ready reference databases."""
|
|
695
705
|
_run_analysis_command(
|
|
@@ -711,6 +721,7 @@ def analyze(
|
|
|
711
721
|
no_update=no_update,
|
|
712
722
|
no_gnomad=no_gnomad,
|
|
713
723
|
no_alphamissense=no_alphamissense,
|
|
724
|
+
no_cadd=no_cadd,
|
|
714
725
|
)
|
|
715
726
|
|
|
716
727
|
|
|
@@ -868,6 +879,7 @@ def compare(file1: Path, file2: Path, fmt1: str | None, fmt2: str | None) -> Non
|
|
|
868
879
|
@_NO_UPDATE_OPT
|
|
869
880
|
@_NO_GNOMAD_OPT
|
|
870
881
|
@_NO_ALPHAMISSENSE_OPT
|
|
882
|
+
@_NO_CADD_OPT
|
|
871
883
|
def methylation(
|
|
872
884
|
file_path: Path,
|
|
873
885
|
fmt: str | None,
|
|
@@ -886,6 +898,7 @@ def methylation(
|
|
|
886
898
|
no_update: bool,
|
|
887
899
|
no_gnomad: bool,
|
|
888
900
|
no_alphamissense: bool,
|
|
901
|
+
no_cadd: bool,
|
|
889
902
|
) -> None:
|
|
890
903
|
"""Methylation-pathway-focused report (MTHFR, MTR, MTRR, COMT, CBS, …)."""
|
|
891
904
|
excluded: set[str] = set()
|
|
@@ -912,6 +925,7 @@ def methylation(
|
|
|
912
925
|
no_update=no_update,
|
|
913
926
|
no_gnomad=no_gnomad,
|
|
914
927
|
no_alphamissense=no_alphamissense,
|
|
928
|
+
no_cadd=no_cadd,
|
|
915
929
|
)
|
|
916
930
|
|
|
917
931
|
|
|
@@ -933,6 +947,7 @@ def methylation(
|
|
|
933
947
|
@_NO_UPDATE_OPT
|
|
934
948
|
@_NO_GNOMAD_OPT
|
|
935
949
|
@_NO_ALPHAMISSENSE_OPT
|
|
950
|
+
@_NO_CADD_OPT
|
|
936
951
|
def pharmacogenomics(
|
|
937
952
|
file_path: Path,
|
|
938
953
|
fmt: str | None,
|
|
@@ -951,6 +966,7 @@ def pharmacogenomics(
|
|
|
951
966
|
no_update: bool,
|
|
952
967
|
no_gnomad: bool,
|
|
953
968
|
no_alphamissense: bool,
|
|
969
|
+
no_cadd: bool,
|
|
954
970
|
) -> None:
|
|
955
971
|
"""Pharmacogenomics-focused report (annotations from PharmGKB-style sources)."""
|
|
956
972
|
excluded: set[str] = set()
|
|
@@ -977,6 +993,7 @@ def pharmacogenomics(
|
|
|
977
993
|
no_update=no_update,
|
|
978
994
|
no_gnomad=no_gnomad,
|
|
979
995
|
no_alphamissense=no_alphamissense,
|
|
996
|
+
no_cadd=no_cadd,
|
|
980
997
|
)
|
|
981
998
|
|
|
982
999
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: allelix
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.4
|
|
4
4
|
Summary: Open-source genotype analysis toolkit. Format-agnostic ingestion, database-agnostic annotation, offline-first.
|
|
5
5
|
Author-email: dial481 <dial481@users.noreply.github.com>
|
|
6
6
|
License-Expression: AGPL-3.0-or-later
|
|
@@ -44,8 +44,8 @@ Open-source command-line toolkit for analyzing raw genotype files from consumer
|
|
|
44
44
|
> HTML/JSON/terminal reports, methylation + pharmacogenomics focused
|
|
45
45
|
> commands, report diffing, persistent config with commercial-mode
|
|
46
46
|
> safety switch. Build auto-detection from position data (ADR-0021).
|
|
47
|
-
> No regex on prose anywhere in production. **Latest: v1.8.
|
|
48
|
-
>
|
|
47
|
+
> No regex on prose anywhere in production. **Latest: v1.8.4** —
|
|
48
|
+
> `--no-cadd` flag for licensing exclusion parity.
|
|
49
49
|
> Release notes:
|
|
50
50
|
> [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
51
51
|
|
|
@@ -98,7 +98,7 @@ Adding a new format means adding one file to `allelix/parsers/` and registering
|
|
|
98
98
|
| GWAS Catalog | ✓ | Public domain (EBI/NHGRI). Trait–SNP associations with p-values and effect sizes. Carrier rule (ADR-0007) requires the user to carry the risk allele. P-value magnitude scoring (ADR-0024) maps continuous p-values to the 0–10 scale; unknown-risk-allele entries fire on rsID match alone but are capped at 3.0. |
|
|
99
99
|
| gnomAD | ✓ | ODbL v1.0. **Enrichment annotator** — adds population allele frequency context to existing annotations. Shows how common each variant is in the general population (~16M exome variants from 730K individuals). A pathogenic variant that 35% of people carry reads very differently from one seen in 0.001%. Pre-built cache downloaded via `db update` (~6GB on disk). Use `--no-gnomad` to skip. |
|
|
100
100
|
| AlphaMissense | ✓ | CC BY 4.0. **Enrichment annotator** — adds DeepMind's protein-structure-based pathogenicity predictions to existing annotations. Scores 71M missense variants on a 0–1 scale: <0.34 = likely benign, >0.564 = likely pathogenic. Complements ClinVar's expert classifications with computational predictions — especially valuable for variants ClinVar hasn't reviewed yet. Pre-built cache downloaded via `db update` (~8GB on disk). Use `--no-alphamissense` to skip. |
|
|
101
|
-
| CADD | ✓ | LicenseRef-CADD (non-commercial). **Enrichment annotator** — adds PHRED-scaled deleteriousness scores from CADD v1.7. Ranks how deleterious any single-nucleotide variant is using 100+ annotation tracks (coding, non-coding, regulatory). PHRED 10 = top 10% most deleterious, 20 = top 1%, 30 = top 0.1%. **Opt-in** — disabled by default (`sources.cadd = false`). Enable via `allelix db update --cadd` or `allelix config set sources.cadd true`. Pre-built cache (~5 GB on disk, ~120M variant keys). Full mode available via pysam for GRCh38 data (`options.cadd_full = true`). Cache mode covers the large majority of variants present in gnomAD, AlphaMissense, and ClinVar — nearly every position allelix can annotate from its other databases. For genotyping chip data (23andMe, AncestryDNA, MyHappyGenes, etc.), cache and full mode produce effectively identical results because chip probes overwhelmingly target known, cataloged variants. Full mode adds coverage for novel or private variants that appear only in whole-genome or whole-exome sequencing data and are not in any pre-computed database. If your input is a genotyping chip file, cache mode is all you need. |
|
|
101
|
+
| CADD | ✓ | LicenseRef-CADD (non-commercial). **Enrichment annotator** — adds PHRED-scaled deleteriousness scores from CADD v1.7. Ranks how deleterious any single-nucleotide variant is using 100+ annotation tracks (coding, non-coding, regulatory). PHRED 10 = top 10% most deleterious, 20 = top 1%, 30 = top 0.1%. **Opt-in** — disabled by default (`sources.cadd = false`). Enable via `allelix db update --cadd` or `allelix config set sources.cadd true`. Use `--no-cadd` to skip enrichment for a single run. Pre-built cache (~5 GB on disk, ~120M variant keys). Full mode available via pysam for GRCh38 data (`options.cadd_full = true`). Cache mode covers the large majority of variants present in gnomAD, AlphaMissense, and ClinVar — nearly every position allelix can annotate from its other databases. For genotyping chip data (23andMe, AncestryDNA, MyHappyGenes, etc.), cache and full mode produce effectively identical results because chip probes overwhelmingly target known, cataloged variants. Full mode adds coverage for novel or private variants that appear only in whole-genome or whole-exome sequencing data and are not in any pre-computed database. If your input is a genotyping chip file, cache mode is all you need. |
|
|
102
102
|
|
|
103
103
|
### Known PharmGKB limitation: reference-genotype rows where ClinVar and CPIC both lack data
|
|
104
104
|
|
|
@@ -155,7 +155,7 @@ allelix config set license.commercial true
|
|
|
155
155
|
allelix config set license.cadd true
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
CLI flags (`--no-gnomad`, `--no-alphamissense`, `--exclude-snpedia`, `--cadd`) override the config for a single run. The config sets the baseline; flags override per-invocation.
|
|
158
|
+
CLI flags (`--no-gnomad`, `--no-alphamissense`, `--no-cadd`, `--exclude-snpedia`, `--cadd`) override the config for a single run. The config sets the baseline; flags override per-invocation.
|
|
159
159
|
|
|
160
160
|
### Database sizes and download times
|
|
161
161
|
|
|
@@ -187,7 +187,7 @@ Allelix source code is licensed under the **GNU Affero General Public License v3
|
|
|
187
187
|
| SNPedia | snpedia.com | CC BY-NC-SA 3.0 US | Attribution required, **non-commercial only**. Use `--exclude-snpedia` to omit. |
|
|
188
188
|
| gnomAD | gnomad.broadinstitute.org | ODbL v1.0 | Attribution required. Population allele frequencies for context; not a clinical annotator. Use `--no-gnomad` to omit. |
|
|
189
189
|
| AlphaMissense | zenodo.org/records/10813168 | CC BY 4.0 | Attribution required. Cheng et al., Science 2023. Missense variant pathogenicity predictions. Use `--no-alphamissense` to omit. |
|
|
190
|
-
| CADD | cadd.gs.washington.edu | LicenseRef-CADD | Attribution required, **non-commercial by default**. Commercial licenses available from UW CoMotion. Opt-in via `allelix db update --cadd`. |
|
|
190
|
+
| CADD | cadd.gs.washington.edu | LicenseRef-CADD | Attribution required, **non-commercial by default**. Commercial licenses available from UW CoMotion. Opt-in via `allelix db update --cadd`. Use `--no-cadd` to omit. |
|
|
191
191
|
|
|
192
192
|
**Commercial users:** When `license.commercial = true`, non-commercial sources are gated by a three-state permission model. SNPedia is permanently blocked (no commercial license is available). CADD is blocked by default but can be unlocked — the University of Washington offers commercial licenses at `https://els2.comotion.uw.edu/product/cadd-scores`; after purchasing, assert your license with `allelix config set license.cadd true` to re-enable CADD in commercial mode. All other databases (ClinVar, PharmGKB, GWAS Catalog, gnomAD, AlphaMissense) are compatible with commercial use. `allelix config show` displays the permission state for each source.
|
|
193
193
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "allelix"
|
|
7
|
-
version = "1.8.
|
|
7
|
+
version = "1.8.4"
|
|
8
8
|
description = "Open-source genotype analysis toolkit. Format-agnostic ingestion, database-agnostic annotation, offline-first."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -1527,6 +1527,58 @@ class TestExcludeSnpedia:
|
|
|
1527
1527
|
assert captured["exclude_sources"] == frozenset({"snpedia", "gwas"})
|
|
1528
1528
|
|
|
1529
1529
|
|
|
1530
|
+
class TestNoCaddFlag:
|
|
1531
|
+
"""--no-cadd wires through to no_cadd on all three analysis commands."""
|
|
1532
|
+
|
|
1533
|
+
def test_analyze_passes_no_cadd(self, mock_mhg_path, monkeypatch):
|
|
1534
|
+
captured: dict = {}
|
|
1535
|
+
|
|
1536
|
+
def fake_run(**kwargs):
|
|
1537
|
+
captured.update(kwargs)
|
|
1538
|
+
|
|
1539
|
+
monkeypatch.setattr("allelix.cli._run_analysis_command", fake_run)
|
|
1540
|
+
runner = CliRunner()
|
|
1541
|
+
result = runner.invoke(main, ["analyze", str(mock_mhg_path), "--no-cadd"])
|
|
1542
|
+
assert result.exit_code == 0, result.output
|
|
1543
|
+
assert captured["no_cadd"] is True
|
|
1544
|
+
|
|
1545
|
+
def test_analyze_default_no_cadd_false(self, mock_mhg_path, monkeypatch):
|
|
1546
|
+
captured: dict = {}
|
|
1547
|
+
|
|
1548
|
+
def fake_run(**kwargs):
|
|
1549
|
+
captured.update(kwargs)
|
|
1550
|
+
|
|
1551
|
+
monkeypatch.setattr("allelix.cli._run_analysis_command", fake_run)
|
|
1552
|
+
runner = CliRunner()
|
|
1553
|
+
result = runner.invoke(main, ["analyze", str(mock_mhg_path)])
|
|
1554
|
+
assert result.exit_code == 0, result.output
|
|
1555
|
+
assert captured["no_cadd"] is False
|
|
1556
|
+
|
|
1557
|
+
def test_methylation_passes_no_cadd(self, mock_mhg_path, monkeypatch):
|
|
1558
|
+
captured: dict = {}
|
|
1559
|
+
|
|
1560
|
+
def fake_run(**kwargs):
|
|
1561
|
+
captured.update(kwargs)
|
|
1562
|
+
|
|
1563
|
+
monkeypatch.setattr("allelix.cli._run_analysis_command", fake_run)
|
|
1564
|
+
runner = CliRunner()
|
|
1565
|
+
result = runner.invoke(main, ["methylation", str(mock_mhg_path), "--no-cadd"])
|
|
1566
|
+
assert result.exit_code == 0, result.output
|
|
1567
|
+
assert captured["no_cadd"] is True
|
|
1568
|
+
|
|
1569
|
+
def test_pharmacogenomics_passes_no_cadd(self, mock_mhg_path, monkeypatch):
|
|
1570
|
+
captured: dict = {}
|
|
1571
|
+
|
|
1572
|
+
def fake_run(**kwargs):
|
|
1573
|
+
captured.update(kwargs)
|
|
1574
|
+
|
|
1575
|
+
monkeypatch.setattr("allelix.cli._run_analysis_command", fake_run)
|
|
1576
|
+
runner = CliRunner()
|
|
1577
|
+
result = runner.invoke(main, ["pharmacogenomics", str(mock_mhg_path), "--no-cadd"])
|
|
1578
|
+
assert result.exit_code == 0, result.output
|
|
1579
|
+
assert captured["no_cadd"] is True
|
|
1580
|
+
|
|
1581
|
+
|
|
1530
1582
|
class TestHighValueNoCalls:
|
|
1531
1583
|
def test_stats_flags_dpyd_no_call(self, mock_mhg_path):
|
|
1532
1584
|
"""The MHG fixture has rs3918290 (DPYD) as a no-call; stats should flag it."""
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|