
    Vpf                     $   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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  ej                    Zd Z ej        d          Zde_        e                     ee	e                     e                    d            d Z ej         ee           d Z!e!ej"        e<   dej#        dej#        dej$        dej$        de%ej#        ej#        f         f
dZ&d Z' ej(        ee'           dS )    )partialN)core)ad)mlir)apply_primitive)tree_flattentree_unflatten)batching)safe_zip)
xla_client)shaped_abstractify)irc                    t          |           \  }}t          |          \  }}||k    rt          d| d|           t          ||          D ]S\  }}t          |          }t          |          }	|j        |	j        k    r t          d|j         d|	j         d          Td t          ||          D             }
t          |
 \  }}t          ||          t          ||          fS )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/google/jax/issues if you want this feature.c                 J    g | ] \  }}t                               ||          !S  )shard_alike_pbind).0x_y_s      T/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/shard_alike.py
<listcomp>zshard_alike.<locals>.<listcomp>1   s,    	L	L	LR-

R
$
$	L	L	L    )r   
ValueErrorr   r   shapezipr	   )xyx_flatx_treey_flaty_treer   r   x_avaly_avalouts
x_out_flat
y_out_flats                r   shard_aliker(      s>   ??.&&??.&&v
 ?$*? ?6<? ? @ @ @ (( M Mfb"##F##F|v|##LlL L17L L LM M M $ 
M	L8FF3K3K	L	L	L$:*j	
	+	+^FJ-O-O	OOr   r(   Tc                 
    | |fS Nr   )r   r   s     r   <lambda>r+   9   s
    aV r   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_transposer3   ;   sJ    *$	$ZZ27d4jjBG33:tT"""r   c                    | \  }}|\  }}||k    rt          ||          ||ffS |t          j        u r5t          j        ||j        |         |          }t          ||          ||ffS |t          j        u r5t          j        ||j        |         |          }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2XXq!r2h&&	X   1agbk2..Aq!r2h&&	X   1agbk2..Aq!r2h&&!R$$Aq!r2h&&r   r   r   
x_aval_out
y_aval_outreturnc                 D   t          t                    }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_idxc
OpShardingTypeUNKNOWNr-   is_shard_groupshard_group_idShardGroupTypeASshard_group_typer   wrap_with_sharding_op)ctxr   r   r=   r>   rI   unknown_op_shardings          r   _group_shardrP   U   s     ,--.]/7'+$'5$)+)E)H&
 a5H157 7 7!
 a5H157 7 7!	
A+r   c                 *    t          | ||g| j        R  S r*   )rP   	avals_out)rN   r   r   s      r   shard_alike_loweringrS   k   s    	c1a	0#-	0	0	00r   ))	functoolsr   	itertoolsjax._srcr   jax._src.interpretersr   r   jax._src.dispatchr   jax._src.tree_utilr   r	   r
   jax._src.utilr   jax._src.libr   rD   jax._src.api_utilr   jax._src.lib.mlirr   countrC   r(   	Primitiver   multiple_resultsdef_impldef_abstract_evalr3   	deflinearr<   primitive_batchersValueAbstractValuetuplerP   rS   register_loweringr   r   r   <module>ri      s                    $ $ $ $ $ $ & & & & & & - - - - - - ; ; ; ; ; ; ; ; * * * * * * " " " " " " ) ) ) ) ) ) 0 0 0 0 0 0            &y(( P P P. }--!%    ww>> ? ? ?    3 3 4 4 4# # # ]1 2 2 2' ' ' .B M *	x 
x "	
 " 28RX   ,1 1 1  }&: ; ; ; ; ;r   