#!/usr/bin/env python3
import sys
SCENARIOS={
 'healthy':dict(gpu_req=1,gpu_free=1,label='a10',node='a10',tolerates=True),
 'no-gpu':dict(gpu_req=1,gpu_free=0,label='a10',node='a10',tolerates=True),
 'taint':dict(gpu_req=1,gpu_free=1,label='a10',node='a10',tolerates=False),
 'label':dict(gpu_req=1,gpu_free=1,label='h100',node='a10',tolerates=True),
}
def run(name):
 s=SCENARIOS[name]
 reason=None
 if s['gpu_req']>s['gpu_free']:reason='Insufficient_gpu'
 elif s['label']!=s['node']:reason='Node_selector_mismatch'
 elif not s['tolerates']:reason='Untolerated_taint'
 print(f'scenario={name}')
 if reason:print('phase=Pending');print(f'reason={reason}')
 else:print('phase=Scheduled');print('reason=All_constraints_match')
 return reason
if __name__=='__main__':
 name=sys.argv[1] if len(sys.argv)>1 else 'healthy'
 if name=='--self-test':
  assert run('healthy') is None;assert run('no-gpu')=='Insufficient_gpu';assert run('taint')=='Untolerated_taint';assert run('label')=='Node_selector_mismatch';print('PASS scheduler_constraint_reasoning')
 elif name in SCENARIOS:run(name)
 else:raise SystemExit('unknown scenario')
