numpy>=2.0.0,<3.0.0
pandas>=2.1.4,<3.0.0
pyensembl>=2.6.4,<3.0.0
# Varcode 7 supplies splice outcome sets unconditionally and defaults to fast
# annotation. Vaxrank uses its keyword-free effect API and outcome selection.
varcode>=7.0.0,<8.0.0
# 1.17.0 preserves sequenced-read identity across alternative alignments.
isovar>=1.17.0,<2.0.0
# 3.33.5 makes bundled YAML loading independent of the host locale.
mhcgnomes>=3.33.5,<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.0,<4.0.0
# 5.10.0 adds EvalContext(default_methods=...) and apply_filter(default_methods=...)
# which vaxrank uses to score multi-model inputs (e.g. LENS with mhcflurry +
# netmhcpan) without pre-subsetting the frame.
# 5.52.0 preserves pVACtools presentation metrics as native prediction rows,
# completing Vaxrank's presentation-aware coverage path.
# 5.55.1 rebinds a cached protein scan's coordinate and flanks to the
# occurrence actually requested (openvax/topiary#296) instead of the one the
# cache was built from; below this floor CachedPredictor can emit duplicate
# peptide_offset columns and crash TopiaryPredictor.predict_from_named_sequences,
# which vaxrank#414's real-cache selection regression exercises directly.
topiary>=5.55.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  # 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.194
# 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
