7ef9b99217
新增 QuestionUnit 契约实体(kind/unit_id/task_type/questions/unit_hash + size/from_single/from_pair), 作为 AR pair 孪生对贯穿评测/训练 harness 的最小调度单元。 GeneratedQuestion 追加 unit_id/pair_id/question_role/flip_axis 四字段, __post_init__ 回填 unit_id,默认值保证现有非 AR single 题构造点行为不变。
52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
"""QuestionUnit 领域实体与 GeneratedQuestion 字段扩展的单元测试。
|
|
|
|
覆盖:
|
|
- 非 AR single 题的默认值向后兼容(新增字段不改变现有构造点行为)。
|
|
- AR pair 孪生对经 QuestionUnit.from_pair 聚合后携带两条题目。
|
|
"""
|
|
|
|
from core.types import GeneratedQuestion, QuestionUnit
|
|
|
|
|
|
def _q(qid, role="single", pair_id=None, flip_axis=None):
|
|
"""构造一条 GeneratedQuestion 测试样本。"""
|
|
return GeneratedQuestion(
|
|
question_id=qid,
|
|
video_id="v",
|
|
task_type="Action Recognition",
|
|
question="?",
|
|
options=("A. a", "B. b", "C. c", "D. d"),
|
|
answer="A",
|
|
source_nodes=("n1",),
|
|
difficulty="hard",
|
|
unit_id=pair_id or qid,
|
|
pair_id=pair_id,
|
|
question_role=role,
|
|
flip_axis=flip_axis,
|
|
)
|
|
|
|
|
|
def test_single_defaults_backward_compatible():
|
|
"""不传新字段时,single 题默认值应与旧行为一致。"""
|
|
q = GeneratedQuestion(
|
|
question_id="q",
|
|
video_id="v",
|
|
task_type="X",
|
|
question="?",
|
|
options=("A. a", "B. b", "C. c", "D. d"),
|
|
answer="A",
|
|
source_nodes=("n1",),
|
|
difficulty="hard",
|
|
)
|
|
assert q.question_role == "single"
|
|
assert q.pair_id is None and q.flip_axis is None and q.unit_id == "q"
|
|
|
|
|
|
def test_pair_unit_carries_two_questions():
|
|
"""孪生对经 from_pair 聚合后 kind=pair、size=2、unit_id=pair_id。"""
|
|
p = _q("q_o", "pair_original", "pid", "before_after")
|
|
m = _q("q_m", "pair_mirror", "pid", "before_after")
|
|
u = QuestionUnit.from_pair(p, m)
|
|
assert u.kind == "pair" and u.size == 2 and u.unit_id == "pid"
|
|
assert {qq.question_id for qq in u.questions} == {"q_o", "q_m"}
|