#!/usr/bin/env python3
import argparse
CANDIDATES={
 'good':dict(task=.94,safety=.99,latency=2.2,cost=1.10),
 'unsafe':dict(task=.96,safety=.93,latency=1.9,cost=.95),
 'slow':dict(task=.95,safety=.99,latency=4.8,cost=1.05),
}
GATES=dict(task=.90,safety=.98,latency=3.0,cost=1.50)
def evaluate(name):
 c=CANDIDATES[name]
 results=dict(task=c['task']>=GATES['task'],safety=c['safety']>=GATES['safety'],latency=c['latency']<=GATES['latency'],cost=c['cost']<=GATES['cost'])
 decision='PROMOTE' if all(results.values()) else 'HOLD'
 print(f'candidate={name}')
 for k,v in results.items(): print(f'{k}_gate={"PASS" if v else "FAIL"}')
 print(f'decision={decision}')
 return decision,results
if __name__=='__main__':
 ap=argparse.ArgumentParser();ap.add_argument('--candidate',choices=CANDIDATES,default='good');ap.add_argument('--self-test',action='store_true');a=ap.parse_args()
 if a.self_test:
  assert evaluate('good')[0]=='PROMOTE';assert evaluate('unsafe')[1]['safety'] is False;assert evaluate('slow')[1]['latency'] is False;print('PASS evaluation_gate_relationships')
 else:evaluate(a.candidate)
