Skip to content

feat: negative penalization tests, expanded CI gate, lint clean, 89 tests - #4

Closed
cschanhniem wants to merge 3 commits into
mainfrom
feat/negative-penalization-ci
Closed

cschanhniem wants to merge 3 commits into
mainfrom
feat/negative-penalization-ci

Conversation

@cschanhniem

Copy link
Copy Markdown
Collaborator

Summary

  • Negative penalization tests (test_negative_penalization.py): 20 tests verifying the pipeline correctly down-ranks sequences with properties associated with non-AMP or toxicity-risk profiles:

    • Extreme hydrophobicity (hemolysis risk proxy)
    • All-cysteine sequences (aggregation/disulfide chaos)
    • Purely negative charge (repelled by bacterial membranes)
    • Long repeat runs (low complexity, synthesis difficulty)
    • Known negatives (demo_negative_peptides) average lower activity than known AMPs
  • Expanded CI gate (.github/workflows/ci.yml):

    • Validates all generated evidence certificates against schemas/candidate.schema.json
    • Runs leakage check on demo dataset (informational)
    • Kill criterion gate: requires enrichment factor >= 1.5 at k=5 on hidden-active benchmark — currently achieves 4.0. CI fails if the pipeline regresses below this threshold
  • Lint clean: Fixed all 10 ruff F401 warnings (unused imports) across 7 files

Phase 2 criteria status

Criterion Status
Hidden active recovery ✅ EF=4.0 at k=5
Negative-set robustness ✅ Tested: negatives avg lower than positives
Toxicity penalty ✅ Safety score penalizes high-cys, extreme hydrophobicity
Novelty pressure ✅ min_novelty filter excludes near-duplicates
Reproducibility ✅ Deterministic from fixed seed/config, run manifest generated

Test plan

  • make test — 89 tests pass
  • make demo — runs end-to-end
  • ruff check src tests — clean

…tion

- Add hydrophobic_moment() to physchem.py using Eisenberg (1984) consensus scale
  at 100°/residue helical projection; literature-cited correlate of AMP activity
- Expand activity_likeness_score() to incorporate amphipathicity (15% weight)
  with reduced charge/hydrophobicity weights to keep total at 1.0
- Add recall_at_k(), random_recall_at_k(), enrichment_factor(), benchmark_summary()
  to benchmark/evaluate.py with honest disclaimer in every output
- Add 'openamp-foundry bench baseline' CLI subcommand for pipeline vs random recall
- Add 'make bench-baseline' Makefile target
- 20 new tests: amphipathicity feature, hydrophobic moment edge cases,
  recall@k boundary conditions, enrichment factor, benchmark summary structure
- Add examples/benchmark/mixed_candidates.csv (20 sequences: 5 known-active AMPs
  + 15 non-AMP control sequences) for proper enrichment benchmarking
- Add examples/benchmark/active_labels.csv (5 known-active IDs matching above)
- Add make bench-hidden-active target using bench baseline CLI
- 12 new tests in test_hidden_active_recovery.py:
  - all positives rank in top half
  - recall@5 = 1.0 (perfect recovery)
  - enrichment factor >= 2.0 at k=5 (actual EF=4.0)
  - pipeline verdict correctly says 'outperforms random'
  - negatives score lower than positives on average
  - CLI integration test for bench baseline command
  - benchmark data integrity checks
- Pipeline achieves EF=4.0 at k=5: all 5 known AMPs recovered in top 5 of 20
  vs 25% expected from random — meets Phase 2 criterion from AGENTS.md
- Expand CI to validate evidence certificates, run leakage check, and gate
  on hidden-active EF >= 1.5 at k=5 (currently achieves 4.0)
- Add test_negative_penalization.py: 20 tests verifying that problematic
  sequences (extreme hydrophobicity, high-cysteine, purely negative charge,
  long repeat runs) score lower than known AMP-like sequences on activity,
  safety, and synthesis dimensions
- Fix all 10 ruff lint warnings (unused imports) across 7 files
- 89 tests passing, ruff clean
@cschanhniem

Copy link
Copy Markdown
Collaborator Author

Superseded by PR #11 (feat/integrate-all-phases), which merges all Phase 2 + Phase 3 work into a single consolidation PR with 251 tests passing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant