"""Read an ONNX policy's contract and make one zero-input CPU inference."""
import argparse, hashlib, json
from pathlib import Path
import numpy as np
import onnx
import onnxruntime as ort
p=argparse.ArgumentParser(description=__doc__);p.add_argument('policy',type=Path);a=p.parse_args()
m=onnx.load(str(a.policy));onnx.checker.check_model(m)
s=ort.InferenceSession(str(a.policy),providers=['CPUExecutionProvider'])
i=s.get_inputs()[0];shape=[d if isinstance(d,int) and d>0 else 1 for d in i.shape]
y=s.run(None,{i.name:np.zeros(shape,dtype=np.float32)})[0]
print(json.dumps({'path':str(a.policy),'sha256':hashlib.sha256(a.policy.read_bytes()).hexdigest(),'input_shape':i.shape,'output_shape':list(y.shape),'finite_zero_output':bool(np.isfinite(y).all()),'metadata':{v.key:v.value for v in m.metadata_props}},indent=2))
