
    ukij                       U d dl mZ d dlZ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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  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;Z<d Z=d!Z>d"Z? ej                  eA       e(j                  ZCeCj                  ZEe(j                  ZFe(j                  ZGe(j                  ZHej                  eJcZJZKej                  eMcZMZN ej                  eP      ZQd#ZRd$ ZS ej                         dPd%       ZUd& ZVeZW G d' d(e	j                        ZY eY       ZZd(e[d)<   ej                  d*        Z] G d+ d,      Z^e^Z_dQd-Z`dRd.Za eb       Zcd/e[d0<   ej                  dSd1       Zeej                  	 	 	 	 dTd2       ZfdUd3ZgdVd4ZhdWd5ZidXd6ZjdYd7Zkd8 Zl	 	 	 	 	 	 	 	 dZd9Zm ej                  d:d#;      d<        Zn ej                  d=>       G d? d@             Zp	 	 	 	 	 	 	 	 d[dAZq	 	 	 	 	 	 d\dBZr	 	 	 	 	 	 	 	 d]dCZs	 	 	 	 	 	 d^dDZt ej                  dE      Zvd=ev_w        evj                  et       dF Zyeyej                  ev<   dG Z{dH Z|evj                  e|       dI Z~ eej                  ev      ej                   ev<   e~ej                  ev<   dJ Zeej                  ev<   dK Z ej
                  evedLM        ej
                  evedNM       dO Z ej
                  eve       y)_    )annotationsN)Sequence)partial)Any)api)array)	basearray)config)core)dtypes)literals)pjit)traceback_util)util)
xla_bridge)array_types)ad)batching)mlir)partial_eval)pxla)InternalFloatingPointError)LayoutFormat)
xla_client)AbstractMeshMesh)record_scalarrecord_event_duration_secsrecord_event_time_span)PartitionSpec)Sharding)NamedShardingSingleDeviceShardingGSPMDShardingis_single_device_sharding)
SourceInfoz&/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                  j                  d      }	  || }t        j                  j	                  |       |S # t        j                  j	                  |       w xY w)zEImpl rule that compiles and runs a single primitive 'prim' using XLA.F)xla_primitive_callabler
   disable_jit
swap_local	set_local)primargsparamsfunprevoutss         L/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/dispatch.pyapply_primitiver4   T   sh    t.v.# 
			&	&u	-$':D
  &	+   &s   A !A4c                     t        j                  d        fd} j                  |_         j                  |_        d|_        t        j                  |      S )N!xla_primitive_callable_cache_missc                 ~    t        j                  d      5   j                  | i cd d d        S # 1 sw Y   y xY w)NF)r
   eager_constant_foldingbind)r.   r/   r-   s    r3   prim_funz(xla_primitive_callable.<locals>.prim_funh   s9    		&	&u	- (TYY''( ( (s   3<T)r   
test_eventname__name____qualname___apply_primitiver   jit)r-   r/   r:   s   `` r3   r)   r)   e   sF    //56( ii())("(		    c                B    | j                  t        t        |              y N)def_implr   r4   )r-   s    r3   simple_implrE   q   s    --./rA   c                  \    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
y)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 | _        y rC   rH   rI   selfs    r3   __init__zRuntimeTokenSet.__init__       D!#DrA   c           	        | j                   j                  |t        j                  dt        j                              }t        |t        j                        r3t        j                  |t        t        |d      t        d                  S t        j                  |      }t        j                  t        j                   |gd gt"        j$                  j&                  g|g      d         }|| j                   |<   |S )Nr   x)rH   getnpzerosbool_
isinstancer   Tokenr   
device_putr#   r   r!   r%   get_replicatedr   
shard_argsxcArrayCopySemanticsREUSE_INPUT)rM   effdevicestokssharded_toks         r3   get_token_inputzRuntimeTokenSet.get_token_input   s     


!
!#rxx288'<
=C#tzz"
 ^^
}T'3/s1CDF F
 	$$W-A**C$"//;;<se	

	K
  +DrA   c                "    || j                   |<   y rC   )rH   )rM   r^   tokens      r3   set_token_resultz RuntimeTokenSet.set_token_result   s    $DrA   c                "    || j                   |<   y rC   )rI   )rM   devicere   s      r3   set_output_runtime_tokenz(RuntimeTokenSet.set_output_runtime_token   s     */Dv&rA   c                     i | _         i | _        y rC   rK   rL   s    r3   clearzRuntimeTokenSet.clear   rO   rA   c                    | j                   j                         D ]  }|j                           | j                  j                         D ]  }|j                           | j	                          y rC   )rH   valuesblock_until_readyrI   rk   )rM   re   s     r3   rn   z!RuntimeTokenSet.block_until_ready   s_    $$++-   ++224   JJLrA   N)r^   core.Effectr_   zlist[Device]return
core.Token)r^   ro   re   rq   )rh   Devicere   RuntimeToken)r=   
__module__r>   __doc____annotations__rN   rc   rf   ri   rk   rn    rA   r3   rG   rG   v   sK    R 0/ 43$'30%/$rA   rG   runtime_tokensc                 ,    t         j                          y rC   )rx   rn   rw   rA   r3   wait_for_tokensrz      s    ""$rA   c                  *    e Zd Zg dZdddZd Zd Zy)LogElapsedTimeContextManager)fmtfun_nameevent
start_timeNc                .    || _         || _        || _        y rC   )r}   r~   r   )rM   r}   r~   r   s       r3   rN   z%LogElapsedTimeContextManager.__init__   s    DHDMDJrA   c                    t        j                          | _        | j                  -t        | j                  | j                  | j                         y y )Nr~   )timer   r   r   r~   rL   s    r3   	__enter__z&LogElapsedTimeContextManager.__enter__   s9    iikDOzz
**doo rA   c                $   t         ry t        j                         }|| j                  z
  }t        j                  j
                  rt        j                  nt        j                  }t        j                  |      r;t        j                  || j                  j                  | j                  |             | j                  Pt!        | j                  || j                         t#        | j                  | j                  || j                         y y )N)r~   elapsed_timer   )_on_exitr   r   r
   log_compilesvalueloggingWARNINGDEBUGloggerisEnabledForlogr}   formatr~   r   r   r    )rM   exc_type	exc_value	tracebackend_timer   log_prioritys          r3   __exit__z%LogElapsedTimeContextManager.__exit__   s    yy{Hdoo-L&,&9&9&?&?7??W]]L<(jjtxx==|  /  = >zz 
**lT]] 
**doox$--	 rA   rC   )r}   strr~   r   r   z
str | None)r=   rt   r>   	__slots__rN   r   r   rw   rA   r3   r|   r|      s    8)
rA   r|   c                    |dk(  r| dkD  S y)Ntpui  Frw   )num_argsplatforms     r3   should_tuple_argsr      s     d?rA   c                    | j                   D ]  }||j                  j                  v s y t        j                  |       D ]  }t        ||      s y y)zCWhether there is a primitive given by user anywhere inside a Jaxpr.TF)eqns	primitiver<   r   	subjaxprsjaxpr_has_primitive)jaxpr	prim_nameeqnsubjaxprs       r3   r   r      sV    ZZ cCMM&&& ..' h8Y/ 
rA   zset[core.Primitive]%prim_requires_devices_during_loweringc                    | j                   D ]  }|j                  t        v s y t        j                  |       D ]  }t        |      s y y)NTF)r   r   r   r   r    jaxpr_has_prim_requiring_devices)r   r   r   s      r3   r   r      sO    ZZ c
}}== ..' h'1 
rA   c                   ddl m} g }| j                  D ]0  }|j                  t        j
                  u rx|j                  d   }t        |t              rt        |j                  t              rZt        |j                  |j                  j                        |j                  |f       |j                  t        j                  u rzt        |j                  |j                  j                        |j!                  fd|j                  d   D               |j!                  fd|j                  d   D               .|j                  |j"                  u r|j                  d   t        t              rgt        |j                  |j                  j                        |j!                  fd	g |j                  d
   |j                  d   D               |j                  t$        u st        |j                  |j                  j                        |j!                  fd|j                  d   D               3 t'        j(                  |       D ]  }|j!                  t+        |              |S )Nr   )	shard_mapshardingc              3  &   K   | ]  }|f 
 y wrC   rw   ).0isource_infos     r3   	<genexpr>z-get_intermediate_shardings.<locals>.<genexpr>  s     Fa![!F   in_shardingsc              3  &   K   | ]  }|f 
 y wrC   rw   )r   or   s     r3   r   z-get_intermediate_shardings.<locals>.<genexpr>  s     Ga![!Gr   out_shardingsmeshc              3  :   K   | ]  }t        |      f  y wrC   )r#   )r   specr   r   s     r3   r   z-get_intermediate_shardings.<locals>.<genexpr>  s'      R  d+[9 Rs   in_specs	out_specsc              3  ^   K   | ]$  }t        |t              r|j                  |f & y wrC   )rV   r"   memory_kind)r   ra   r   s     r3   r   z-get_intermediate_shardings.<locals>.<genexpr>  s2      Kaq(+0I [! Ks   *-r_   )jax._srcr   r   r   r   sharding_constraint_pr/   rV   r#   r   r   r'   r   r<   appendjit_pextendshard_map_pdevice_put_pr   r   get_intermediate_shardings)r   r   outr   ra   r   r   r   s         @@r3   r   r      s    !
#ZZ Kc
}}222
**Z
 a	A}	%*QVV\*Js0B0BCk	jj![!"	$**	$s0B0BCk	jjF3::n+EFF	jjG3::o+FGG	)//	/ZZd	D,	's0B0BCk	jj RPszz*5P

;8OPR R	,	&s0B0BCk	jj K3::i+@ K K)K, ..' 5hJJ)(345	*rA   c                    t        | t        j                        s1t        j                  |       st	        d|  dt        |        d      y y )N
Argument '
' of type z is not a valid JAX type.)rV   r   Tracervalid_jaxtype	TypeErrortype)args    r3   	check_argr      sM    
S$++
&$*<*<S*A
jZS	{ ;    ! ! +B
&rA   c                 n    t         j                  j                  xs t         j                  j                  S rC   )r
   
debug_infsr   
debug_nansrw   rA   r3   needs_check_specialr   &  s%    				 	 	;F$5$5$;$;;rA   c                V    t               r|D ]  }t        | |j                  |        y y rC   )r   _check_specialdtype)r<   bufsbufs      r3   check_specialr   )  s,     +T399c*+ rA   c                    t               rVt        j                  |j                  t        j
                        r(|j                  D ]  }t        | |j                  |        |S rC   )r   r   
issubdtyper   rS   inexact_arraysr   )r<   arrr   s      r3   check_special_arrayr   /  sH    BJJ/ -#tSYY,-	*rA   c                   t        j                  |t        j                        rt        j
                  j                  rGt        j                  t        j                  t        j                  |                  rt        | d      t        j                  j                  rHt        j                  t        j                  t        j                  |                  rt        | d      y y y )Nnaninf)r   r   rS   r   r
   r   r   anyisnanasarrayr   r   isinf)r<   r   r   s      r3   r   r   7  s    ubjj)266"((2::c?*C#D&tU33266"((2::c?*C#D&tU33 $E *rA   c                    | S rC   rw   )rQ   s    r3   _identity_fnr   >  s    	
(rA   c           	     X   | j                          | j                  }t        |t              sJ |t        j
                  k(  rdnd }|j                  |j                  k(  r" t        j                  t        ||      |       S |j                  rd }n@ t        j                  |j                  j                  t        g      |j                        }t        |j                   j"                  j%                  |j                   j&                        |j                   j(                        }t        ||j*                  |j,                  |d nt/        |j1                                     }t3        j4                  | |t        j6                        } t        j                  t        ||      |      S )Nr   r   donate_argnums)otypes)r   _logical_device_ids)_check_if_deletedr   rV   r#   r\   DONATE_INPUT_device_assignmentr   r@   r   is_fully_replicatedrS   	vectorizeindexintr   r   r_   reshape
axis_sizes
axis_namesr   r   tupletolistr[   reorder_shardsr]   )	rQ   target_shardingcopyinp_shardingr   permute_ordernew_meshnew_snew_xs	            r3   _different_device_order_reshardr  B  sr    ,	L-	00	0 2 ? ??1T.$$(J(JJ2377<"02235 5 %%M0BLL!C!C!I!I*-00<0O0OQM""**<+<+<+G+GH""$( !!/J/J#0#84!-"6"6"89<% 

Au&8&D&D
E%
/_-
//4
6 6rA   i   )max_sizetrace_context_in_keyc                   |j                   j                  |j                   j                  k7  ry|j                  |       |j                  |       k7  ry|j                   j                  |j                   j                  k7  }t	        j
                         }|rMt        |dd      s@t        j                  j                  s&t        d|j                   d|j                   d      |S )z<Returns True if src->dst is a supported cross-host transfer.Fsupports_cross_host_transferszThe backend (z, z) does not support cross-host device transfers via ICI/NCCL. Please set jax_cross_host_transfer_socket_address and (optionally) jax_cross_host_transport_addresses flags to enable DCN-based cross host device transfers.)_internal_device_listdevice_kind_to_xla_hlo_shardingprocess_indicesr   get_backendgetattr"CROSS_HOST_TRANSFER_SOCKET_ADDRESSr   
ValueErrorr   platform_version)ndimsrc_shardingdst_shardingdifferent_process_indsbackends        r3   !_is_supported_cross_host_transferr  _  s     ((44((445''-''-.
 ((88((889  ""$' 
':E
B

7
7
=
=

(()G,D,D+E F! 	!" " 
 rA   T)frozenc                  J    e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   d Zy)_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   rQ   r"   ra   zcore.AbstractValueavalbool	committedr\   copy_semanticsc                x     t        j                  | j                  | j                  | j                        |      S rC   )r   global_aval_to_result_handlerr  ra   r  )rM   shard_arg_results     r3   result_handlerz _DeferredShardArg.result_handler  s4    +4--		4664>>++;= =rA   N)r=   rt   r>   ru   rv   r!  rw   rA   r3   r  r  |  s)     	&+/$$=rA   r  c                |   ddl m} t        | t        j                        rd}| j
                  | j                  }}nd}d\  }}t        |t              r|}|j
                  }	t        | dd       |k(  r"t        | dd      r|t        j                  k(  r| S |	sA|r?|s=|j                  |j                  k(  r$t        |t              sJ |       t        | ||      S |	ri|rg|re|j                  dkD  rV|j                  |j                  k7  r=|j                  |j                  k(  r$t        |t              sJ |       t        | ||      S |rc| j                   rWt#        j$                         dkD  r@t'        | j(                  ||      r)t+        j,                  | g|j                  g|g|g      d   S |	s|r|s|j                  |j                  k7  r|j.                  D 
cg c]  }
|
j0                   }}
|j.                  d   j2                  j5                         }|j.                  D 
cg c]  }
|
j0                   }}
|j.                  d   j2                  j5                         }t7        d	| d
| d| d
| d	      |r| j                   r,t9        |       t:        v st9        |       t<        j>                  v rnt#        j$                         tA        |j                  jB                        k(  r+|jE                  | t9        |        dt9        |        d       tG        | ||d|      S t7        d| d      tG        | ||d|      S |r|st7        d| jI                                |.|t        j                  k(  r| S tG        | ||| jJ                  |      S tM        |      rn||j.                  d   n|}|t        jN                  k(  r%t+        jP                  |tS        |      | g|gdd      S tU        jP                  |tS        |      | g|g      S tS        |tU        jV                         n|      }tG        | |||d u|      S c c}
w c c}
w )Nr   )multihost_utilsTF)NNr   
_committed   zFor a cross-host reshard in multi-controller JAX, 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: z.

There is experimental support for cross-host transfers with different device sets, when input/output shardings have the same indices and layouts, in the TFRT TPU runtime only.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_messagezjdevice_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 ),jax.experimentalr#  rV   r   	ArrayImplis_fully_addressabler   r"   r  r\   r]   
device_setr#   r  num_devicesr  r$  r   process_countr  r  r[   +batched_copy_array_to_devices_with_shardingr   idr   upperr  r   r   r   python_scalar_typeslenr  assert_equalr  r_   r  r&   ALWAYS_COPYbatched_device_putr$   r   get_default_device)rQ   r  rh   r   r#  x_is_jax_arrayx_is_fully_addressable
x_shardingra   s_is_fully_addressabledinp_idsinp_plat
target_idstarget_platshs                   r3   _device_put_sharding_implr@    s>    /5??#N)*)?)?JN)3&J!A33:t$)gau.M&222h"5	
---=),1,),Q488>1==1#4	:#C#CC	
---=),1,),Q4881<<J,D,D,F,J-affj!D;;#''(1#&  " !7llj333!+!>!>?A144??003<<BBD$%$8$89qadd9
9**1-66<<> 	xj 9  *|= FAAB 	B !,,
q'[
 DGv/I/I$I ##%Q-D-D-T-T)UU

&
&!WI 1gY/1 ' 3
 !AtT488667S 9<<= = Q4t44 !$$%IIK=23 3 ~	#//	/ Jakk4HH	":	.39>z,,Q/vf	#//	/$$T+?+G!&,XtT; 	;$$T+?+G!&,X/ / %~ !33539;"	1b$d(:D	AAu @9s   P4P9c          	        |"	 t        j                  |       }t        ||      }t        |t         j                        rt        t        | |f|f|f      d   S t        |t              r1|}|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|j%                                t'        | dd       |k(  r"t'        | d	d
      r|t(        j*                  k(  r| S ||t        | ||j                  |      S  t-        j.                  t0        ||t(        j2                  k(  rdnd       |       S t        | |||      S # t        $ r!}t        d|  dt	        |        d      |d }~ww xY w)Nr   r   z is not a valid JAX typer_   srcsr  r   r   zIsharding and layout in `Layout` instance should be concrete. Got layout: z for input r$  Fr   )r   abstractifyupdate_dp_avalr   r   rV   MemorySpacer4   r   r   layouthasattrr   r   r@  r"   r   r  	str_shortr  r\   r]   r   r@   r   r   )	rQ   rh   srcr   r  errldllx_dlls	            r3   _device_put_implrO    s    
\Pa dD&)d
 (()<VISF+/'3346 6 A
((C&q(3AHHOOE
{qzz)&q$

DAAqzz8,sVT$Z01$$%3k$..2B1CEF F 	8T"a'GA|U,K"...h}&q$

DAA377!%7%D%DD$ 		 	 
#1dFD	99=  PqcDG9,D
EGLOPPs   !F) )	G2GGc           	     `   g }g g g g f\  }}}}	t        t        || |||            D ]  \  }
\  }}}}}t        |||||      }t        |t              rb|j                  |
       |j                  |j                         |j                  |j                         |	j                  |j                         |j                  |        |ret        j                  |d gt        |      z  |	|      }t        ||      D ]1  \  }
}t        ||
   t              sJ ||
   j                  |      ||
<   3 |S )N)rh   rJ  r   r  )	enumerateziprO  rV   r  r   rQ   ra   r  r   rZ   r1  r!  )r_   rC  r  	dst_avalsxsysdsa_indicesdsa_xsdsa_shardingsdsa_copy_semanticsr   rQ   rh   rJ  cpr  yshard_arg_resultsr   s                      r3   _batched_device_put_implr]  $  s=    
";=r2r>8+v}&8'0	"gt^Y7(9 #a	#!VS"d6s$GA!&'mmACC133 0 01IIaL 
 vF7K(:FD";0AB 510111e""#34be5 
)rA   c           
     8    t        || ||d gt        |       z  dS )N)r_   rC  r  rS  )r]  r1  )r_   rC  r  rT  s       r3   batched_device_put_implr_  B  s(    
 
"	7nW%
' 'rA   rX   c                    t        d |d   D              r)t        d | D              rt        d |d   D              r| S y )Nc              3  $   K   | ]  }|d u  
 y wrC   rw   r   rQ   s     r3   r   z+_device_put_folding_rule.<locals>.<genexpr>T  s     	/!t)	/s   r_   c              3  P   K   | ]  }t        |t        j                           y wrC   )rV   r   TypedNdArrayrb  s     r3   r   z+_device_put_folding_rule.<locals>.<genexpr>U  s     CqjH112Cs   $&c              3  B   K   | ]  }|t         j                  k(    y wrC   )r\   r]   rb  s     r3   r   z+_device_put_folding_rule.<locals>.<genexpr>V  s     Taa%111Ts   r  )all)constsr/   	out_avalss      r3   _device_put_folding_ruleri  Q  sA     
	/VI.	//
CFC
C
T6BR;ST
TM	rA   c                
   t        | t        j                        s| S t        |t              rt        |t              rK| j                  | j                  j                  |j                  j                  |j                              n| j                  d       } |j                  /| j                  t        j                  |j                              } | S t        |t        j                        r| j                  |      S | S )N)r   r   )r   )memory_space)rV   r   ShapedArrayr"   r#   updater   r   abstract_meshr   r   mem_kind_to_spacerF  )r  r:  s     r3   rE  rE  ]  s    	D$**	+K8 !]+ KK!5!5166;O;O;<66 "6 "CK D15d1K 	 	}} [[d&<&<Q]]&K[LdK!T%%&;;A;&&	+rA   c                `    t        ||       D cg c]  \  }}t        ||       c}}S c c}}w rC   )rR  rE  )r_   rC  r  rT  rQ   r:  s         r3   _device_put_abstract_evalrq  k  s(    +.r7+;	<41a.A
	<<	<s   *c                  d gt        |       z  }g }t        t        | |||            D ]<  \  }\  }}	}
}t        |      t        j
                  us'|j                  |||	|
|f       > |rt        t        |       \  }}}}}g }|D ]  }|t        j                  k(  rt        d      |t        j                  k(  r |j                  t        j                         T|t        j                  k(  sJ |j                  t        j                          t        j                  |||t        |      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.rB  )r1  rQ  rR  r   r   Zeror   listr\   r   r  r]   r3  r   r9   r   )ctsr_   rC  r  _resultsdp_argsr   ctrh   rJ  rZ  indicesr.   new_copy_semanticsrU  r[  s                    r3   _device_put_transposer|  o  s^   FSX''"+CWdN,S"T /a	"fc2BxrwwnnaVS"-./ 37W3F0GT7D. 	B	!..	.FG 	G #///!!"4"@"@A'33333!!"4"@"@A	B 
		D$W*/0B*C
EBGR  1gaj	.rA   c                    |D cg c]  }|t         j                  us| c}rt        fddd  D              sJ |       t        j                  | i ||fS c c}w )Nc              3  .   K   | ]  }d    |k(    yw)r   Nrw   )r   bdmapped_batch_dimss     r3   r   z&_device_put_batcher.<locals>.<genexpr>  s!      &%'b &s   r%  )r   
not_mappedrf  r   r9   )batched_args
batch_dimsr/   r  r  s       @r3   _device_put_batcherr    st    $.Pb"H<O<O2OrP# &+<QR+@& #  
 
		L	3F	3Z	??	 Qs
   AAc          	           j                   j                  r|S  fd}t        t        ||| j                   j
                              S )Nc                R   t        |t              r|j                  t        |t        j                        rt        |t              rt
        j                  j                  r2t        j                  | ||j                  |j                              } n?t        j                  | ||j                  |j                        j                               } t        |t        j                        rt        j                  |      n|j                  }t        j                  | ||      } | S | S rC   )rV   r"   r   r   rF  r
   use_shardy_partitionerr   r   wrap_with_sharding_op_to_sdy_shardingr  r
  to_protomem_space_to_kindwrap_with_memory_kind)rQ   rh   r  out_avalmem_kindctxs        r3   lowerz+_tpu_gpu_device_put_lowering.<locals>.lower  s    	FH	%&*<*<*H64++,	FH	%((..((1h%%dii02! ((1h))$))4==?A!  (8(89 ((0?E?Q?Q 

$
$Q(
;ahHrA   )module_contextall_default_mem_kindrt  mapavals_in	avals_out)r  r_   rC  r  rT  r  s   `     r3   _tpu_gpu_device_put_loweringr    s@     	,,I" 
c%WcllCMMB	CCrA   r   )r   gpuc                   |S rC   rw   )r  r_   rC  r  rT  s        r3   _common_device_put_loweringr    s    	)rA   )r-   zcore.Primitive)r   r   r   r   rp   r  )r   
core.Jaxprr   r   rp   r  )r   r  rp   r  )r   r  rp   z%Sequence[tuple[Sharding, SourceInfo]])r   r   )rp   r  )r<   r   r   zSequence[basearray.Array]rp   None)r<   r   r   array.ArrayImplrp   r  )r<   r   r   znp.dtyper   zbasearray.Arrayrp   r  )rQ   r  r   r#   r   r\   rp   r  )rQ   r   r  zcore.ShapedArrayrh   zDevice | Sharding | Noner   r\   )rh   !Device | Sharding | Format | NonerJ  r  r   r\   )r_   +Sequence[Device | Sharding | Format | None]rC  r  r  Sequence[ArrayCopySemantics]rS  z!Sequence[core.ShapedArray | None])r_   r  rC  r  r  r  )
__future__r   atexitcollections.abcr   dataclasses	functoolsr   r   	threadingr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   jax._src.abstract_arraysr   jax._src.interpretersr   r   r   r   r   jax._src.api_utilr   jax._src.layoutr   r   jax._src.libr   r[   jax._src.meshr   r   jax._src.monitoringr   r   r    jax._src.partition_specr!   jax._src.shardingr"   jax._src.sharding_implsr#   r$   r%   r&   jax._src.stagesr'   numpyrS   JAXPR_TRACE_EVENTJAXPR_TO_MLIR_MODULE_EVENTBACKEND_COMPILE_EVENTregister_exclusion__file___xlaxeClientBackendrr   r\   CompileOptionssafe_mapr  
unsafe_mapsafe_ziprR  
unsafe_zip	getLoggerr=   r   r   r4   cacher)   rE   rs   localrG   rx   rv   registerrz   r|   log_elapsed_timer   r   setr   weakref_lru_cacher   r   r   r   r   r   r   r   r  r  	dataclassr  r@  rO  r]  r_  	Primitiver   multiple_resultsrD   ri  const_fold_rulesrE  rq  def_abstract_evalr|  
linear_jvpprimitive_jvpsprimitive_transposesr  primitive_batchersr  register_loweringr  rw   rA   r3   <module>r     s    #  $               #   0 $ * & . & 8 * ) , a a 1 &  '  = N D  ! ! !( +WW
))	** ""--Z--Z			8	$ 
"  0 9ioo 9v #2"3 3% % B 0  >AU %': B  ? @!<+466)66>P66: T6  7 8 d#= = $=&iB
iB
iB %iB 	iBX%:3%:	*%:2D%:P8 6 1	
 1<'8' 6' 1	' t~~l+ $    - . /G  l +=   8 90 #*"--"F  , (=   %@ -@  L )D0   ,u>   ,u>   |%@ ArA   