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.
Files changed (276) hide show
  1. {orfdata-0.32.0/orfdata.egg-info → orfdata-0.33.0}/PKG-INFO +8 -4
  2. {orfdata-0.32.0 → orfdata-0.33.0}/README.md +7 -3
  3. orfdata-0.33.0/docs/viral.md +72 -0
  4. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/__init__.py +2 -1
  5. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/viral/NOTICE.md +11 -0
  6. orfdata-0.33.0/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
  7. orfdata-0.33.0/orfdata/version.py +1 -0
  8. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/viral.py +63 -15
  9. {orfdata-0.32.0 → orfdata-0.33.0/orfdata.egg-info}/PKG-INFO +8 -4
  10. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_viral.py +58 -1
  11. {orfdata-0.32.0 → orfdata-0.33.0}/tools/build_hpv16_cds.py +8 -2
  12. orfdata-0.32.0/docs/viral.md +0 -45
  13. orfdata-0.32.0/orfdata/data/viral/hpv16-refseq-CDS.json.gz +0 -0
  14. orfdata-0.32.0/orfdata/version.py +0 -1
  15. {orfdata-0.32.0 → orfdata-0.33.0}/LICENSE +0 -0
  16. {orfdata-0.32.0 → orfdata-0.33.0}/MANIFEST.in +0 -0
  17. {orfdata-0.32.0 → orfdata-0.33.0}/deploy.sh +0 -0
  18. {orfdata-0.32.0 → orfdata-0.33.0}/docs/catalogs.md +0 -0
  19. {orfdata-0.32.0 → orfdata-0.33.0}/docs/copy-yeast.md +0 -0
  20. {orfdata-0.32.0 → orfdata-0.33.0}/docs/coverage.md +0 -0
  21. {orfdata-0.32.0 → orfdata-0.33.0}/docs/dog-peptides.md +0 -0
  22. {orfdata-0.32.0 → orfdata-0.33.0}/docs/examples.md +0 -0
  23. {orfdata-0.32.0 → orfdata-0.33.0}/docs/human-tissue.md +0 -0
  24. {orfdata-0.32.0 → orfdata-0.33.0}/docs/index.md +0 -0
  25. {orfdata-0.32.0 → orfdata-0.33.0}/docs/ingolia-yeast.md +0 -0
  26. {orfdata-0.32.0 → orfdata-0.33.0}/docs/measurements.md +0 -0
  27. {orfdata-0.32.0 → orfdata-0.33.0}/docs/pairing.md +0 -0
  28. {orfdata-0.32.0 → orfdata-0.33.0}/docs/pfizer-protein.md +0 -0
  29. {orfdata-0.32.0 → orfdata-0.33.0}/docs/pfizer-rna.md +0 -0
  30. {orfdata-0.32.0 → orfdata-0.33.0}/docs/proteome.md +0 -0
  31. {orfdata-0.32.0 → orfdata-0.33.0}/docs/reference.md +0 -0
  32. {orfdata-0.32.0 → orfdata-0.33.0}/docs/search-references.md +0 -0
  33. {orfdata-0.32.0 → orfdata-0.33.0}/docs/source-references.md +0 -0
  34. {orfdata-0.32.0 → orfdata-0.33.0}/docs/species.md +0 -0
  35. {orfdata-0.32.0 → orfdata-0.33.0}/docs/storage.md +0 -0
  36. {orfdata-0.32.0 → orfdata-0.33.0}/docs/stylesheets/docs.css +0 -0
  37. {orfdata-0.32.0 → orfdata-0.33.0}/docs.sh +0 -0
  38. {orfdata-0.32.0 → orfdata-0.33.0}/lint.sh +0 -0
  39. {orfdata-0.32.0 → orfdata-0.33.0}/mkdocs.yml +0 -0
  40. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/_pinned_genome.py +0 -0
  41. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/_structure.py +0 -0
  42. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/build.py +0 -0
  43. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalog.py +0 -0
  44. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalog_cli.py +0 -0
  45. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalog_manifest.py +0 -0
  46. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/catalogs.py +0 -0
  47. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/cli.py +0 -0
  48. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/catalogs.json +0 -0
  49. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/chains.json +0 -0
  50. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/datasets.json +0 -0
  51. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/genomes.json +0 -0
  52. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/ires/rfam-15.1-human-ires.json +0 -0
  53. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/AUTHOR-LICENSE.txt +0 -0
  54. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/NOTICE.txt +0 -0
  55. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/catalog.json.gz +0 -0
  56. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/orf-evidence/manifest.json +0 -0
  57. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/AUTHOR-LICENSE.txt +0 -0
  58. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/NOTICE.txt +0 -0
  59. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/catalog.json.gz +0 -0
  60. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/data/uorf-evidence/manifest.json +0 -0
  61. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/dataset.py +0 -0
  62. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/dataset_cli.py +0 -0
  63. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/datasets.py +0 -0
  64. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/evidence.py +0 -0
  65. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/evidence_summary.py +0 -0
  66. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/genomes.py +0 -0
  67. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/genomes_cli.py +0 -0
  68. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/initiation_context.py +0 -0
  69. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/install.py +0 -0
  70. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/liftover.py +0 -0
  71. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/liftover_cli.py +0 -0
  72. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/measurements.py +0 -0
  73. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/model.py +0 -0
  74. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/pairing.py +0 -0
  75. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/proteome.py +0 -0
  76. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/proteome_cli.py +0 -0
  77. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/reference.py +0 -0
  78. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/reference_mapping.py +0 -0
  79. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/refseq.py +0 -0
  80. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/rna.py +0 -0
  81. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/search_reference.py +0 -0
  82. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sequence.py +0 -0
  83. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/__init__.py +0 -0
  84. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/copy.py +0 -0
  85. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/ingolia.py +0 -0
  86. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/kaabinejadian.py +0 -0
  87. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/ncorf_mammals.py +0 -0
  88. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/openprot.py +0 -0
  89. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/peptideatlas.py +0 -0
  90. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/pfizer.py +0 -0
  91. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/pfizer_rna.py +0 -0
  92. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/riborf.py +0 -0
  93. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata/sources/wang.py +0 -0
  94. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/SOURCES.txt +0 -0
  95. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/dependency_links.txt +0 -0
  96. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/entry_points.txt +0 -0
  97. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/requires.txt +0 -0
  98. {orfdata-0.32.0 → orfdata-0.33.0}/orfdata.egg-info/top_level.txt +0 -0
  99. {orfdata-0.32.0 → orfdata-0.33.0}/pyproject.toml +0 -0
  100. {orfdata-0.32.0 → orfdata-0.33.0}/setup.cfg +0 -0
  101. {orfdata-0.32.0 → orfdata-0.33.0}/test.sh +0 -0
  102. {orfdata-0.32.0 → orfdata-0.33.0}/tests/conftest.py +0 -0
  103. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/aggregate_evidence.json +0 -0
  104. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905474.soft +0 -0
  105. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905474_KL9_fpkm.txt.gz +0 -0
  106. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905476.soft +0 -0
  107. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905476_KL10_fpkm.txt.gz +0 -0
  108. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905478.soft +0 -0
  109. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905478_KL11_fpkm.txt.gz +0 -0
  110. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905479.soft +0 -0
  111. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/GSM1905479_KL12_fpkm.txt.gz +0 -0
  112. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/NOTICE.md +0 -0
  113. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/expected.json +0 -0
  114. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/geo-series.soft +0 -0
  115. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/manifest.json +0 -0
  116. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/methods.pdf +0 -0
  117. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/paper.xml +0 -0
  118. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/pmc-metadata.json +0 -0
  119. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/qconcat.fasta +0 -0
  120. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/copy/workbook.xlsx +0 -0
  121. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346111.metadata.txt +0 -0
  122. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346111.quant.txt.gz +0 -0
  123. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346114.metadata.txt +0 -0
  124. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346114.quant.txt.gz +0 -0
  125. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346115.metadata.txt +0 -0
  126. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346115.quant.txt.gz +0 -0
  127. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346116.metadata.txt +0 -0
  128. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346116.quant.txt.gz +0 -0
  129. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346117.metadata.txt +0 -0
  130. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346117.quant.txt.gz +0 -0
  131. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346118.metadata.txt +0 -0
  132. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346118.quant.txt.gz +0 -0
  133. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346120.metadata.txt +0 -0
  134. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346120.quant.txt.gz +0 -0
  135. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346122.metadata.txt +0 -0
  136. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/GSM346122.quant.txt.gz +0 -0
  137. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/NOTICE.md +0 -0
  138. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/expected.json +0 -0
  139. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/manifest.json +0 -0
  140. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ingolia/readMe.txt.gz +0 -0
  141. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/README.md +0 -0
  142. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/Results.zip +0 -0
  143. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/manifest.json +0 -0
  144. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/kaabinejadian/sdrf.tsv +0 -0
  145. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/README.md +0 -0
  146. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/S3.xlsx +0 -0
  147. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/ensembl107.cdna.fa.gz +0 -0
  148. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/ensembl107.gtf.gz +0 -0
  149. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/human-ensembl107.gtf.gz +0 -0
  150. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/human.bed +0 -0
  151. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/human.pep.fa +0 -0
  152. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/mouse.bed +0 -0
  153. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/ncorf_mammals/mouse.pep.fa +0 -0
  154. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/README.md +0 -0
  155. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/ensembl106.cdna.fa.gz +0 -0
  156. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/openprot/ensembl106.gtf.gz +0 -0
  157. {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
  158. {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
  159. {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
  160. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/README.md +0 -0
  161. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/atlas_build.tsv.zip +0 -0
  162. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/ensembl.pep.fa.gz +0 -0
  163. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/peptideatlas/manifest.json +0 -0
  164. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/NOTICE.md +0 -0
  165. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/expected.json +0 -0
  166. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/manifest.json +0 -0
  167. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/protein.tsv +0 -0
  168. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/dog/search.fasta +0 -0
  169. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/expected.json +0 -0
  170. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/manifest.json +0 -0
  171. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/protein.tsv +0 -0
  172. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/human/search.fasta +0 -0
  173. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/expected.json +0 -0
  174. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/manifest.json +0 -0
  175. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/protein.tsv +0 -0
  176. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer/mouse/search.fasta +0 -0
  177. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/GSE325522_family.soft.gz +0 -0
  178. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/GSE325523_family.soft.gz +0 -0
  179. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/GSE325525_family.soft.gz +0 -0
  180. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/NOTICE.md +0 -0
  181. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/counts.csv.gz +0 -0
  182. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/dog-annotation.gtf.gz +0 -0
  183. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/dog-expected.json +0 -0
  184. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/dog-manifest.json +0 -0
  185. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/mouse-annotation.gtf.gz +0 -0
  186. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/mouse-expected.json +0 -0
  187. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/mouse-manifest.json +0 -0
  188. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/pfizer_rna/samples.xlsx +0 -0
  189. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/README.md +0 -0
  190. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/canis_lupus_familiaris.json +0 -0
  191. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/context-keys-v0.4.json +0 -0
  192. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/ensembl115.json +0 -0
  193. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/homo_sapiens.json +0 -0
  194. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/mitochondrial.json +0 -0
  195. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/mus_musculus.json +0 -0
  196. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/saccharomyces_cerevisiae.json +0 -0
  197. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/references/uniprot_literature.json +0 -0
  198. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/regions/NOTICE.md +0 -0
  199. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/regions/ingolia.json +0 -0
  200. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/README.md +0 -0
  201. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/SD3.xlsx +0 -0
  202. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/ensembl107.cdna.fa.gz +0 -0
  203. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/ensembl107.gtf.gz +0 -0
  204. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/ensembl107.ncrna.fa.gz +0 -0
  205. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/human-ensembl105.cdna.fa.gz +0 -0
  206. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/human-ensembl105.gtf.gz +0 -0
  207. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/human-ensembl105.ncrna.fa.gz +0 -0
  208. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/worm-ensembl105.cdna.fa.gz +0 -0
  209. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/worm-ensembl105.gtf.gz +0 -0
  210. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/worm-ensembl105.ncrna.fa.gz +0 -0
  211. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/yeast-ensembl115.cdna.fa.gz +0 -0
  212. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/yeast-ensembl115.dna.fa.gz +0 -0
  213. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/yeast-ensembl115.gtf.gz +0 -0
  214. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/zebrafish-ensembl115.cdna.fa.gz +0 -0
  215. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/zebrafish-ensembl115.gtf.gz +0 -0
  216. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/riborf/zebrafish-ensembl115.ncrna.fa.gz +0 -0
  217. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/NOTICE.md +0 -0
  218. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/dog.fasta +0 -0
  219. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/ensembl83-expected.json +0 -0
  220. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/ensembl83-human.fasta.gz +0 -0
  221. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/search_reference/expected.json +0 -0
  222. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/README.md +0 -0
  223. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/generate.py +0 -0
  224. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v1.json +0 -0
  225. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v1.sqlite +0 -0
  226. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v2.json +0 -0
  227. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v2.sqlite +0 -0
  228. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v3.json +0 -0
  229. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v3.sqlite +0 -0
  230. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v4.json +0 -0
  231. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/storage/v4.sqlite +0 -0
  232. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/viral/NC_001526.4.gb.gz +0 -0
  233. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/NOTICE.md +0 -0
  234. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/annotation.gtf.gz +0 -0
  235. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/copies.zip +0 -0
  236. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/expected.json +0 -0
  237. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/manifest.json +0 -0
  238. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/protein.zip +0 -0
  239. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/rna.zip +0 -0
  240. {orfdata-0.32.0 → orfdata-0.33.0}/tests/data/wang/search.fasta.gz +0 -0
  241. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_catalog_registry.py +0 -0
  242. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_copy.py +0 -0
  243. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_cross_reference_pairing.py +0 -0
  244. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_dog_peptides.py +0 -0
  245. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_ensembl_search_reference.py +0 -0
  246. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_evidence_rules.py +0 -0
  247. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_evidence_summary.py +0 -0
  248. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_genetic_codes.py +0 -0
  249. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_genomes.py +0 -0
  250. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_ingolia.py +0 -0
  251. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_initiation_context.py +0 -0
  252. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_liftover.py +0 -0
  253. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_local_build_queries.py +0 -0
  254. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_measurements.py +0 -0
  255. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_merge_catalogs.py +0 -0
  256. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_more_species.py +0 -0
  257. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_ncorf_mammals.py +0 -0
  258. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_openprot.py +0 -0
  259. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_orf_cases.py +0 -0
  260. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_paired_selectors.py +0 -0
  261. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_pairing.py +0 -0
  262. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_pfizer.py +0 -0
  263. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_pfizer_rna.py +0 -0
  264. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_proteome.py +0 -0
  265. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_reference_context.py +0 -0
  266. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_reference_mapping.py +0 -0
  267. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_reference_orf.py +0 -0
  268. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_refseq.py +0 -0
  269. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_region_targets.py +0 -0
  270. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_riborf.py +0 -0
  271. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_search_reference.py +0 -0
  272. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_selectors.py +0 -0
  273. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_storage.py +0 -0
  274. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_uorf_catalog.py +0 -0
  275. {orfdata-0.32.0 → orfdata-0.33.0}/tests/test_wang.py +0 -0
  276. {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.32.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
- `viral_orfs(reference_dna, contig="HPV16")` loads source-defined viral CDSs as
117
- existing RNA/ORF models, offline and qualified by exact reference sequence.
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
- `viral_references()` lists the available identities and coverage. Broader
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
- `viral_orfs(reference_dna, contig="HPV16")` loads source-defined viral CDSs as
85
- existing RNA/ORF models, offline and qualified by exact reference sequence.
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
- `viral_references()` lists the available identities and coverage. Broader
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
@@ -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 = "52ab8181b9d3f199dde3afabc8440ee9a8c912291c6425c99fb4225e29ad1a70"
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.v1":
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
- """List released viral coding-reference identities, without network access.
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, accession/source pins, coding-model counts and
36
- coverage scope. A listed reference is not a complete transcript or
37
- exhaustive ORF catalogue. Returned dictionaries are independent copies.
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 != "coding_blocks"},
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, not sample RNA. No annotation is
56
- transferred to mismatching strains or by contig name alone.
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
- sequence = str(reference_sequence).upper()
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.32.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
- `viral_orfs(reference_dna, contig="HPV16")` loads source-defined viral CDSs as
117
- existing RNA/ORF models, offline and qualified by exact reference sequence.
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
- `viral_references()` lists the available identities and coverage. Broader
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
- from orfdata import SourceRNA, viral_orfs, viral_references
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
- return dict(schema="orfdata.viral_cds.v1", source=source,
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
 
@@ -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).
@@ -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