File size: 1,737 Bytes
f3ff0be
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import importlib.util
import json
from pathlib import Path


PATH = Path(__file__).parents[1] / "scripts" / "archive_genre_challenge_v2.py"
SPEC = importlib.util.spec_from_file_location("archive_genre_challenge_v2", PATH)
MODULE = importlib.util.module_from_spec(SPEC)
assert SPEC.loader
SPEC.loader.exec_module(MODULE)


def test_archive_separates_evaluator_payload_from_label_key(tmp_path):
    dataset = tmp_path / "source.jsonl"
    rows = []
    challenge_rows = []
    genres = ["amber_oriental", "citrus_cologne", "floral_woody", "fougere"]
    for index in range(8):
        rows.append({"genre": genres[index % 4], "formula_id": f"F{index}", "formula": [
            {"cas": f"cas-{index}", "smiles": "CCO", "weight_fraction": 1.0}
        ]})
        challenge_rows.append({"source_index": index, "formula_id": f"F{index}", "genre": genres[index % 4]})
    dataset.write_text("".join(json.dumps(row) + "\n" for row in rows))
    challenge = tmp_path / "challenge.json"
    challenge.write_text(json.dumps({"challenge_records": challenge_rows}))

    output = tmp_path / "release"
    result = MODULE.archive(challenge, dataset, output, seed=7)
    blinded = json.loads((output / "blinded_challenge.json").read_text())
    key = json.loads((output / "label_key.json").read_text())

    assert result["records"] == 8
    assert result["blocks"] == 2
    assert all("genre" not in row and "source_index" not in row and "formula_id" not in row for row in blinded["records"])
    assert {row["blind_id"] for row in blinded["records"]} == {row["blind_id"] for row in key["records"]}
    assert (output / "blinded_challenge.json").stat().st_mode & 0o777 == 0o444
    assert (output / "label_key.json").stat().st_mode & 0o777 == 0o400