
    Wh&                    4   U d dl mZ d dlmZmZ d dlmZmZmZm	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 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZm Z m!Z! d dl"m#Z# eZ$ej%        Z& eddd           G d d                      Z' eddd           G d d                      Z( eddd           G d d                      Z) G d de          Z*i Z+de,d<   dddd;d(Z-d<d+Z.ddddd,d=d3Z/d>d6Z0d>d7Z1dddd8d?d:Z2dS )@    )annotations)	dataclassfield)AnyCallableProtocolSequenceN)NamedSharding)api)core)source_info_util)traceback_util)util)
make_jaxpr)	dce_jaxpr)AbstractMeshMesh)broadcast_prefixtree_flattentree_unflattentree_map)	shard_mapT)frozenslotskw_onlyc                  `    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   dS )RooflineRuleContextzsource_info_util.NameStack
name_stackcore.Primitive	primitiveSequence[core.AbstractValue]avals_in	avals_outzcore.JaxprEqnContextjaxpr_eqn_ctxMesh | AbstractMeshmeshboolpin_lhs_in_vmempin_rhs_in_vmemN)__name__
__module____qualname____annotations__     h/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/jax/experimental/roofline/roofline.pyr   r   (   sr         (((((((())))%%%%r/   r   c                      e Zd ZU ded<   ded<   edd	            Zedd            Zedd            Zedd            Z	dS )RooflineShapeztuple[int, ...]shapeznp.dtypedtypeavalcore.AbstractValuereturn'RooflineShape'c                ,   t          |t          j                  s t          dt	          |           d          t          |j        t          j                  s%t          dt	          |j                   d           | |j        |j                  S )NzExpected ShapedArray, got .zExpected numpy dtype, got )r3   r4   )
isinstancer   ShapedArray	TypeErrortyper4   npr3   )clsr5   s     r0   	from_avalzRooflineShape.from_aval9   s    dD,-- B@4::@@@AAAdj"(++ HF4
3C3CFFFGGG3TZtz2222r/   intc                N    t          t          j        | j                            S N)rB   r?   prodr3   selfs    r0   sizezRooflineShape.sizeA   s    rwtz""###r/   c                D    t          | j        | j        j        z            S rD   )rB   rH   r4   itemsizerF   s    r0   byteszRooflineShape.bytesE   s    ty4:..///r/   avalsr!   c                :     t           fd|D                       S )Nc              3  L   K   | ]}                     |          j        V  d S rD   )rA   rK   ).0r5   r@   s     r0   	<genexpr>z,RooflineShape.total_bytes.<locals>.<genexpr>K   s2      ;;Ts}}T""(;;;;;;r/   )sum)r@   rL   s   ` r0   total_byteszRooflineShape.total_bytesI   s&    ;;;;U;;;;;;r/   N)r5   r6   r7   r8   r7   rB   )rL   r!   r7   rB   )
r*   r+   r,   r-   classmethodrA   propertyrH   rK   rR   r.   r/   r0   r2   r2   4   s         ///3 3 3 ;3 $ $ $ 8$ 0 0 0 80 < < < ;< < <r/   r2   c                      e Zd ZU dZded<    ee          Zded<    ee          Zded<   dZ	ded<   dZ
ded	<   edd            ZddZddZddZdS )RooflineResultr   rB   flops)default_factorydict[str, int]	ici_bytesici_latency	hbm_bytespeak_hbm_bytesr7   'RooflineResult'c                     |             S rD   r.   )r@   s    r0   zeroszRooflineResult.zerosV   s    355Lr/   otherc           
         dd}t          | j        |j        z    || j        |j                   || j        |j                  | j        |j        z   t          | j        |j                            S )Nd1rZ   d2r7   c                ^      fdt                     t                    z  D             S )Nc                l    i | ]0}|                     |d                                |d           z   1S )r   )get)rO   krd   re   s     r0   
<dictcomp>zCRooflineResult.__add__.<locals>.merge_ici_dicts.<locals>.<dictcomp>\   s8    HHHa1q!,HHHr/   )set)rd   re   s   ``r0   merge_ici_dictsz/RooflineResult.__add__.<locals>.merge_ici_dicts[   s2    HHHHHc"ggB6GHHHHr/   rX   r[   r\   r]   r^   )rd   rZ   re   rZ   r7   rZ   )rW   rX   r[   r\   r]   maxr^   )rG   rb   rl   s      r0   __add__zRooflineResult.__add__Z   s    I I I I J$@@!/$"2E4EFF0,e.BCC   r/   constantint | floatc           
     6   t          t          | j        z            fd| j                                        D             fd| j                                        D             t          | j        z            t          | j        z                      S )Nc                <    i | ]\  }}|t          |z            S r.   rB   rO   ri   vrp   s      r0   rj   z*RooflineResult.__mul__.<locals>.<dictcomp>i   s+    III$!QCH%%IIIr/   c                <    i | ]\  }}|t          |z            S r.   rt   ru   s      r0   rj   z*RooflineResult.__mul__.<locals>.<dictcomp>j   s+    MMMDAq1c!h,''MMMr/   rm   )rW   rB   rX   r[   itemsr\   r]   r^   rG   rp   s    `r0   __mul__zRooflineResult.__mul__f   s    
X%&&IIII$.2F2F2H2HIIIMMMMD4D4J4J4L4LMMMDNX-..,x788   r/   c                ,    |                      |          S rD   )rz   ry   s     r0   __rmul__zRooflineResult.__rmul__o   s    <<!!!r/   N)r7   r_   )rb   r_   r7   r_   )rp   rq   r7   r_   )r*   r+   r,   rX   r-   r   dictr[   r\   r]   r^   rT   ra   ro   rz   r|   r.   r/   r0   rW   rW   N   s         %....#eD999)9999 %d ; ; ;+;;;;).   ;
 
 
 
   " " " " " "r/   rW   c                      e Zd Zd	dZdS )
_RooflineRulectxr   argsr2   r7   rW   c                    d S rD   r.   )rG   r   r   kws       r0   __call__z_RooflineRule.__call__t   s    sr/   N)r   r   r   r2   r7   rW   )r*   r+   r,   r   r.   r/   r0   r   r   s   s(             r/   r   z#dict[core.Primitive, _RooflineRule]
_rooflinesFr(   r)   f_namestrjaxpr
core.Jaxprr&   r%   r(   r'   r)   r7   c                  t          j        t          j        | d                    }t                                          }i dfd}dfd	}dddfd}	fd}
t          ||j        t          |
|j                             t          ||j        t          |
|j                             t          j
        |          }|j        D ]}|j                            ||j        j        z             }t          j        |j        j        |j                  5  d|j        v r@|t%          t          j        | |j        j                  |j        d         |||          z  }n|j        t*          vrZd|j         d}t-          |          D ]0}|                    d          s|d| dt1          ||           z  }1t3          |          t*          |j                 }| |t5          |j        |j        t          |j                  t          |j                  |j        |||          gt          ||j                  R i |j        z  }t          ||j        t          |
|j                             t          j        ||           |t	           |	                      z  }d d d            n# 1 swxY w Y   |S )Nrooflinerv   core.Varnoder2   c                    |J || <   d S rD   r.   )rv   r   envs     r0   writez$_roofline_interpreter.<locals>.write   s    CFFFr/   	core.Atomr7   c                    t          |           t          j        u r1t                              t          j        | j                            S t          | t          j                  sJ |          S rD   )	r>   r   Literalr2   rA   abstractifyvalr;   Var)rv   r   s    r0   readz#_roofline_interpreter.<locals>.read   sX    Aww$,$$T%5ae%<%<===48$$$$$Vmr/   r6   c                x    t          |           t          j        u rt          j        | j                  S | j        S rD   )r>   r   r   r   r   r5   )rv   s    r0   r5   z#_roofline_interpreter.<locals>.aval   s/    Aww$,ae$$$Vmr/   rB   c                 t    t          t          d                                  D                                 S )Nc              3  b   K   | ]*}t          j        |j                  |j        j        z  V  +d S rD   )r?   rE   r3   r4   rJ   )rO   r3   s     r0   rP   zJ_roofline_interpreter.<locals>.calculate_peak_hbm_bytes.<locals>.<genexpr>   s8      	P	P%"'%+

!5
5	P	P	P	P	P	Pr/   )rB   rQ   values)r   s   r0   calculate_peak_hbm_bytesz7_roofline_interpreter.<locals>.calculate_peak_hbm_bytes   s7    		P	P3::<<	P	P	PPP  r/   c                J    t                                |                     S rD   )r2   rA   )xr5   s    r0   <lambda>z'_roofline_interpreter.<locals>.<lambda>   s    -"9"9$$q''"B"B r/   )r   r   r   zNo roofline rule for r:   _
z: )r   r    r"   r#   r$   r&   r(   r)   )r^   )rv   r   r   r2   )rv   r   r7   r2   )rv   r   r7   r6   rS   )r   new_name_stackr   	wrap_namerW   ra   map	constvarsinvarsr   	last_usedeqnssource_inforeplacer   user_context	tracebackparams_roofline_interpreterr    namer   dir
startswithgetattrNotImplementedErrorr   outvarsr   clean_up_dead_vars)r   r   r&   r(   r)   r   resultr   r   r   make_roofline_shaper   eqnr   msgattrruler5   r   s                    @@r0   r   r   |   s     .t~fj/Q/QRR*!!&')#                  
 CBBB		OU_--  
 eU\32ELAABBBnU##)Z (J (Jc/))co88 *  K 
	&	oK,B
 
 
 $J $J 
CJ		'
.!3
4
4
*W

))
 
 
 	
 =
**8888##hh 7 7d??3'' 76$66'#t"4"4666c#C((
(#-($$
"-msz**$,,'++	 	 	
 tSZ  
 
 
 J
 
 	
 
%c"5s{CCDDD
c3	222.F.F.H.HIIIIfI$J $J $J $J $J $J $J $J $J $J $J $J $J $J $JL 
-s   FJ88J<	?J<	fr   c                F     t          j                    fd            }|S )Nc                 t    t          j        g| R  \  }} |t          t          j        |                    S rD   )r   vjpr   jnpbfloat16)r   primalsf_vjpr   s      r0   wrappedz_f_with_vjp.<locals>.wrapped   s:    WQ&&&&NGU5#,00111r/   )r   wraps)r   r   s   ` r0   _f_with_vjpr      s5    :a==2 2 2 2 =2 
.r/   r(   r)   r   print_jaxprin_specsshard_map.Specs	out_specsr   r   :Callable[..., tuple[ShapeDtypeStructTree, RooflineResult]]c          
          t          j                   t          j         fd                        }|S )Nc                 x   t          j         
          }rt          |          } t          |d          |  \  }}dfd}t          |          }t	          |          \  }}t          |||          }t          ||          }d	t          |j        j	                  z  }t          |j        |          \  }}		 d
 |j        D             d         j        d         }n!# t          $ r t          d| d          w xY wrt          |           |t!          t#          j        
          |          fS )NT)return_shaper3   api.ShapeDtypeStructout_specr   r7   c                b    t          j        | j        | j        t	          |                    S N)sharding)r   ShapeDtypeStructr3   r4   r
   )r3   r   r&   s     r0   make_sharded_shape_dtype_structzBroofline.<locals>.wrapped.<locals>.make_sharded_shape_dtype_struct   s4     !U[=x+H+H   r/   )Tc                <    g | ]}|j         t          j        k    |S r.   )r    r   shard_map_p)rO   es     r0   
<listcomp>z-roofline.<locals>.wrapped.<locals>.<listcomp>  s'    MMMQy7L(L(Lq(L(L(Lr/   r   zMissing shard_map jaxpr in r:   r   )r3   r   r   r   r7   r   )r   r   r   r   r   r   r   lenr   r   r   r   r   KeyError
ValueErrorprintr   r   fun_qual_name)r   	wrapped_fr   
out_shapesr   out_specs_flatflat_out_shapestreedefused_outputsr   r   r   r&   r   r(   r)   r   r   s             r0   r   zroofline.<locals>.wrapped   s    #AtXyAAI
 )i((i@
94@@@$GE:      &i<<N+J77OW% O  99JS!4555Ll33HE1?MM%*MMM
wee  ? ? ?=U===>>>?  Elll,

%%    s   ?"C" "D r   r   r   api_boundary)	r   r&   r   r   r(   r)   r   r   r   s	   ```````` r0   r   r      sp     :a==' ' ' ' ' ' ' ' ' ' '  ='R 
.r/   primr   c                     d fd}|S )Nr   r   c                    | t           <   | S rD   r   )r   r   s    r0   registerz#register_roofline.<locals>.register  s    JtKr/   )r   r   r.   )r   r   s   ` r0   register_roofliner     s(          
/r/   c                "    dd}|t           | <   d S )Nr   r   c                4    t                                           S rD   )rW   ra   )r   r   kwargss      r0   standard_rulez1register_standard_roofline.<locals>.standard_rule   s    !!!r/   )r   r   r   )r   r   s     r0   register_standard_roofliner     s(    " " " " #*Tr/   r(   r)   r   JCallable[..., tuple[ShapeDtypeStructTree, RooflineResult, RooflineResult]]c          	          t          j                   t          j         fd                        }|S )Nc                      t          	          |  \  }}|| t          d	          t          d |            d         fS )Nr   Tr   c                    t          j        | j        | j        t          j        k    rt          j        nt          j        | j                  S r   )r   r   r3   r4   r   int32r   r   )r   s    r0   r   z4roofline_and_grad.<locals>.wrapped.<locals>.<lambda>K  s;    C(GCI--CII3<Z   r/      )r   r   )
r   primal_shapes
fwd_resultr   r   r&   r   r(   r)   r   s
      r0   r   z"roofline_and_grad.<locals>.wrapped0  s    !
%%! ! ! !M: 	h	''	 	 	 
 
 

 

$ 	
% r/   r   )r   r&   r   r   r(   r)   r   r   s   ``````` r0   roofline_and_gradr   &  sj     :a==! ! ! ! ! ! ! ! ! !  =!F 
.r/   )r   r   r   r   r&   r%   r(   r'   r)   r'   r7   rW   )r   r   )r   r   r&   r%   r   r   r   r   r(   r'   r)   r'   r   r'   r   r'   r7   r   )r   r   )r   r   r&   r%   r   r   r   r   r(   r'   r)   r'   r   r'   r7   r   )3
__future__r   dataclassesr   r   typingr   r   r   r	   numpyr?   	jax.numpyr   jax.shardingr
   jax._srcr   r   r   r   r   jax._src.apir   "jax._src.interpreters.partial_evalr   jax._src.meshr   r   jax._src.tree_utilr   r   r   r   jax.experimentalr   ShapeDtypeStructTreesafe_mapr   r   r2   rW   r   r   r-   r   r   r   r   r   r   r.   r/   r0   <module>r     s>   # " " " " " " ( ( ( ( ( ( ( ( 4 4 4 4 4 4 4 4 4 4 4 4           & & & & & &             % % % % % % # # # # # #       # # # # # # 8 8 8 8 8 8 , , , , , , , , W W W W W W W W W W W W & & & & & &   m $dD111       21 $dD111< < < < < < < 21<2 $dD111!" !" !" !" !" !" !" 21!"H    H    35
 4 4 4 4  V V V V V Vr     6 6 6 6 6 6r   # # # #  / / / / / / / /r/   