CFDBench / scripts /result.py
OneScience's picture
Upload folder using huggingface_hub
338c3e4 verified
Raw
History Blame Contribute Delete
1.84 kB
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()