
    UHj%0                    R   d Z ddlmZ ddlZddlZddlZddl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g dZdg dddg dddg dddddgddg ddgZd!dZ	 	 	 	 	 	 	 	 	 	 	 	 d"dZd#dZd#dZd$dZd%dZed k(  r e        yy)&zISummarize current selector-root paths that mention the map1_01a frontier.    )annotationsN)Path   outz2:0
0x00540714map1_01amap2_02d)
0x00542ac0
0x00542ad4
0x00542ae8)znormal-current-root-executionzstrict-source-hotspotzfrontier-event-clusterzreader-branch-target-linkage)zWnormal runtime execution selecting current root 2:0 and frontier reader leaf 0x00542ae8z?strict map1_01a source coordinate or hotspot linked to map2_02dzEnon-selector-only frontier event cluster linking map1_01a to map2_02dzIreader branch outcome proving a field-map target on the normal route pathz'out/save_scene_selector_references.json)labelpathHexkindresource)pathfieldsz#out/save_selector_leaf_streams.json)leafPointerHex	linkedCnsnestedPointerHexz$out/save_selector_stream_traces.json)streamVaHextrace
stopReasonzout/map1_01a_hotspot_gap.jsonstrictHotspotFoundpromotionStatuszout/field_map_record_roots.json)clusterscurrentFrontierCountclassificationc                z    t               }g }| D ])  }||v r|j                  |       |j                  |       + |S N)setaddappend)valuesseenresultvalues       P/home/exedev/hwanse/tools/summarize_save_selector_current_root_frontier_paths.pyuniquer(   6   sE    5DF D=e	
 M    c                	   t         D ci c]  }|g  c}| D ]t  }|j                  d      t        k7  r|j                  d      xs g }|r|d   t        k7  r@t	        fdt        |      D        d       }|sa|   j                  |       v |D ci c]  }|j                  d      | }}|D ci c]  }|j                  d      | }	}g }
t         D ]N  }j                  |      xs g }t        |D cg c]  }|j                  d      dk(  s|d	    c}      }t        |D cg c]  }|j                  d      d
k(  s|d	    c}      }|D cg c]  }|j                  d	      t        k(  s| }}|D cg c]  }|j                  d	      t        k(  s| }}|j                  |      xs i }|j                  d      r(|j                  d      xs i gd   j                  d      nd }t        d |j                  d      xs g D              }|	j                  |      xs i }|
j                  |t        |      |t        |v t        |v t        t        d |D        g             t        t        d |D        g             t        |D cg c]%  }|j                  d      s|j                  d      ' c}      t        |D cg c]%  }|j                  d      s|j                  d      ' c}      |j                  d      xs ||||j                  d      d       Q t        |t              r|j                  d      n|}t	        d |xs g D        i       }d}i dt        dt        dt        dt        dt        |
      d|
d|j                  d      d|j                  d       d!|j                  d"      xsI |j                  d#      r6|j                  d$      r%|j                  d#       d%|j                  d$       nd d&|j                  d'      xs |j                  d(      d)|j                  d*      xs |j                  d+      d,|j                  d-      xs |j                  d.      d/d0d1d0d2t        d3t         d4t         t"        t        t"              d5|d6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 )7Nr   r   r   c              3  ,   K   | ]  }|v s|  y wr    ).0itemby_leafs     r'   	<genexpr>z build_summary.<locals>.<genexpr>O   s     HdTHs   	r   r   r   fieldMapr   cnsr   r   c              3  D   K   | ]  }|j                  d       dk(    yw)vaHex
0x00542b0cNgetr-   r.   s     r'   r0   z build_summary.<locals>.<genexpr>^   s     `t'*l:`s    c              3  F   K   | ]  }|j                  d       xs g   ywtilesetsNr7   r-   rows     r'   r0   z build_summary.<locals>.<genexpr>g   !     -]Ccggj.A.GR.G-]   !c              3  F   K   | ]  }|j                  d       xs g   ywr;   r7   r=   s     r'   r0   z build_summary.<locals>.<genexpr>h   r?   r@   refVaHexr   r   )r   referenceCount	fieldMaps	hasSource	hasTargetsourceTilesetstargetTilesetssourceRecordRefstargetRecordRefsr   traceStopReasontraceContainsFrontierReaderr   r   c              3     K   | ]<  }|j                  d       s%|j                  d      s|j                  d      dk(  r| > yw)r   currentFrontierPairCountr   z&current frontier selector-only clusterNr7   r=   s     r'   r0   z build_summary.<locals>.<genexpr>t   sE      	
ww-.ww12ww'(,TT 	
s   AAa  The current selector root 2:0 reaches map1_01a and map2_02d through save-selector leaf paths, not through a strict hotspot. Leaf 0x00542ae8 is the only traced frontier leaf that reaches reader 0x00542b0c, but the hotspot scan still has no map1_01a coordinate row and the frontier cluster is selector-only. Keep this edge blocked until a strict source or equivalent non-coordinate trigger is found.selectorrootHexsourcetarget	leafCountleafRowsr   hotspotPromotionStatusr   frontierClusterRangeHexclusterRangeHexclusterStartHexclusterEndHexz..frontierClusterClassr   classfrontierClusterEventCount
eventCounteventRecordCountfrontierClusterSelectorRefCountselectorRefCountsaveSelectorRefCount
proofFoundFcurrentRootFrontierProofFound failedCurrentRootFrontierGateIdsmissingEvidenceremainingProofsblocked)evidenceRefsevidenceRefCountr   
conclusion)FRONTIER_LEAVESr8   LABELROOT_HEXnextreversedr"   r(   SOURCETARGETanylensum
isinstancedict%FAILED_CURRENT_ROOT_FRONTIER_GATE_IDS&CURRENT_ROOT_FRONTIER_MISSING_EVIDENCE#CURRENT_ROOT_FRONTIER_EVIDENCE_REFS)
referencesleaf_streamsstream_traceshotspot_gapfield_rootsleafr>   r   trace_by_streamleaf_stream_by_leaf	leaf_rowsrows
field_mapsr2   	map1_rows	map2_rowsr   stop
has_readerleaf_streamr   frontier_clusterrj   r/   s                          @r'   build_summaryr   A   s#    <K%K4dBh%KG &777u$wwy!'RtAw(*HhtnH$ODM  %& ?LLssww}-s2LOLEQRc377#34c9RRI 
{{4 &B^S]@]S_^_
R#E9Qc*oRS$(JSCGGJ,?6,ISJ	J$(JSCGGJ,?6,ISJ	J##D)/REJYYwEW		'"*rdB/33LA]a`uyyQXGYG_]_``
)--d39r"&"%d)'#z1#z1"(-]S\-]_a)b"c"(-]S\-]_a)b"c$*9+lCX[X_X_`jXkCGGJ,?+l$m$*9+lCX[X_X_`jXkCGGJ,?+l$m(__[9@S#'/9$/OO4F$G	

8 /9d.K{z*Q\H	
#>r	
 		W E8 	& 	&	
 	S^ 	I 	koo.BC 	!+//2C"D 	"  !23  $''(9:?O?S?STc?d $''(9:;2>N>R>RSb>c=de" 	 0 4 45E F gJZJ^J^_fJg#$ 	$%5%9%9,%G%sK[K_K_`rKs%& 	*+;+?+?@R+S  ,DWgWkWk  mC  XD'( 	e)* 	(+, 	+,Q-. 	A/0 	A12 < CD$ 9 u &L MR _RJJ ,m+lsY   
R4R93R>8S
S
)S
S
S3S=SSS&SSSc                F   ddd| d    d| d    dd| d	    d
| d    dd| d    d| j                  d       d| j                  d       d| d    ddj                  | d          dt        | d          d| j                  d       d| d    d| d   dddg}|j                  d | d   D               |j                  g d        | d!   D ]  }|j	                  d"|d#    d$|d%   rd&nd' d(|d)   rd&nd' d(dj                  |d*         xs d+ d(dj                  |d,         xs d+ d(dj                  |d-         xs d+ d(|d.   rd&nd' d(|j                  d/      xs d+ d0|j                  d1      xs d+ d2        |j	                  d       d3j                  |      S )4Nz+# Save Selector Current Root Frontier Paths z- selector: `rO   z` root `rP   `z
- route: `rQ   z -> rR   z- strict hotspot found: r   z- frontier cluster: `rV   z` rZ   z- proof found: rb   z&- failed current-root frontier gates: , rd   z- missing evidence count: re   z- evidence refs: ri   z- promotion status: r   rj   z## Missing Evidencec              3  &   K   | ]	  }d |   yw)z- Nr,   r9   s     r'   r0   zmarkdown.<locals>.<genexpr>   s     D2dVDs   )r   zg| leaf | source? | target? | field maps | source tilesets | target tilesets | reader? | stop | nested |z7| --- | --- | --- | --- | --- | --- | --- | --- | --- |rT   z| `r   z` | rE   yesnoz | rF   rD   -rG   rH   rL   rK   z | `r   z` |
)r8   joinrs   extendr"   )summarylinesr>   s      r'   markdownr      s6   5


+,HWY5G4HJ
WX&'tGH,=+>a@
"7+?#@"AB
,E FGr'++VlJmIno
',/01
07Ce;f1g0hi
$S1B)C%D$EF
GKK(:;<=
w'89:;


!E$ 
LLD1B)CDD	LL  
 z" 
#&'(c+6FUD,QQTK(ud33tyy[AQ7R7YVY6ZZ]yy-./637s499SIYEZ;[;b_b:ccf9:uESQbIcIjgjHk l*+2s33	8	

 
LL99Ur)   c                   dj                  d | d   D              }dj                  dddd| d    d	| d
    d| d    d| d    dt        j                  | d          ddt        j                  | j                  d      xs d       dt        j                  | j                  d      xs d       dd| d    dt        j                  dj                  | d                dt	        | d          d| j                  d       d 	d!t        j                  | d"          dd#d$dj                  d% | d   D              d&d'|d(g      S ))Nr   c              3  @  K   | ]  }d t        j                  |d          d|d   rdnd d|d   rdnd dt        j                  dj                  |d	         xs d
       dt        j                  dj                  |d         xs d
       dt        j                  dj                  |d         xs d
       d|d   rdnd dt        j                  |j                  d      xs d
       dt        j                  |j                  d      xs d
       d  yw)z<tr><td><code>r   z</code></td><td>rE   r   r   z	</td><td>rF   r   rD   r   rG   rH   rL   rK   z</td><td><code>r   z</code></td></tr>N)htmlescaper   r8   r=   s     r'   r0   zhtml_page.<locals>.<genexpr>   s8      	[[%5!678 9K(ud3 4K(ud3 4{{499S%56=#>? @{{499S)9%:;BsCD E{{499S)9%:;BsCD E9:uE F{{377#45<=> ?[[);!<!CDE F
	s   DDrT   z]<!doctype html><meta charset="utf-8"><title>Save Selector Current Root Frontier Paths</title>z<style>body{font-family:system-ui,sans-serif;background:#111;color:#eee;max-width:1200px;margin:24px auto}table{border-collapse:collapse}td,th{border:1px solid #444;padding:6px 8px;vertical-align:top}code{color:#9bd4ff}</style>z2<h1>Save Selector Current Root Frontier Paths</h1>z<p>selector <code>rO   z</code> root <code>rP   z</code>; route <code>rQ   z -&gt; rR   z</code>; promotion status: r   z</p>z<p>frontier cluster <code>rV   r   z</code> rZ   z<p>proof found <code>rb   z2</code>; failed current-root frontier gates <code>,rd   z </code>; missing evidence <code>re   z</code>; evidence refs <code>ri   z</code></p>z<p>rj   z<h2>Missing Evidence</h2>z<ul>c              3  N   K   | ]  }d t        j                  |       d  yw)z<li>z</li>N)r   r   r9   s     r'   r0   zhtml_page.<locals>.<genexpr>   s#     YdDT*+51Ys   #%z</ul>z<table><thead><tr><th>leaf</th><th>source?</th><th>target?</th><th>field maps</th><th>source tilesets</th><th>target tilesets</th><th>reader?</th><th>stop</th><th>nested</th></tr></thead><tbody>z</tbody></table>)r   r   r   r8   rs   )r   r   s     r'   	html_pager      s\   99  :& D 99i 	n<
WZ011DWYEWDXXmnuv~n  nA  AH  IP  QY  IZ  H[  [v  w{  wB  wB  CJ  K\  C]  w^  v_  _c  	d
$T[[=V1W1^[^%_$``himititu|  vA  vA  BX  vY  v`  ]`  ja  ib  bf  	g
 566himitituxu}u}  F  Gi  j  vk  jl  im  mM  NQ  RY  Zk  Rl  Nm  Mn  nK  LS  LW  LW  Xj  Lk  Kl  lw  	x
dkk',/016#		YgFW>XYY 	M  r)   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok.save_selector_current_root_frontier_paths.jsonF   )ensure_asciiindentr   utf-8encoding)mkdir
write_textjsondumps)r   out_dirs     r'   write_outputsr      sD    MM$M.??KK

7q9D@ L r)   c                    t        j                         } | j                  dt        t        dz         | j                  dt        t        dz         | j                  dt        t        dz         | j                  dt        t        d	z         | j                  d
t        t        dz         | j                  dt        t               | j                         }t        t        j                  |j                  j                  d            t        j                  |j                  j                  d            t        j                  |j                  j                  d            t        j                  |j                  j                  d            t        j                  |j                  j                  d                  }t        ||j                          t#        d|j                   dz          y )Nz--referencesz#save_scene_selector_references.json)typedefaultz--leaf-streamszsave_selector_leaf_streams.jsonz--stream-tracesz save_selector_stream_traces.jsonz--hotspot-gapzmap1_01a_hotspot_gap.jsonz--field-rootszfield_map_record_roots.jsonz	--out-dirr   r   z%wrote current root frontier paths -> r   )argparseArgumentParseradd_argumentr   OUT
parse_argsr   r   loadsrz   	read_textr{   r|   r}   r~   r   r   print)parserargsr   s      r'   mainr      s   $$&F
T3Af;fg
(tSCd=de
)cDf>fg
dCB]<]^
dCB_<_`
$<D

4??,,g,>?

4$$...@A

4%%///AB

4##--w-?@

4##--w-?@G '4<<(	1$,,Aq2q1r
str)   __main__)r#   	list[str]returnr   )rz   
list[dict]r{   r   r|   r   r}   rv   r~   rv   r   rv   )r   rv   r   str)r   rv   r   r   r   None)r   r   )__doc__
__future__r   r   r   r   pathlibr   __file__resolver   ROOTr   rl   rm   rp   rq   rk   rw   rx   ry   r(   r   r   r   r   r   __name__r,   r)   r'   <module>r      s,   O "     H~''*
Ul		<) %* & ::
 6E
 78
 0'):;
 2H#' #0^^^ ^ 	^
 ^ 
^B"JBu( zF r)   