Ë  7Új[ãóP—dZddlZddlZddlZd„Zd d„Zd„Zd d„ZGd„d«Zy) aÎWhat every game's referee shares: where the bots are, how a match is seated, and the files a run leaves. check: the route's bot plays every bot of the season's field (field//), seats swapped; the score is the mean over the field and each opponent is a subtask. metrics.json is what the site keeps (scienceslack.json names it). practice: a few matches against the field, each leaving a replay in replays/ and an entry in replays/matches.json. éNcó®—tjj|«stjd|›�«tjj |«S)zˆThe route's folder the check was given, absolute (bots run in their own folder); a missing bot is the route's mistake, said plainly.zNo route folder at )ÚosÚpathÚisdirÚsysÚexitÚabspath)Úargs úa/private/var/folders/v3/mcwwdgb158s9czwmdjf2pvmh0000gn/T/scienceslack-job-33-O193L6/kit/league.pyÚbot_dirr s;€ô �7‰7�=‰=˜Ô Ü �‰Ð& s eÐ,Ô-Ü �7‰7�?‰?˜3Ó ÐócóR‡—tˆfd„tj‰«D««S)Nc3ó•K—|]V}tjjtjj‰|««sŒA|j d«rŒS|–—ŒXy­w)Ú.N)rrrÚjoinÚ startswith)Ú.0ÚdÚroots €r Ú zfield..sBøèø€ÐpÑ-˜´·±·±¼r¿w¹w¿|¹|ÈDÐRSÓ?TÕ1UÐ^_×^jÑ^jÐknÕ^o”!Ñ-ùsƒAAÁAÁA)ÚsortedrÚlistdir)rs`r Úfieldrsø€Ü ÓpœRŸZ™Z¨Ô-ÓpÓ pÐpr có˜—tjjdd«jd«}|dk(rdS|j dd«dS)NÚ SS_ROUTE_DIRÚroutesÚ/Úmainééÿÿÿÿ)rÚenvironÚgetÚrstripÚsplit)rs r Ú route_namer%sA€Ü � ‰ �‰�~ xÓ0×7Ñ7¸Ó<€Aؘ(’]ˆ6Ð;¨¯©°°Q«¸Ñ(;Ð;r c ó¬—t|d«|j«D��cic]\}}|t|d«“Œc}}dœ}|�t|d«|d<t|d«5}tj||dd¬«ddd«t d |d ›d t |«›d �d jd„|dj«D««z«ycc}}w#1swYŒXxYw)Né)ÚscoreÚsubtaskséÚcostÚwéT)ÚindentÚ sort_keyszscore r(z over z: z, c3ó2K—|]\}}|›d|d›�–—Œy­w)Ú z.3gN©)rÚkÚvs r rz write_metrics..!s&èø€ÐDxÑ`wÑX\ÐXYÐ[\ÈÀsÈ!ÈAÈcÈ7Ä^Ñ`wùs‚r))ÚroundÚitemsÚopenÚjsonÚdumpÚprintÚlenr)r(r)r+rr3r4ÚoutÚfs r Ú write_metricsr>sÀ€Ü˜% “OÈXÏ^É^ÔM]Ô1^ÑM]ÁTÀQȰ!´U¸1¸a³[±.ÐM]Ò1^Ñ _€CØ ÐܘD !“nˆˆF‰ Ü ˆd�CŒ˜AÜ � ‰ �#�q ¨dÕ3÷ ä ˆF�3�w‘<�. ¤s¨8£} o°RÐ 8¸4¿9¹9ÑDxÐ`cÐdnÑ`o×`uÑ`uÔ`wÓDxÓ;xÑ xÕyùó 2_÷ ˆúsŸCÁC à Ccó—eZdZdZdd„Zd„Zy)ÚReplayszYreplays/ per match, and replays/matches.json saying who sat where and how it ended.cóP—|gc|_|_tj|d¬«y)NT)Úexist_ok)rÚindexrÚmakedirs)Úselfrs r Ú__init__zReplays.__init__'s €Ø $ bЈŒ �4”:Ü � ‰ �D 4Ö(r có—ttjj|j|«d«5}|j t |t«r|ntj|d¬««ddd«|jj||||dœ«ttjj|jd«d«5}tj|j|d¬«ddd«y#1swYŒ‰xYw#1swYyxYw)Nr,)Ú,Ú:)Ú separators)ÚfileÚtitleÚseatsÚresultz matches.jsonr-)r.) r7rrrrÚwriteÚ isinstanceÚstrr8ÚdumpsrCÚappendr9)rErKÚdatarLrMrNr=s r Úaddz Replays.add+s´€Ü ”"—'‘'—,‘,˜tŸy™y¨$Ó/°Ô 5¸Ø �G‰GœJ t¬SÔ1‘D´t·z±zÀ$ÐS]Ô7^Ô _÷6à � ‰ ×Ñ 4°%À%ÐSYÑZÔ[Ü ”"—'‘'—,‘,˜tŸy™y¨.Ó9¸3Ô ?À1Ü �I‰I�d—j‘j !¨AÕ .÷@Ð ?÷6Ð 5ú÷@Ð ?úsµ9C6à #DÃ6C?ÄD N)Úreplays)Ú__name__Ú __module__Ú __qualname__Ú__doc__rFrUr2r r r@r@$s„Ùcó)ó/r r@)r)Nz metrics.json) rZr8rrr rr%r>r@r2r r Úr[s2ðñ÷ Óò óqò<ó z÷ /ò /r