
    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	  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ddZddZddZedk(  r e        yy)zPSummarize overwrite order for selectionBuffer[0x20] before the current frontier.    )annotationsN)Path)Any   outc                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     A/home/exedev/hwanse/tools/summarize_save_selector_writer_chain.py	load_jsonr      s*    ;;=::dnngn677    c                "    t        | xs dd      S )N0   int)values    r   va_intr      s    u|R  r   c                (    t        | xs dd      dz  S )Nr   r      r   )	value_hexs    r   opcoder      s    yC$t++r   c                4    t        | xs dd      |dz  z	  dz  S )Nr   r      r   r   )r   indexs     r   stream_plusr#      s"    	 S"%%!)4<<r   c                    | j                  d      | j                  d      | j                  d      | j                  d      xs | j                  d      xs d| j                  d      dS )NvaHexvalueHex	opcodeHexmeaning
stopReason )r%   r&   r'   r(   r)   get)steps    r   step_summaryr.   "   s[    '"HHZ(XXk*88I&F$((<*@FBhh|, r   c                   | j                  d      xs g }|sg S t        |d       }t        |j                  d            }| j                  d      xs g }|D ci c]  }|j                  d      | }}g }t        |d       D ]  }	t        |	j                  d            }
|j                  |	j                  d            xs i }|j                  d      xs g }|D cg c]i  }t        |j                  d            |
kD  rJt        |j                  d            |k  r-|j                  d	      s|j                  d
      rt	        |      k }}|D cg c]0  }t        |j                  d            |
kD  r|j                  d      2 }}|	j                  d      }dddj                  t        |      d      }t        |d      }|dk(  rdnd}|j                  |	j                  d      |d|dt        |      dk(  r|nd|||
z
  || |D cg c]+  }d|j                  d	d      v s|j                  d
      dv r|- c}d	        t        d t        |      D        d       }ddd|j                  d      |j                  d      |j                  d       xs i gd   j                  d!      ||d"d#	gS c c}w c c}w c c}w c c}w )$NcurrentFrontierRowsc                6    t        | j                  d            S Nr%   r   r,   rows    r   <lambda>zbuild_rows.<locals>.<lambda>0   s    fSWWW=M6N r   )keyr%   +currentFrontierRootWritersBeforeFirstReaderwriterVaHexc                6    t        | j                  d            S r2   r3   r4   s    r   r6   zbuild_rows.<locals>.<lambda>6   s    &9I2J r   tracer(   r)   r&   zselect active branch-state slotzmatch party/runtime slot)      unknownr   r   primaryBranchStatesecondaryBranchState0x02xr<   zruntime/party matchergater*   >   multiple-advancesbranch-or-fallthrough)	r9   writerValueHexstreamPlus1HextableChoice	operationdistanceToReaderBytesoverwrittenByisNearestLinearWriterfollowingGatesBeforeReaderc              3  D   K   | ]  }|j                  d       s|  yw)rL   Nr+   ).0r5   s     r   	<genexpr>zbuild_rows.<locals>.<genexpr>[   s     WCcgg>U6VCWs     map1_01amap2_02d0x20frontierBranches	conditionaq  On the current selector root's linear address order, 0x005428bc is the nearest writer to selectionBuffer[0x20] before the 0x00542b0c frontier reader. Earlier 0x00542474, 0x0054247c, and 0x00542484 writes are overwritten if execution reaches 0x005428bc. Promotion still needs control-flow proof that the path from 0x005428bc reaches 0x00542b0c and a strict tile hotspot.)	sourcetargetselectionBufferOffsetHexfrontierReaderVaHexfrontierReaderValueHexfrontierConditionwriterChainnearestLinearWriter
conclusion)
r,   minr   sortedr.   r   r#   appendnextreversed)selection_writerswriter_pathsfrontier_rowsfirst_reader	reader_vawritersr5   path_by_writerchainwriter	writer_var   r;   r-   	followinglateroverwritten_byr   rI   stream1tableitemnearests                          r   
build_rowsru   ,   s   %))*?@FBM	}*NOL|''01I##$QRXVXG=IJccggm,c1JNJE&JK #6::g./	!!&**W"56<"!'R 
dhhw'(94@Q9RU^9^)$(> 
	 
 !
eii()I5 IIg
 

 JJz*	3,
 #fY
+ 	 i+(/1$:P!::g.' "73-0$*9$5$=5CZ"%.%:+)7%7!*+TXXi448N  SA  9A +
 	-#J W8E?WY]^G$*+//8"."2"2:">*../ABJrdANRRS^_&m  S K

*+s   J7!A.J<5K0Kc                V   g d}| D ]  }|j                  d|d    d|d    dd|j                  d       d	|j                  d
       dd|j                  d       dd|j                  d       dddg       |j                  d      xs g D ]  }dj                  d |j                  d      xs g D              xs d}|j                  d|j                  d       d|j                  d       d|j                  d       d|j                  d       d|j                  d       dd j                  |j                  d!      xs g       xs d d| d"        |j                  d#      xs i }|j                  dd$|j                  d       d%dg        d&j                  |      S )'N)z# Save Selector Writer Chainr*   zfOverwrite order for `selectionBuffer[0x20]` before the current `map1_01a -> map2_02d` frontier reader.r*   z## rV   z -> rW   r*   z- frontier reader: `rY   z` `rZ   `z- frontier condition: `r[   z- conclusion: r^   z_| writer | value | operation | table/source | distance | overwritten by | gates before reader |z,| --- | --- | --- | --- | ---: | --- | --- |r\   <br>c              3     K   | ];  }|j                  d        d|j                  d       d|j                  d        = ywr%    r'   r(   Nr+   rO   rC   s     r   rP   zmarkdown.<locals>.<genexpr>   sG        88G$%Qtxx'<&=Qtxx	?R>ST s   AArM   -z| `r9   z` | `rF   z` | rI   z | rH   rJ   , rK   z |r]   zNearest linear writer: `z`.
)extendr,   joinra   )rowslinesr5   rl   gatesrt   s         r   markdownr   n   s   E  #h-S]O4"377+@#A"B#cggNfFgEhhij%cgg.A&B%C1ESWW\234m:	
 		 ggm,2 
	FKK  "JJ'CDJ      LLfjj/0fjjAQ6R5SSW::k*+3vzz-/H.I::567s99VZZ8>B?F3Gs5'QSU
	 ''/06B&w{{='A&B"E
 	/8 99Ur   c                   g d}| D ]  }|j                  dt        j                  |d          dt        j                  |d          ddt        j                  t        |j	                  d                   d	t        j                  t        |j	                  d
                   ddt        j                  t        |j	                  d                   ddt        j                  t        |j	                  d                   ddg       |j	                  d      xs g D ]M  }dj                  d |j	                  d      xs g D              xs d}|j                  dt        j                  t        |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                  |j	                  d!      xs g       xs d       d| d"       P |j	                  d#      xs i }|j                  d$       |j                  d%t        j                  t        |j	                  d                   d&        d'j                  |      S )(N)zN<!doctype html><meta charset="utf-8"><title>Save Selector Writer Chain</title>z<style>body{font-family:system-ui,sans-serif;background:#111;color:#eee}table{border-collapse:collapse}td,th{border:1px solid #444;padding:6px 8px;vertical-align:top}code{color:#9bd4ff}</style>z#<h1>Save Selector Writer Chain</h1>za<p>Overwrite order for <code>selectionBuffer[0x20]</code> before the current frontier reader.</p>z<h2>rV   z -&gt; rW   z</h2>z<p>frontier reader: <code>rY   z</code> <code>rZ   z</code></p>z<p>frontier condition: <code>r[   z<p>r^   z</p>z<table><thead><tr><th>writer</th><th>value</th><th>operation</th><th>table/source</th><th>distance</th><th>overwritten by</th><th>gates before reader</th></tr></thead><tbody>r\   rx   c           
   3     K   | ]N  }t        j                  |j                  d        d|j                  d       d|j                  d              P ywrz   )htmlescaper,   r|   s     r   rP   zhtml_page.<locals>.<genexpr>   sQ        txx01488K3H2I488T]K^J_`a s   AArM   r}   z<tr><td><code>r9   z</code></td><td><code>rF   z</code></td><td>rI   z	</td><td>rH   rJ   r~   rK   z
</td></tr>r]   z</tbody></table>z <p>Nearest linear writer: <code>z</code>.</p>r   )r   r   r   strr,   r   ra   )r   partsr5   rl   r   rt   s         r   	html_pager      s   E  t4;;s8}-.gdkk#h-6P5QQVW(SAV9W5X)Y(Z [[[SWW-E%F!GHIV+DKKCGGDW<X8Y,Z+[[fg$++c#'',"789:$? }
 	 ggm,2 	FKK  "JJ'CDJ      LL![[VZZ-F)GHI J![[VZZ8H-I)JKL M{{3vzz+'>#?@A B{{3vzz-'@#ABC Dzz"9:; <{{499VZZ-H-NB#O#VSVWX Yg 
	  ''/06B'(7CTaHbDc8d7eeqrs7t8 99Ur   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_oksave_selector_writer_chain.jsonF   )ensure_asciiindentr   r	   r
   )mkdir
write_textr   dumps)r   out_dirs     r   write_outputsr      sC    MM$M.00<<

4eA6= = r   c                 r   t        j                         } | j                  dt        t               | j                         }t        t        |j                  dz  i       t        |j                  dz  g             }t        ||j                         t        dt        |       d|j                  dz          y )Nz	--out-dir)typedefaultz$save_selector_selection_writers.jsonz'save_selector_current_writer_paths.jsonzwrote z$ save selector writer chain rows -> r   )argparseArgumentParseradd_argumentr   OUT
parse_argsru   r   r   r   printlen)parserargsr   s      r   mainr      s    $$&F
$<D$,,!GGL$,,!JJBOD $%	F3t9+A$,,QrBrAs
tur   __main__)r   r   r   r   returnr   )r   
str | Noner   r   )r   r   r   r   )r   r   r"   r   r   r   )r-   dictr   r   )rd   r   re   
list[dict]r   r   )r   r   r   r   )r   r   r   r   r   None)r   r   )__doc__
__future__r   r   r   r   pathlibr   typingr   __file__resolver   ROOTr   r   r   r   r#   r.   ru   r   r   r   r   __name__ r   r   <module>r      s    V "      H~''*
Ul8!,=?D#L#L	v zF r   