numpy>=2.0.0,<3.0.0
# Shared test-data downloads use verified cache hits, explicit roots and bounded
# HTTP retries via datacache's public API, without fetching during normal tests.
# The 1.11.1 floor is what inspect_files/Cache.inspect need: download_test_data
# reports a per-file status (available/missing/corrupt/inaccessible) instead of
# only raising, and 1.11.1 is the release that shortens over-long cache names.
datacache>=1.14.0,<2.0.0
# Public data acquisition and original-read extraction for the osteosarc corpus.
osteosarc>=0.14.4,<0.15
pandas>=2.1.4,<4.0.0
pyensembl>=2.16.0,<3.0.0
# 10.4.1 ranks structural candidate sets that list themselves as candidates
# without recursing, which DNA fallback relies on when comparing fusion outcomes.
# Varcode 10 also supplies candidate-local SV sequence-change checks, including
# partial proteins and uncertain selenocysteine decoding.
varcode>=10.10.2,<11.0.0
# 1.42.1 corrects flanking-indel candidate matching. The fusion consumer
# validates isovar.fusion_rna.v3 explicitly; audited through 1.44.2. Raw
# assembly support remains distinct from opt-in fractional catalog support.
# Retains matched germline input, directional calibration and run thresholds.
# 1.45 changes Osteosarc's minor window; coordinate with Topiary first (#571).
isovar>=1.42.1,<1.45.0
# 3.33.5 makes bundled YAML loading independent of the host locale.
mhcgnomes>=3.64.4,<4.0.0
# 3.41.0 supplies mhctools.cleavage (CleavageInput/CleavageModel/CleavageResult/
# CleavageSite) and mhctools.peptidases.get_cleavage_model, which the Pepsickle
# cleavage-profile integration uses directly. It also satisfies the separate
# floor of >=3.39.0: below that, mhctools' Kind class predates
# serum_half_life/blood_half_life, so Topiary's ranking DSL cannot reach either
# kind (openvax/topiary#300) regardless of the topiary version installed.
# 3.44.0 makes CleavageModel.scored_endpoint required for quantitative_model
# evidence and adds motif_strictness/strictness_basis for motif_rule evidence;
# vaxrank's own CleavageModel constructions (vaxrank/cleavage_inference.py,
# tests/test_cleavage_profile.py, tests/test_cleavage_report.py) pass these
# fields, so importing them against an older mhctools raises TypeError for an
# unexpected keyword argument, not just a validation gap.
mhctools>=3.44.64,<4.0.0
# 5.82.0 is the first release compatible with Osteosarc 0.14. It includes
# context-correct cached scans, presentation metrics and conflict checks in
# the DSL used for scoring. Keep these floors aligned when Osteosarc moves.
# Generalized input persistence uses Topiary's typed table codec and public
# source combination/ranking APIs, verified together against 5.86.2.
# Named selection policies require occurrence evaluation, named criteria and
# retained audit decisions, released together in 5.90.0.
# Published comparison policies need report-wide DSL normalization and ranking.
topiary>=5.93.1,<6.0.0
roman
jinja2>=3.1
weasyprint>=62.0
# Vector figures remain the source of truth; CairoSVG provides explicit,
# resolution-controlled PNG export for publication and slide workflows.
cairosvg>=2.7,<3.0
pdfkit  # legacy: needs wkhtmltopdf, use --pdf-backend=pdfkit to enable
openpyxl
xvfbwrapper>=0.2.34  # legacy: only needed with --pdf-backend=pdfkit on headless Linux
astropy>=6.1
platformdirs
msgspec>=0.18.6,<1.0.0
dnachisel>=3.2.0,<4.0.0
serializable>=1.1.0,<2.0.0
# oncoref is the direct authority for HPA-backed CTA identity and the full
# candidate CTA universe. Keep this reference pin aligned with PirlyGenes.
oncoref==1.8.206
# vaxrank.peptide_context imports packaging.version for PEP 440 ordering
# of predictor_version strings. Always pulled in transitively via setuptools
# / pip, but pinned explicitly so minimal / --no-deps installs don't break
# at import time.
packaging>=21.0
