File size: 1,840 Bytes
338c3e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import argparse
import json
import os
import sys
from pathlib import Path

import torch


PROJECT_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(PROJECT_ROOT))

from onescience.utils.YParams import YParams
from model import infer_task_type


def resolve_path(path_value):
    path = Path(path_value)
    return path if path.is_absolute() else PROJECT_ROOT / path


def output_path(cfg):
    task_type = infer_task_type(cfg.model.name)
    output_dir = resolve_path(cfg.inference.output_dir)
    if cfg.inference.get("group_by_model", False):
        output_dir = output_dir / task_type / cfg.model.name
    return output_dir


def parse_args():
    parser = argparse.ArgumentParser(description="Summarize CFDBench inference outputs.")
    parser.add_argument("--model", default=None, help="Override root.model.name and read that model's inference outputs.")
    return parser.parse_args()


def main():
    args = parse_args()
    cfg = YParams(str(PROJECT_ROOT / "conf" / "config.yaml"), "root")
    if args.model:
        cfg.model.name = args.model
    elif os.environ.get("CFDBENCH_MODEL_NAME"):
        cfg.model.name = os.environ["CFDBENCH_MODEL_NAME"]
    output_dir = output_path(cfg)
    pred_path = output_dir / "preds.pt"
    score_path = output_dir / "scores.json"

    if not pred_path.is_file() or not score_path.is_file():
        raise FileNotFoundError("Missing inference outputs. Run scripts/inference.py first.")

    preds = torch.load(pred_path, map_location="cpu", weights_only=True)
    scores = json.loads(score_path.read_text(encoding="utf-8"))
    print(f"Prediction tensor: shape={tuple(preds.shape)}, dtype={preds.dtype}")
    print(f"Prediction range: min={float(preds.min()):.4e}, max={float(preds.max()):.4e}")
    print(f"Scores: {scores['mean']}")


if __name__ == "__main__":
    main()