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.
Files changed (72) hide show
  1. {allelix-1.8.1 → allelix-1.8.3}/PKG-INFO +17 -42
  2. {allelix-1.8.1 → allelix-1.8.3}/README.md +13 -40
  3. {allelix-1.8.1 → allelix-1.8.3}/allelix/models.py +3 -1
  4. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/html.py +24 -11
  5. {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/PKG-INFO +17 -42
  6. {allelix-1.8.1 → allelix-1.8.3}/pyproject.toml +4 -2
  7. {allelix-1.8.1 → allelix-1.8.3}/LICENSE +0 -0
  8. {allelix-1.8.1 → allelix-1.8.3}/allelix/__init__.py +0 -0
  9. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/__init__.py +0 -0
  10. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/alphamissense.py +0 -0
  11. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/base.py +0 -0
  12. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/cadd.py +0 -0
  13. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/clinvar.py +0 -0
  14. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/gnomad.py +0 -0
  15. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/gwas.py +0 -0
  16. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/pharmgkb.py +0 -0
  17. {allelix-1.8.1 → allelix-1.8.3}/allelix/annotators/snpedia.py +0 -0
  18. {allelix-1.8.1 → allelix-1.8.3}/allelix/cli.py +0 -0
  19. {allelix-1.8.1 → allelix-1.8.3}/allelix/compare.py +0 -0
  20. {allelix-1.8.1 → allelix-1.8.3}/allelix/config.py +0 -0
  21. {allelix-1.8.1 → allelix-1.8.3}/allelix/data/__init__.py +0 -0
  22. {allelix-1.8.1 → allelix-1.8.3}/allelix/data/high_value_snps.yaml +0 -0
  23. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/__init__.py +0 -0
  24. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/_versions.py +0 -0
  25. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/alphamissense_loader.py +0 -0
  26. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/cadd_loader.py +0 -0
  27. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/cpic_loader.py +0 -0
  28. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/gnomad_loader.py +0 -0
  29. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/gwas_loader.py +0 -0
  30. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/loader_utils.py +0 -0
  31. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/manager.py +0 -0
  32. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/pharmgkb_loader.py +0 -0
  33. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/schema.py +0 -0
  34. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/snpedia_loader.py +0 -0
  35. {allelix-1.8.1 → allelix-1.8.3}/allelix/databases/snpedia_parser.py +0 -0
  36. {allelix-1.8.1 → allelix-1.8.3}/allelix/exporters/__init__.py +0 -0
  37. {allelix-1.8.1 → allelix-1.8.3}/allelix/exporters/plink.py +0 -0
  38. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/__init__.py +0 -0
  39. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/_helpers.py +0 -0
  40. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/ancestrydna.py +0 -0
  41. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/base.py +0 -0
  42. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/ftdna.py +0 -0
  43. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/livingdna.py +0 -0
  44. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/myhappygenes.py +0 -0
  45. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/myheritage.py +0 -0
  46. {allelix-1.8.1 → allelix-1.8.3}/allelix/parsers/twentythreeandme.py +0 -0
  47. {allelix-1.8.1 → allelix-1.8.3}/allelix/py.typed +0 -0
  48. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/__init__.py +0 -0
  49. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/_pipeline.py +0 -0
  50. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/diff.py +0 -0
  51. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/high_value.py +0 -0
  52. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/json_report.py +0 -0
  53. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/methylation.py +0 -0
  54. {allelix-1.8.1 → allelix-1.8.3}/allelix/reports/terminal.py +0 -0
  55. {allelix-1.8.1 → allelix-1.8.3}/allelix/utils/__init__.py +0 -0
  56. {allelix-1.8.1 → allelix-1.8.3}/allelix/utils/allele.py +0 -0
  57. {allelix-1.8.1 → allelix-1.8.3}/allelix/utils/build_detect.py +0 -0
  58. {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/SOURCES.txt +0 -0
  59. {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/dependency_links.txt +0 -0
  60. {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/entry_points.txt +0 -0
  61. {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/requires.txt +0 -0
  62. {allelix-1.8.1 → allelix-1.8.3}/allelix.egg-info/top_level.txt +0 -0
  63. {allelix-1.8.1 → allelix-1.8.3}/setup.cfg +0 -0
  64. {allelix-1.8.1 → allelix-1.8.3}/tests/test_cli.py +0 -0
  65. {allelix-1.8.1 → allelix-1.8.3}/tests/test_cli_helpers.py +0 -0
  66. {allelix-1.8.1 → allelix-1.8.3}/tests/test_compare.py +0 -0
  67. {allelix-1.8.1 → allelix-1.8.3}/tests/test_config.py +0 -0
  68. {allelix-1.8.1 → allelix-1.8.3}/tests/test_end_to_end.py +0 -0
  69. {allelix-1.8.1 → allelix-1.8.3}/tests/test_mock_data_invariants.py +0 -0
  70. {allelix-1.8.1 → allelix-1.8.3}/tests/test_models.py +0 -0
  71. {allelix-1.8.1 → allelix-1.8.3}/tests/test_registry.py +0 -0
  72. {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.1
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://github.com/dial481/allelix
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.7.0** — PLINK
46
- > export, magnitude scoring formalization (ADR-0034). Release notes:
47
- > [`CHANGELOG.md`](CHANGELOG.md).
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
- git clone https://github.com/dial481/allelix
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. First run downloads all sources (~15GB
67
- # on disk with gnomAD + AlphaMissense). Use --no-gnomad / --no-alphamissense
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 against all ready databases
74
- allelix analyze tests/fixtures/mock_myhappygenes.txt --min-magnitude 5
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.7.0** — PLINK
14
- > export, magnitude scoring formalization (ADR-0034). Release notes:
15
- > [`CHANGELOG.md`](CHANGELOG.md).
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
- git clone https://github.com/dial481/allelix
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. First run downloads all sources (~15GB
35
- # on disk with gnomAD + AlphaMissense). Use --no-gnomad / --no-alphamissense
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 against all ready databases
42
- allelix analyze tests/fixtures/mock_myhappygenes.txt --min-magnitude 5
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 (e.g., "T/T").
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
- 'Genotype<span class="sort-arrow"></span></th>'
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
- "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'>"
1094
- "<defs><linearGradient id='g' x1='0' y1='0' x2='1' y2='1'>"
1095
- "<stop offset='0%25' stop-color='%234f46e5'/>"
1096
- "<stop offset='100%25' stop-color='%2306b6d4'/>"
1097
- "</linearGradient></defs>"
1098
- "<path d='M16 2C9 2 8 8 8 8s2-3 8-3 8 3 8 3-1-6-8-6z"
1099
- "m0 6c-7 0-8 6-8 6s2-3 8-3 8 3 8 3-1-6-8-6z"
1100
- "m0 6c-7 0-8 6-8 6s2-3 8-3 8 3 8 3-1-6-8-6z"
1101
- "m0 6c-7 0-8 6-8 6s2-3 8-3 8 3 8 3-1-6-8-6z'"
1102
- " fill='url(%23g)' opacity='0.9'/></svg>\">"
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.1
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://github.com/dial481/allelix
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.7.0** — PLINK
46
- > export, magnitude scoring formalization (ADR-0034). Release notes:
47
- > [`CHANGELOG.md`](CHANGELOG.md).
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
- git clone https://github.com/dial481/allelix
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. First run downloads all sources (~15GB
67
- # on disk with gnomAD + AlphaMissense). Use --no-gnomad / --no-alphamissense
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 against all ready databases
74
- allelix analyze tests/fixtures/mock_myhappygenes.txt --min-magnitude 5
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.1"
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://github.com/dial481/allelix"
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