
    WhY                       U d dl mZ d dl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
Z
d dlZd dlmZmZ d dl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 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$ d dlm%Z% d dlm&Z& d dl'm(Z(m)Z) d dl*m+Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z: dZ;dZ<dZ= ej>        e?           e,j@        ZAeAjB        ZCe,jD        ZDe,jE        ZEejF        eGcZGZHejI        eJcZJZK ejL        eM          ZNd ZOd! ZP ejQ                    dxd$            ZRd% ZSeZT G d& d'ejU                  ZV eV            ZWd'eXd(<   ejY        d)             ZZej[        dydzd/            Z\d{d5Z]d|d9Z^ e_            Z`d:eXd;<   eja        d}d<            Zb G d= d>e          Zceja        d~d@            Zdd}dAZeddDZfddGZgddHZhddKZiddNZjddOZkddTZlddYZm G dZ d[ejn                  Zod\ Zpdd^Zq ejr        d_`           G da db                      Zsdc ZtddgZuddmZv ejw        dn          Zxd_ex_y        exz                    ev           do Z{ex|                    e{           dp Z} e	ej~        ex          ej        ex<   e}ej        ex<   dq Zee j        ex<   dr Z e#j        exedst            e#j        exedut           dv Z e#j        exe           dw Zee%j        ex<   dS )    )annotationsN)Sequence)partial)Any
NamedTuple)	basearray)config)core)api)array)dtypes)source_info_util)traceback_util)util)ad)batching)array_types)mlir)xla)pxla)lib)AbstractMeshMesh)
xla_client)record_event_duration_secs)PartitionSpec)Sharding)SingleDeviceShardingNamedShardingTransferToMemoryKindis_single_device_sharding)LayoutDeviceLocalLayoutz&/jax/core/compile/jaxpr_trace_durationz//jax/core/compile/jaxpr_to_mlir_module_durationz*/jax/core/compile/backend_compile_durationFc                    t          | fi |}t          j                            d          }	  || }t          j                            |           n$# t          j                            |           w xY w|S )zEImpl rule that compiles and runs a single primitive 'prim' using XLA.F)xla_primitive_callabler   jax_jit#swap_thread_local_state_disable_jit)primargsparamsfunprevoutss         W/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/jax/_src/dispatch.pyapply_primitiver/   S   sx    t..v..# 
	8	8	?	?$:3:DK33D9999CK33D9999	+s   A !A4r(   core.Primitivec                     t          j        d            fd} j        |_         j        |_        t          j        |          S )N!xla_primitive_callable_cache_missc                 z    t          j        d          5   j        | i cd d d            S # 1 swxY w Y   d S NF)r	   eager_constant_foldingbind)r)   r*   r(   s    r.   prim_funz(xla_primitive_callable.<locals>.prim_funb   s    		&u	-	- ( (TY'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   044)r   
test_eventname__name____qualname__r   jit)r(   r*   r7   s   `` r.   r%   r%   _   sY    /5666( ( ( ( ( ( i()(			    c                V    |                      t          t          |                      d S N)def_implr   r/   )r(   s    r.   simple_implrA   j   s$    --../////r=   c                  R    e Zd ZU dZded<   ded<   d ZddZddZddZd Z	d Z
dS )RuntimeTokenSetzJSee docstring for effects.py module for the calling convention for tokens.zdict[core.Effect, core.Token]current_tokenszdict[Device, RuntimeToken]output_runtime_tokensc                "    i | _         i | _        d S r?   rD   rE   selfs    r.   __init__zRuntimeTokenSet.__init__z       D!#Dr=   effcore.Effectdeviceslist[Device]return
core.Tokenc                   | j                             |t          j        dt          j                            }t          |t          j                  r2t          j	        |t          j
                            |                    S t          j
        j                            |          }t          j        t          j        |gd gd g|g          d                   }|| j         |<   |S )Nr   )rD   getnpzerosbool_
isinstancer
   Tokenjax
device_putshardingPositionalShardingGSPMDShardingget_replicatedr   
shard_args)rI   rL   rN   tokssharded_toks         r.   get_token_inputzRuntimeTokenSet.get_token_input~   s     

!
!#rx28'<'<
=
=C#tz"" K
 ^C!@!@!I!IJJJ 	"11'::A*T_aS4&4&3%HHKLLK*Dr=   tokenc                    || j         |<   d S r?   )rD   )rI   rL   rd   s      r.   set_token_resultz RuntimeTokenSet.set_token_result   s    $Dr=   deviceDeviceRuntimeTokenc                    || j         |<   d S r?   )rE   )rI   rg   rd   s      r.   set_output_runtime_tokenz(RuntimeTokenSet.set_output_runtime_token   s     */Dv&&&r=   c                "    i | _         i | _        d S r?   rG   rH   s    r.   clearzRuntimeTokenSet.clear   rK   r=   c                    | j                                         D ]}|                                 | j                                        D ]}|                                 |                                  d S r?   )rD   valuesblock_until_readyrE   rm   )rI   rd   s     r.   rp   z!RuntimeTokenSet.block_until_ready   sy    $++--    +2244    JJLLLLLr=   N)rL   rM   rN   rO   rP   rQ   )rL   rM   rd   rQ   )rg   rh   rd   ri   )r:   
__module__r;   __doc____annotations__rJ   rc   rf   rk   rm   rp    r=   r.   rC   rC   o   s         RR 0/// 4333$ $ $   &% % % %/ / / /$ $ $    r=   rC   runtime_tokensc                 8    t                                            d S r?   )ru   rp   rt   r=   r.   wait_for_tokensrw      s    ""$$$$$r=   fmtstrfun_nameevent
str | Nonec              #    K   t           rd V  d S t          j        j        rt          j        nt          j        }t          j                    }d V  t          j                    |z
  }t          	                    |          r0t          
                    ||                     ||                     |t          ||           d S d S )N)rz   elapsed_time)_on_exitr	   log_compilesvalueloggingWARNINGDEBUGtimeloggerisEnabledForlogformatr   )rx   rz   r{   log_priority
start_timer~   s         r.   log_elapsed_timer      s       6	EEEEE&,&9&?R7??W]LJ	EEE9;;+L<(( 9jjszz,  *  8  8 9 9 9 55555 r=   num_argsintplatformrP   boolc                    |dk    r| dk    S dS )Ntpui  Frt   )r   r   s     r.   should_tuple_argsr      s     d?5r=   jaxpr
core.Jaxpr	prim_namec                    | j         D ]}||j        j        v r dS t          j        |           D ]}t          ||          r dS dS )zCWhether there is a primitive given by user anywhere inside a Jaxpr.TF)eqns	primitiver9   r
   	subjaxprsjaxpr_has_primitive)r   r   eqnsubjaxprs       r.   r   r      sk    Z  cCM&&&TT '.''  h8Y// TT	r=   zset[core.Primitive]%prim_requires_devices_during_loweringc                    | j         D ]}|j        t          v r dS t          j        |           D ]}t          |          r dS dS )NTF)r   r   r   r
   r    jaxpr_has_prim_requiring_devices)r   r   r   s      r.   r   r      sg    Z  c
}===TT >.''  h'11 TT	r=   c                  $    e Zd ZU ded<   ded<   dS )
SourceInfozsource_info_util.SourceInfosource_infory   eqn_nameN)r:   rq   r;   rs   rt   r=   r.   r   r      s%         ****-----r=   r   %Sequence[tuple[Sharding, SourceInfo]]c                   ddl m} ddlm} g }| j        D ]j        |j        u rtj        d         }t          |t                    rt          |j
        t                    rNt          j        j        j                  |                    |f           j        |j        u ryt          j        j        j                  |                    fdj        d         D                        |                    fdj        d         D                        j        |j        u rt          j        d	         t                    r<t          j        j        j                  d
 |                    fdg j        d         j        d         D                        j        t&          u rKt          j        j        j                  |                    fdj        d         D                        t)          j        |           D ]$}|                    t-          |                     %|S )Nr   )pjit)	shard_mapr[   c              3      K   | ]}|fV  	d S r?   rt   ).0ir   s     r.   	<genexpr>z-get_intermediate_shardings.<locals>.<genexpr>   s(      FFa![!FFFFFFr=   in_shardingsc              3      K   | ]}|fV  	d S r?   rt   )r   or   s     r.   r   z-get_intermediate_shardings.<locals>.<genexpr>   s(      GGa![!GGGGGGr=   out_shardingsmeshc                t      rt                     dz   nd}t           fdt          |          D              S )N   r   c              3  B   K   | ]}                     |          V  d S r?   )rS   )r   r   namess     r.   r   zFget_intermediate_shardings.<locals>._names_to_pspec.<locals>.<genexpr>   s-      BBuyy||BBBBBBr=   )maxr   range)r   ndmins   ` r.   _names_to_pspecz3get_intermediate_shardings.<locals>._names_to_pspec   sA    "'.E

QQBBBBU5\\BBBCCr=   c              3  d   K   | ]*}t          j        d           |                    fV  +dS )r   N)r   r*   )r   r   r   r   r   s     r.   r   z-get_intermediate_shardings.<locals>.<genexpr>   s_       S S  
6 2OOE4J4JKK[Y S S S S S Sr=   in_names	out_namesc              3  X   K   | ]$}t          |t                    r|j        |fV  %d S r?   )rW   r   memory_kind)r   ra   r   s     r.   r   z-get_intermediate_shardings.<locals>.<genexpr>  sR       K Kaq(++K010I [!0I0I0I0IK Kr=   rN   )jax._srcr   jax.experimentalr   r   r   sharding_constraint_pr*   rW   r   r   r   r   r   r9   appendpjit_pextendshard_map_pdevice_put_pr
   r   get_intermediate_shardings)	r   r   r   outra   r   r   r   r   s	         @@@r.   r   r      s    ((((((
#Z K Kc
}222
*Z
 a	A}	%	% *QV\*J*J s0BCCk	jj![!""""	$+	%	%s0BCCk	jjFFFF3:n+EFFFFFF	jjGGGG3:o+FGGGGGGG	)/	/	/	CJv&	5	5 s0BCCkD D D 
jj S S S S S SQ
: 6QK9PQS S S S S S S	,	&	&s0BCCk	jj K K K K3:i+@ K K K K K K.'' 5 5hJJ)(334444	*r=   c           	         t          d | j        D                       p>t          d t          j        | gt	          j        |                     D                       S )Nc              3     K   | ]H}t          |j        t          j                  !t	          |j        j                  t          j        u V  Id S r?   )rW   avalr
   UnshapedArraytypedtypebint)r   vs     r.   r   z"jaxpr_has_bints.<locals>.<genexpr>	  s\       9 9!AFD$6779d16<  DI- 9 9 9 9 9 9r=   c              3     K   | ]U}|j         D ]K}|j        D ]A}t          |j        t          j                  !|j        j        D ]}t          |          V  BLVd S r?   )r   outvarsrW   r   r
   DShapedArrayshape_is_bint_axis_size)r   jer   ds        r.   r   z"jaxpr_has_bints.<locals>.<genexpr>  s       N NvN NqyN N"#AFD$566N ABN N <= !## N N N N N N N N Nr=   )anyinvars	itertoolschainr
   r   r   s    r.   jaxpr_has_bintsr     s    
 9 9u| 9 9 9 9 9 N
 N N wu0E0EFFN N N N NOr=   r   core.AxisSizec                H   t          | t          j                  r)| j        rJ t	          | j                  t          j        u S t          | t          j                  rDt          | j        t          j	                  o$t	          | j        j                  t          j        u S dS r4   )
rW   r
   DArrayr   r   r   r   Varr   r   )r   s    r.   r   r     s    4; -w;==DI%%!TX -qvt011 ,$)+-	r=   argr   c                    t          | t          j                  s7t          j        |           s%t	          d|  dt          |            d          d S d S )N
Argument '
' of type z is not a valid JAX type.)rW   r
   Tracervalid_jaxtype	TypeErrorr   )r   s    r.   	check_argr     sv    
S$+
&
& !$*<S*A*A !
      S		       ! ! !! ! ! !r=   c                T    t          t          t          | j                  d          S )zThe number of replicas needed for a jaxpr.

  For a eqn, multiply the `axis_size` with the `jaxpr_replicas` of the
  subjaxprs. For a list of eqns, take the maximum number of replicas.
  r   default)r   
unsafe_map_eqn_replicasr   r   s    r.   jaxpr_replicasr      s#     
Zuz22A	>	>	>>r=   r   core.JaxprEqnc                    | j                             d          }|r+| j                             dd          t          |          z  S | j        t          j        v rt          | j                   S dS )N
call_jaxpr	axis_sizer   )r*   rS   r   r   r   initial_style_primitives!_initial_style_primitive_replicas)r   r   s     r.   r   r   *  se    z~~l++* :>>+q))N:,F,FFF
}444,SZ8881r=   r*   dict[str, Any]c                x    t          t          j        t          |                                           d          S )Nr   r   )r   r
   traverse_jaxpr_paramsr   ro   )r*   s    r.   r   r   3  s7    	T'??FFHH
 
 
 r=   c                 F    t           j        j        pt           j        j        S r?   )r	   
debug_infsr   
debug_nansrt   r=   r.   needs_check_specialr   7  s    			 	;F$5$;;r=   r9   bufsSequence[basearray.Array]Nonec                \    t                      r|D ]}t          | |j        |           d S d S r?   )r   _check_specialr   )r9   r   bufs      r.   check_specialr  :  sJ     + + +T39c****+ ++ +r=   r   np.dtyper  basearray.Arrayc                   t          j        |t          j                  rt          j        j        rJt          j        t          j        t          j	        |                              rt          d|            t          j        j        rLt          j        t          j        t          j	        |                              rt          d|            d S d S d S )Nz#invalid value (nan) encountered in z#invalid value (inf) encountered in )r   
issubdtyperT   inexactr	   r   r   r   isnanasarrayFloatingPointErrorr   isinf)r9   r   r  s      r.   r  r  ?  s    ubj)) M M26"(2:c??*C*C#D#D MKTKKLLL M26"(2:c??*C*C#D#D MKTKKLLL	M MM M M Mr=   c                  h    e Zd Z ej                    Z ej                    Z ej                    ZdS )CopySemanticsN)r:   rq   r;   enumautoALIASCOPYDONATErt   r=   r.   r  r  F  s5        
$)++%	$49;;&&&r=   r  c                    | S r?   rt   )xs    r.   _identity_fnr  K  s    	
(r=   copyc           
     *   |                                   | j        }t          |t                    sJ |t          j        k    rdnd }|j        |j        k    r% t          j        t          ||          |           S |j
        |j
        k    rd |j        D             }|j        d         j                                        }d |j        D             }|j        d         j                                        }t          d| d| d| d|           |j        rd }	n4 t          j        |j        j        t$          g          |j                  }	t'          |j        j                            |j        j                  |j        j                  }
t          |
|j        |j        |	d n t7          |	                                          	          }t;          j        | j        || j                   } t          j        t          ||          |          S )
Nr   r   donate_argnumsc                    g | ]	}|j         
S rt   idr   r   s     r.   
<listcomp>z3_different_device_order_reshard.<locals>.<listcomp>Y  s    ===qt===r=   c                    g | ]	}|j         
S rt   r  r  s     r.   r   z3_different_device_order_reshard.<locals>.<listcomp>[  s    CCC1!$CCCr=   z[Input and target sharding should have the same set of devices. Got input's device set ids: z on platform z' and target sharding's device set ids: )otypes)r   _logical_device_ids)!_check_if_deletedr[   rW   r   r  r  _device_assignmentr   r<   r  
device_setr   upper
ValueErroris_fully_replicatedrT   	vectorizeindexr   r   r   rN   reshape
axis_sizes
axis_namesspecr   tupletolistr   $make_array_from_single_device_arraysr   _arrays)r  target_shardingr  inp_shardingr  inp_idsinp_plat
target_idstarget_platpermute_ordernew_meshnew_snew_xs                r.   _different_device_order_reshardr>  N  sn   ,	L-	0	000	0 44411$.$(JJJ237<"02 2 2235 5 5  :::==\<===G.q1:@@BBHCC BCCCJ!4Q7@FFHHK
 D=DD D!)D D (D D 7BD D E E E
 % QMM0BL!C!I*-0 0 00<0OQ QM"**<+<+GHH"$ $( !/J#0#844!-"6"6"8"899< < <% 
4QWeQY
O
O%
/_-
/ 
/ 
//4
6 
6 6r=   T)frozenc                  \    e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ed             ZdS )_DeferredShardArgzDeferred call to `pxla.shard_args`.

  Per-array impls return this object instead of a result array to indicate a
  deferred `shard_args` call. `_batched_device_put_impl` then batches all
  `_DeferredShardArg` objects into a single `shard_args` call.
  r   r  r   ra   zcore.AbstractValuer   r   	committedr  copy_semanticsc                L    t          j        | j        | j        | j                  S r?   )r   global_aval_to_result_handlerr   ra   rB  rH   s    r.   result_handlerz _DeferredShardArg.result_handler  s    -diPPPr=   N)r:   rq   r;   rr   rs   propertyrF  rt   r=   r.   rA  rA  s  ss           	&&&+++///Q Q 8Q Q Qr=   rA  c                   ddl m} t          |t                    r|}t	          | dd           |k    r#t	          | dd          r|t
          j        k    r| S |j        sIt          | t          j	                  r/| j        s(t          |t                    sJ t          | ||          S |j        r~t          | t          j	                  rd| j        r]|j        dk    rR|j        | j        j        k    r=|j        | j        j        k    r(t          |t                    sJ t          | ||          S |j        st          | t          j	                  r| j        rt!          |           t"          v rJ|                    | t!          |            dt!          |            d	           t'          | ||d
|          S t)          d| d          t'          | ||d
|          S t          | t          j	                  r| j        s$t)          d|                                            |/|t
          j        k    r| S t'          | | j        || j        |          S t/          | j                  r<|| j        j        d         n|}t3          j        |t7          |          | g|g          S t7          |t3          j                    n|          }t'          | |||d u|          S )Nr   )multihost_utilsr[   
_committedFr   zc passed to device_put is not the same on each process. Make sure you are passing the same value of z on each process.)fail_messageTzjdevice_put's second argument must be a Device or a Sharding which represents addressable devices, but got zF. Please pass device or Sharding which represents addressable devices.zZdevice_put's first argument must be a fully addressable array, but got value with devices )r   rI  rW   r   getattrr  r  is_fully_addressabler   	ArrayImplr>  num_devices_internal_device_listr[   r&  rJ  r   r   assert_equalrA  r(  rN   rB  r!   r%  r   batched_device_putr   get_default_device)r  r   rg   r  rI  ra   shs          r.   _device_put_sharding_implrU    s3   ......!!  5A:t$$))gau.M.M)M'''h" 91eo&&9/0/E98$$$$$,Q4888	 9:a#A#A 9	9#$=1#4#4	1:#CCC	
---8$$$$$,Q4888! =a)) 9!, 9
q''[
 
 $$77 / /GG/ / / 	% 	1 	1 	1
 !AtT4888<67< < <= = = Q4t444 5?## /! 32$%IIKK2 23 3 3 ~	$	$	$ AJak4HHH	"1:	.	. /39>qz,Q//vf$T+?+G+G!&,X/ / / %~ !355539; ;"	1b$d(:D	A	AAr=   rg   !Device | Sharding | Layout | Nonesrcc          	        t          |t                    st          |t                    rt          d          	 t          j        |           }n6# t
          $ r)}t          d|  dt          |            d          |d }~ww xY wt          |t                    r6|}|j        }t          | d          r| j
        j        nd }||j        t          | ||j        |          S t          |j        t                    r$t          |t          t          d           f          s't          d| d|                                           t!          | dd           |k    r#t!          | dd	          r|t"          j        k    r| S ||t          | ||j        |          S  t'          j        t*          ||t"          j        k    rd
nd           |           S t          | |||          S )NzTransferToMemoryKind argument to jax.device_put can only be used inside jax.jit. If you are using device_put outside jax.jit, then please provide a concrete Sharding with memory_kind.r   r   z is not a valid JAX typelayoutzVsharding and device_local_layout in `Layout` instance should be concrete. Got layout: z for input rJ  Fr   r  )rW   r    r(  r
   abstractifyr   r   r"   device_local_layouthasattrrY  r[   rU  r   r#   	str_shortrL  r  r  r   r<   r  r  )	r  rg   rW  r  r   errldllx_dlls	            r.   _device_put_implrb    sK    -.. A*++A
	@A A A
NADD	 N N N
CQCC$q''CCCE EJMNN  IA

C,3Ax,@,@JAH((dE
{qz)&q$
DAAAqz8,, Fs.T

;<<FE$%E E26..2B2BE EF F F 	8T""a''GA|U,K,K'###h}&q$
DAAAF37A!]%999tF F FFGI I I 
#1dFD	9	99s   A 
B$A>>BrN   +Sequence[Device | Sharding | Layout | None]srcsrC  Sequence[CopySemantics]c                   g }g g g }}}g }t          t          || ||                    D ]\  }	\  }
}}}t          |
|||          }t          |t                    rc|                    |	           |                    |j                   |                    |j                   |                    |j                   |                    |           |ryt          j
        |d gt          |          z  ||          }t          ||          D ]@\  }	}t          ||	         t                    sJ ||	                             |          ||	<   A|S )N)rg   rW  r  )	enumerateziprb  rW   rA  r   r  ra   rC  r   r_   lenrF  )rN   rd  rC  xsysshard_arg_indicesshard_arg_xsshard_arg_shardingsshard_arg_copy_semanticsr   r  rg   rW  cpyshard_arg_resultsshard_arg_results                    r.   _batched_device_put_implrt    sx   
 
"9;R#6\!*3r7D.+Q+Q!R!R  a	!VS"6s<<<A!&'' 8q!!!!#  %%%%%a&6777IIaLLLL 
5
 dVc,&7&77 ,0 0  ##46GHH 5 51011111e""#344bee	)r=   rZ   c                    |S r?   rt   )rN   rd  rC  rj  s       r.   _device_put_abstract_evalrv        	)r=   c                  d gt          |           z  }g }t          t          | |||                    D ]?\  }\  }}	}
}t          |          t          j        ur|                    |||	|
|f           @|rt          t          |           \  }}}}}g }|D ]}|t          j	        k    rt          d          |t          j        k    r |                    t          j                   Q|t          j        k    sJ |                    t          j                   t          j        ||||d}t          ||          D ]
\  }}|||<   |S )Nztdonate=True is not allowed during tranposition of device_put. Please file an issue if you want this to be supported.)rN   rd  rC  )ri  rg  rh  r   r   Zeror   listr  r  r(  r  r  r   r6   )ctsrN   rd  rC  _resultsdp_argsr   ctrg   rW  rp  indicesr)   new_copy_semanticsrk  rq  s                    r.   _device_put_transposer    s   FSXX''"+CWdN,S,S"T"T / /a	"fc2BxxrwnnaVS"-... 37W3F3F0GT7D. 	6 	6	}#	#	#FG G 	G $$$!!-"45555]'''''!!-"45555		D$W*<
> 
> 
>BGR    1gajj	.r=   c                    d |D             r-t          fddd          D                       s
J |            t          j        | i ||fS )Nc                .    g | ]}|t           j        u|S rt   )r   
not_mapped)r   bds     r.   r   z'_device_put_batcher.<locals>.<listcomp>,  s%    PPPb"H<O2O2Or2O2O2Or=   c              3  0   K   | ]}d          |k    V  dS )r   Nrt   )r   r  mapped_batch_dimss     r.   r   z&_device_put_batcher.<locals>.<genexpr>-  s?       & &%'b & & & & & &r=   r   )allr   r6   )batched_args
batch_dimsr*   r  s      @r.   _device_put_batcherr  +  s    PPJPPP # & & & &+<QRR+@& & & # #    
 
	L	3F	3	3Z	??r=   c          	     ~      j         j        r|S  fd}t          t          ||| j         j                            S )Nc                   t          |t          t          f          r|j        t          |t                    rt          j        j        r0t          j        | ||	                    |j
                            } nAt          j        | ||                    |j
                                                            } t          j        | |j        |          } | S | S r?   )rW   r   r    r   r	   use_shardy_partitionerr   r   wrap_with_sharding_op_to_sdy_shardingndim_to_xla_hlo_shardingto_protowrap_with_memory_kind)r  rg   r   out_avalctxs       r.   lowerz+_tpu_gpu_device_put_lowering.<locals>.lower8  s    6H&:;<< &	FH	%	% A(. 	A(1h%%di002 2!! (1h))$)44==??A A! 
$Q(:H
E
EahHr=   )module_contextall_default_mem_kindrz  mapavals_in	avals_out)r  rN   rd  rC  rj  r  s   `     r.   _tpu_gpu_device_put_loweringr  3  sU     	, I     
c%WclCMBB	C	CCr=   r   )r   gpuc                   |S r?   rt   )r  rN   rd  rC  rj  s        r.   _common_device_put_loweringr  O  rw  r=   c                    g }| D ]N}t          |t          t          f          r|                    |j                   9|                    d            O|S r?   )rW   r   r    r   r   )rN   rd  rC  xmmemory_kindsrg   s         r.   _propagate_mem_kind_dpr  S  se    ,    f&8%9:;;  &,----$	r=   )r(   r0   r?   )rx   ry   rz   ry   r{   r|   )r   r   r   ry   rP   r   )r   r   r   ry   rP   r   )r   r   rP   r   )r   r   rP   r   )r   r   rP   r   )r   r   )r   r   rP   r   )r   r   rP   r   )r*   r   rP   r   )rP   r   )r9   ry   r   r   rP   r   )r9   ry   r   r  r  r  rP   r   )r  r  )rg   rV  rW  rV  r  r  )rN   rc  rd  rc  rC  re  )
__future__r   atexitcollections.abcr   
contextlibdataclassesr  	functoolsr   r   r   typingr   r   r   	threadingnumpyrT   rY   r   r   r	   r
   r   r   r   r   r   r   jax._src.interpretersr   r   jax._src.abstract_arraysr   r   r   r   r   jax._src.meshr   r   jax._src.libr   xcjax._src.monitoringr   jax._src.partition_specr   jax._src.shardingr   jax._src.sharding_implsr   r   r    r!   jax._src.layoutr"   r#   JAXPR_TRACE_EVENTJAXPR_TO_MLIR_MODULE_EVENTBACKEND_COMPILE_EVENTregister_exclusion__file___xlaxeClientBackendrh   CompileOptionssafe_mapr  r   safe_ziprh  
unsafe_zip	getLoggerr:   r   r   r/   cacher%   rA   ri   localrC   ru   rs   registerrw   contextmanagerr   r   r   setr   weakref_lru_cacher   r   r   r   r   r   r   r   r   r   r  r  Enumr  r  r>  	dataclassrA  rU  rb  rt  	Primitiver   multiple_resultsr@   rv  def_abstract_evalr  
linear_jvpprimitive_jvpsprimitive_transposesr  primitive_batchersr  register_loweringr  r  memory_kind_propagate_rulert   r=   r.   <module>r     s    # " " " " " "  $ $ $ $ $ $                     " " " " " " " "          



                                     % % % % % % # # # # # #       $ $ $ $ $ $ * * * * * * 0 0 0 0 0 0 & & & & & & % % % % % % & & & & & &       , , , , , , , , ) ) ) ) ) ) : : : : : : 1 1 1 1 1 1 & & & & & &            6 5 5 5 5 5 5 5 = N D  ! !( + + +W
)	"-Z-Z		8	$	$ 
 
 
    0 0 0 4 4 4 4 4io 4 4 4l #2/"3"3 3 3 3 3% % % 6 6 6 6 6       >ASUU % B B B B          
        FO O O O   ! ! ! !? ? ? ?      < < < <+ + + +
M M M M    DI   
  "6 "6 "6 "6J d###Q Q Q Q Q Q Q $#Q&7B 7B 7Bt$: $: $: $:N   @ t~l++ $    . / / /     8 9 9 9  0 #*'"-"F"F , (=  %@ @ @ -@ L )D D D,  ,u> > > >  ,u> > > >    |%@ A A A   1G  - - -r=   