• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openvax / topiary / 24315494917
87%
master: 90%

Build:
Build:
LAST BUILD BRANCH: v5.16.2
DEFAULT BRANCH: master
Ran 12 Apr 2026 08:24PM UTC
Jobs 3
Files 28
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

12 Apr 2026 08:15PM UTC coverage: 87.227% (+2.8%) from 84.431%
24315494917

push

github

web-flow
DSL refactor: unify filter tree + vectorize eval (#111) (#113)

Consolidates the historical filter classes (EpitopeFilter, ColumnFilter,
ExprFilter) and the RankingStrategy composite into a single DSLNode tree
whose .eval(ctx) returns a pd.Series indexed by peptide-allele group
tuples. Every node — arithmetic, comparison, boolean — composes freely.

Breaking changes (warrants 5.0.0):
- Removed: EpitopeFilter, ColumnFilter, ExprFilter, RankingStrategy,
  SortSpec, affinity_filter, presentation_filter, apply_ranking_strategy.
- TopiaryPredictor now takes filter_by (DSLNode) + sort_by (list[DSLNode])
  + sort_direction. Legacy kwargs (ic50_cutoff, percentile_cutoff,
  ranking, ranking_strategy, filter, rank_by) are dropped.
- parse_expr, parse_filter, parse_ranking collapsed into a single parse().
- Parser now accepts mixed |/& with standard precedence (& tighter than |);
  previously this raised.
- Unqualified Affinity.value on multi-method DataFrames raises a clear
  ambiguity error pointing at Affinity["modelname"]. Old behavior
  silently passed if any row met the threshold.
- apply_filter errors on non-boolean input (accepts {True, False, 0, 1,
  NaN}). NaN still maps to False.

New:
- Field gains an optional version parameter; Affinity["netmhcpan", "4.1b"]
  and affinity['netmhcpan', '4.1b'] in string DSL filter on both
  prediction_method_name and predictor_version.
- apply_filter / apply_sort split as the public entry points. apply_sort
  preserves the NaN-fallthrough-to-next-tiebreaker semantic, now
  vectorized over a float matrix.
- AggExpr (mean/geomean/minimum/maximum/median) vectorized via pandas
  skipna ops; geomean via nanmean(log()) with non-positive masked.
- BoolOp honors NaN → False policy cleanly under all dtypes.
- DSLNode.to_expr_string() round-trips through parse() for every node.
- ranking.py split into a package: nodes.py (1376), parser.py (492),
  apply.py (194), __init__.py (103 — pure re-exports).

Tests: 843 passing. Added ... (continued)

1135 of 1299 new or added lines in 8 files covered. (87.37%)

1 existing line in 1 file now uncovered.

2595 of 2975 relevant lines covered (87.23%)

2.62 hits per line

Uncovered Changes

Lines Coverage ∆ File
92
87.52
topiary/ranking/nodes.py
34
90.31
topiary/ranking/parser.py
15
87.18
topiary/ranking/apply.py
15
87.23
-0.71% topiary/result.py
5
93.06
-1.13% topiary/predictor.py
3
90.65
1.84% topiary/cli/args.py

Coverage Regressions

Lines Coverage ∆ File
1
93.06
-1.13% topiary/predictor.py
Jobs
ID Job ID Ran Files Coverage
1 python-3.10 - 24315494917.1 12 Apr 2026 08:24PM UTC 28
87.23
GitHub Action Run
2 python-3.12 - 24315494917.2 12 Apr 2026 08:24PM UTC 28
87.23
GitHub Action Run
3 python-3.11 - 24315494917.3 12 Apr 2026 08:24PM UTC 28
87.23
GitHub Action Run
Source Files on build 24315494917
  • Tree
  • List 28
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #24315494917
  • 278fb50a on github
  • Prev Build on v4.12.0 (#24313270881)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc