hpo-drift 
Same patient, same disease annotations, different HPO release — does the diagnosis move? hpo-drift computes your phenotype similarity twice, once per HPO release, and shows what changed and why.
pip install hpo-drift
Three commands
1 · Rank diseases for a patient in two releases.
hpo-drift rank-diseases --query examples/ggt_orpha33573_patient.txt --hpoa phenotype.hpoa --old v2022-10-05 --new v2026-06-23
| disease | score old → new | rank old → new |
| Gamma-glutamyl transpeptidase deficiency (ORPHA:33573) | 0.698 → 0.588 | 1 → 28 |
| Infantile choroidocerebral calcification (ORPHA:1313) | 0.677 → 0.674 | 2 → 1 |
2 · Explain it: patient vs one disease.
hpo-drift profiles --query patient.txt --target disease.txt --old v2022-10-05 --new v2026-06-23
Query terms used 6 → 6 of 6; target 7 → 10 of 10. ← 3 of the disease's terms did not exist in 2022
3 · Your own term list: what changed, term by term and pair by pair.
hpo-drift report --old v2026-02-16 --new v2026-06-23 --terms my_terms.txt
term label status parents IC old → new
HP:0002199 Hypocalcemic seizures unchanged −HP:0002901 1.000 → 1.000
pair Lin old → new Δ MICA old → new
Hypocalcemic seizures ↔ Hypocalcemia 0.941 → 0.000 −0.941 HP:0002901 → HP:0000118
Also: lint (a CI gate for a phenotype spreadsheet: label matches, obsolete ids, unknown tokens), cohort + rank (every disease profile in phenotype.hpoa, no size cutoff). Releases are pulled from the official HPO GitHub assets, verified against their published SHA-256, and cached. Any tag like v2026-06-23 works.
What we found
Protocol first, then numbers (docs/evidence.md): 500 synthetic patients per run, each 60 % of one disease's annotations plus 2 noise terms, drawn from all 12 935 disease profiles, ranked against every disease in both releases.
| 4 months (v2026-02 → v2026-06) | 3 y 8 m (v2022-10 → v2026-06) | |
|---|---|---|
| top-1 diagnosis changed | 0 of 1 000 | 8 of 1 000 |
| top-5 list reshuffled | 93 of 1 000 | 412 of 1 000 |
| diseases not representable in the old release | 0 | 1 303 of 12 935 |
Over four months the ranking held. Over four years one patient in a hundred loses its top-1, two in five get a different differential, and a disease in ten cannot be queried with the old ontology at all — its annotations use terms that did not exist yet. The mechanism is usually not a similarity change but a representation change: gamma-glutamyl transpeptidase deficiency drops from rank 1 to 28 for the same patient because 3 of its 10 annotations are 2023+ terms. Underneath, the raw pairwise scores are never stable: every one of the 11 947 rankable disease profiles had at least one Lin score move even across the four-month interval.
So: pin the HPO release and the phenotype.hpoa version in Methods, match on IDs, and run rank-diseases across the releases your cohort spans before you call a ranking reproducible.
Documentation
Tutorial · Methods (intrinsic IC, Best Match Average, resolution across releases, cohort semantics, provenance) · Evidence (all sweeps, tables, mechanism) · Changelog · site: margosolo.github.io/hpo-drift
Companion tools
hpotools — HPO in R · awesome-human-phenotype-ontology — link-verified list of HPO tools.
Cite
DOI (all versions): 10.5281/zenodo.22286170 — each release has its own version DOI on that page; cite the version you ran (hpo-drift --version).
Soloshenko M. hpo-drift: quantifying the effect of HPO release changes on phenotype-similarity results. 2026. MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hpo_drift-0.2.1.tar.gz.
File metadata
- Download URL: hpo_drift-0.2.1.tar.gz
- Upload date:
- Size: 23.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b93ef392591572b845a4ccd76052fae52923afccaffd2b0fd6ef07eb2219562
|
|
| MD5 |
5a815a495957b48ec78b1bc3b8774a9f
|
|
| BLAKE2b-256 |
850111fa2d25dff124e6e81b02376e9f5f05935193a6daaf8add4eccb736bcc1
|
Provenance
The following attestation bundles were made for hpo_drift-0.2.1.tar.gz:
Publisher:
publish.yml on MargoSolo/hpo-drift
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hpo_drift-0.2.1.tar.gz -
Subject digest:
8b93ef392591572b845a4ccd76052fae52923afccaffd2b0fd6ef07eb2219562 - Sigstore transparency entry: 2730340816
- Sigstore integration time:
-
Permalink:
MargoSolo/hpo-drift@f7b80e2181e8101ef289bde5b4e15f3657338144 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/MargoSolo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f7b80e2181e8101ef289bde5b4e15f3657338144 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hpo_drift-0.2.1-py3-none-any.whl.
File metadata
- Download URL: hpo_drift-0.2.1-py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d46693adceeecc4f40b0e874392fecaf6aa73047f544dc8c43682b0211a71c2
|
|
| MD5 |
3a5aef4fda55efc55527c77218712a18
|
|
| BLAKE2b-256 |
fb5f7236dc8a503c26c272b5b846d9fca927c839c02ac0b090376105a899adc0
|
Provenance
The following attestation bundles were made for hpo_drift-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on MargoSolo/hpo-drift
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hpo_drift-0.2.1-py3-none-any.whl -
Subject digest:
9d46693adceeecc4f40b0e874392fecaf6aa73047f544dc8c43682b0211a71c2 - Sigstore transparency entry: 2730341260
- Sigstore integration time:
-
Permalink:
MargoSolo/hpo-drift@f7b80e2181e8101ef289bde5b4e15f3657338144 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/MargoSolo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f7b80e2181e8101ef289bde5b4e15f3657338144 -
Trigger Event:
release
-
Statement type: