orfdata 0.32.0__tar.gz → 0.33.0__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.
- {orfdata-0.32.0/orfdata.egg-info → orfdata-0.33.0}/PKG-INFO +8 -4
- {orfdata-0.32.0 → orfdata-0.33.0}/README.md +7 -3
- orfdata-0.33.0/docs/viral.md +72 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/__init__.py +2 -1
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/viral/NOTICE.md +11 -0
- orfdata-0.33.0/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
- orfdata-0.33.0/orfdata/version.py +1 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/viral.py +63 -15
- {orfdata-0.32.0 → orfdata-0.33.0/orfdata.egg-info}/PKG-INFO +8 -4
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_viral.py +58 -1
- {orfdata-0.32.0 → orfdata-0.33.0}/tools/build_hpv16_cds.py +8 -2
- orfdata-0.32.0/docs/viral.md +0 -45
- orfdata-0.32.0/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
- orfdata-0.32.0/orfdata/version.py +0 -1
- {orfdata-0.32.0 → orfdata-0.33.0}/LICENSE +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/MANIFEST.in +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/deploy.sh +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/catalogs.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/copy-yeast.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/coverage.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/dog-peptides.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/examples.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/human-tissue.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/index.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/ingolia-yeast.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/measurements.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/pairing.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/pfizer-protein.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/pfizer-rna.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/proteome.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/reference.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/search-references.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/source-references.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/species.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/storage.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs/stylesheets/docs.css +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/docs.sh +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/lint.sh +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/mkdocs.yml +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/_pinned_genome.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/_structure.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/build.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalog.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalog_cli.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalog_manifest.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalogs.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/cli.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/catalogs.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/chains.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/datasets.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/genomes.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/ires/rfam-15.1-human-ires.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/dataset.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/dataset_cli.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/datasets.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/evidence.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/evidence_summary.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/genomes.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/genomes_cli.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/initiation_context.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/install.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/liftover.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/liftover_cli.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/measurements.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/model.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/pairing.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/proteome.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/proteome_cli.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/reference.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/reference_mapping.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/refseq.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/rna.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/search_reference.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sequence.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/__init__.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/copy.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/ingolia.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/kaabinejadian.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/ncorf_mammals.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/openprot.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/peptideatlas.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/pfizer.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/pfizer_rna.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/riborf.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/wang.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/SOURCES.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/dependency_links.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/entry_points.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/requires.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/top_level.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/pyproject.toml +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/setup.cfg +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/test.sh +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/conftest.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/aggregate_evidence.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905474.soft +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905476.soft +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905478.soft +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905479.soft +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/geo-series.soft +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/methods.pdf +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/paper.xml +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/pmc-metadata.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/qconcat.fasta +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/workbook.xlsx +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346111.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346111.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346114.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346114.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346115.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346115.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346116.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346116.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346117.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346117.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346118.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346118.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346120.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346120.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346122.metadata.txt +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346122.quant.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/readMe.txt.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/Results.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/sdrf.tsv +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/S3.xlsx +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/ensembl107.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/ensembl107.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/human-ensembl107.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/human.bed +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/human.pep.fa +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/mouse.bed +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/mouse.pep.fa +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/ensembl106.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/ensembl106.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.bed.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.fasta.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/mouse-openprot-2_2-altprots+isoforms-min_2_pep-GRCm39.106.tsv.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/atlas_build.tsv.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/ensembl.pep.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/protein.tsv +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/search.fasta +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/protein.tsv +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/search.fasta +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/protein.tsv +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/search.fasta +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/GSE325522_family.soft.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/GSE325523_family.soft.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/GSE325525_family.soft.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/counts.csv.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/dog-annotation.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/dog-expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/dog-manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/mouse-annotation.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/mouse-expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/mouse-manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/samples.xlsx +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/canis_lupus_familiaris.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/context-keys-v0.4.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/ensembl115.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/homo_sapiens.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/mitochondrial.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/mus_musculus.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/uniprot_literature.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/regions/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/regions/ingolia.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/SD3.xlsx +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/ensembl107.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/ensembl107.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/ensembl107.ncrna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/human-ensembl105.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/human-ensembl105.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/human-ensembl105.ncrna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/worm-ensembl105.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/worm-ensembl105.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/worm-ensembl105.ncrna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/yeast-ensembl115.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/yeast-ensembl115.dna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/yeast-ensembl115.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/zebrafish-ensembl115.cdna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/zebrafish-ensembl115.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/zebrafish-ensembl115.ncrna.fa.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/dog.fasta +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/ensembl83-expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/ensembl83-human.fasta.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/README.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/generate.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v1.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v1.sqlite +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v2.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v2.sqlite +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v3.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v3.sqlite +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v4.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v4.sqlite +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/viral/NC_001526.4.gb.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/NOTICE.md +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/annotation.gtf.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/copies.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/expected.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/manifest.json +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/protein.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/rna.zip +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/search.fasta.gz +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_catalog_registry.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_copy.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_cross_reference_pairing.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_dog_peptides.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_ensembl_search_reference.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_evidence_rules.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_evidence_summary.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_genetic_codes.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_genomes.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_ingolia.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_initiation_context.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_liftover.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_local_build_queries.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_measurements.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_merge_catalogs.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_more_species.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_ncorf_mammals.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_openprot.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_orf_cases.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_paired_selectors.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_pairing.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_pfizer.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_pfizer_rna.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_proteome.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_reference_context.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_reference_mapping.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_reference_orf.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_refseq.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_region_targets.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_riborf.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_search_reference.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_selectors.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_storage.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_uorf_catalog.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_wang.py +0 -0
- {orfdata-0.32.0 → orfdata-0.33.0}/tools/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: orfdata
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.33.0
|
|
4
4
|
Summary: Reference proteomes with evidence-backed noncanonical ORFs on PyEnsembl genomes
|
|
5
5
|
Author: OpenVax
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -113,11 +113,15 @@ Human evidence is never transferred to another species. Viral proteomes can be a
|
|
|
113
113
|
orfdata also provides [RNA, ribosome and protein measurements](https://openvax.github.io/orfdata/measurements/)
|
|
114
114
|
for human, mouse, dog and yeast.
|
|
115
115
|
|
|
116
|
-
`
|
|
117
|
-
|
|
116
|
+
`viral_references(host="human", group="HPV", virus_type="HPV16")` finds the
|
|
117
|
+
source-qualified viral references. `viral_reference_sequence(id)` supplies the
|
|
118
|
+
packaged bases, and `viral_orfs(reference_id=id)` loads their coding paths.
|
|
119
|
+
When annotating an existing alignment, `viral_orfs(reference_dna,
|
|
120
|
+
contig="HPV16")` checks its actual reference sequence before applying the same
|
|
121
|
+
models.
|
|
118
122
|
The first [coding reference](https://openvax.github.io/orfdata/viral/) contains
|
|
119
123
|
the nine RefSeq NC_001526.4 HPV16 CDSs, with native and GDC placements;
|
|
120
|
-
|
|
124
|
+
the host association is distinct from the virus's own taxon. Broader
|
|
121
125
|
imports remain in [the viral roadmap](https://github.com/openvax/orfdata/issues/91).
|
|
122
126
|
|
|
123
127
|
## Measurement datasets
|
|
@@ -81,11 +81,15 @@ Human evidence is never transferred to another species. Viral proteomes can be a
|
|
|
81
81
|
orfdata also provides [RNA, ribosome and protein measurements](https://openvax.github.io/orfdata/measurements/)
|
|
82
82
|
for human, mouse, dog and yeast.
|
|
83
83
|
|
|
84
|
-
`
|
|
85
|
-
|
|
84
|
+
`viral_references(host="human", group="HPV", virus_type="HPV16")` finds the
|
|
85
|
+
source-qualified viral references. `viral_reference_sequence(id)` supplies the
|
|
86
|
+
packaged bases, and `viral_orfs(reference_id=id)` loads their coding paths.
|
|
87
|
+
When annotating an existing alignment, `viral_orfs(reference_dna,
|
|
88
|
+
contig="HPV16")` checks its actual reference sequence before applying the same
|
|
89
|
+
models.
|
|
86
90
|
The first [coding reference](https://openvax.github.io/orfdata/viral/) contains
|
|
87
91
|
the nine RefSeq NC_001526.4 HPV16 CDSs, with native and GDC placements;
|
|
88
|
-
|
|
92
|
+
the host association is distinct from the virus's own taxon. Broader
|
|
89
93
|
imports remain in [the viral roadmap](https://github.com/openvax/orfdata/issues/91).
|
|
90
94
|
|
|
91
95
|
## Measurement datasets
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Viral coding references
|
|
2
|
+
|
|
3
|
+
Browse the packaged viral references by host, convenience group and virus type,
|
|
4
|
+
then load their source-annotated coding paths without fetching the genome:
|
|
5
|
+
|
|
6
|
+
```python
|
|
7
|
+
from orfdata import viral_orfs, viral_reference_sequence, viral_references
|
|
8
|
+
|
|
9
|
+
references = viral_references(host="human", group="HPV", virus_type="HPV16")
|
|
10
|
+
print([(r["id"], r["coding_models"]) for r in references])
|
|
11
|
+
# [('NC_001526.4', 9), ('GRCh38.d1.vd1:HPV16', 9)]
|
|
12
|
+
|
|
13
|
+
reference_dna = viral_reference_sequence("NC_001526.4")
|
|
14
|
+
orfs = viral_orfs(reference_id="NC_001526.4")
|
|
15
|
+
for orf in orfs:
|
|
16
|
+
print(orf.orf_id, orf.gene_name, orf.coding_blocks, orf.protein_sequence)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The small bundled catalogue loads offline without PyEnsembl, Biopython or a
|
|
20
|
+
human genome. It supplies the complete DNA for the native RefSeq NC_001526.4
|
|
21
|
+
and GDC HPV16 placements; both map to the same nine source CDSs. The two DNA
|
|
22
|
+
strings differ by a verified circular rotation. `viral_reference_sequence(id)`
|
|
23
|
+
returns the exact forward FASTA bases, with T rather than U. A missing ID raises
|
|
24
|
+
`ValueError`. The metadata query does not copy genome bases into each result.
|
|
25
|
+
|
|
26
|
+
`host` accepts a known species name such as `"human"` or an NCBI taxon ID such
|
|
27
|
+
as `9606`. The released HPV16 reference records have viral `taxon_id=333760`
|
|
28
|
+
and `host_taxon_ids=[9606]`; these are different identities. Their documented
|
|
29
|
+
human host association is sourced to PaVE. `row["virus"]["group"] == "HPV"`
|
|
30
|
+
is a convenient selection label, not a formal taxonomic rank. The
|
|
31
|
+
`row["virus"]["type"] == "HPV16"` label is the virus
|
|
32
|
+
type; ICTV places it in the species *Alphapapillomavirus 9*. Each row also
|
|
33
|
+
retains the association and taxonomy source URLs. Host associations can cover
|
|
34
|
+
several host taxa as new references are curated; an unlisted host is unknown,
|
|
35
|
+
not proof that infection is impossible. NCBI Virus's isolation-host metadata is
|
|
36
|
+
not an exhaustive host-range list. `host_taxon_ids` and `host_source` have the
|
|
37
|
+
same meaning as in [ViralProteome](proteome.md#viral-proteomes).
|
|
38
|
+
|
|
39
|
+
When annotating an existing BAM, continue to bind against its **actual** full
|
|
40
|
+
alignment-reference DNA:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
orfs = viral_orfs(alignment_reference_dna, contig="HPV16")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
This checks the sequence hash and its qualified coordinates. A contig name or
|
|
47
|
+
related strain cannot transfer CDS annotations to mismatching DNA. It raises
|
|
48
|
+
`ValueError` for an unavailable reference rather than returning an empty ORF
|
|
49
|
+
set. `viral_references()` reports coverage and source checksums, and
|
|
50
|
+
`viral_orfs()` returns the existing `SourceRNA`/`TranscriptORF` models.
|
|
51
|
+
|
|
52
|
+
Each model uses a `SourceRNA` containing only the available CDS, including
|
|
53
|
+
ordered splice blocks. Full transcript ends are not asserted. The existing
|
|
54
|
+
`TranscriptORF.at()` validates its source protein and coding boundaries.
|
|
55
|
+
These models have `orf_type="reference_CDS"`. Their internal kind `extra_orf`
|
|
56
|
+
describes a source-defined ORF outside a loaded PyEnsembl annotation, not a
|
|
57
|
+
claim that a RefSeq CDS is biologically noncanonical. No Ribo-seq or MS
|
|
58
|
+
support is inferred from the reference annotation.
|
|
59
|
+
|
|
60
|
+
The nine annotations are not an exhaustive HPV16 ORF catalogue. Other HPV
|
|
61
|
+
types/lineages, EBV/KSHV, CMV, hepatitis viruses including HDV, HTLV-1/HIV,
|
|
62
|
+
and polyomaviruses remain explicit coverage work in
|
|
63
|
+
[issues #91–98](https://github.com/openvax/orfdata/issues/91).
|
|
64
|
+
|
|
65
|
+
Isovar owns reconstructed sample RNA and read evidence. It can use these
|
|
66
|
+
coding paths to anchor a frame on observed sequence, preserving variants
|
|
67
|
+
and incomplete starts/stops. ORFdata does not assemble sample RNA, replace
|
|
68
|
+
missing bases, infer protein abundance or establish viral tumor causality.
|
|
69
|
+
RNA and coding-reference matches are not direct protein evidence.
|
|
70
|
+
|
|
71
|
+
Source attribution and rebuilding instructions are in
|
|
72
|
+
[`orfdata/data/viral/NOTICE.md`](https://github.com/openvax/orfdata/blob/main/orfdata/data/viral/NOTICE.md).
|
|
@@ -70,10 +70,11 @@ from .rna import IRES, ProteinProduct, RNAFeature, SourceRNA, products_from_unip
|
|
|
70
70
|
from .search_reference import SearchMembership, SearchReference, SearchReferenceSpec, SearchSequence
|
|
71
71
|
from .sequence import GeneticCode, genetic_code
|
|
72
72
|
from .version import __version__
|
|
73
|
-
from .viral import viral_orfs, viral_references
|
|
73
|
+
from .viral import viral_orfs, viral_reference_sequence, viral_references
|
|
74
74
|
|
|
75
75
|
__all__ = [
|
|
76
76
|
"viral_orfs",
|
|
77
|
+
"viral_reference_sequence",
|
|
77
78
|
"viral_references",
|
|
78
79
|
"__version__",
|
|
79
80
|
"Proteome",
|
|
@@ -13,6 +13,17 @@ The catalogue contains nine source-annotated CDSs, including two joined paths.
|
|
|
13
13
|
It does not claim all reported HPV16 ORFs or complete transcript models.
|
|
14
14
|
RNA support does not establish translation or protein expression.
|
|
15
15
|
|
|
16
|
+
The released catalogue also contains the full forward reference bases for both
|
|
17
|
+
qualified placements. HPV16's documented human host is sourced from PaVE's
|
|
18
|
+
HPV16REF record (`/host="Human (Homo sapiens)"`):
|
|
19
|
+
https://pave.niaid.nih.gov/locus_viewer?feature_id=HPV16_E7&seq_id=HPV16REF .
|
|
20
|
+
This host association applies to HPV16 as a type, not to all papillomaviruses,
|
|
21
|
+
and does not claim an exhaustive host range. ICTV lists HPV16 in the species
|
|
22
|
+
*Alphapapillomavirus 9*:
|
|
23
|
+
https://ictv.global/report/chapter/papillomaviridae/taxonomy/papillomaviridae .
|
|
24
|
+
These are distinct from the RefSeq DNA/CDS source and the GDC coordinate
|
|
25
|
+
placement. Consulted 2026-10-16.
|
|
26
|
+
|
|
16
27
|
Native DNA MD5: `08d2b3849496d12cc45fd4df713d5c2f`.
|
|
17
28
|
GDC GRCh38.d1.vd1 HPV16 DNA MD5: `f2463721818c29998ef5ab917e6df74a`.
|
|
18
29
|
GDC DNA is the source circle rotated by 864 bases. Both placements retain
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.33.0"
|
|
@@ -8,10 +8,10 @@ from functools import lru_cache
|
|
|
8
8
|
from importlib.resources import files
|
|
9
9
|
|
|
10
10
|
from .model import TranscriptORF
|
|
11
|
-
from .reference import ReferenceContext
|
|
11
|
+
from .reference import ReferenceContext, species_taxon
|
|
12
12
|
from .rna import SourceRNA
|
|
13
13
|
|
|
14
|
-
_CATALOG_SHA256 = "
|
|
14
|
+
_CATALOG_SHA256 = "aca0c72948d4cda896d14b32203981bce4759e0c70212c05dca6f3d0e16ed4b4"
|
|
15
15
|
_COMPLEMENT = str.maketrans("ACGT", "TGCA")
|
|
16
16
|
|
|
17
17
|
|
|
@@ -21,39 +21,84 @@ def _catalog():
|
|
|
21
21
|
if hashlib.sha256(raw).hexdigest() != _CATALOG_SHA256:
|
|
22
22
|
raise ValueError("Bundled viral CDS catalogue checksum mismatch")
|
|
23
23
|
data = json.loads(gzip.decompress(raw))
|
|
24
|
-
if data["schema"] != "orfdata.viral_cds.
|
|
24
|
+
if data["schema"] != "orfdata.viral_cds.v2":
|
|
25
25
|
raise ValueError("Unsupported viral CDS catalogue schema")
|
|
26
26
|
return data
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def viral_references():
|
|
30
|
-
"""
|
|
29
|
+
def viral_references(*, host=None, group=None, virus_type=None):
|
|
30
|
+
"""Find released viral references by documented host, group and type.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
host : str or int, optional
|
|
35
|
+
Known host name such as ``"human"``, or an NCBI host taxon ID. A host
|
|
36
|
+
association is source-attributed and is not a complete host range.
|
|
37
|
+
group : str, optional
|
|
38
|
+
Convenience group label, such as ``"HPV"``; not a taxonomy rank.
|
|
39
|
+
virus_type : str, optional
|
|
40
|
+
Named virus type, such as ``"HPV16"``; distinct from ICTV species.
|
|
31
41
|
|
|
32
42
|
Returns
|
|
33
43
|
-------
|
|
34
44
|
tuple of dict
|
|
35
|
-
Exact sequence hashes,
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
Exact sequence hashes, source/host pins, virus identity and coverage.
|
|
46
|
+
A listed reference is not a complete transcript or exhaustive ORF
|
|
47
|
+
catalogue. Returned dictionaries are independent copies.
|
|
38
48
|
"""
|
|
49
|
+
if host is None:
|
|
50
|
+
host_taxon_id = None
|
|
51
|
+
elif type(host) is int and host > 0:
|
|
52
|
+
host_taxon_id = host
|
|
53
|
+
elif isinstance(host, str) and species_taxon(host) is not None:
|
|
54
|
+
host_taxon_id = species_taxon(host)
|
|
55
|
+
else:
|
|
56
|
+
raise ValueError("host must be a known species name or positive NCBI taxon ID")
|
|
57
|
+
if any(value is not None and (not isinstance(value, str) or not value)
|
|
58
|
+
for value in (group, virus_type)):
|
|
59
|
+
raise ValueError("group and virus_type must be nonempty names")
|
|
39
60
|
data = _catalog()
|
|
40
61
|
return tuple(dict(**{key: copy.deepcopy(value) for key, value in row.items()
|
|
41
|
-
if key
|
|
62
|
+
if key not in ("coding_blocks", "reference_sequence")},
|
|
42
63
|
coding_models=len(row["coding_blocks"]), scope=data["scope"],
|
|
43
64
|
catalogue_sha256=_CATALOG_SHA256,
|
|
44
65
|
products=[dict(protein_id=cds["protein_id"], gene=cds["gene"],
|
|
45
66
|
product=cds["product"]) for cds in data["cds"]])
|
|
46
|
-
for row in data["references"]
|
|
67
|
+
for row in data["references"]
|
|
68
|
+
if (host_taxon_id is None or host_taxon_id in row["host_taxon_ids"])
|
|
69
|
+
and (group is None or row["virus"]["group"].casefold() == group.casefold())
|
|
70
|
+
and (virus_type is None or row["virus"]["type"].casefold() == virus_type.casefold()))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def viral_reference_sequence(reference_id):
|
|
74
|
+
"""Return bundled, checksum-verified reference bases for one exact ID.
|
|
75
|
+
|
|
76
|
+
The sequence uses the forward FASTA alphabet (T rather than U) and may
|
|
77
|
+
represent a virus whose biological genome is RNA. No network is accessed.
|
|
78
|
+
"""
|
|
79
|
+
matches = [row for row in _catalog()["references"] if row["id"] == reference_id]
|
|
80
|
+
if len(matches) != 1:
|
|
81
|
+
raise ValueError("No unique released viral reference ID matches this name")
|
|
82
|
+
row = matches[0]
|
|
83
|
+
sequence = row["reference_sequence"]
|
|
84
|
+
if (len(sequence) != row["length"] or
|
|
85
|
+
hashlib.sha256(sequence.encode("ascii")).hexdigest() != row["sequence_sha256"]):
|
|
86
|
+
raise ValueError("Bundled viral reference sequence checksum mismatch")
|
|
87
|
+
return sequence
|
|
47
88
|
|
|
48
89
|
|
|
49
|
-
def viral_orfs(reference_sequence, *, contig=None):
|
|
90
|
+
def viral_orfs(reference_sequence=None, *, reference_id=None, contig=None):
|
|
50
91
|
"""Load source-defined CDSs for one exactly matching viral DNA reference.
|
|
51
92
|
|
|
52
93
|
Parameters
|
|
53
94
|
----------
|
|
54
|
-
reference_sequence : str
|
|
55
|
-
Complete forward reference DNA
|
|
56
|
-
|
|
95
|
+
reference_sequence : str, optional
|
|
96
|
+
Complete forward reference DNA from an alignment. This checks actual
|
|
97
|
+
sequence identity rather than transferring annotation by contig name.
|
|
98
|
+
reference_id : str, optional
|
|
99
|
+
Bundled reference ID from ``viral_references()``. Use this to load the
|
|
100
|
+
reference ORFs without obtaining DNA separately. Supply exactly one
|
|
101
|
+
of ``reference_sequence`` or ``reference_id``.
|
|
57
102
|
contig : str, optional
|
|
58
103
|
The caller's name for this exact DNA in an alignment reference. The
|
|
59
104
|
original versioned source identity remains on every ORF's context.
|
|
@@ -72,7 +117,10 @@ def viral_orfs(reference_sequence, *, contig=None):
|
|
|
72
117
|
No released coding reference matches, or a source model fails to bind
|
|
73
118
|
and translate exactly. Discovery is available through viral_references.
|
|
74
119
|
"""
|
|
75
|
-
|
|
120
|
+
if (reference_sequence is None) == (reference_id is None):
|
|
121
|
+
raise ValueError("Provide exactly one of reference_sequence or reference_id")
|
|
122
|
+
sequence = (viral_reference_sequence(reference_id) if reference_id is not None
|
|
123
|
+
else str(reference_sequence).upper())
|
|
76
124
|
fingerprint = hashlib.sha256(sequence.encode("ascii")).hexdigest()
|
|
77
125
|
data = _catalog()
|
|
78
126
|
matches = [row for row in data["references"] if row["sequence_sha256"] == fingerprint
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: orfdata
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.33.0
|
|
4
4
|
Summary: Reference proteomes with evidence-backed noncanonical ORFs on PyEnsembl genomes
|
|
5
5
|
Author: OpenVax
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -113,11 +113,15 @@ Human evidence is never transferred to another species. Viral proteomes can be a
|
|
|
113
113
|
orfdata also provides [RNA, ribosome and protein measurements](https://openvax.github.io/orfdata/measurements/)
|
|
114
114
|
for human, mouse, dog and yeast.
|
|
115
115
|
|
|
116
|
-
`
|
|
117
|
-
|
|
116
|
+
`viral_references(host="human", group="HPV", virus_type="HPV16")` finds the
|
|
117
|
+
source-qualified viral references. `viral_reference_sequence(id)` supplies the
|
|
118
|
+
packaged bases, and `viral_orfs(reference_id=id)` loads their coding paths.
|
|
119
|
+
When annotating an existing alignment, `viral_orfs(reference_dna,
|
|
120
|
+
contig="HPV16")` checks its actual reference sequence before applying the same
|
|
121
|
+
models.
|
|
118
122
|
The first [coding reference](https://openvax.github.io/orfdata/viral/) contains
|
|
119
123
|
the nine RefSeq NC_001526.4 HPV16 CDSs, with native and GDC placements;
|
|
120
|
-
|
|
124
|
+
the host association is distinct from the virus's own taxon. Broader
|
|
121
125
|
imports remain in [the viral roadmap](https://github.com/openvax/orfdata/issues/91).
|
|
122
126
|
|
|
123
127
|
## Measurement datasets
|
|
@@ -4,13 +4,15 @@ import gzip
|
|
|
4
4
|
import hashlib
|
|
5
5
|
import io
|
|
6
6
|
import json
|
|
7
|
+
from copy import deepcopy
|
|
7
8
|
from importlib.resources import files
|
|
8
9
|
from pathlib import Path
|
|
9
10
|
|
|
10
11
|
import pytest
|
|
11
12
|
from Bio import SeqIO
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
import orfdata.viral as viral_module
|
|
15
|
+
from orfdata import SourceRNA, viral_orfs, viral_reference_sequence, viral_references
|
|
14
16
|
from tools.build_hpv16_cds import build
|
|
15
17
|
|
|
16
18
|
FIXTURE = Path(__file__).parent / "data/viral/NC_001526.4.gb.gz"
|
|
@@ -86,11 +88,66 @@ def test_discovery_is_offline_and_returned_metadata_cannot_change_loading(source
|
|
|
86
88
|
assert {row["id"] for row in references} == {"NC_001526.4", "GRCh38.d1.vd1:HPV16"}
|
|
87
89
|
assert all(row["coding_models"] == 9 for row in references)
|
|
88
90
|
assert all(row["catalogue_sha256"] and row["source"]["sha256"] for row in references)
|
|
91
|
+
assert all("reference_sequence" not in row for row in references)
|
|
89
92
|
references[0]["source"]["accession"] = "changed"
|
|
93
|
+
references[0]["host_taxon_ids"].clear()
|
|
90
94
|
assert viral_references()[0]["source"]["accession"] == "NC_001526.4"
|
|
95
|
+
assert viral_references()[0]["host_taxon_ids"] == [9606]
|
|
91
96
|
assert viral_orfs(str(record.seq))[0].context.annotation_version == "NC_001526.4"
|
|
92
97
|
|
|
93
98
|
|
|
99
|
+
def test_host_group_and_type_select_exact_references_with_distinct_taxa():
|
|
100
|
+
references = viral_references(host="human", group="HPV", virus_type="HPV16")
|
|
101
|
+
assert {row["id"] for row in references} == {"NC_001526.4", "GRCh38.d1.vd1:HPV16"}
|
|
102
|
+
assert viral_references(host=9606, group="hpv", virus_type="hpv16") == references
|
|
103
|
+
assert viral_references(host="mouse") == viral_references(host=10090) == ()
|
|
104
|
+
assert viral_references(host="human", virus_type="HPV18") == ()
|
|
105
|
+
for row in references:
|
|
106
|
+
assert row["taxon_id"] == 333760 and row["host_taxon_ids"] == [9606]
|
|
107
|
+
assert "PaVE HPV16REF" in row["host_source"]
|
|
108
|
+
assert row["virus"]["ictv_species"] == "Alphapapillomavirus 9"
|
|
109
|
+
assert row["virus"]["group"] == "HPV" and row["virus"]["type"] == "HPV16"
|
|
110
|
+
assert row["virus"]["taxonomy_source"].startswith("https://ictv.global/")
|
|
111
|
+
for invalid in ("not_a_host", 0, True):
|
|
112
|
+
with pytest.raises(ValueError, match="host"):
|
|
113
|
+
viral_references(host=invalid)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def test_explicit_multiple_host_associations_can_select_one_reference_from_each_host(monkeypatch):
|
|
117
|
+
# Synthetic metadata checks selection only; it makes no HPV16 mouse-host claim.
|
|
118
|
+
catalog = deepcopy(viral_module._catalog())
|
|
119
|
+
catalog["references"][0]["host_taxon_ids"].append(10090)
|
|
120
|
+
catalog["references"][0]["host_source"] = "synthetic multiple-host fixture"
|
|
121
|
+
monkeypatch.setattr(viral_module, "_catalog", lambda: catalog)
|
|
122
|
+
assert {row["id"] for row in viral_references(host="human")} == {
|
|
123
|
+
"NC_001526.4", "GRCh38.d1.vd1:HPV16"}
|
|
124
|
+
mouse, = viral_references(host="mouse", virus_type="HPV16")
|
|
125
|
+
assert mouse["id"] == "NC_001526.4" and mouse["taxon_id"] == 333760
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_bundled_reference_sequences_and_named_orfs_match_both_source_placements(source):
|
|
129
|
+
_, record = source
|
|
130
|
+
native = str(record.seq)
|
|
131
|
+
gdc = native[-864:] + native[:-864]
|
|
132
|
+
for reference_id, expected in (("NC_001526.4", native),
|
|
133
|
+
("GRCh38.d1.vd1:HPV16", gdc)):
|
|
134
|
+
sequence = viral_reference_sequence(reference_id)
|
|
135
|
+
assert sequence == expected
|
|
136
|
+
row, = (r for r in viral_references() if r["id"] == reference_id)
|
|
137
|
+
assert hashlib.sha256(sequence.encode()).hexdigest() == row["sequence_sha256"]
|
|
138
|
+
by_name = viral_orfs(reference_id=reference_id, contig="selected")
|
|
139
|
+
by_dna = viral_orfs(sequence, contig="selected")
|
|
140
|
+
assert [(o.orf_id, o.coding_blocks, o.protein_sequence) for o in by_name] == [
|
|
141
|
+
(o.orf_id, o.coding_blocks, o.protein_sequence) for o in by_dna]
|
|
142
|
+
assert {o.transcript.contig for o in by_name} == {"selected"}
|
|
143
|
+
with pytest.raises(ValueError, match="reference ID"):
|
|
144
|
+
viral_reference_sequence("unknown")
|
|
145
|
+
with pytest.raises(ValueError, match="exactly one"):
|
|
146
|
+
viral_orfs()
|
|
147
|
+
with pytest.raises(ValueError, match="exactly one"):
|
|
148
|
+
viral_orfs(native, reference_id="NC_001526.4")
|
|
149
|
+
|
|
150
|
+
|
|
94
151
|
def test_corrupt_packaged_catalogue_fails_before_returning_models(monkeypatch):
|
|
95
152
|
import orfdata.viral as module
|
|
96
153
|
|
|
@@ -20,6 +20,9 @@ GDC_MD5 = "f2463721818c29998ef5ab917e6df74a"
|
|
|
20
20
|
ROTATION = 864
|
|
21
21
|
SOURCE = ("https://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?"
|
|
22
22
|
"id=NC_001526.4&db=nuccore&report=genbank&retmode=text")
|
|
23
|
+
HOST_SOURCE = ("PaVE HPV16REF /host=Human (Homo sapiens), checked 2026-10-16: "
|
|
24
|
+
"https://pave.niaid.nih.gov/locus_viewer?feature_id=HPV16_E7&seq_id=HPV16REF")
|
|
25
|
+
TAXONOMY_SOURCE = "https://ictv.global/report/chapter/papillomaviridae/taxonomy/papillomaviridae"
|
|
23
26
|
|
|
24
27
|
|
|
25
28
|
def build(genbank):
|
|
@@ -65,8 +68,11 @@ def build(genbank):
|
|
|
65
68
|
references.append(dict(id=name, taxon_id=333760, species="human_papillomavirus_16",
|
|
66
69
|
length=len(sequence), sequence_md5=hashlib.md5(sequence.encode()).hexdigest(),
|
|
67
70
|
sequence_sha256=hashlib.sha256(sequence.encode()).hexdigest(),
|
|
68
|
-
source=source, native_to_reference_rotation=offset, coding_blocks=blocks
|
|
69
|
-
|
|
71
|
+
source=source, native_to_reference_rotation=offset, coding_blocks=blocks,
|
|
72
|
+
reference_sequence=sequence, host_taxon_ids=[9606], host_source=HOST_SOURCE,
|
|
73
|
+
virus=dict(group="HPV", type="HPV16", ictv_species="Alphapapillomavirus 9",
|
|
74
|
+
taxonomy_source=TAXONOMY_SOURCE)))
|
|
75
|
+
return dict(schema="orfdata.viral_cds.v2", source=source,
|
|
70
76
|
scope="Nine source-annotated HPV16 CDSs; not all HPV ORFs or complete transcript models",
|
|
71
77
|
references=references, cds=definitions)
|
|
72
78
|
|
orfdata-0.32.0/docs/viral.md
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Viral coding references
|
|
2
|
-
|
|
3
|
-
`viral_orfs()` returns existing `TranscriptORF` objects for source-annotated
|
|
4
|
-
viral CDSs. Supply the complete reference DNA that the RNA was aligned to:
|
|
5
|
-
|
|
6
|
-
```python
|
|
7
|
-
from orfdata import viral_orfs, viral_references
|
|
8
|
-
|
|
9
|
-
print([(r["id"], r["coding_models"]) for r in viral_references()])
|
|
10
|
-
# [('NC_001526.4', 9), ('GRCh38.d1.vd1:HPV16', 9)]
|
|
11
|
-
|
|
12
|
-
orfs = viral_orfs(reference_dna, contig="HPV16")
|
|
13
|
-
for orf in orfs:
|
|
14
|
-
print(orf.orf_id, orf.gene_name, orf.coding_blocks, orf.protein_sequence)
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
The small bundled catalogue loads offline without PyEnsembl, Biopython or a
|
|
18
|
-
human genome. Its nine HPV16 CDSs come from RefSeq NC_001526.4. The loader
|
|
19
|
-
requires an exact full-DNA hash and separately qualifies native and GDC
|
|
20
|
-
circular rotations. A contig name or related strain is insufficient.
|
|
21
|
-
An unavailable reference raises `ValueError`, distinct from a valid empty query.
|
|
22
|
-
`viral_references()` exposes exact identities, coding coverage, source pins
|
|
23
|
-
and product names without loading other data.
|
|
24
|
-
|
|
25
|
-
Each model uses a `SourceRNA` containing only the available CDS, including
|
|
26
|
-
ordered splice blocks. Full transcript ends are not asserted. The existing
|
|
27
|
-
`TranscriptORF.at()` validates its source protein and coding boundaries.
|
|
28
|
-
These models have `orf_type="reference_CDS"`. Their internal kind `extra_orf`
|
|
29
|
-
describes a source-defined ORF outside a loaded PyEnsembl annotation, not a
|
|
30
|
-
claim that a RefSeq CDS is biologically noncanonical. No Ribo-seq or MS
|
|
31
|
-
support is inferred from the reference annotation.
|
|
32
|
-
|
|
33
|
-
The nine annotations are not an exhaustive HPV16 ORF catalogue. Other HPV
|
|
34
|
-
types/lineages, EBV/KSHV, CMV, hepatitis viruses including HDV, HTLV-1/HIV,
|
|
35
|
-
and polyomaviruses remain explicit coverage work in
|
|
36
|
-
[issues #91–98](https://github.com/openvax/orfdata/issues/91).
|
|
37
|
-
|
|
38
|
-
Isovar owns reconstructed sample RNA and read evidence. It can use these
|
|
39
|
-
coding paths to anchor a frame on observed sequence, preserving variants
|
|
40
|
-
and incomplete starts/stops. ORFdata does not assemble sample RNA, replace
|
|
41
|
-
missing bases, infer protein abundance or establish viral tumor causality.
|
|
42
|
-
RNA and coding-reference matches are not direct protein evidence.
|
|
43
|
-
|
|
44
|
-
Source attribution and rebuilding instructions are in
|
|
45
|
-
[`orfdata/data/viral/NOTICE.md`](https://github.com/openvax/orfdata/blob/main/orfdata/data/viral/NOTICE.md).
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.32.0"
|
|
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
|