
    uki                        d dl mZ d dlmZ d dl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 eed	f   Z G d
 d      Z G d d      Zeedef   Zee
def   Z G d d      ZddZy)    )annotations)UnionN)iinfo
issubdtype)Sharding)AUTO)tuple_insert)
xla_client.c                      e Zd Zd Zy)
AutoLayoutc                     y)Nr    selfs    J/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/layout.py__repr__zAutoLayout.__repr__   s        N)__name__
__module____qualname__r   r   r   r   r   r      s    r   r   c                      e Zd ZU ded<   ded<   ded<    e       Z	 	 d	 	 	 ddZedd	       Zd
 Z	d Z
d Zd ZddZddZy)Layouttuple[int, ...]major_to_minor"tuple[tuple[int, ...], ...] | Nonetilingintsub_byte_element_size_in_bitsNc                v    t        |      | _        |d nt        t        t         |            | _        || _        y N)tupler   mapr   _sub_byte_element_size_in_bits)r   r   r   r   s       r   __init__zLayout.__init__)   s2      /D .$eCv4F.GDK*GD'r   c                    | j                         }t        |j                         d d d   |j                         |j	                               S )N)_xla_layoutr   minor_to_majorr   element_size_in_bits)pjrt_layout
xla_layouts     r   from_pjrt_layoutzLayout.from_pjrt_layout0   sI    ((*J*++-dd3##%1135 5r   c                V    d| j                    d| j                   d| j                   dS )NzLayout(major_to_minor=z	, tiling=z , sub_byte_element_size_in_bits=))r   r   r#   r   s    r   r   zLayout.__repr__7   s<    
 !4!4 5 6;;-  **.*M*M)Na	Qr   c                Z    t        | j                  | j                  | j                  f      S r    )hashr   r   r#   r   s    r   __hash__zLayout.__hash__>   s+    $$dkk557 8 8r   c                    t        |t              sy| j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S NF)
isinstancer   r   r   r#   r   others     r   __eq__zLayout.__eq__B   sY    eV$5#7#77 XKK5<<'X//53W3WWYr   c                    d|vr| j                   |d<   d|vr| j                  |d<   d|vr| j                  |d<   t        |d   |d   |d         S )Nr   r   r   )r   r   r#   r   )r   kwargss     r   updatezLayout.updateI   so    v%!%!4!4fvfX&f4040S0Sf,-&)*F8,<89; ;r   c                   | j                   't        j                  | j                  d d d         }|S | j                  dk7  r| j                  }nLt        |t        j                        r0t        |      j                  dk  rt        |      j                  nd}nd}t        j                  | j                  d d d   | j                   |      }|S )Nr&   r      )
r   xcr   r   r#   r   npintegerr   bits)r   dtyper+   sub_byte_sizes       r   _to_xla_layoutzLayout._to_xla_layoutS   s    {{99T00267j  
	,	,	1;;eRZZ(-25\->->-Be))99T0026+-jr   c                |    t        | j                        t        |      k7  rt        d| j                   d|       y )NzTLength of major_to_minor and the rank of the value should match. Got major_to_minor=z and shape=)lenr   
ValueError)r   
aval_shapes     r   check_compatible_avalzLayout.check_compatible_avala   sJ    
43z?2!!%!4!4 5[NO O 3r   )Nr   )r   r   r   r   r   r   )r*   zxc.PjRtLayout)returnz	xc.Layout)rG   Shape)r   r   r   __annotations__r   r   r$   staticmethodr,   r   r1   r7   r:   rC   rH   r   r   r   r   r   "   sp    !!
,,!$$	$ >B56H:H/2H 5 58Y;Or   r   c                  6    e Zd ZddgZ	 	 d	 d	dZd Zd Zd Zy)
FormatlayoutshardingNc                   t        |t              r,|t        |t              rt        dt	        |       d|       t        |t        t	        d       t
        f      st        d| dt	        |             t        |t        t	        d       t        f      st        d| dt	        |             || _        || _	        y )Nz3Sharding has to be concrete when layout is of type z{. Please pass a `jax.sharding.NamedSharding` or `jax.sharding.SingleDeviceSharding` to the sharding argument. Got sharding zzInvalid value received for the layout argument. Expected values are `None`, `Layout.AUTO` or an instance of `Layout`. Got z	 of type zInvalid value received for the sharding argument. Expected values are `None`, `pjit.AUTO` or an instance of `jax.Sharding`. Got )
r4   r   AutoShardingrF   typer   	TypeErrorr   rO   rP   )r   rO   rP   s      r   r$   zFormat.__init__o   s     	66"		Z,?6l^   j	"  dZ02((.x 0<."  8T$Z68Zyh 023 3
 DKDMr   c                <    d| j                    d| j                   dS )NzFormat(layout=z, sharding=r.   )rO   rP   r   s    r   r   zFormat.__repr__   s    DKK=DMM?!DDr   c                D    t        | j                  | j                  f      S r    )r0   rO   rP   r   s    r   r1   zFormat.__hash__   s    dmm,--r   c                    t        |t              sy| j                  |j                  k(  xr | j                  |j                  k(  S r3   )r4   rN   rO   rP   r5   s     r   r7   zFormat.__eq__   s9    eV$KK5<<' ,MMU^^+-r   )NN)rO   LayoutOptionsrP   ShardingOptions)r   r   r   	__slots__r$   r   r1   r7   r   r   r   rN   rN   l   s/    $)-1+/(<E.-r   rN   c                x    t        d |j                  D              }t        || d      }|j                  |      S )Nc              3  &   K   | ]	  }|d z     yw)   Nr   ).0ms     r   	<genexpr>z&get_layout_for_vmap.<locals>.<genexpr>   s     7A!a%7s   r   )r   )r!   r   r	   r:   )dimrO   new_m2mvmapped_major_to_minors       r   get_layout_for_vmaprd      s9    7!6!677''a8	&<	==r   )ra   r   rO   r   rI   r   )
__future__r   typingr   numpyr>   jax._src.dtypesr   r   jax._src.shardingr   jax._src.named_shardingr   rR   jax._src.utilr	   jax._src.libr
   r=   r!   r   rJ   r   r   rX   rY   rN   rd   r   r   r   <module>rm      sy    #   - & 8 & )c3h CO COL fdJ./$45+- +-\>r   