Add memory directory

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
potaser
2026-08-07 09:39:30 +08:00
co-authored by Claude Opus 5
parent 35fbee8c85
commit 7097ecdec5
18 changed files with 2437 additions and 4 deletions
@@ -116,6 +116,49 @@ def test_pre_confirm_prefers_curated_before_identified(tmp_path: Path):
assert result.member_count == 2
def test_pre_confirm_accepts_same_curated_members_in_different_order(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
input_dir = tmp_path / "input" / "job1"
prefix = "Target.Sl.GRAS"
_write(final_dir / f"{prefix}.curated_members.id", "gene1\ngene2\n")
_write(final_dir / f"{prefix}.curated_members.pep.fa", _pep(["gene2", "gene1"]))
result = resolve_effective_members(
workspace=ws,
final_dir=final_dir,
input_dir=input_dir,
prefix=prefix,
phase="pre_confirm",
require="pair",
)
assert result.member_count == 2
assert result.path_id == final_dir / f"{prefix}.curated_members.id"
assert result.path_pep == final_dir / f"{prefix}.curated_members.pep.fa"
def test_pre_confirm_rejects_different_curated_members_with_equal_counts(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
input_dir = tmp_path / "input" / "job1"
prefix = "Target.Sl.GRAS"
_write(final_dir / f"{prefix}.curated_members.id", "gene1\ngene2\n")
_write(final_dir / f"{prefix}.curated_members.pep.fa", _pep(["gene1", "gene3"]))
with pytest.raises(MemberResolutionError, match="ID/FASTA mismatch"):
resolve_effective_members(
workspace=ws,
final_dir=final_dir,
input_dir=input_dir,
prefix=prefix,
phase="pre_confirm",
require="pair",
)
def test_subfamily_evidence_required_rejects_unreviewed_identified_members(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
@@ -1,5 +1,7 @@
from pathlib import Path
import pytest
from apps.cli.run_subfamily_confirm import _promote_curated_members_to_final
@@ -25,3 +27,37 @@ def test_promote_curated_members_to_final_records_checksums(tmp_path: Path):
assert promotion["source_curated_id_checksum"]
assert (final_dir / f"{prefix}.final_members.id").read_text(encoding="utf-8").splitlines() == curated_ids
assert (final_dir / f"{prefix}.final_members.pep.fa").exists()
def test_promote_curated_members_accepts_same_members_in_different_order(tmp_path: Path):
final_dir = tmp_path / "final"
final_dir.mkdir()
prefix = "Target.Sl.GRAS"
(final_dir / f"{prefix}.curated_members.id").write_text("gene1\ngene2\n", encoding="utf-8")
curated_pep = ">gene2\nMT\n>gene1\nMA\n"
(final_dir / f"{prefix}.curated_members.pep.fa").write_text(curated_pep, encoding="utf-8")
labels = {
"gene1": {"confirmed_subfamily": "GRAS-a"},
"gene2": {"confirmed_subfamily": "GRAS-b"},
}
promotions = _promote_curated_members_to_final(final_dir, [prefix], labels)
assert promotions[0]["count"] == 2
assert (final_dir / f"{prefix}.final_members.id").read_text(encoding="utf-8") == "gene1\ngene2\n"
assert (final_dir / f"{prefix}.final_members.pep.fa").read_text(encoding="utf-8") == curated_pep
def test_promote_curated_members_rejects_different_members_with_equal_counts(tmp_path: Path):
final_dir = tmp_path / "final"
final_dir.mkdir()
prefix = "Target.Sl.GRAS"
(final_dir / f"{prefix}.curated_members.id").write_text("gene1\ngene2\n", encoding="utf-8")
(final_dir / f"{prefix}.curated_members.pep.fa").write_text(">gene1\nMA\n>gene3\nMT\n", encoding="utf-8")
labels = {
"gene1": {"confirmed_subfamily": "GRAS-a"},
"gene2": {"confirmed_subfamily": "GRAS-b"},
}
with pytest.raises(ValueError, match="ID/FASTA mismatch"):
_promote_curated_members_to_final(final_dir, [prefix], labels)