
    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  ee      j                         j                  d   Zedz  ZddZddZdd	Zdd
Z	 	 	 	 	 	 	 	 	 	 ddZddZddZefddZddZedk(  r e        yy)z7Summarize branch gates on save-selector frontier edges.    )annotationsN)Path   outc                0    t        | d      }||dz  z	  dz  S )N         )int)	value_hexindexvalues      F/home/exedev/hwanse/tools/summarize_save_selector_frontier_branches.pybyte_at_wordr      s"    	2Eeai D((    c                n    i }| j                         D ]  }|j                  d      dk(  s|||d   <   ! |S )Nstateacceptedmap)valuesget)render_reviewsresultreviews      r   accepted_render_by_mapr      sE    F '') +::g*,$*F6%=!+ Mr   c                    | j                  d      xs g D ]X  }| j                  d      |k(  r|j                  d      xs g c S | j                  d      |k(  sC|j                  d      xs g c S  g S )N
scenePairssourcesourceTilesetstargettargetTilesetsr   )rowmap_namepairs      r   record_tilesets_forr&      sr    %+ 4778(88,-33778(88,-33	4
 Ir   c                    |sy| j                  d      xs g D ]E  }|j                  d      |k(  s|j                  d      r
d|d    c S |j                  d      sE y y)N-wordsvalueHexcnszcns:pointerunknownr"   )leafva_hexwords      r   branch_target_kindr1   %   sf    !'R !88J6)xxd5k]++xx	" ! r   c                D   |D ci c]  }|j                  d      | }}|D ci c]  }|j                  d      | }}t        |      }g }	| D ]D  }
|j                  |
d         xs i }|j                  |
d         xs i }t        |
|
d         }t        |
|
d         }g }|
j                  d      xs g D ]  }|j                  |      }|j                  |      xs i }|xs i j                  d      xs g D ]  }|j                  d      dk7  r|d	   }t        |d
      dk(  rdnd}t        |d      }|j	                  ||j                  d      |||d|d| d|dd|j                  d      |j                  d      t        ||j                  d            d
         |d d |j                  d      xs g d d k(  }|d d |j                  d      xs g d d k(  }|	j	                  |
d   |
d   |
j                  d      xs g ||||j                  d      |j                  d      xs g |j                  d      xs dd|j                  d      |j                  d      xs g |j                  d      xs dd|||r|r|sdnddd       G |	S c c}w c c}w ) NstreamVaHexleafPointerHexr   r    leafPointerstrace	opcodeHex0x11r*   r   r   primaryBranchStatesecondaryBranchState   vaHex0x02xz[selectionBuffer[0xz]] == 1fallthroughVaHexbranchTargetHex)
r4   r3   r*   
stateTableselectionBufferOffsetselectionBufferOffsetHex	conditionr?   r@   branchTargetKindtilesetsvisualtileIndexMode
row40_zero)rG   rF   rH   highmediumzSave-selector scene records are gated script resource bundles, not confirmed tile hotspots. Do not promote this edge to normal gameplay until a source coordinate/spawn is verified.)r   r    r5   branchStepssourceRecordTilesetstargetRecordTilesetssourceAcceptedRendertargetAcceptedRendersourceTilesetMatchtargetTilesetMatchpromotionRisknote)r   r   r&   r   appendr1   )frontierstream_tracesleaf_streamsr   r6   traces_by_streamr.   leaves_by_pointeraccepted_renderrowsedgesource_rendertarget_rendersource_record_tilesetstarget_record_tilesetsbranch_stepsleaf_pointerstepr   tableselector_offsetsource_tileset_matchtarget_tileset_matchs                          r   
build_rowsri   1   s    FSSE		-0%7SSFRSd"23T9SS,^<OD 9'++DN;Ar'++DN;Ar!4T4>!J!4T4>!J HH^4: 	L$((6E$((6<"D"))'28b 88K(F2 ,	0<Y0Ja0O,Uk".y!"<##&2#'88G#4 )"'-<24_S4I0J$)7*=oc=RRY!Z(,1C(D'+xx0A'B(:4J[A\(]% 	*  6bq9m>O>OPZ>[>a_acede=ff5bq9m>O>OPZ>[>a_acede=ff8n8n HH^4:'$:$:'++H5)--j9?R!.!2!2?!C!S|% (++H5)--j9?R!.!2!2?!C!S|%
 #7"6 $+?G[ k3
 	;9t K} TSs
   JJc                H   g d}| D ]  }dj                  d |d   D              xs d}|d    ddj                  |d	         xs d d
|d    ddj                  |d         xs d d}|d    ddj                  |d   d         xs d d|d   d   xs d d|d    ddj                  |d   d         xs d d|d   d   xs d }|j                  d|d    d|d    d|d    d| d| d| d|d    d        | s|j                  d       dj                  |      dz   S )N)z!# Save Selector Frontier Branches zKBranch gates and render-record mismatches for save-selector frontier edges.rk   zT| source | target | risk | branch gates | record tilesets | accepted render | note |z+| --- | --- | --- | --- | --- | --- | --- |<br>c              3     K   | ]=  }d |d    d|d    d|j                  d       d|j                  d       d|d	    d
 ? yw)`r4   z` `rD   z` fallthrough `r?   z
` target `r@   z` (rE   )Nr"   .0rd   s     r   	<genexpr>zmarkdown.<locals>.<genexpr>   s      
 %&'s4+<*=_TXXVhMiLjjtuyu}u}  P  vQ  uR  RU  VZ  [m  Vn  Uo  op  q
s   AArL   r(   r   z: `,rM   z`<br>r    rN   rn   rO   rF   z` rG   rP   z| z | rS   rT   z |z| - | - | - | - | - | - | - |
)joinrU   )r\   linesr#   gatesrecord_tilesetsr   s         r   markdownry   x   s   E  
 
M*
 
   	
 8}oS#.D*E!F!M# Ne8}oS#.D*E!F!M# NaQ 	
 8}oS#.D*Ej*Q!R!YVY ZZ\)*84;<D8}oS#.D*Ej*Q!R!YVY ZZ\)*84;<> 	 	Xs3x=/S5I4J#eWTWs8*CF}B@	

& 4599Ud""r   c                   g }| D ]  }dj                  d |d   D              xs d}t        j                  |d          dt        j                  dj                  |d         xs d       d	t        j                  |d
          dt        j                  dj                  |d         xs d       d}t        j                  |d          dt        j                  dj                  |d   d         xs d       dt        j                  |d   d   xs d       dt        j                  |d
          dt        j                  dj                  |d   d         xs d       dt        j                  |d   d   xs d       }|j                  dt        j                  |d          dt        j                  |d
          dt        j                  |d          d| d| d| dt        j                  |d          d        dj                  ddddddddd d!d"d#d$d%d&d'd(d)d*d+j                  |      xs d, d-d.d/d+g      S )0Nrl   c              3     K   | ]O  }t        j                  |d     d|d    d|j                  d       d|j                  d       d|d    d	
       Q y
w)r4    rD   z fallthrough r?   z target r@   z (rE   ro   N)htmlescaper   rp   s     r   rr   zhtml_page.<locals>.<genexpr>   sx      

 	 KK()*!D,=+>mDHHUgLhKi j((#456b>P9Q8RRSU
s   AArL   r(   r   z: <code>rs   rM   z</code><br>r    rN   z</code>rO   rF   z</code> rG   rP   z<tr><td>z	</td><td>rS   rT   z
</td></tr>rt   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">z0  <title>Save Selector Frontier Branches</title>z	  <style>z^    body { margin: 24px; background: #101010; color: #eee; font: 14px system-ui, sans-serif; }z5    table { border-collapse: collapse; width: 100%; }zM    th, td { border: 1px solid #333; padding: 6px 8px; vertical-align: top; }z    th { background: #1d1d1d; }z    code { color: #f5d76e; }z
  </style>z</head>z<body>z*  <h1>Save Selector Frontier Branches</h1>zT  <p>Branch gates and render-record mismatches for save-selector frontier edges.</p>z  <table><thead><tr><th>source</th><th>target</th><th>risk</th><th>branch gates</th><th>record tilesets</th><th>accepted render</th><th>note</th></tr></thead>z	  <tbody>rk   z&<tr><td colspan="7">No rows.</td></tr>z</tbody></table>z</body>z</html>)ru   r}   r~   rU   )r\   bodyr#   rw   rx   r   s         r   	html_pager      s   D 
 

 M*
 
   	 {{3x=)*(4;;sxxLbHc?d?khk3l2mmx{{3x=)*(4;;sxxLbHc?d?khk3l2mmtv 	
 {{3x=)*(4;;sxxLbHcdnHo?p?wtw3x2y  zB{{356x@GCHI{{3x=)*(4;;sxxLbHcdnHo?p?wtw3x2y  zB{{356x@GCHIK 	 	;;s8}-. /;;s8}-. /;;s?345 6' "# $* ;;s6{+, -
	
%
: 99"P:h?W)&4^ 	i
BGGDMO%OPP`a
-  r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok$save_selector_frontier_branches.jsonFr;   )ensure_asciiindentrt   utf-8encoding)mkdir
write_textjsondumps)r\   out_dirs     r   write_outputsr      sD    MM$M.55AA

4eA6= B r   c            
        t        j                  t              } | 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                          t#        dt%        |       d|j                   dz          y )N)descriptionz
--frontierzsave_selector_frontier.json)typedefaultz--stream-tracesz save_selector_stream_traces.jsonz--leaf-streamszsave_selector_leaf_streams.jsonz--render-reviewszmap_render_reviews.jsonz	--out-dirr   r   zwrote z' save selector frontier branch rows -> r   )argparseArgumentParser__doc__add_argumentr   OUT
parse_argsri   r   loadsrV   	read_textrW   rX   r   r   r   printlen)parserargsr\   s      r   mainr      sa   $$9F
4?\9\]
)cDf>fg
(tSCd=de
*sE^?^_
$<D

4==**G*<=

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

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

4&&00'0BC	D $%	F3t9+DT\\TzEzD{
|}r   __main__)r   strr   r   returnr   )r   dictr   zdict[str, dict])r#   r   r$   r   r   z	list[str])r.   r   r/   z
str | Noner   r   )
rV   
list[dict]rW   r   rX   r   r   r   r   r   )r\   r   r   r   )r\   r   r   r   r   None)r   r   )r   
__future__r   r   r}   r   pathlibr   __file__resolver   ROOTr   r   r   r&   r1   ri   ry   r   r   r   __name__ r   r   <module>r      s    = "     H~''*
Ul)
	DDD D 	D
 DN#B6r 58 ~$ zF r   