
    UHj_                       d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZ  ee      j'                         j(                  d   Zed	z  Zd
ZdZdZdZg dZg dZddddddddddddgZd&dZd'dZd(d)dZ d*dZ!d+d,dZ"d-dZ#d.dZ$d/dZ%	 	 	 	 d0	 	 	 	 	 	 	 	 	 d1d Z&d2d!Z'd2d"Z(efd3d#Z)d4d$Z*e+d%k(  r e*        yy)5zKContrast confirmed transition hotspot tiles with map1_01a route candidates.    )annotationsN)Path)Any)	load_maps)can_stand_atfootprint_checks	in_boundsside_directiontile_at   outmap1_02bmap1_01amap2_02d)zstrict-event-recordztransition-review-rowzconfirmed-signature-matchztile-hotspot-confirmation)z(strict map1_01a -> map2_02d event recordz.transition-review row for map1_01a -> map2_02dzOconfirmed hotspot center-pair or 3x3 signature match for the current candidatesz/tile hotspot confirmation tied to a source exitzout/maps.jszKdecoded tile layers used for confirmed/current hotspot signature comparison)pathdescriptionzdata/transition_reviews.jsonzCmanual transition review rows for confirmed and blocked route pairszout/event_transitions.jsonzGstrict event-transition records and points for the compared route pairsz'out/original_collision_route_audit.jsonzFcurrent map1_01a geometry exit candidates and target-spawn tile checksc                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)r   fallbacks     M/home/exedev/hwanse/tools/summarize_map1_01a_tile_hotspot_pattern_contrast.py	load_jsonr   5   s*    ;;=::dnngn677    c                    | y d| dS )N0x04x )values    r   	hex_layerr$   ;   s    }c{r   c                    | j                         D cg c]B  }|j                  d      |k(  r,|j                  d      |k(  r||j                  d      |k(  r|D }}t        |d       S c c}w )Nsourcetargetstatec                ~    | j                  d      xs d| j                  d      xs d| j                  d      xs dfS )NrecordVaHex xyget)rows    r   <lambda>zreview_rows.<locals>.<lambda>G   s<    )?)E2swws|GYWY[^[b[bcf[g[mkm(n r   )key)valuesr0   sorted)reviewsr&   r'   r(   r1   rowss         r   review_rowsr8   A   sq    ~~'778&3778+<+F]cggg.%7 	D 
 $noos   AA*c                t    | D ]2  }|j                  d      |k(  s||j                  d      xs g v s0|c S  i S )Nmaptargetsr/   )eventsr&   r'   r1   s       r   	event_rowr=   J   sB     775>V#37793E3K(LJ Ir   c                h   d|cxk  r| d   k  rn nd|cxk  r| d   k  sn ||dd d d d dddd dS t        | ||      \  }}t        | ||||      }t        d |D              }||d||t        |      d|d	z  d
t	        | ||||      |t        |      t        ||| d   dz
  |z
  | d   dz
  |z
        |dS )Nr   widthheightF)r,   r.   inBoundslayer0layer1	layer1HexlowNibbleHexoriginalStandablefootprintPassCountfootprintTileCountedgeDistancec              3  H   K   | ]  }|j                  d       du sd  yw)passesTr   Nr/   .0r1   s     r   	<genexpr>z tile_evidence.<locals>.<genexpr>b   s      I3swwx/@D/HQIs   ""Tr       01xr   )r,   r.   rA   rB   rC   rD   rE   rF   rG   rH   rI   	footprint)r   r   sumr$   r   lenmin)	infor,   r.   dxdyrB   rC   rQ   
pass_counts	            r   tile_evidencerY   Q   s    "T']"qA'>X'> !&"#"# 
 	
 T1a(NFF q!R4II)IIJv&Vd]3/0)$1b"=(!)nAq$w-!"3a"7h!9Ka9OP r   c                   t        | ||      sdddddS t        | ||      \  }}g }g }dD ]  }dD ]z  }||z   }	||z   }
t        | |	|
      s#|j                  d       |j                  d       =t        | |	|
      \  }}|j                  |dz  d       |j                  |dd	|d       |  |dd	|d|dz  dd
j                  |      d
j                  |      dS )Noob)centerPairKeycenterLowNibbleKey	low3x3Key
pair3x3Key)r-   r   r   z--z--/--rO   r,   r!   /,)r	   r   appendjoin)rU   r,   r.   rB   rC   
low_valuespair_valuesrW   rV   nxnyn0n1s                r   tile_signaturerj   s   s$   T1a ""'	
 	
 T1a(NFFJK 
5 		5BRBRBT2r*!!$'""7+T2r*FBd1/"S2c(34		5
5 #3<q5!'$q 1XXj)hh{+	 r   c                   | t            }g }t        |t         t              D ]  }t        |d         }t        |d         }t	        |t        |d         t        |d               }|j                  t         t        |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |t        |||      d        |S )	Nr,   r.   r(   spawnXspawnYr*   	eventKind)r&   r'   r,   r.   r(   rl   rm   r*   rn   tile	signature)CONFIRMED_SOURCEr8   CONFIRMED_TARGETintrY   rb   r0   rj   )map_datar6   rU   r7   reviewr,   r.   ro   s           r   confirmed_rowsrv      s    $%DDg'79IJ ssT3vc{#3S5EF&&CCZZ(jj*jj*!::m4K0'a3
 		" Kr   c                   | t            }t        t        |t         t                    }g }|j	                  d      xs g D ]  }t        |j	                  d      xs d      }t        |      \  }}	t        |j	                  d            }
t        |j	                  d            }t        ||
|      }t        ||
|||	      }|j	                  d      xs i }|j                  t         t        ||
||j	                  d      |j	                  d      |j	                  d	      |t        ||
|      |j	                  d
      |j	                  d      |j	                  d      |j	                  d      |j	                  d      d|j	                  d      |j	                  d      |j	                  d      |j	                  d      |j	                  d      |j	                  d      |j	                  d      |j	                  d      d|dd        |S )NrouteCandidatessider+   r,   r.   targetSpawnOriginalLayer1FlagsrI   autoTriggertileClassStandableoutwardDirectionrF   outwardFootprintDirectionClearoutwardMoveWouldStayInBoundsoutwardMoveAllowedInsideMap)	direction originalStandableForOutwardCheckr~   r   r   inwardMoveAllowedrB   rC   rE   )ry   r,   r.   rF   r   rB   rC   rE   missing)r&   r'   ry   r,   r.   rI   r{   r|   
sourceTilesourceTileSignaturesourceOutwardFootprinttargetSpawn"strictTransitionReviewRowsForRoutestrictReviewState)SOURCErS   r8   TARGETr0   strr
   rs   rY   rb   rj   )rt   original_collision_route_auditr6   rU   route_review_countr7   	candidatery   rV   rW   r,   r.   ro   outward_tiletarget_spawns                  r   current_candidate_rowsr      s   FD[&&ABD3778IJPb &	9==(.B/%B	c"#	c"#T1a($T1aR8 }}%EFL"%MM.9$==7"+--0D"E#1$1#=&]]+=>4@4D4DEX4Y2;--@`2a09>\0]/8}}=Z/[' %((0!%%c*!%%c*%1%5%56I%J%1%5%56I%J&**84&**84 , 0 0 @	 3E!*;
 	&N Kr   c           
     |   | | nt        t        dz        } ||nt        t        dz  dz  i       }||nt        t        dz  g       }||nt        t        dz  i       }t	        | |      }t        | ||      }t        |t        t              }t        |t        t              }|D ch c]  }|j                  d       }	}t        |D ch c]:  }|j                  d      dk(  r$|j                  d      xs i j                  d	      < c}      t        |D ch c]:  }|j                  d      dk(  r$|j                  d
      xs i j                  d      < c}      t        |D ch c]:  }|j                  d      dk(  r$|j                  d
      xs i j                  d      < c}      t        |D ch c]:  }|j                  d      dk(  r$|j                  d
      xs i j                  d      < c}      t        fd|D              }
t        fd|D              }t        fd|D              }t        fd|D              }t        d |D              }t        d |D              }i dddt         dt         dt         dt         dt        dt        dddddt        dt        d t         d!t#        t               d"dd#dd$d%d&t#        |D cg c]  }|j                  d      dk(  s| c}      d't#        |D cg c]  }|j                  d      d(k(  s| c}      d)t        d* |	D              i d+|j                  d,      d-t#        |j                  d.      xs g       d/t#        |j                  d0      xs g       d1|d2t#        |      d3|j                  d,      d4t#        |j                  d.      xs g       d5t#        t%        |t        t                    d6|d7|d8|
d9|d:|d;|d<|d=dd>d?d@dAS c c}w c c}w c c}w c c}w c c}w c c}w c c}w )BNmaps.jsdatatransition_reviews.jsonevent_transitions.json#original_collision_route_audit.jsonr(   	confirmedro   rE   rp   r\   r^   r_   c              3  n   K   | ],  }|j                  d       xs i j                  d      v rd . yw)r   rE   r   Nr/   )rM   r1   confirmed_lownibbless     r   rN   z build_summary.<locals>.<genexpr>  s;      "GGL!'R,,^<@TT 	
"   25c              3  n   K   | ],  }|j                  d       xs i j                  d      v rd . yw)r   r\   r   Nr/   )rM   r1   confirmed_center_pairss     r   rN   z build_summary.<locals>.<genexpr>  s<      *GG)*0b55oFJ`` 	
*r   c              3  n   K   | ],  }|j                  d       xs i j                  d      v rd . yw)r   r^   r   Nr/   )rM   r1   confirmed_low3x3s     r   rN   z build_summary.<locals>.<genexpr>
  s<      %GG)*0b55kBFVV 	
%r   c              3  n   K   | ],  }|j                  d       xs i j                  d      v rd . yw)r   r_   r   Nr/   )rM   r1   confirmed_pair3x3s     r   rN   z build_summary.<locals>.<genexpr>  s<      &GG)*0b55lCGXX 	
&r   c              3  l   K   | ],  }|j                  d       xs i j                  d      du rd . yw)r   rF   Tr   Nr/   rL   s     r   rN   z build_summary.<locals>.<genexpr>  s:      %GGL!'R,,-@ATI 	
%   24c              3  l   K   | ],  }|j                  d       xs i j                  d      du rd . yw)r   rF   Tr   Nr/   rL   s     r   rN   z build_summary.<locals>.<genexpr>  s:      )GGM"(b--.ABdJ 	
)r   titlez&map1_01a Tile Hotspot Pattern ContrastconfirmedReferenceRoutez -> router&   r'   
proofFoundFtileHotspotPatternProofFoundfailedTileHotspotPatternGateIdsmissingEvidenceevidenceRefsevidenceRefCounttileHotspotConfirmedstrictSourceCoordinateFoundpromotionStatusblockedconfirmedReviewCountconfirmedRejectedCountrejectedconfirmedReviewStatesc              3  &   K   | ]	  }|s|  y wNr"   )rM   r(   s     r   rN   z build_summary.<locals>.<genexpr>+  s     'U%u'Us   confirmedEventRecordHexr*   confirmedEventPointCountpointsconfirmedActivePointCountactivePointsconfirmedRowscurrentCandidateCountcurrentStrictEventRecordHexcurrentStrictEventPointCount"currentStrictTransitionReviewCount&currentOriginalStandableCandidateCount(currentTargetSpawnOriginalStandableCount0currentCandidatesMatchingConfirmedLowNibbleCount1currentCandidatesMatchingConfirmedCenterPairCount-currentCandidatesMatchingConfirmedLow3x3Count.currentCandidatesMatchingConfirmedPair3x3CountcurrentRowsinterpretationaP  The confirmed reference route has an event record and confirmed review rows. The current route has geometry candidates and passable layer1 signatures, but no strict event record or transition review row for map1_01a -> map2_02d. Exact center-pair and 3x3 signatures from confirmed hotspot rows do not match the current route candidates.)tileSignatureAlonePromotesreason
conclusiona  The current map1_01a candidates can look tile-compatible under original layer1 flags, and their target spawns are standable. That does not confirm a hotspot: the exact confirmed hotspot center-pair and 3x3 signatures do not match the current candidates, and the only confirmed pattern is still an event record plus reviewed source tiles on map1_02b -> map1_01a. For map1_01a -> map2_02d there are zero strict event rows and zero transition-review rows, so tile hotspot confirmation remains blocked.)r   OUTr   ROOTrv   r   r=   rq   rr   r   r   r0   r5   rR   $FAILED_TILE_HOTSPOT_PATTERN_GATE_IDS%TILE_HOTSPOT_PATTERN_MISSING_EVIDENCE"TILE_HOTSPOT_PATTERN_EVIDENCE_REFSrS   r8   )rt   transition_reviewsevent_transitionsr   r   currentconfirmed_eventcurrent_eventr1   confirmed_statescurrent_low_match_countcurrent_center_pair_match_countcurrent_low3x3_match_countcurrent_pair3x3_match_countcurrent_original_standablecurrent_target_spawn_standabler   r   r   r   s                   @@@@r   build_summaryr      sn    $/xYsY5OH/A/M+S\v11
T .?-J)PY&&
Q HfGq%C  xA33
x" x);<I$X/MOabG 13CEUVO/@M4=>S(>>!#777{* 
	B##N3# 
 $%777{* 
		#((9% 
 777{* 
		#((5 
  777{* 
		#((6  
 " ""  '* ** '# "% %% " #& && # "% %% " &) )) &"191!&6%7t<L;M#N1 	F84x(1 	&	1
 	&1 	e1 	'1 	*+O1 	@1 	:1 	C BC1 	1 	&u1 	91 	I$aSAQU`A`S$a b1  	!#i&bs3777CSWaCas&b"c!1" 	 'U;K'U!U#1$ 	"?#6#6}#E%1& 	#C(;(;H(E(K$L'1( 	$S)<)<^)L)RPR%S)1* 	+1, 	 W-1. 	&}'8'8'G/10 	'M,=,=h,G,M2(N112 	-c+>PRXZ`2a.b314 	12L516 	34R718 	;<S91: 	<=\;1< 	89S=1> 	9:U?1@ 	wA1B 	*/=
C1T 	oW1 1[ ?#
%

 X %b&bs6   *P?P ?P%+?P*:?P/$P4>P4P9-P9c                J   ddd| d    dd| d    ddddd	| d
    dd| d    dd| d    dd| d    dd| d    dd| d    d| d    dd| d    dd| d    dd| d    d| d    dd | d!    d| d    dd"| d#    d| d    dd$| d%    d| d    dd&| d'    d| d    dd(| d)    d| d    ddd*dg}|j                  d+ | d,   D               |j                  g d-       |j                  d. | d/   D               |j                  g d0       |j                  d1 | d2   D               |j                  g d3       | d4   D ]  }|j                  d5      xs i }|j                  d6      %|j                  d6       d7|j                  d8       nd9}|j                  d:|j                  d;       d7|j                  d<       d=|j                  d>       d=| d?|j                  d@       dA|j                  dB       d?|j                  dC       dD|j                  dE       dA|j                  dF       d=|j                  dG       dH       
 |j                  g dI       | dJ   D ]  }|j                  dK      xs i }|j                  dL      xs i }|j                  dM      xs i }|j                  dj                  g d:|j                  dN       d=|j                  d;       d7|j                  d<       d=|j                  dG       d=|j                  dO       d=|j                  dB       d?|j                  dC       dD|j                  dP       dD|j                  dE       dA|j                  dF       d=|j                  dN       dQ|j                  d;       d7|j                  d<       dR|j                  dF       d=|j                  dS       dH              |j                  ddTd| dU   dg       dVj                  |      S )WNz(# map1_01a Tile Hotspot Pattern Contrastr+   zRoute: `r   `zConfirmed reference: `r   z## Gatez- proofFound: `r   z!- tileHotspotPatternProofFound: `r   z- tileHotspotConfirmed: `r   z - strictSourceCoordinateFound: `r   z- promotionStatus: `r   z- confirmed reviews: `r   z` confirmed / `r   z
` rejectedz%- current strict event point count: `r   z#- current transition review rows: `r   z1- current original-standable source candidates: `r   r`   r   z$- current standable target spawns: `r   z<- current candidates matching confirmed layer1 low nibble: `r   z@- current candidates matching confirmed center-pair signature: `r   z;- current candidates matching confirmed low3x3 signature: `r   z<- current candidates matching confirmed pair3x3 signature: `r   z## Failed Gatesc              3  (   K   | ]
  }d | d  yw)- `r   Nr"   rM   items     r   rN   zmarkdown.<locals>.<genexpr>i  s     V43tfAVs   r   )r+   z## Missing Evidencer+   c              3  &   K   | ]	  }d |   yw)z- Nr"   r   s     r   rN   zmarkdown.<locals>.<genexpr>o  s     D2dVDs   r   )r+   z## Evidence Refsr+   c              3  8   K   | ]  }d |d    d|d      yw)r   r   z`: r   Nr"   rL   s     r   rN   zmarkdown.<locals>.<genexpr>u  s/       c&k]#c-012s   r   )r+   z## Confirmed Reference Rowsr+   zL| tile | state | spawn | record | layer0 | layer1 | low | standable | edge |z:| --- | --- | --- | --- | ---: | --- | --- | ---: | ---: |r   ro   rl   ra   rm   -z| r,   r.   z | r(   z | `r*   z` | rB   rD   z` | `rE   rF   rI   z |)r+   z## Current Candidate Rowsr+   zg| side | tile | edge | auto | layer0 | layer1 | center | low | standable | target spawn | review rows |zH| --- | --- | ---: | ---: | ---: | --- | --- | --- | ---: | --- | ---: |r   r   r   r   ry   r{   r\     standable=r   z## Conclusionr   
)extendr0   rb   rc   )summarylinesr1   ro   spawnsigr'   s          r   markdownr   N  s   2

77#$A&
 )B!C DAF


',/02
+G4R,S+TTUV
#G,B$C#DAF
*73P+Q*RRST
w'89:!<
 )?!@ AQXYqQrPss}~
/8V0W/XXYZ
-g6Z.[-\\]^
;GDl<m;nnopw  yP  qQ  pR  RS  	T
.w7a/b.ccdel  nE  fF  eG  GH  	I
Fw  PB  HC  GD  DE  FM  Ne  Ff  Eg  gh  	i
J7  TG  LH  KI  IJ  KR  Sj  Kk  Jl  lm  	n
EgN}F~E  @A  BI  Ja  Bb  Ac  cd  	e
FwO  HA  GB  BC  DK  Lc  Dd  Ce  ef  	g

1E4 
LLV73T+UVV	LL  
 
LLD1B)CDD	LL  
 
LL >*  
LL   ' 
wwv$">Aggh>O>[3778$%Qswwx'8&9:ada~S1A0B#eWDQTQXQXYfQgPhhlxx!"$txx'<&=U488NC[B\\`xx+,-S.1I0J"N	

 
LL   }% 

ww|$*gg+,2'-2A Ab A! A ASWWS\N A! ACGGCL> A ASWW^E\D] A]` Aww}%&A&)A*.((8*<)=A=AABF((;BWAXAYA()A).A/3xx/G.HAHLAMQXXViMjLkAknA zz&!"A #$A %+JJsO#4A 56A 7=jjo5FA GRA SYR\R\]pRqQrA svA ww;<=	A >@	A	
	

 
LL


  99Ur   c                	   g }| d   D ]  }|j                  d      xs i }|j                  d      %|j                  d       d|j                  d       nd}|j                  d|j                  d       d|j                  d	       d
t        j                  t	        |j                  d                   d
t        j                  |       dt        j                  t	        |j                  d                   d|j                  d       dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   d|j                  d       d
|j                  d       d        g }| d   D ]  }|j                  d      xs i }|j                  d      xs i }|j                  d      xs i }|j                  d       d|j                  d       d|j                  d	       d|j                  d       }|j                  dt        j                  t	        |j                  d                   d
|j                  d       d|j                  d	       d
|j                  d       d
|j                  d       d
|j                  d       dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   dt        j                  t	        |j                  d                   d|j                  d       d
t        j                  |       d
|j                  d       d        d j                  d! | d"   D              }	d j                  d# | d$   D              }
d j                  d% | d&   D              }d'j                  g d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;t        j                  | d<          d=| d>    d?| d@    dAt        j                  | dB          dC	dD| dE    dF| dG    dH| dI    dF| dG    dJ| dK    dF| dG    dL| dM    dF| dG    dCdNt        j                  | dO          dPdQdR|	 dSdTdR|
 dSdUdR| dSdVdW|dXdYdZ|dXd[d\d       S )]Nr   ro   rl   ra   rm   r   z<tr><td>r,   r.   z	</td><td>r(   z</td><td><code>r*   z</code></td><td>rB   rD   z</code></td><td><code>rE   rF   rI   z
</td></tr>r   r   r   r   ry   r   r   r{   r\   r   r+   c              3  N   K   | ]  }d t        j                  |       d  yw)
<li><code>z</code></li>Nhtmlescaper   s     r   rN   zhtml_page.<locals>.<genexpr>  s+       T[[&'|4   #%r   c              3  N   K   | ]  }d t        j                  |       d  yw)z<li></li>Nr   r   s     r   rN   zhtml_page.<locals>.<genexpr>  s+       t{{4 !'r   r   c              3     K   | ]9  }d t        j                  |d          dt        j                  |d          d ; yw)r   r   z	</code>: r   r   Nr   rL   s     r   rN   zhtml_page.<locals>.<genexpr>  sE       T[[V-.iCDV8W7XX]^s   ?Ar   r   z<!doctype html>z<html lang="en">z<head>z  <meta charset="utf-8">zF  <meta name="viewport" content="width=device-width, initial-scale=1">z7  <title>map1_01a Tile Hotspot Pattern Contrast</title>z	  <style>zg    :root { color-scheme: dark; font-family: system-ui, sans-serif; background: #101010; color: #eee; }z&    body { margin: 0; padding: 24px; }z,    h1 { margin: 0 0 8px; font-size: 24px; }z0    h2 { margin: 26px 0 10px; font-size: 18px; }zN    p { margin: 0 0 14px; color: #bbb; max-width: 1000px; line-height: 1.45; }zX    table { width: 100%; border-collapse: collapse; margin: 0 0 16px; font-size: 13px; }zi    th, td { border-bottom: 1px solid #303030; padding: 7px 8px; text-align: left; vertical-align: top; }zR    th { position: sticky; top: 0; background: #181818; z-index: 1; color: #ddd; }z
  </style>z</head>z<body>z1  <h1>map1_01a Tile Hotspot Pattern Contrast</h1>z  <p>Route <code>r   z</code>; proofFound <code>r   z$</code>; tileHotspotConfirmed <code>r   z</code>; promotion <code>r   z</code>.</p>z3  <p>Confirmed-signature matches: low nibble <code>r   r`   r   z</code>; center-pair <code>r   z</code>; low3x3 <code>r   z</code>; pair3x3 <code>r   z  <p>r   z</p>z  <h2>Failed Gates</h2>z  <ul>z</ul>z  <h2>Missing Evidence</h2>z  <h2>Evidence Refs</h2>z#  <h2>Confirmed Reference Rows</h2>z  <table><thead><tr><th>tile</th><th>state</th><th>spawn</th><th>record</th><th>layer0</th><th>layer1</th><th>low</th><th>standable</th><th>edge</th></tr></thead><tbody>z  </tbody></table>z!  <h2>Current Candidate Rows</h2>z  <table><thead><tr><th>side</th><th>tile</th><th>edge</th><th>auto</th><th>layer0</th><th>layer1</th><th>center</th><th>low</th><th>standable</th><th>target spawn</th><th>review rows</th></tr></thead><tbody>z</body>z</html>)r0   rb   r   r   r   rc   )r   rv   r1   ro   r   current_rowsr   r'   target_textfailed_gatesmissing_evidenceevidence_refss               r   	html_pager    s    N' 	
wwv$">Aggh>O>[3778$%Qswwx'8&9:adswws|nAcggcl^9T[[SWWU\M]I^=_<` a;;u%&odkk#cggmF\B]6^5_ `88H%&odkk#dhh{F[B\6]5^ _S.)A%BCD E88/01488N;S:TT^	`	
	
 L}% 
ww|$*gg+,2'-2F+,Afjjo->a

3?PP[\b\f\fgz\{[|}t{{3swwv#7893773<.PQRURYRYZ]R^Q_ `77>*+9SWW]5K4LIVZV^V^_gVhUi jS+)>%?@A BS)A%BCD ES.)A%BCD E88/014;;{;S:T U77?@AM	

 77 => L ww -.  GG >* M 99 ((( 	( 	#	(
 	Q( 	B( 	( 	r( 	1( 	7( 	;( 	Y( 	c( 	t( 	](  	!(" 	#($ 	%(& 	<'(( DKK(89::TU\]iUjTk  lP  QX  Yo  Qp  Pq  qJ  KO  KV  KV  W^  _p  Wq  Kr  Js  s  	@)(* >gFx>y=zz{  }D  E\  }]  |^  ^y  zA  Bu  zv  yw  wx  y@  AX  yY  xZ  Zp  qx  yh  qi  pj  jk  ls  tK  lL  kM  Md  el  m]  e^  d_  _`  ah  i@  aA  `B  BN  	O+(, GL12348-(. 	"/(0 e$1(2 	&3(4 !"%(5(6 	#7(8 u%9(: 	.;(< 	t=(> 
?(@ 	A(B 	,C(D 	[E(F 
G(H 	I(J 	K(L 	M(N 	O( ( (r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz+map1_01a_tile_hotspot_pattern_contrast.jsonF   )ensure_asciiindentr   r   r   +map1_01a_tile_hotspot_pattern_contrast.html)mkdir
write_textr   dumpsr  )r   out_dirs     r   write_outputsr    sf    MM$M.<<HH

7q9D@ I  <<HHSZI[fmHnr   c            	        t        j                  t              } | j                  dt        t
        dz         | j                  dt        t        dz  dz         | j                  dt        t
        d	z         | j                  d
t        t
        dz         | j                  dt        t
               | j                         }t        t        |j                        t        |j                  i       t        |j                  g       t        |j                  i             }t        ||j                          t#        d|j                   dz          y )N)r   z--mapsr   )typedefaultz--transition-reviewsr   r   z--event-transitionsr   z --original-collision-route-auditr   z	--out-dirz0wrote map1_01a tile hotspot pattern contrast -> r	  )argparseArgumentParser__doc__add_argumentr   r   r   
parse_argsr   r   mapsr   r   r   r   r  r  print)parserargsr   s      r   mainr    s   $$9F
tS9_E
.T4&=SlClm
-D#H`B`a
:sUzOz{
$<D$))$))2.$(("-$55r:	G '4<<(	<T\\Ly=y<z
{|r   __main__)r   r   r   r   returnr   )r#   z
int | Noner  
str | Noner   )
r6   dictr&   r   r'   r   r(   r  r  
list[dict])r<   r   r&   r   r'   r   r  r  )r   r   )rU   r  r,   rs   r.   rs   rV   rs   rW   rs   r  r  )rU   r  r,   rs   r.   rs   r  r  )rt   r  r6   r  r  r   )rt   r  r   r  r6   r  r  r   )NNNN)
rt   dict | Noner   r!  r   zlist[dict] | Noner   r!  r  r  )r   r  r  r   )r   r  r  r   r  None)r  r"  ),r  
__future__r   r  r   r   pathlibr   typingr   summarize_map_tilesr   (summarize_original_collision_route_auditr   r   r	   r
   r   __file__resolver  r   r   rq   rr   r   r   r   r   r   r   r$   r8   r=   rY   rj   rv   r   r   r   r  r  r  __name__r"   r   r   <module>r+     sS   Q "      ) w w H~''*
Ul  		( $) % d
 /\
 -`
 :_& "(8pD<.+^ !&*+/26	uu#u )u %0	u
 
upSlOd 25 o}$ zF r   