"""Move a reviewed Glass pallet via its normal C-then-direction interface. Only the observed completed source transition is mirrored in planning notes. """ from play import * from locate import locate from nav import route from glass_positions import refresh import argparse p=argparse.ArgumentParser();p.add_argument('core',type=int);p.add_argument('direction',choices=['up','down','left','right']);a=p.parse_args() actual=locate(732);assert actual[0]==732,actual note=ROOT/'notes/navigation-state.json';state=json.loads(note.read_text());assert state['switches'].get('947'), 'Espeon must be the observed following companion' model=json.loads(subprocess.check_output(['ruby',str(ROOT/'scripts/route_map.rb'),'732',*map(str,actual[1:])],stderr=subprocess.DEVNULL)) core=model['events'][str(a.core)];group=core['name'].split('Core')[0];desired={'down':2,'left':4,'right':6,'up':8}[a.direction];forbidden=10-desired cs=core['list'];begins=[i for i,c in enumerate(cs)if c['code']==111 and c['parameters'][:2]==[1,62]and c['parameters'][3]==desired] assert len(begins)==1,'This direction is not an available reviewed pallet motion' beg=begins[0];indent=cs[beg]['indent'];end=next((i for i in range(beg+1,len(cs))if cs[i]['indent']<=indent and cs[i]['code']in[111,411,412]),len(cs));branch=cs[beg:end] assign=[];conditions={};active={indent:True} for c in branch[1:]: code,aa,depth=c['code'],c['parameters'],c['indent'] parent=all(z for d,z in active.items() if d=right,left<=right,left>right,left