feat: ranking for biolink:statistical_significance_qualifier - #135
Open
SkyeAv wants to merge 5 commits into
Open
Conversation
New shepherd_utils/statistical_significance_qualifier.py module with: - SIGNIFICANCE_BAND_SCORES / SIGNIFICANCE_ORDINAL tables (biolink#1766) - SIGNIFICANCE_SOURCE_WEIGHT (0.5, conservative, matches RTX) - get_statistical_significance(edge): qualifiers-only lookup Shared by aragorn_score, arax_rank, and the filter worker. Tests: 7/7 passing. Refs: shepherd#134
…ranker aragorn_score/worker.py (shared Aragorn + BTE ranker): - Extract qualifier via get_statistical_significance() in get_edge_values() - Add as scored property: band_score x 0.5 trust -> admittance feed - not_significant / qualifier-less edges unchanged (no penalty) Tests: 35/35 passing (4 new). Refs: shepherd#134
arax_rank/ranker.py (dict-based port of RTX ARAX_ranker.py): - Categorical bypass: qualifier looked up separately from attributes - Additive score: band_score x SIGNIFICANCE_SOURCE_WEIGHT (0.5) - Injected at method level (works even for attribute-less edges) - Mirrors RTX post-refactor: standalone trust weight, not in known_attributes_to_trust Tests: 5/5 passing. Refs: shepherd#134
This was referenced Jul 30, 2026
Author
|
Decisions on where statistical significance filtering lives (Gandalf, not Shepherd) are now recorded in #136 — filtering portion of this PR to be removed per that issue. |
The Shepherd-side edge filter was removed per shepherd#136 (filtering belongs in Gandalf). Update the shared helper module so it no longer references the filter_edges_by_statistical_significance worker: - module docstring: shared by aragorn_score + arax_rank (ranking) only - SIGNIFICANCE_ORDINAL comment: describe the ordinal scale neutrally (table kept as part of the qualifier vocabulary) Refs: shepherd#136
SkyeAv
force-pushed
the
feat/implement-ranking-logic-for-the-statistical-significance-qualifier
branch
from
August 7, 2026 19:33
2a1e242 to
ab97759
Compare
Author
|
Removed the Shepherd-side edge filter per #136 (filtering belongs in Gandalf). The branch was rewritten to drop the filter commit entirely, so this PR now contains only the ranking/scoring work ( |
…-team#136 The ordinal table existed solely for the filter_edges_by_statistical_significance feature removed per BioPack-team#136 (filtering belongs in Gandalf, not Shepherd). Drop the now-dead constant and its test assertions; ranking/scoring only ever used SIGNIFICANCE_BAND_SCORES and SIGNIFICANCE_SOURCE_WEIGHT. Refs: shepherd#136
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds ranking boosts for
biolink:statistical_significance_qualifier(biolink/biolink-model#1766) across all Shepherd ARAs, modeled on the equivalent ARAX implementation (RTXteam/RTX#2859). Closes #134.Shared module
shepherd_utils/statistical_significance_qualifier.py(NEW): single source of truth forSIGNIFICANCE_BAND_SCORES(0.70…0.0),SIGNIFICANCE_SOURCE_WEIGHT(0.5), andget_statistical_significance(edge)— a qualifiers-only lookup that strips anybiolink:prefix. Reused by both rankers below.Ranking —
aragorn_score(Aragorn + BTE)workers/aragorn_score/worker.py: extracts the qualifier inget_edge_values()via the shared helper (the attribute loop only walksedge["attributes"]; the qualifier lives inedge["qualifiers"]). Adds it as a scored property feeding the graph-Laplacian:band_score × 0.5→ admittance-1/log(weight). Max effective weight0.35→ bounded boost.aragorn_scoreis the shared Aragorn + BTE ranker (both workflows runaragorn.score); one change updates both. There is no separate BTE ranker.not_significantand qualifier-less edges are unchanged (property_w > 0guard, also avoidslog(0)).Ranking —
arax_rank(ARAX dict port)workers/arax_rank/ranker.py: categorical-bypass injection in_calculate_edge_confidence()— the qualifier is looked up separately from the numeric attribute normalizer (the enum string would otherwise hitfloat()→ValueError). Appendsband_score × SIGNIFICANCE_SOURCE_WEIGHTtoedge_attribute_score_list. Works even for attribute-less edges (injected at method level, not nested insideif edge.get("attributes")).known_attributes_to_trust(RTX moved it out in the same refactor).Design
edge["qualifiers"]exclusively — the qualifieris_a: statement_qualifier, so BMT/Retriever route it there. Matches ARAX (qualifier-only as of RTX#2859; its defensiveedge.attributeslookup was removed). A one-line fallback in the shared helper covers a KP ever sending it as an attribute.score_paths(currently purely structural);edge.attributesfallback; per-ARA threshold tuning.Testing
tox(py312 + coverage envs) → both envs OK,502 passed(down from 511 with the filter: 8 filter tests removed with the feature, 1 ordinal-table test removed with the now-deadSIGNIFICANCE_ORDINALconstant).pytest tests/unit -q→502 passed, 9 warnings.pytest tests/unit -k "significance or arax_rank or aragorn_score" -v→74 passed, 428 deselected(15 new tests: 6 shared-helper, 4 aragorn_score, 5 arax_rank)..coveragerc, branch coverage; gate 10%): total 56.66%; touched files —statistical_significance_qualifier.py95%,aragorn_score/worker.py93%,aragorn/worker.py/bte/worker.py73% each,shared.py79%,arax_rank/ranker.py23% (large legacy port file; qualifier path covered by the targeted tests).git grep filter_edges_by_statistical_significance/git grep SIGNIFICANCE_ORDINAL/git grep minimum_significance→ 0 hits;compose.ymlYAML parse valid;black --checkclean on the touched files.