
    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  ee      j!                         j"                  d   Zed	z  Zd
ZdZe de Zg dZg dZdg dddg dddg dddddgdgZd)dZd*dZd+dZd,dZd-dZd.dZd/dZ d0d Z!d1d!Z"d2d"Z#d3d#Z$	 	 	 	 d4	 	 	 	 	 	 	 	 	 d5d$Z%d6d%Z&efd7d&Z'd8d'Z(e)d(k(  r e(        yy)9zKCompare map1_01a route candidates against all strict-event tile signatures.    )annotationsN)Path)Any)	load_maps)	in_boundstile_at   outmap1_01amap2_02dz -> )z$target-linked-strict-event-signaturez!direct-source-target-strict-eventztile-hotspot-confirmation)z6target-linked strict event tile signature for map2_02dz2direct map1_01a -> map2_02d strict event signaturezBtile hotspot confirmation beyond rejected/generic geometry matcheszout/maps.js)r   r   layers)pathfieldszout/event_transitions.json)maptargetseventszdata/transition_reviews.json)sourcetargetstaterecordVaHexz/out/map1_01a_tile_hotspot_pattern_contrast.json
candidatesmatchesConfirmedLowNibblec                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)r   fallbacks     P/home/exedev/hwanse/tools/summarize_map1_01a_strict_event_tile_signature_scan.py	load_jsonr#   )   s*    ;;=::dnngn677    c                    | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      fS )Nr   r   r   xyget)rows    r"   
review_keyr+   /   sF     r$   c                \    | j                         D ci c]  }t        |      | c}S c c}w )N)valuesr+   )transition_reviewsr*   s     r"   review_indexr/   9   s(    ,>,E,E,GHSJsOS HHHs   )c                    g }|dk(  r|j                  d       || d   dz
  k(  r|j                  d       |dk(  r|j                  d       || d   dz
  k(  r|j                  d       |rd	j                  |      S d
S )Nr   topheightr	   bottomleftwidthright+interior)appendjoin)infor&   r'   roless       r"   	edge_roler=   =   s|    EAvUDNQXAvVDMAW#388E?33r$   c                   t        | ||      s||dd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t        | ||      ||d|d
d|d
d|dz  d	|d
d|d
|dz  d	dj	                  |      dj	                  |      dS )NFzout-of-boundsoob)r&   r'   inBoundsedgeRolecenterPairKeycenterLowNibbleKey	low3x3Key
pair3x3Key)r   r	   z--z--/--   r&   04x/T0x,)r&   r'   r@   rA   layer0layer1	layer0Hex	layer1HexlowNibbleHexrB   rC   rD   rE   )r   r   r9   r=   r:   )r;   r&   r'   rL   rM   
low_valuespair_valuesdydxnxnyn0n1s                r"   tile_signaturerY   J   st   T1a '""'	
 		
 T1a(NFFJK 
5 		5BRBRBT2r*!!$'""7+T2r*FBd1/"S2c(34		5
5 dAq)&&&&Vd]1-."3<q5!'$q 1XXj)hh{+ r$   c                   t        |      }g }|D ]O  }|j                  d      }|| vr| |   }|j                  d      xs g D ]  }|j                  d      }	|j                  d      }
t        |	t              rt        |
t              sG|j                  d      xs g }t	        ||	|
      }|D cg c]L  }|j                  |||j                  d      |	|
f      r%|j                  |||j                  d      |	|
f      N }}t        |D ch c]  }|s|j                  d       c}      }|j                  |||j                  d      |	|
||d|v d	|v d
	        R |S c c}w c c}w )Nr   pointsr&   r'   r   r   r   	confirmedrejected)	r   r   r   r&   r'   	signaturereviewStateshasConfirmedReviewhasRejectedReview)r/   r)   
isinstanceintrY   sortedr9   )map_dataevent_transitionsr.   reviewsrowsevent
source_mapr;   pointr&   r'   r   r^   r   matching_reviewsr*   review_statess                    r"   event_point_rowsrn   u   s   -.GD" YYu%
X%
#YYx(.B 	E		#A		#Aa%Z3-?ii	*0bG&tQ2I & ;;
FEIIm4LaQRST Z=1I1aPQ   
 #@P#XTWCGGG$4#XYMKK!"$yy7& -&1]&B%/=%@
 
	: K# 
 $Ys   1AE%E*E*c                ,   t         | vrg S | t            }| j                  t              }g }|j                  d      xs g D ]P  }|j                  d      }|j                  d      }t        |t              rt        |t              sG|j                  d      xs i }|j                  d      }	|j                  d      }
d }|-t        |	t              rt        |
t              rt        ||	|
      }|j                  t         t        |j                  d      ||t        |||      |j                  d      |	|
|j                  d      |j                  d      d||j                  d	      xs i j                  d      |j                  d      d

       S |S )NcurrentRowsr&   r'   targetSpawnsideoriginalStandableinwardMoveAllowed)rr   r&   r'   rs   rt   
sourceTile)
r   r   rr   r&   r'   r^   rq   targetSpawnSignaturesourceOriginalStandabletargetSpawnOriginalStandable)SOURCEr)   TARGETrb   rc   rY   r9   )re   tile_hotspot_patternr;   target_inforh   r*   r&   r'   target_spawntarget_spawn_xtarget_spawn_ytarget_spawn_signatures               r"   route_candidate_rowsr      s   X	FD,,v&KD#''6<"  GGCLGGCL!S!As);ww}-3%))#.%))#.!%#>3/>3/%3KQ_%`"GGFO'a3$((0##%1%5%56I%J%1%5%56I%J %;),)>)D"(I(IJ](^,8,<,<=P,Q!
 	 B Kr$   c                   | j                  d      xs i }| j                  d      | j                  d      xs g | j                  d      | j                  d      | j                  d      |j                  d      |j                  d      |j                  d	      | j                  d
      xs g | j                  d      du | j                  d      du dS )Nr^   r   r   r   r&   r'   rA   rB   rD   r_   r`   Tra   )r   r   r   r&   r'   rA   rB   rD   r_   r`   ra   r(   )r*   r^   s     r"   compact_matchr      s    $*Iwwu~779%+ww}-WWS\WWS\MM*-"7]];//52!gg&:;tC WW%89TA r$   c                0   i }| D ]X  }dj                  |j                  d      xs g       xs d}|j                  d       d| }|j                  |d      dz   ||<   Z t        |j                         d 	      D cg c]
  \  }}||d
 c}}S c c}}w )NrK   r   -r   z->r   r	   c                    | d    | d   fS Nr	   r    items    r"   <lambda>z#count_owner_pairs.<locals>.<lambda>   s    d1gXtTUwDW r$   keyownercount)r:   r)   rd   items)rh   countsr*   r   r   r   s         r"   count_owner_pairsr      s    F 1((3779-34;775>""WI.

5!,q0u1 #6<<>7WXE5 %(  s   ?Bc                    | j                  |      }|dv rg S |D cg c]+  }|j                  d      xs i j                  |      |k(  r|- c}S c c}w )N)Nr?   r^   r(   )r^   strict_pointsr   valuer*   s        r"   strict_signature_matchesr      s^    MM#E	$GGK &B++C0E9 	  s   0Ac                F	   | j                  d      xs i }| j                  d      xs i }t        ||d      }t        ||d      }t        ||d      }t        ||d      }t        ||d      }t        ||d      }	|D 
cg c]7  }
|
j                  d      t        k(  rt        |
j                  d      xs g v r|
9 }}
|D 
cg c]  }
t        |
j                  d      xs g v r|
! }}
|D 
cg c]  }
|
j                  d      t        k(  r|
 }}
|D 
cg c]  }
t        |
j                  d      xs g v r|
! }}
|D 
cg c]  }
|
j                  d      d	u r|
 }}
|D 
cg c]  }
|
j                  d
      d	u r|
 }}
|D 
cg c]  }
|
j                  d      d	u s|
 }}
|D 
cg c]  }
|
j                  d      t        k(  r|
 }}
|D 
cg c]  }
|
j                  d      t        k(  r|
 }}
|	D 
cg c]  }
|
j                  d      t        k(  r|
 }}
|D 
cg c]  }
t        |
j                  d      xs g v r|
! }}
|D 
cg c]  }
|
j                  d      d	u r|
 }}
|D 
cg c]  }
|
j                  d
      d	u r|
 }}
i | i dt	        |      dt	        |      dt	        |      dt	        |      dt	        |      dt        |      xr t	        |      t	        |      k(  dt        |      dt	        |      dt	        |      dt	        |      dt	        |      dt	        |      dt	        |	      dt	        |      dt	        |      dt	        |      dt	        |      t	        |      t	        |      t        |      t	        |      t	        |      |d d D 
cg c]  }
t        |
       c}
|d d D 
cg c]  }
t        |
       c}
|d d D 
cg c]  }
t        |
       c}
|d d D 
cg c]  }
t        |
       c}
|d d D 
cg c]  }
t        |
       c}
|	d d D 
cg c]  }
t        |
       c}
dddS c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w c c}
w ) Nr^   rv   rB   rD   rE   r   r   r`   Tra   centerPairStrictEventMatchCountcenterPairSameSourceMatchCount centerPairTargetLinkedMatchCount#centerPairConfirmedReviewMatchCount"centerPairRejectedReviewMatchCount"centerPairAllMatchesRejectedReviewcenterPairOwnerPairslow3x3StrictEventMatchCountpair3x3StrictEventMatchCount confirmedReviewPair3x3MatchCount*targetSpawnCenterPairStrictEventMatchCount&targetSpawnLow3x3StrictEventMatchCount'targetSpawnPair3x3StrictEventMatchCount(targetSpawnCenterPairTargetMapMatchCount$targetSpawnLow3x3TargetMapMatchCount%targetSpawnPair3x3TargetMapMatchCount'targetSpawnLow3x3TargetLinkedMatchCount   Fblocked)*targetSpawnLow3x3ConfirmedReviewMatchCount)targetSpawnLow3x3RejectedReviewMatchCounttargetSpawnLow3x3OwnerPairs!targetLinkedStrictEventMatchCount'directSourceTargetStrictEventMatchCountsampleCenterPairMatchessampleLow3x3MatchessamplePair3x3Matches"sampleTargetSpawnCenterPairMatchessampleTargetSpawnLow3x3MatchessampleTargetSpawnPair3x3MatchestileSignaturePromotespromotionStatus)r)   r   ry   rz   lenboolr   r   )	candidater   r^   r   center_pair_matcheslow3x3_matchespair3x3_matches target_spawn_center_pair_matchestarget_spawn_low3x3_matchestarget_spawn_pair3x3_matchesr*   direct_source_target_matchestarget_link_matchescenter_pair_same_source_matchescenter_pair_target_link_matchescenter_pair_confirmed_matchescenter_pair_rejected_matchesconfirmed_pair3x3_matches+target_spawn_center_pair_target_map_matches&target_spawn_low3x3_target_map_matches'target_spawn_pair3x3_target_map_matches'target_spawn_low3x3_target_link_matches%target_spawn_low3x3_confirmed_matches$target_spawn_low3x3_rejected_matchess                           r"   candidate_match_summaryr      s   k*0bI&]]+ABHb29m_]-iTN.y-VO'?($
 #;#
 $<$  %$775>V#37793E3K(L 	$  $
 %cggi(.B/ 	 
 +'775>V# 	'# '
 +'cggi(.B/ 	'# '
 +%77'(D0 	%! %
 +$77&'4/ 	$  $ 1@ i377K_C`dhCh i i73775>V# 	3/ 3
 3.775>V# 	.* .
 4/775>V# 	/+ /
 3/cggi(.B/ 	/+ /
 3-77'(D0 	-) -
 3,77&'4/ 	,( ,)
))3/B+C) 	)#.M*N) 	+C0O,P	)
 	.s3P/Q) 	-c2N.O) 	-$% N01S9L5MM) 	 12E F) 	&s>':) 	'O(<) 	+C0I,J) 	5c:Z6[)  	1#6Q2R!)" 	237S3T#)$ 	3C8c4d%)& 	/4Z0[')( 	05\1]))* 	237^3_+), 7::_6`589]5^'89T'U-01D-E367S3TBUVXWXBY#Z3M#$6#Z>LRa>PQsc 2Q?NrPQ?R Ss!3 S*J2A*N/
#&M#/
 +Fbq*I+
#&M#+
 +Gr*J,
#&M#,
 "'$Q) )c$''%$ !j3.//-,> $[Q S/
+
,
sx   =<Q?$Q	)!Q$Q:QQ>Q"Q"!!Q'!Q,/!Q1$Q6 Q;"R #R>R
R4RR*Rc           	     
   | | nt        t        dz        } ||nt        t        dz  g       }||nt        t        dz  dz  i       }||nt        t        dz  i       }t	        | ||      }|D cg c]  }|j                  d      t        k(  s| }}t        | |      D cg c]  }t        ||       }}t        d |D              }t        d |D              }	t        d	 |D              }
t        d
 |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }i }|D ]d  }|j                  d      xs g D ]J  }|j                  d      }|s|j                  |d      t        |j                  d      xs d      z   ||<   L f t        |j                         d       D cg c]
  \  }}||d }}}t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }t        d  |D              }t        d! |D              } t        d" |D              }!t        d# |D              }"i }#|D ]d  }|j                  d$      xs g D ]J  }|j                  d      }|s|#j                  |d      t        |j                  d      xs d      z   |#|<   L f t        |#j                         d%       D cg c]
  \  }}||d }$}}|dkD  xr | dk(  xr |dk(  xr |dk(  xr |dk(  }%i d&d'd(t        d)t        d*t        d+d,d-d.d/d.d0t         d1t"        d2t$        d3t'        t$              d4d.d5d.d6d.d7t'        |      d8t'        |      d9|
i d:|d;|d<|d=|	d>t'        |      d?t'        |      d@t'        |      dAt        dB |D              dC|dD|dE|dF|dG|dH|dkD  xr ||k(  d|dIt        dJ |D              dKt        dL |D              i dMt        dN |D              dOt        dP |D              dQt        dR |D              dS|dT|dU|dV|dW|dX|dY| dZ|!d[|"d$|$d\|%d]t        d^ |D              d_t        d` |D              dat'        |      dk(  xr |dk(  xr |dk(  xr |dk(  ||||d.d.dbdcdddeS c c}w c c}w c c}}w c c}}w )fNmaps.jsevent_transitions.jsondatatransition_reviews.json+map1_01a_tile_hotspot_pattern_contrast.jsonr   c              3  X   K   | ]"  }t         |j                  d       xs g v sd $ yw)r   r	   N)rz   r)   .0r*   s     r"   	<genexpr>z build_summary.<locals>.<genexpr>t  s*     *rVX[X_X_`iXjXpnpMq1*rs    **c              3     K   | ]9  }|j                  d       t        k(  rt        |j                  d      xs g v rd ; yw)r   r   r	   N)r)   ry   rz   r   s     r"   r   z build_summary.<locals>.<genexpr>u  s=      ,775>V#37793E3K(L 	
,s   ?Ac              3  D   K   | ]  }|j                  d       sd  yw)r_   r	   Nr(   r   s     r"   r   z build_summary.<locals>.<genexpr>y  s     %\CCGGND[a%\s     c              3  H   K   | ]  }|j                  d       du sd  yw)r`   Tr	   Nr(   r   s     r"   r   z build_summary.<locals>.<genexpr>z  s"     &kSSWWMaEbfjEjq&k   ""c              3  H   K   | ]  }|j                  d       du sd  yw)ra   Tr	   Nr(   r   s     r"   r   z build_summary.<locals>.<genexpr>{  s"     %iCCGGL_D`dhDha%ir   c              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>|  s     !lZ]#&O"PTU"U!l   c              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>}  s     !fTW#&I"Ja"O!fr   c              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>~  s     $hVYS)K%LPQ%Q$hr   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s     !_S#&G"H!_   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s     -jX[c2R.S-jr   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s     /n\_4V0W/nr   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s     2tbe37\3]2tr   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s     1r`c#6Z2[1rr   r   r   r   r   c                    | d    | d   fS r   r   r   s    r"   r   zbuild_summary.<locals>.<lambda>  s    X\]^X_W_aefgahVi r$   r   r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      />A89/r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      *:=45*r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      +;>56+r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      :<?67:r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      58;235r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      69<346r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      8;>568r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      ;>A89;r   c              3  &   K   | ]	  }|d      yw)r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s      :=@78:r   r   c                    | d    | d   fS r   r   r   s    r"   r   zbuild_summary.<locals>.<lambda>  s    tAwhQ0 r$   titlez)map1_01a Strict Event Tile Signature Scanr   r   router   r   
proofFoundF"strictEventTileSignatureProofFound%failedStrictEventTileSignatureGateIdsmissingEvidenceevidenceRefsevidenceRefCounttileHotspotConfirmedstrictSourceCoordinateFoundr   strictEventRecordCountstrictEventPointCountreviewedStrictEventPointCountconfirmedStrictEventPointCountrejectedStrictEventPointCount"targetLinkedStrictEventRecordCount(directSourceTargetStrictEventRecordCount targetSpawnStrictEventPointCount)targetSpawnTargetMapStrictEventPointCountcandidateCount"candidatesWithCenterPairMatchCountc              3  2   K   | ]  }|d    dkD  sd  yw)r   r   r	   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s#      2
s+L'MPQ'QA2
   centerPairMatchCountr   r   r   r   "allCenterPairMatchesRejectedReviewcandidatesWithLow3x3MatchCountc              3  2   K   | ]  }|d    dkD  sd  yw)r   r   r	   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s"      .
s+H'IA'MA.
r
  candidatesWithPair3x3MatchCountc              3  2   K   | ]  }|d    dkD  sd  yw)r   r   r	   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s"      /
s+I'JQ'NA/
r
  -candidatesWithTargetSpawnCenterPairMatchCountc              3  2   K   | ]  }|d    dkD  sd  yw)r   r   r	   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s#      =
s+W'X[\'\A=
r
  )candidatesWithTargetSpawnLow3x3MatchCountc              3  2   K   | ]  }|d    dkD  sd  yw)r   r   r	   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s#      9
s+S'TWX'XA9
r
  *candidatesWithTargetSpawnPair3x3MatchCountc              3  2   K   | ]  }|d    dkD  sd  yw)r   r   r	   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s#      :
s+T'UXY'YA:
r
  r   r   r   r   r   r   r   r   r   targetSpawnLow3x3GenericOnly#allTargetSpawnCenterPairMatchesZeroc              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>   s       3
GJC<=B3
r    allTargetSpawnPair3x3MatchesZeroc              3  ,   K   | ]  }|d    dk(    yw)r   r   Nr   r   s     r"   r   z build_summary.<locals>.<genexpr>  s       0
DGC9:a?0
r   'allTargetSpawnTargetMapStrictEventsZeroas  Strict-event tile signatures are diagnostic unless a row is linked to the same source and target. The center-pair matches are rejected review rows owned by other source-target rows, no extracted strict event targets map2_02d, no map1_01a strict event points link to map2_02d, and target-spawn tile signatures have no center/pair3x3 match or target-map strict-event point.)tileSignatureAlonePromotescenterPairMatchesPromotereasona`  The global strict-event tile signature scan does not confirm a map1_01a -> map2_02d hotspot. Current route candidates may share center or neighborhood tile signatures with strict-event points, but the matching center-pair signatures are rejected review rows owned by other source-target rows, none of those strict events targets map2_02d, and none is a direct map1_01a source row. Target-spawn tiles add only generic low3x3 overlaps, with no center/pair3x3 match and no strict-event points on map2_02d. Therefore tile signature evidence remains diagnostic-only and tile hotspot confirmation is still blocked.)+allDirectSourceTargetStrictEventMatchesZero%allTargetLinkedStrictEventMatchesZero$allConfirmedReviewPair3x3MatchesZerocandidateRowsinterpretation
conclusion)r   OUTr#   ROOTrn   r)   rz   r   r   sumallrc   rd   r   ry   ROUTE+FAILED_STRICT_EVENT_TILE_SIGNATURE_GATE_IDS,STRICT_EVENT_TILE_SIGNATURE_MISSING_EVIDENCE)STRICT_EVENT_TILE_SIGNATURE_EVIDENCE_REFSr   )&re   rf   r.   r{   r   r*   target_map_strict_pointsr    strict_event_target_record_count!direct_source_target_record_countreviewed_strict_point_countconfirmed_strict_point_countrejected_strict_point_countall_direct_matches_zeroall_target_matches_zeroall_confirmed_pair3x3_zerocenter_pair_match_count#center_pair_same_source_match_count%center_pair_target_linked_match_count(center_pair_confirmed_review_match_count'center_pair_rejected_review_match_countcenter_pair_owner_counts	owner_rowr   r   center_pair_owner_pairs$target_spawn_center_pair_match_counttarget_spawn_low3x3_match_count target_spawn_pair3x3_match_count/target_spawn_center_pair_target_map_match_count*target_spawn_low3x3_target_map_match_count+target_spawn_pair3x3_target_map_match_count-target_spawn_low3x3_target_linked_match_count0target_spawn_low3x3_confirmed_review_match_count/target_spawn_low3x3_rejected_review_match_count target_spawn_low3x3_owner_countstarget_spawn_low3x3_owner_pairs target_spawn_low3x3_generic_onlys&                                         r"   build_summaryrK  [  s    $/xYsY5OH->-J)PY&&
Q 0B/M+S\v11
T 4H3S/Yb;;
Z %X/@BTUM/<YRX@XYY (2FG 	 ]3J  (+*r8I*r'r$(+ ,&, )% #&%\=%\"\#&&kM&k#k "%%i=%i"i!!lak!ll!!f[e!ff!$$h]g$h!h!!_T^!__*--j_i-j*j',//ncm/n,n)/22tis2t/t,.11rgq1r.r+/1 |!78>B 	|IMM'*E2J2N2NuVW2X[^_h_l_lmt_u_zyz[{2{(/	|| ##;#A#A#CIijE5 %(  ,/ /EO/ ,( '* *AK* '# (+ +BL+ ($ 7: :CM: 73 25 5?I5 2. 36 6@J6 3/ 58 8BL8 51 8; ;EO; 84 7: :DN: 73 8:$ !>?E2 	IMM'*E488B)--05A67 17	 #,2240
'E5 %('# ' 	(!+ 	29Q>	26!;	2 1A5	2 -1 %c<c&c 	&c 		c
 	9c 	ec 	-ec 	01\c 	Gc 	Ac 	C IJc 	c 	&uc 	 c 	!#&7"8c  	 ]!3!c" 	()D#c$ 	)*F%c& 	()D'c( 	-.N)c* 	34U+c, 	+C0H,I-c. 	4S9Q5R/c0 	#j/1c2 	-c 2
#2
 /
3c8 	 79c: 	)*M;c< 	+,Q=c> 	./W?c@ 	-.UAcB 	-#a' S7;RRGcJ 	 7KcL 	)# .
#.
 +
McR 	*3 /
#/
 ,
ScX 	8 =
#=
 :
Yc^ 	4S 9
#9
 6
_cd 	5c :
#:
 7
ecj 	56Zkcl 	12Qmcn 	23Socp 	34cqcr 	/0Zsct 	01\ucv 	23`wcx 	56fycz 	45d{c| 	&'F}c~ 	'(Hc@ 	.s 3
NX3
 0
AcF 	+C 0
KU0
 -
GcL 	2()Q. A?1DA:a?A <q@UcX 8O1H0J#*/(-a		
xwc cc  Z4P's   0UU"U
+U)Uc                
   dj                  d | j                  d      xs g D              xs d}dj                  d | j                  d      xs g D              xs d}g }| d   D ]  }|j                  d      xs i }|j                  d	      xs i }|j                  d
j                  g dt        j                  t        |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|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d        d|j                  d!       d|j                  d"       d|j                  d#       d|j                  d$       d|j                  d%       d|j                  d&       d|j                  d'       dt        j                  t        |j                  d(                   d)              d*j                  g d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<t        j                  | d=          d>| d(    d?| d@    dAdB| dC    dDt        j                  dj                  | dE                dFt        | dG          dH| j                  dI       dA	dJ| dK    d| dL    dM| dN    dO| dP    dA	dQ| dR    d| dS    d| dT    dU| dV    d| d    d| d    d| d    d| d    dWt        j                  |       dX| dY    dZ| d[    d\| d]    dAd^| d_    d`| d    d| d     d| d!    da| d"    d| d#    d| d$    db| dc    d| dd    d| de    dAdf| dg    d| dh    d| di    djt        j                  |       dk| dl    dAdmt        j                  | dn          dodpdqdr | dG   D        dsdtdu|dvdwdxd
      S )yNz, c              3  f   K   | ])  }|j                  d        d|j                  d        + ywr   :r   Nr(   r   s     r"   r   zhtml_page.<locals>.<genexpr>'  s7      " 777
Acggg./0"   /1r   r   c              3  f   K   | ])  }|j                  d        d|j                  d        + ywrN  r(   r   s     r"   r   zhtml_page.<locals>.<genexpr>+  s7      / 777
Acggg./0/rP  r   r#  r^   rq    z<tr><td>rr   z</td><td><code>r&   rK   r'   z</code></td><td><code>z</code></td><td>rA   rB   rC   r   z	</td><td>r   r   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   z
</td></tr>
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">z:  <title>map1_01a Strict Event Tile Signature Scan</title>z	  <style>ze    :root { color-scheme: dark; font-family: system-ui, sans-serif; background:#101010; color:#eee; }z&    body { margin: 0; padding: 24px; }zF    table { width: 100%; border-collapse: collapse; font-size: 13px; }zi    th, td { border-bottom: 1px solid #303030; padding: 7px 8px; text-align: left; vertical-align: top; }z8    th { background:#181818; position: sticky; top: 0; }z;    p { color:#bbb; max-width: 1100px; line-height: 1.45; }z
  </style>z</head>z<body>z4  <h1>map1_01a Strict Event Tile Signature Scan</h1>z  <p>Route <code>r   z </code>; promotion status <code>z$</code>; tileHotspotConfirmed <code>r   z</code>.</p>z  <p>proof found <code>r   z8</code>; failed strict event tile signature gates <code>r   z&</code>; missing evidence count <code>r   z</code>; evidence refs <code>r   z'  <p>Strict event records/points <code>r   r   z2</code>; target-linked strict event records <code>r  z9</code>; direct source-target strict event records <code>r  z9  <p>candidates with center/low3x3/pair3x3 matches <code>r  r  r  zf</code>; center-pair ownership total/same-source/target-linked/confirmed-review/rejected-review <code>r  z"</code>; center-pair owners <code>z<</code>; all center-pair matches rejected-review only <code>r  z.</code>; all target-linked matches zero <code>r!  z5</code>; all direct source-target matches zero <code>r   z7  <p>target-spawn target-map strict event points <code>r  zG</code>; target-spawn strict-event center/low3x3/pair3x3 matches <code>zE</code>; target-spawn target-map center/low3x3/pair3x3 matches <code>zG</code>; all target-spawn center/pair3x3/target-map matches zero <code>r  r  r  zH  <p>target-spawn low3x3 target-linked/confirmed/rejected matches <code>r   r   r   z</code>; owners <code>z</code>; generic-only <code>r  z  <p>r%  z</p>z  <h2>Missing Evidence</h2>z  <ul>c              3  N   K   | ]  }d t        j                  |       d  yw)z    <li>z</li>N)htmlescape)r   r   s     r"   r   zhtml_page.<locals>.<genexpr>i  s#     	U$HT[[&'u
-	Us   #%z  </ul>z  <h2>Candidate Rows</h2>a    <table><thead><tr><th>side</th><th>tile</th><th>target spawn</th><th>edge</th><th>center</th><th>low</th><th>center matches</th><th>same source</th><th>target-linked center</th><th>confirmed center</th><th>rejected center</th><th>low3x3</th><th>pair3x3</th><th>target-spawn center/low3x3/pair3x3</th><th>target-spawn target-map</th><th>target-linked</th><th>direct</th><th>confirmed pair3x3</th><th>status</th></tr></thead><tbody>z  </tbody></table>z</body>z</html>)r:   r)   r9   rU  rV  strr   )summarycenter_owner_texttarget_spawn_low3x3_owner_textrh   r*   sigr}   s          r"   	html_pager\  &  s3   		 ";;56<""   
  &*YY /;;<=C/ & & 
 # D' 
ggk"(bww}-3   ;;s3776?3456&'(+~6 &))#./ 01 2>1A1A#1F0GH ;;s377:#6789	:	
 S)A%BCD
E S1E)F%GHIJ 77<=>? 77;<=> 77=>?@ 77@ABC 77?@AB 7789:; 779:;< 77GHI JK ww?@A BC  ww@AB! C!" 77EFG#" HI#$ ww=>?%$ @A%& ww>?@'&A'( 77>?@)(A)* 77DEF+*G+, 77=>?-,@-. ;;s377+<#=>?@/.A/	

< 99 $$$ 	$ 	#	$
 	Q$ 	E$ 	$ 	p$ 	1$ 	Q$ 	t$ 	C$ 	F$ 	$ 	$  	!$" 	?#$$ DKK(89::Z[bct[uZv  w[  \c  dz  \{  [|  |H  	I%$& "',"7!88pquq|q|  ~B  ~G  ~G  HO  Pw  Hx  ~y  rz  q{  {a  be  fm  n  f@  bA  aB  B_  `g  `k  `k  l~  `  _@  @L  	M'$( 2':R2S1TTUV]^uVvUw  xj  kr  sW  kX  jY  YR  SZ  [E  SF  RG  GS  	T)$* DGLpDqCrrst{  }]  u^  t_  _`  ah  iJ  aK  `L  Lr  sz  {Q  sR  rS  ST  U\  ]}  U~  T  @  AH  Ik  Al  @m  mn  ov  w\  o]  n^  ^_  `g  hL  `M  _N  Np  qu  q|  q|  }N	  qO	  pP	  P	L
  M
T
  U
y
  M
z
  L
{
  {
i  jq  rY  jZ  i[  [P  QX  YF  QG  PH  HT  	U+$, B'JuBvAw  x  @G  Ht  @u  v  vw  x  @h  xi  wj  jk  ls  t]  l^  k_  _d  el  mW  eX  dY  YZ  [b  cI  [J  ZK  KL  MT  U|  M}  L~  ~E
  F
M
  N
s
  F
t
  E
u
  u
v
  w
~
  
a  w
b  v
c  cd  el  mV  eW  dX  Xd  	e-$. SSZ  \E  TF  SG  GH  IP  Q}  I~  H  @  AH  It  Au  @v  vL  MQ  MX  MX  Yw  Mx  Ly  yU  V]  ^|  V}  U~  ~J  	K/$0 GL123481$2 	&3$4 	5$6 
V'BS:T	U7$8 	9$: 	$;$< 	{=$> 
?$@ 	A$B 	C$D 	E$F 	G$ $ $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_strict_event_tile_signature_scan.jsonF   )ensure_asciiindentrS  r   r   .map1_01a_strict_event_tile_signature_scan.html)mkdir
write_textr   dumpsr\  )rX  out_dirs     r"   write_outputsrh  u  sk    MM$M.??KK

7q9D@ L  ??KK' L r$   c            	        t        j                  t              } | j                  dt        t
        dz         | j                  dt        t
        dz         | j                  dt        t        dz  d	z         | j                  d
t        t
        dz         | j                  dt        t
               | j                         }t        t        |j                        t        |j                  g       t        |j                  i       t        |j                  i             }t        ||j                          t#        d|j                   dz          y )N)descriptionz--mapsr   )typedefaultz--event-transitionsr   z--transition-reviewsr   r   z--tile-hotspot-patternr   z	--out-dirz*wrote strict event tile signature scan -> rc  )argparseArgumentParser__doc__add_argumentr   r&  r'  
parse_argsrK  r   mapsr#   rf   r.   r{   rh  rg  print)parserargsrX  s      r"   mainrv    s   $$9F
tS9_E
-D#H`B`a
.T4&=SlClm
0tSKxExy
$<D$))$(("-$))2.$++R0	G '4<<(	6t||Fv7v6w
xyr$   __main__)r   r   r!   r   returnr   )r*   dictrx  zAtuple[str | None, str | None, str | None, int | None, int | None])r.   ry  rx  zMdict[tuple[str | None, str | None, str | None, int | None, int | None], dict])r;   ry  r&   rc   r'   rc   rx  rW  )r;   ry  r&   rc   r'   rc   rx  ry  )re   ry  rf   
list[dict]r.   ry  rx  rz  )re   ry  r{   ry  rx  rz  )r*   ry  rx  ry  )rh   rz  rx  rz  )r^   ry  r   rz  r   rW  rx  rz  )r   ry  r   rz  rx  ry  )NNNN)
re   dict | Nonerf   zlist[dict] | Noner.   r{  r{   r{  rx  ry  )rX  ry  rx  rW  )rX  ry  rg  r   rx  None)rx  r|  )*ro  
__future__r   rm  rU  r   pathlibr   typingr   summarize_map_tilesr   (summarize_original_collision_route_auditr   r   __file__resolver^  r'  r&  ry   rz   r*  r+  r,  r-  r#   r+   r/   r=   rY   rn   r   r   r   r   r   rK  r\  rh  rv  __name__r   r$   r"   <module>r     sX   Q "      ) G H~''*
Ul		($vh/ +
0 , &HI)5QR+7cdA!<=	- )8I
4(V F'T"	of !+/&*(,	HH(H $H &	H
 
HVL^ 25 	z$ zF r$   