
    uki$                        d Z ddlmZ 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dZddZdd	Zeeeeeeef   d
f   f   Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)zSharding utilities    )annotations)SequenceN)Union)
xla_clientc                V   | j                         rJ | j                         rg dfS | j                         rg dfS | j                         }| j	                         }|t
        j                  j                  j                  gk(  rt        |d d       |d   fS |t
        j                  j                  j                  gk(  rt        |d d       dfS t        |      t
        j                  j                  j                  t
        j                  j                  j                  hk(  rI|j                  t
        j                  j                  j                        }t        |d d       |dd  |   fS |rt
        j                  j                  j                  |v r|t
        j                  j                  j                  gk(  rt        |d d       dfS t        |      t
        j                  j                  j                  t
        j                  j                  j                  hk(  sJ |j                  t
        j                  j                  j                        }t        |d d       |dd  |   fS | j                         rt        |d d       |d   fS |rt        d|  d      t        |      dfS )N   zUnhandled OpSharding type: z. Please open a bug report!)	is_manualis_replicatedis_unreducedtile_assignment_dimensionssubgroup_typesxc
OpShardingType
REPLICATEDlist	UNREDUCEDsetindexMANUALreplicate_on_last_tile_dimNotImplementedError)hlo_shardingallow_partial_manual
partitionsr   replicated_locs        P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/op_shardings.pyget_num_ways_dim_shardedr       s`    ##%%	%!q5L q5L668*..0.**5566
3B *R.00"--,,6677
3B !##
>r}}11<<!}}11;;= =#))"--*<*<*G*GHN
3B *RS/."AAA 2 2 9 9^ K"--,,3344*Sb/"A%%.!}}!!,,bmm.@.@.G.GHI J I%++BMM,>,>,I,IJn*Sb/"JrsON$CCC..0
3B *R.00"=l^ L< !< = =
Q    c                L    | j                         dk(  rdS | j                         S )Nr   T)num_devicesr   )hcs    r   is_hlo_sharding_replicatedr%   ?   s$    !Q&>B,<,<,>>r!   c                D    | |u ryt        |       rt        |      ry| |k(  S )NT)r%   )hc1hc2s     r   are_hlo_shardings_equalr)   C   s)    CZ$)CC)H	r!   .c                @   t        j                  |t         j                        }t        |       r)|j	                  t        d       ft        |      z         |S || j                         k(  sJ t        |       \  }}t        |      t        |      k(  sJ t        |      t        |      f       g }t        ||      D ]  \  }}|dk(  r|j                  t        d       g       '|dkD  rVt        ||      \  }	}
|
r	J ||f       |j                  t        |      D cg c]  }t        ||	z  |dz   |	z         c}       t        d       t        | j                               }t!        j"                  | D ]   }t        |      D ]  }||t%        |      <    " |S c c}w )N)dtyper   z1Unrecognized number of shards. Please file a bug!)npemptyobject_r%   fillslicelenr#   r    zipappenddivmodrangeAssertionErroritertile_assignment_devices	itertoolsproductnext)r   shaper#   indicesr   num_replicasaxis_indicesdimn_shards
shard_sizeraggedi	device_itidxs_s                  r   op_sharding_to_numpy_indicesrH   N   s    HH[

3'
  -LL%+#e*,-N	002	22	25lC*l	ZCJ	&EZ#e*(EE	&)+,5*- 	Pmc81}5;-(	A!#x0j&(#x(Z$)(O5  !Z!a%:1EF 5 6 NOO	P <779:). &d<  &!%gd9o&& 
.5s   F
c                F    t        | ||      }t        |j                        S )N)rH   tupleflat)op_shardingr<   r#   r=   s       r   op_sharding_to_indicesrM   s   s!     )e[I'	w||	r!   )F)r   xc.HloShardingr   boolreturnztuple[list[int], int])r$   rN   rP   rO   )r'   rN   r(   rN   rP   rO   )r   rN   r<   Sequence[int]r#   intrP   z
np.ndarray)rL   rN   r<   rQ   r#   rR   rP   ztuple[tuple[slice, ...], ...])__doc__
__future__r   collections.abcr   r9   typingr   numpyr,   jax._src.libr   r   r    r%   r)   rR   r0   rJ   _IndexrH   rM    r!   r   <module>r[      s     " $    ) @E! !8<!!H? 
sE5sEz!2C!788	9" ")6""#"J(56r!   