
    uki                     `   d dl 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mZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ  ej.                         Zd Z ej4                  d      Zde_        ej;                   ee
e             ej=                  d        d Z ej@                  ee       d Z!e!ejD                  e<   dejF                  dejF                  dejH                  dejH                  de%ejF                  ejF                  f   f
dZ&d Z' ejP                  ee'       y)    )partialN)config)core)ad)mlir)apply_primitive)tree_flattentree_unflatten)batching)safe_zip)
xla_client)dialectsirc                    t        |       \  }}t        |      \  }}||k7  rt        d| d|       t        ||      D ]n  \  }}t        j                  |      }t        j                  |      }	|j
                  |	j
                  k7  sJt        d|j
                   d|	j
                   d       t        ||      D cg c]  \  }}t        j                  ||       }
}}t        |
 \  }}t        ||      t        ||      fS c c}}w )zShards x and y alike.z#Trees should be equal. Got x_tree: z
, y_tree: zCThe leaves shapes of `x` and `y` should match. Got `x` leaf shape: z and `y` leaf shape: zQ. File an issue at https://github.com/jax-ml/jax/issues if you want this feature.)
r	   
ValueErrorr   r   shaped_abstractifyshapeshard_alike_pbindzipr
   )xyx_flatx_treey_flaty_treex_y_x_avaly_avalouts
x_out_flat
y_out_flats                O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/shard_alike.pyshard_aliker%      s$   ?.&&?.&&v
 $$*8:fX? @ @ ( Mfb"$$R(F$$R(F||v||#ll^0 ?LLM M	M 4<FF3K	LR-

R
$	L$	L:*j	
	+^FJ-O	OO 
Ms   ? Dr%   Tc                 
    | |fS N )r   r   s     r$   <lambda>r)   9   s
    aV     c                     | \  }}t        |      t        j                  u st        |      t        j                  u r||fS t        ||      S r'   )typer   Zeror%   )ctkwargsx_cty_cts       r$   shard_alike_transposer2   ;   sA    *$	$Z277d4jBGG3:tT""r*   c                    | \  }}|\  }}||k(  rt        ||      ||ffS |t        j                  u r5t        j                  ||j                  |   |d       }t        ||      ||ffS |t        j                  u r5t        j                  ||j                  |   |d       }t        ||      ||ffS t        j
                  |||      }t        ||      ||ffS r'   )r%   r   
not_mapped	broadcastr   moveaxis)batched_args
batch_dimsr   r   xdyds         r$   _shard_alike_batcherr;   D   s    	$!Q&"b2Xq!r2h&&	X   1aggbk2t4Aq!r2h&&	X   1aggbk2t4Aq!r2h&&!R$Aq!r2h&&r*   r   r   
x_aval_out
y_aval_outreturnc                 4   t        t              }t        j                  j                  rDt
        j                  j                  ||       t
        j                  j                  ||       ||fS t        j                         }t        j                  j                  j                  |_        d|_        ||_        t        j                  j                  j                   |_        t%        j&                  | |||d      }t%        j&                  | |||d      }||fS )NT)has_side_effect)next_next_shard_group_idr   use_shardy_partitionervaluer   sdyShardingGroupOpxc
OpShardingTypeUNKNOWNr,   is_shard_groupshard_group_idShardGroupTypeASshard_group_typer   wrap_with_sharding_op)ctxr   r   r<   r=   rL   unknown_op_shardings          r$   _group_shardrS   U   s     ,-.""((LL  N3LL  N3a4K]]//77'+$'5$)+)E)E)H)H&
  a5H157!
  a5H157!	
A+r*   c                 2    t        | ||g| j                   S r'   )rS   	avals_out)rQ   r   r   s      r$   shard_alike_loweringrV   p   s    	c1a	0#--	00r*   ))	functoolsr   	itertoolsjax._srcr   r   jax._src.interpretersr   r   jax._src.dispatchr   jax._src.tree_utilr	   r
   r   jax._src.utilr   jax._src.libr   rG   jax._src.lib.mlirr   r   countrB   r%   	Primitiver   multiple_resultsdef_impldef_abstract_evalr2   	deflinearr;   primitive_batchersValueAbstractValuetuplerS   rV   register_loweringr(   r*   r$   <module>rk      s!       $ & - ; * " ) *&y( P. }-!%    w> ?    3 4# ]1 2' .B  M *	xx 
xx ""	
 "" 288RXX61   }&: ;r*   