allelix 1.8.1__tar.gz → 1.8.3__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.1 → allelix-1.8.3}/PKG-INFO +17 -42
- {allelix-1.8.1 → allelix-1.8.3}/README.md +13 -40
- {allelix-1.8.1 → allelix-1.8.3}/allelix/models.py +3 -1
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/html.py +24 -11
- {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/PKG-INFO +17 -42
- {allelix-1.8.1 → allelix-1.8.3}/pyproject.toml +4 -2
- {allelix-1.8.1 → allelix-1.8.3}/LICENSE +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/alphamissense.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/base.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/cadd.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/clinvar.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/gnomad.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/gwas.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/pharmgkb.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/snpedia.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/cli.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/compare.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/config.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/data/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/data/high_value_snps.yaml +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/_versions.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/alphamissense_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/cadd_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/cpic_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/gnomad_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/gwas_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/loader_utils.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/manager.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/pharmgkb_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/schema.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/snpedia_loader.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/snpedia_parser.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/exporters/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/exporters/plink.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/_helpers.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/ancestrydna.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/base.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/ftdna.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/livingdna.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/myhappygenes.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/myheritage.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/twentythreeandme.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/py.typed +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/_pipeline.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/diff.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/high_value.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/json_report.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/methylation.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/terminal.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/utils/__init__.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/utils/allele.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix/utils/build_detect.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/SOURCES.txt +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/dependency_links.txt +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/entry_points.txt +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/requires.txt +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/top_level.txt +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/setup.cfg +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_cli.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_cli_helpers.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_compare.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_config.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_end_to_end.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_mock_data_invariants.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_models.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_registry.py +0 -0
- {allelix-1.8.1 → allelix-1.8.3}/tests/test_version.py +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: allelix
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.3
|
|
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
|
|
7
|
-
Project-URL: Homepage, https://
|
|
7
|
+
Project-URL: Homepage, https://allelix.io
|
|
8
|
+
Project-URL: Source, https://github.com/dial481/allelix
|
|
8
9
|
Project-URL: Issues, https://github.com/dial481/allelix/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/dial481/allelix/blob/main/CHANGELOG.md
|
|
9
11
|
Keywords: genomics,genotype,snp,bioinformatics,dna
|
|
10
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
13
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -42,54 +44,27 @@ Open-source command-line toolkit for analyzing raw genotype files from consumer
|
|
|
42
44
|
> HTML/JSON/terminal reports, methylation + pharmacogenomics focused
|
|
43
45
|
> commands, report diffing, persistent config with commercial-mode
|
|
44
46
|
> safety switch. Build auto-detection from position data (ADR-0021).
|
|
45
|
-
> No regex on prose anywhere in production. **Latest: v1.
|
|
46
|
-
>
|
|
47
|
-
>
|
|
47
|
+
> No regex on prose anywhere in production. **Latest: v1.8.3** —
|
|
48
|
+
> pip install quickstart, workflow hardening, PyPI link fix.
|
|
49
|
+
> Release notes:
|
|
50
|
+
> [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
48
51
|
|
|
49
52
|
## Quickstart
|
|
50
53
|
|
|
51
|
-
Requires Python 3.11+.
|
|
52
|
-
|
|
53
54
|
```bash
|
|
54
|
-
|
|
55
|
-
cd allelix
|
|
56
|
-
python -m venv .venv
|
|
57
|
-
source .venv/bin/activate
|
|
58
|
-
pip install -e ".[dev]"
|
|
59
|
-
|
|
60
|
-
# Generate a synthetic test fixture
|
|
61
|
-
python tests/generate_mock_data.py
|
|
62
|
-
|
|
63
|
-
# Show summary statistics for a genotype file
|
|
64
|
-
allelix stats tests/fixtures/mock_myhappygenes.txt
|
|
55
|
+
pip install allelix
|
|
65
56
|
|
|
66
|
-
# Download reference databases
|
|
67
|
-
#
|
|
68
|
-
# to skip the large enrichment databases. Re-runs skip unchanged sources.
|
|
57
|
+
# Download reference databases (~15GB with all sources).
|
|
58
|
+
# Use --no-gnomad / --no-alphamissense to skip the large ones.
|
|
69
59
|
# CADD is opt-in: allelix db update --cadd
|
|
70
60
|
allelix db update
|
|
71
|
-
allelix db status # see what's cached
|
|
72
61
|
|
|
73
|
-
# Analyze a genotype file
|
|
74
|
-
allelix analyze
|
|
75
|
-
|
|
76
|
-
# Same data, focused subsets
|
|
77
|
-
allelix methylation tests/fixtures/mock_myhappygenes.txt
|
|
78
|
-
allelix pharmacogenomics tests/fixtures/mock_myhappygenes.txt
|
|
79
|
-
|
|
80
|
-
# Compare two genotype files (coverage, concordance, strand-flip detection)
|
|
81
|
-
allelix compare file1.txt file2.txt
|
|
82
|
-
|
|
83
|
-
# Export to PLINK1 binary format (.bed/.bim/.fam) for plink2, ADMIXTURE, PRSice
|
|
84
|
-
# Expect ~60% monomorphic markers (A2=0) — genotyping chips probe many
|
|
85
|
-
# intronic/intergenic sites outside gnomAD's exome coverage.
|
|
86
|
-
allelix export plink genotype_file.txt -o output_prefix --build grch37
|
|
87
|
-
|
|
88
|
-
# Output to a self-contained HTML or JSON report
|
|
89
|
-
allelix analyze tests/fixtures/mock_myhappygenes.txt --output report.html
|
|
90
|
-
allelix analyze tests/fixtures/mock_myhappygenes.txt --output report.json
|
|
62
|
+
# Analyze a genotype file
|
|
63
|
+
allelix analyze your_genotype_file.txt --output report.html
|
|
91
64
|
```
|
|
92
65
|
|
|
66
|
+
Requires Python 3.11+. See [Development](#development) for source installs and running tests.
|
|
67
|
+
|
|
93
68
|
## Supported Formats
|
|
94
69
|
|
|
95
70
|
| Format | Status | Notes |
|
|
@@ -243,7 +218,7 @@ None of these are scraping errors. They are editorial inconsistencies on the sou
|
|
|
243
218
|
|
|
244
219
|
## Architecture & Design Decisions
|
|
245
220
|
|
|
246
|
-
The "why" behind major design choices lives in [`docs/adr/`](docs/adr/README.md) as Architecture Decision Records. Read these before proposing changes that touch the parser/annotator interfaces, the regulatory posture, or the data-handling model.
|
|
221
|
+
The "why" behind major design choices lives in [`docs/adr/`](https://github.com/dial481/allelix/blob/main/docs/adr/README.md) as Architecture Decision Records. Read these before proposing changes that touch the parser/annotator interfaces, the regulatory posture, or the data-handling model.
|
|
247
222
|
|
|
248
223
|
Notable load-bearing ADRs:
|
|
249
224
|
|
|
@@ -253,7 +228,7 @@ Notable load-bearing ADRs:
|
|
|
253
228
|
- **ADR-0009 — PharmGKB matches the user's exact normalized diploid call.**
|
|
254
229
|
- **ADR-0015 — Mock data generators are the contract.** Fixture shape must mirror real data shape; invariants tested.
|
|
255
230
|
|
|
256
|
-
Release history: see [`CHANGELOG.md`](CHANGELOG.md).
|
|
231
|
+
Release history: see [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
257
232
|
|
|
258
233
|
## Development
|
|
259
234
|
|
|
@@ -10,54 +10,27 @@ 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.
|
|
14
|
-
>
|
|
15
|
-
>
|
|
13
|
+
> No regex on prose anywhere in production. **Latest: v1.8.3** —
|
|
14
|
+
> pip install quickstart, workflow hardening, PyPI link fix.
|
|
15
|
+
> Release notes:
|
|
16
|
+
> [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
16
17
|
|
|
17
18
|
## Quickstart
|
|
18
19
|
|
|
19
|
-
Requires Python 3.11+.
|
|
20
|
-
|
|
21
20
|
```bash
|
|
22
|
-
|
|
23
|
-
cd allelix
|
|
24
|
-
python -m venv .venv
|
|
25
|
-
source .venv/bin/activate
|
|
26
|
-
pip install -e ".[dev]"
|
|
27
|
-
|
|
28
|
-
# Generate a synthetic test fixture
|
|
29
|
-
python tests/generate_mock_data.py
|
|
30
|
-
|
|
31
|
-
# Show summary statistics for a genotype file
|
|
32
|
-
allelix stats tests/fixtures/mock_myhappygenes.txt
|
|
21
|
+
pip install allelix
|
|
33
22
|
|
|
34
|
-
# Download reference databases
|
|
35
|
-
#
|
|
36
|
-
# to skip the large enrichment databases. Re-runs skip unchanged sources.
|
|
23
|
+
# Download reference databases (~15GB with all sources).
|
|
24
|
+
# Use --no-gnomad / --no-alphamissense to skip the large ones.
|
|
37
25
|
# CADD is opt-in: allelix db update --cadd
|
|
38
26
|
allelix db update
|
|
39
|
-
allelix db status # see what's cached
|
|
40
27
|
|
|
41
|
-
# Analyze a genotype file
|
|
42
|
-
allelix analyze
|
|
43
|
-
|
|
44
|
-
# Same data, focused subsets
|
|
45
|
-
allelix methylation tests/fixtures/mock_myhappygenes.txt
|
|
46
|
-
allelix pharmacogenomics tests/fixtures/mock_myhappygenes.txt
|
|
47
|
-
|
|
48
|
-
# Compare two genotype files (coverage, concordance, strand-flip detection)
|
|
49
|
-
allelix compare file1.txt file2.txt
|
|
50
|
-
|
|
51
|
-
# Export to PLINK1 binary format (.bed/.bim/.fam) for plink2, ADMIXTURE, PRSice
|
|
52
|
-
# Expect ~60% monomorphic markers (A2=0) — genotyping chips probe many
|
|
53
|
-
# intronic/intergenic sites outside gnomAD's exome coverage.
|
|
54
|
-
allelix export plink genotype_file.txt -o output_prefix --build grch37
|
|
55
|
-
|
|
56
|
-
# Output to a self-contained HTML or JSON report
|
|
57
|
-
allelix analyze tests/fixtures/mock_myhappygenes.txt --output report.html
|
|
58
|
-
allelix analyze tests/fixtures/mock_myhappygenes.txt --output report.json
|
|
28
|
+
# Analyze a genotype file
|
|
29
|
+
allelix analyze your_genotype_file.txt --output report.html
|
|
59
30
|
```
|
|
60
31
|
|
|
32
|
+
Requires Python 3.11+. See [Development](#development) for source installs and running tests.
|
|
33
|
+
|
|
61
34
|
## Supported Formats
|
|
62
35
|
|
|
63
36
|
| Format | Status | Notes |
|
|
@@ -211,7 +184,7 @@ None of these are scraping errors. They are editorial inconsistencies on the sou
|
|
|
211
184
|
|
|
212
185
|
## Architecture & Design Decisions
|
|
213
186
|
|
|
214
|
-
The "why" behind major design choices lives in [`docs/adr/`](docs/adr/README.md) as Architecture Decision Records. Read these before proposing changes that touch the parser/annotator interfaces, the regulatory posture, or the data-handling model.
|
|
187
|
+
The "why" behind major design choices lives in [`docs/adr/`](https://github.com/dial481/allelix/blob/main/docs/adr/README.md) as Architecture Decision Records. Read these before proposing changes that touch the parser/annotator interfaces, the regulatory posture, or the data-handling model.
|
|
215
188
|
|
|
216
189
|
Notable load-bearing ADRs:
|
|
217
190
|
|
|
@@ -221,7 +194,7 @@ Notable load-bearing ADRs:
|
|
|
221
194
|
- **ADR-0009 — PharmGKB matches the user's exact normalized diploid call.**
|
|
222
195
|
- **ADR-0015 — Mock data generators are the contract.** Fixture shape must mirror real data shape; invariants tested.
|
|
223
196
|
|
|
224
|
-
Release history: see [`CHANGELOG.md`](CHANGELOG.md).
|
|
197
|
+
Release history: see [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
225
198
|
|
|
226
199
|
## Development
|
|
227
200
|
|
|
@@ -79,7 +79,9 @@ class Annotation:
|
|
|
79
79
|
magnitude: 0-10 importance score (SNPedia-style).
|
|
80
80
|
description: Human-readable explanation.
|
|
81
81
|
attribution: Display name of the source ("ClinVar", "PharmGKB", ...).
|
|
82
|
-
genotype_match: Which genotype triggers this annotation
|
|
82
|
+
genotype_match: Which genotype triggers this annotation. For SNVs this
|
|
83
|
+
is a concatenated, sorted allele pair (e.g., "AG", "TT"); the slash
|
|
84
|
+
form (e.g., "AT/A") appears only for indels.
|
|
83
85
|
references: PubMed IDs or URLs supporting the claim.
|
|
84
86
|
condition: Disease or condition name, if applicable.
|
|
85
87
|
gene: Gene symbol, if known.
|
|
@@ -101,6 +101,7 @@ _CSS = """\
|
|
|
101
101
|
--notice-border: #f9a825;
|
|
102
102
|
--notice-warn-bg: #fff3e0;
|
|
103
103
|
--notice-warn-border: #e65100;
|
|
104
|
+
--link: #1976d2;
|
|
104
105
|
}
|
|
105
106
|
@media (prefers-color-scheme: dark) {
|
|
106
107
|
:root:not([data-theme="light"]) {
|
|
@@ -119,6 +120,7 @@ _CSS = """\
|
|
|
119
120
|
--notice-border: #f9a825;
|
|
120
121
|
--notice-warn-bg: #331a00;
|
|
121
122
|
--notice-warn-border: #e65100;
|
|
123
|
+
--link: #93c5fd;
|
|
122
124
|
}
|
|
123
125
|
}
|
|
124
126
|
[data-theme="dark"] {
|
|
@@ -137,6 +139,7 @@ _CSS = """\
|
|
|
137
139
|
--notice-border: #f9a825;
|
|
138
140
|
--notice-warn-bg: #331a00;
|
|
139
141
|
--notice-warn-border: #e65100;
|
|
142
|
+
--link: #93c5fd;
|
|
140
143
|
}
|
|
141
144
|
|
|
142
145
|
*, *::before, *::after { box-sizing: border-box; }
|
|
@@ -152,6 +155,7 @@ body {
|
|
|
152
155
|
}
|
|
153
156
|
h1 { margin-bottom: .25rem; }
|
|
154
157
|
.subtitle { color: var(--text-muted); margin-top: 0; }
|
|
158
|
+
a { color: var(--link); }
|
|
155
159
|
|
|
156
160
|
.notice {
|
|
157
161
|
background: var(--notice-bg, #fff8e1); border-left: 4px solid var(--notice-border, #f9a825);
|
|
@@ -1024,7 +1028,7 @@ def render_html(
|
|
|
1024
1028
|
'<th data-sort="gene" class="sortable">'
|
|
1025
1029
|
'Gene<span class="sort-arrow"></span></th>'
|
|
1026
1030
|
'<th data-sort="genotype" class="sortable">'
|
|
1027
|
-
'
|
|
1031
|
+
'GT<span class="sort-arrow"></span></th>'
|
|
1028
1032
|
'<th data-sort="repute" class="sortable">'
|
|
1029
1033
|
'Repute<span class="sort-arrow"></span></th>'
|
|
1030
1034
|
"<th>Summary</th>"
|
|
@@ -1090,16 +1094,25 @@ def render_html(
|
|
|
1090
1094
|
"<html lang='en'><head><meta charset='utf-8'>"
|
|
1091
1095
|
'<meta name="viewport" content="width=device-width, initial-scale=1">'
|
|
1092
1096
|
'<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,'
|
|
1093
|
-
"
|
|
1094
|
-
"
|
|
1095
|
-
"
|
|
1096
|
-
"
|
|
1097
|
-
"
|
|
1098
|
-
"
|
|
1099
|
-
"
|
|
1100
|
-
"
|
|
1101
|
-
"
|
|
1102
|
-
" fill='
|
|
1097
|
+
"%3Csvg viewBox='0 0 32 32' fill='none'"
|
|
1098
|
+
" xmlns='http://www.w3.org/2000/svg'%3E"
|
|
1099
|
+
"%3Ccircle cx='16' cy='16' r='14' stroke='%236366f1'"
|
|
1100
|
+
" stroke-width='1.5' opacity='0.3'/%3E"
|
|
1101
|
+
"%3Cpath d='M10 6C10 6 22 12 22 16C22 20 10 26 10 26'"
|
|
1102
|
+
" stroke='%236366f1' stroke-width='2'"
|
|
1103
|
+
" stroke-linecap='round' fill='none'/%3E"
|
|
1104
|
+
"%3Cpath d='M22 6C22 6 10 12 10 16C10 20 22 26 22 26'"
|
|
1105
|
+
" stroke='%236366f1' stroke-width='2'"
|
|
1106
|
+
" stroke-linecap='round' fill='none' opacity='0.4'/%3E"
|
|
1107
|
+
"%3Ccircle cx='10' cy='10' r='2' fill='%236366f1'/%3E"
|
|
1108
|
+
"%3Ccircle cx='22' cy='10' r='2' fill='%236366f1'"
|
|
1109
|
+
" opacity='0.4'/%3E"
|
|
1110
|
+
"%3Ccircle cx='16' cy='16' r='2' fill='%236366f1'"
|
|
1111
|
+
" opacity='0.7'/%3E"
|
|
1112
|
+
"%3Ccircle cx='22' cy='22' r='2' fill='%236366f1'/%3E"
|
|
1113
|
+
"%3Ccircle cx='10' cy='22' r='2' fill='%236366f1'"
|
|
1114
|
+
" opacity='0.4'/%3E"
|
|
1115
|
+
'%3C/svg%3E">'
|
|
1103
1116
|
f"<title>{_escape(title)}</title>"
|
|
1104
1117
|
f"<style>{_CSS}</style>"
|
|
1105
1118
|
"</head><body>"
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: allelix
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.3
|
|
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
|
|
7
|
-
Project-URL: Homepage, https://
|
|
7
|
+
Project-URL: Homepage, https://allelix.io
|
|
8
|
+
Project-URL: Source, https://github.com/dial481/allelix
|
|
8
9
|
Project-URL: Issues, https://github.com/dial481/allelix/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/dial481/allelix/blob/main/CHANGELOG.md
|
|
9
11
|
Keywords: genomics,genotype,snp,bioinformatics,dna
|
|
10
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
13
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -42,54 +44,27 @@ Open-source command-line toolkit for analyzing raw genotype files from consumer
|
|
|
42
44
|
> HTML/JSON/terminal reports, methylation + pharmacogenomics focused
|
|
43
45
|
> commands, report diffing, persistent config with commercial-mode
|
|
44
46
|
> safety switch. Build auto-detection from position data (ADR-0021).
|
|
45
|
-
> No regex on prose anywhere in production. **Latest: v1.
|
|
46
|
-
>
|
|
47
|
-
>
|
|
47
|
+
> No regex on prose anywhere in production. **Latest: v1.8.3** —
|
|
48
|
+
> pip install quickstart, workflow hardening, PyPI link fix.
|
|
49
|
+
> Release notes:
|
|
50
|
+
> [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
48
51
|
|
|
49
52
|
## Quickstart
|
|
50
53
|
|
|
51
|
-
Requires Python 3.11+.
|
|
52
|
-
|
|
53
54
|
```bash
|
|
54
|
-
|
|
55
|
-
cd allelix
|
|
56
|
-
python -m venv .venv
|
|
57
|
-
source .venv/bin/activate
|
|
58
|
-
pip install -e ".[dev]"
|
|
59
|
-
|
|
60
|
-
# Generate a synthetic test fixture
|
|
61
|
-
python tests/generate_mock_data.py
|
|
62
|
-
|
|
63
|
-
# Show summary statistics for a genotype file
|
|
64
|
-
allelix stats tests/fixtures/mock_myhappygenes.txt
|
|
55
|
+
pip install allelix
|
|
65
56
|
|
|
66
|
-
# Download reference databases
|
|
67
|
-
#
|
|
68
|
-
# to skip the large enrichment databases. Re-runs skip unchanged sources.
|
|
57
|
+
# Download reference databases (~15GB with all sources).
|
|
58
|
+
# Use --no-gnomad / --no-alphamissense to skip the large ones.
|
|
69
59
|
# CADD is opt-in: allelix db update --cadd
|
|
70
60
|
allelix db update
|
|
71
|
-
allelix db status # see what's cached
|
|
72
61
|
|
|
73
|
-
# Analyze a genotype file
|
|
74
|
-
allelix analyze
|
|
75
|
-
|
|
76
|
-
# Same data, focused subsets
|
|
77
|
-
allelix methylation tests/fixtures/mock_myhappygenes.txt
|
|
78
|
-
allelix pharmacogenomics tests/fixtures/mock_myhappygenes.txt
|
|
79
|
-
|
|
80
|
-
# Compare two genotype files (coverage, concordance, strand-flip detection)
|
|
81
|
-
allelix compare file1.txt file2.txt
|
|
82
|
-
|
|
83
|
-
# Export to PLINK1 binary format (.bed/.bim/.fam) for plink2, ADMIXTURE, PRSice
|
|
84
|
-
# Expect ~60% monomorphic markers (A2=0) — genotyping chips probe many
|
|
85
|
-
# intronic/intergenic sites outside gnomAD's exome coverage.
|
|
86
|
-
allelix export plink genotype_file.txt -o output_prefix --build grch37
|
|
87
|
-
|
|
88
|
-
# Output to a self-contained HTML or JSON report
|
|
89
|
-
allelix analyze tests/fixtures/mock_myhappygenes.txt --output report.html
|
|
90
|
-
allelix analyze tests/fixtures/mock_myhappygenes.txt --output report.json
|
|
62
|
+
# Analyze a genotype file
|
|
63
|
+
allelix analyze your_genotype_file.txt --output report.html
|
|
91
64
|
```
|
|
92
65
|
|
|
66
|
+
Requires Python 3.11+. See [Development](#development) for source installs and running tests.
|
|
67
|
+
|
|
93
68
|
## Supported Formats
|
|
94
69
|
|
|
95
70
|
| Format | Status | Notes |
|
|
@@ -243,7 +218,7 @@ None of these are scraping errors. They are editorial inconsistencies on the sou
|
|
|
243
218
|
|
|
244
219
|
## Architecture & Design Decisions
|
|
245
220
|
|
|
246
|
-
The "why" behind major design choices lives in [`docs/adr/`](docs/adr/README.md) as Architecture Decision Records. Read these before proposing changes that touch the parser/annotator interfaces, the regulatory posture, or the data-handling model.
|
|
221
|
+
The "why" behind major design choices lives in [`docs/adr/`](https://github.com/dial481/allelix/blob/main/docs/adr/README.md) as Architecture Decision Records. Read these before proposing changes that touch the parser/annotator interfaces, the regulatory posture, or the data-handling model.
|
|
247
222
|
|
|
248
223
|
Notable load-bearing ADRs:
|
|
249
224
|
|
|
@@ -253,7 +228,7 @@ Notable load-bearing ADRs:
|
|
|
253
228
|
- **ADR-0009 — PharmGKB matches the user's exact normalized diploid call.**
|
|
254
229
|
- **ADR-0015 — Mock data generators are the contract.** Fixture shape must mirror real data shape; invariants tested.
|
|
255
230
|
|
|
256
|
-
Release history: see [`CHANGELOG.md`](CHANGELOG.md).
|
|
231
|
+
Release history: see [`CHANGELOG.md`](https://github.com/dial481/allelix/blob/main/CHANGELOG.md).
|
|
257
232
|
|
|
258
233
|
## Development
|
|
259
234
|
|
|
@@ -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.3"
|
|
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"
|
|
@@ -42,8 +42,10 @@ dev = [
|
|
|
42
42
|
allelix = "allelix.cli:main"
|
|
43
43
|
|
|
44
44
|
[project.urls]
|
|
45
|
-
Homepage = "https://
|
|
45
|
+
Homepage = "https://allelix.io"
|
|
46
|
+
Source = "https://github.com/dial481/allelix"
|
|
46
47
|
Issues = "https://github.com/dial481/allelix/issues"
|
|
48
|
+
Changelog = "https://github.com/dial481/allelix/blob/main/CHANGELOG.md"
|
|
47
49
|
|
|
48
50
|
[tool.setuptools.packages.find]
|
|
49
51
|
include = ["allelix*"]
|
|
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
|