
    Wh#B                       d Z ddlmZ ddlZddlmZmZ ddlZddlZddl	Z	ddl
Z
ddlZddlmZ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 eZeZd
 Z G d de          Z ej        dd          d)d            Z G d dej                   Z!d*dZ"i Z#e$e!e%e&e%df         z  f         Z' G d dej(                  Z) e e) ej*        de+          d                    Z, G d dej-                  Z. e.            Z/ G d  d!          Z0d" Z1ej2        d+d$            Z3d% Z4ej2        d,d&            Z5d' Z6ej2        d,d(            Z7dS )-z$Definitions of Mesh and ResourceEnv.    )annotationsN)HashableSequence)Any
NamedTuple)config)
xla_bridge)util)
xla_clientc                Z    d                     t          d | D                                 S )N, c              3  "   K   | ]
}d | d V  dS )`N ).0as     S/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/jax/_src/mesh.py	<genexpr>zshow_axes.<locals>.<genexpr>(   s*      11q(a(((111111    )joinsorted)axess    r   	show_axesr   '   s+    	611D11111	2	22r   c                      e Zd ZU ded<   ddZedd            Zedd            Zed	             Zed
             Z	d Z
dS )ResourceEnvMeshphysical_meshmeshc                    t          |j                  | j        t          | j        j                  z
  z  }|rt	          dt          |                     |                     |          S )NzfCannot update the mesh of the current resource environment. The new mesh shadows already defined axes )r   )set
axis_namesresource_axesr   
ValueErrorr   _replace)selfr   overlaps      r   	with_meshzResourceEnv.with_mesh.   sv    $/""d&83t?Q?\;];]&]^G 0 /#G,,/ / 0 0 0 ==t=,,,r   returnset[ResourceAxisName]c                4    t          | j        j                  S N)r    r   r!   r%   s    r   physical_resource_axesz"ResourceEnv.physical_resource_axes6   s    t!,---r   c                    | j         S r+   )r-   r,   s    r   r"   zResourceEnv.resource_axes:   s    &&r   c                    | j         j        S r+   )r   shaper,   s    r   r0   zResourceEnv.shape>   s    ##r   c                $    | j         j        j        S r+   )r   
local_meshr0   r,   s    r   local_shapezResourceEnv.local_shapeB   s    (..r   c                    d                     d | j        j                                        D                       }d| dS )Nr   c              3  ,   K   | ]\  }}d | d| V  dS 'z': Nr   r   kvs      r   r   z'ResourceEnv.__repr__.<locals>.<genexpr>G   sK       D D!QA!D D D D D Dr   zResourceEnv(mesh=Mesh(z)))r   r   r0   items)r%   	mesh_reprs     r   __repr__zResourceEnv.__repr__F   s[    		 D D"&"4":"@"@"B"BD D D D DI1I1111r   Nr   r   )r(   r)   )__name__
__module____qualname____annotations__r'   propertyr-   r"   r0   r3   r=   r   r   r   r   r   +   s         - - - - . . . 8. ' ' ' 8' $ $ 8$ / / 8/2 2 2 2 2r   r      F)max_sizetrace_context_in_keyglobal_meshr   process_indexintr(   c                   | j         r| S  t          j        fdt          g          | j                  }g }t          | j        j                  D ]}t          j        t          t          | j        j                            |          }|
                    |d          }t          j        |          }t          t          j        |                    t          t          j        |                    }	}|                    t!          ||	dz                        t          |          }
||
                                         st%          d          t'          | j        |
         | j                  S )Nc                    | j         k    S r+   )rH   )drH   s    r   <lambda>z!_get_local_mesh.<locals>.<lambda>Q   s    =0 r   otypesF)keepdims   zWhen passing host local inputs to pjit or xmap, devices connected to a single host must form a contiguous subcube of the global device mesh)emptynp	vectorizebooldevicesrangendimr
   tuple_deletetupleanyflatnonzerorI   minmaxappendsliceallr#   r   r!   )rG   rH   is_local_devicesubcube_indicesaxis
other_axeslocal_slicesnonzero_indicesstartendsubcube_indices_tuples    `         r   _get_local_meshrk   L   sx    ABL0000$A A AALATV V//K',-- 2 2d"5{/B/G)H)H#I#I4PPJ #&&zE&BBLn\22ORVO,,--s26/3J3J/K/K3E5a00111100
 
.	/	3	3	5	5 
	   
k!"78+:P	Q	QQr   c                  n    e Zd Z ej                    Z ej                    Z ej                    Zd ZdS )	AxisTypesc                    | j         S r+   namer,   s    r   r=   zAxisTypes.__repr__n   s
    9r   N)	r?   r@   rA   enumautoAutoUser
Collectiver=   r   r   r   rm   rm   i   sJ        	$	$ty{{*    r   rm   dict[str, AxisTypes]c                    i }|                                  D ]*\  }}t          |t                    r|D ]}|||<   %|||<   +|S r+   )r;   
isinstancerZ   )
axis_typesrL   tnamesns        r   axis_names_to_typesr}   q   si    !""$$  ha%   !! ahh	
(r   .c                  \    e Zd ZU dZded<   ded<   ded<   dd	d* fdZd Zd Zd Z fdZ	d Z
d Zed             Zej        d             Zed+d            Zej        d             Zed             Zed             Zej        d             Zed             Zd Zej        d             Zej        d              Zej        d!             Zej        d"             Zej        d#             Zd$ Zej        d%             Zd& Zej        d'             Z ej        d(             Z!d,d)Z" xZ#S )-r   aa  Declare the hardware resources available in the scope of this manager.

  In particular, all ``axis_names`` become valid resource names inside the
  managed block and can be used e.g. in the ``in_axis_resources`` argument of
  :py:func:`jax.experimental.pjit.pjit`. Also see JAX's multi-process programming
  model (https://jax.readthedocs.io/en/latest/multi_process.html)
  and the Distributed arrays and automatic parallelization tutorial
  (https://jax.readthedocs.io/en/latest/notebooks/Distributed_arrays_and_automatic_parallelization.html)

  If you are compiling in multiple threads, make sure that the
  ``with Mesh`` context manager is inside the function that the threads will
  execute.

  Args:
    devices: A NumPy ndarray object containing JAX device objects (as
      obtained e.g. from :py:func:`jax.devices`).
    axis_names: A sequence of resource axis names to be assigned to the
      dimensions of the ``devices`` argument. Its length should match the
      rank of ``devices``.

  Examples:

    >>> from jax.experimental.pjit import pjit
    >>> from jax.sharding import Mesh
    >>> from jax.sharding import PartitionSpec as P
    >>> import numpy as np
    ...
    >>> inp = np.arange(16).reshape((8, 2))
    >>> devices = np.array(jax.devices()).reshape(4, 2)
    ...
    >>> # Declare a 2D mesh with axes `x` and `y`.
    >>> global_mesh = Mesh(devices, ('x', 'y'))
    >>> # Use the mesh object directly as a context manager.
    >>> with global_mesh:
    ...   out = pjit(lambda x: x, in_shardings=None, out_shardings=None)(inp)

    >>> # Initialize the Mesh and use the mesh as the context manager.
    >>> with Mesh(devices, ('x', 'y')) as global_mesh:
    ...   out = pjit(lambda x: x, in_shardings=None, out_shardings=None)(inp)

    >>> # Also you can use it as `with ... as ...`.
    >>> global_mesh = Mesh(devices, ('x', 'y'))
    >>> with global_mesh as m:
    ...   out = pjit(lambda x: x, in_shardings=None, out_shardings=None)(inp)

    >>> # You can also use it as `with Mesh(...)`.
    >>> with Mesh(devices, ('x', 'y')):
    ...   out = pjit(lambda x: x, in_shardings=None, out_shardings=None)(inp)
  z
np.ndarrayrV   ztuple[MeshAxisName, ...]r!   MeshAxisTypery   Nry    np.ndarray | Sequence[xc.Device]str | Sequence[MeshAxisName]MeshAxisType | Nonec               :   t          |t          j                  st          j        |          }t          |t                    r|f}t          |          }t          d |D                       rt          d|           |j        t          |          k    r(t          d|j         dt          |           d          |t          j        |in|}t          |                                          }||j        t          |j                  |f}t                              |d           }||S t#                                          |           }|                                |_        d|j        j        _        ||_        ||_        ||_        |t          |<   |S )Nc              3     K   | ]}|d u V  	d S r+   r   )r   is     r   r   zMesh.__new__.<locals>.<genexpr>   s&      
)
)19
)
)
)
)
)
)r   z%Mesh axis names cannot be None. Got: zMesh requires the ndim of its first argument (`devices`) to equal the length of its second argument (`axis_names`), but got devices.ndim == z and len(axis_names) == .F)rx   rS   ndarrayarraystrrZ   r[   r#   rX   lenrm   rs   r;   r0   flat_mesh_object_dictgetsuper__new__copyrV   flags	writeabler!   ry   _axis_types_tuple)	clsrV   r!   ry   axis_types_tuplekeyvalr%   	__class__s	           r   r   zMesh.__new__   s    grz** "!!g*c"" !=jz""J

)
)j
)
)
))) MKzKKLLL|s:&&3$\3 3 !$J3 3 34 4 4 3=2D9>:.. Z--//00w}eGL&9&9;K
LC


T
*
*C
j77??3D<<>>DL#(DL  DO DO-D!cKr   c                L    t          |           | j        | j        fd| j        ifS )Nry   )typerV   r!   ry   r,   s    r   
__reduce__zMesh.__reduce__   s*    JJt74?+- -r   c                   t          |t                    sdS t          |           t          |          k    rdS | j        |j        k    o9| j        j        |j        j        k    o| j        |j        k    o| j        |j        k    S NFT)rx   r   idr!   rV   r0   r   _internal_device_listr%   others     r   __eq__zMesh.__eq__   s    eT"" U 
$xx2e99TOu// FL%-"55F"e&==F &%*EEGr   c                    t          | d          s1t          | j        | j        | j        j        | j        f          | _        | j        S )N_hash)hasattrhashr!   r   rV   r0   r   r   r,   s    r   __hash__zMesh.__hash__   sK    4!! $?D68J!#$ $dj :r   c                    t          | |          r)t          | |          |k    rd S t          d| d          t                                          ||           d S )NzCannot reassign attributes (z) of immutable mesh objects)r   getattrRuntimeErrorr   __setattr__)r%   rp   valuer   s      r   r   zMesh.__setattr__   ss    tT 	t			%	% 	
J
J
J
J   
GGe$$$$$r   c                f   t           j        j        rt          d          t          j        d                             |           }t          j                            |           |t          _        t           j	        
                    t          d t          j        D                                  | S )Nz!Mesh context manager is disabled.c              3  <   K   | ]}|j         j        |j         V  d S r+   r   rR   r   rz   s     r   r   z!Mesh.__enter__.<locals>.<genexpr>  A       , ,!_*,ao , , , , , ,r   )
jax_configdisallow_mesh_context_managerr   r   thread_resourcesstackr'   r_   envmesh_context_manager	set_localrZ   )r%   new_envs     r   	__enter__zMesh.__enter__   s    /5 ><===$R(22488G!!'***"#-- , ,'7'= , , , 	, 	,- - - Kr   c                    t           j                                         t           j        d         t           _        t          j                            t          d t           j        D                                  dS )Nr   c              3  <   K   | ]}|j         j        |j         V  d S r+   r   r   s     r   r   z Mesh.__exit__.<locals>.<genexpr>
  r   r   F)r   r   popr   r   r   r   rZ   r%   exc_type	exc_value	tracebacks       r   __exit__zMesh.__exit__  sv       +1"5#-- , ,'7'= , , , 	, 	,- - - 5r   c                    t          j        d t          j        | j        | j        j                  D                       S )Nc              3  $   K   | ]\  }}||fV  d S r+   r   r   rp   sizes      r   r   zMesh.shape.<locals>.<genexpr>  sF       #N #ND$ 
t#N #N #N #N #N #Nr   )collectionsOrderedDictr
   safe_zipr!   rV   r0   r,   s    r   r0   z
Mesh.shape  sN    " #N #N-9KLL#N #N #N N N Nr   c                x    t          d t          j        | j        | j        j                  D                       S )Nc              3  $   K   | ]\  }}||fV  d S r+   r   r   s      r   r   z#Mesh.shape_tuple.<locals>.<genexpr>  sF       N ND$ 
tN N N N N Nr   )rZ   r
   r   r!   rV   r0   r,   s    r   shape_tuplezMesh.shape_tuple  sK     N N-9KLLN N N N N Nr   r(   tuple[int, ...]c                    | j         j        S r+   )rV   r0   r,   s    r   
axis_sizeszMesh.axis_sizes  s    <r   c                *    t          | j                  S r+   r}   ry   r,   s    r   _name_to_typezMesh._name_to_type      t///r   c                t    | j         j        r+t          j        | j                                                  ndS Nr   )rV   rX   mathprodr0   valuesr,   s    r   r   z	Mesh.size"  s/    -1\->E49TZ&&(()))AEr   c                    | j         dk    S r   r   r,   s    r   rR   z
Mesh.empty&      9>r   c                F    | j         j        t          | j                  k    S r+   )rV   r   r   local_devicesr,   s    r   is_multi_processzMesh.is_multi_process*  s    <D$6 7 777r   c                N    |                      t          j                              S r+   )_local_meshxbrH   r,   s    r   r2   zMesh.local_mesh.  s    B,..///r   c                "    t          | |          S r+   )rk   )r%   rH   s     r   r   zMesh._local_mesh2  s    4///r   c                j    | j         rJ  t          j        d t          g          | j                  S )Nc                    | j         S r+   )r   )rL   s    r   rM   z!Mesh.device_ids.<locals>.<lambda>8  s    !$ r   rN   )rR   rS   rT   rI   rV   r,   s    r   
device_idszMesh.device_ids5  s4    z>52<u555dlCCCr   c                *    t          | j                  S r+   )r    r   r,   s    r   _local_devices_setzMesh._local_devices_set:  s    t!"""r   c                4    t          | j        j                  S r+   )rZ   rV   r   r,   s    r   _flat_devices_tuplezMesh._flat_devices_tuple>  s    "###r   c                4    t          j        | j                  S r+   )xc
DeviceListr   r,   s    r   r   zMesh._internal_device_listB  s    =1222r   c                4    t          | j        j                  S r+   )r    rV   r   r,   s    r   _flat_devices_setzMesh._flat_devices_setF  s    t| !!!r   c                z    d                     d | j                                        D                       }d| dS )Nr   c              3  ,   K   | ]\  }}d | d| V  dS r6   r   r8   s      r   r   zMesh.__str__.<locals>.<genexpr>K  s2      FF41aQ1FFFFFFr   zMesh())r   r0   r;   )r%   mesh_strs     r   __str__zMesh.__str__J  sA    yyFF4:3C3C3E3EFFFFFH8r   c                R    | j         rdS d| j         }d| j        d| j        | dS )Nz"Mesh(device_ids=[], axis_names=()), axis_types=zMesh(device_ids=z, axis_names=r   )rR   ry   r   r!   )r%   atrs     r   _reprz
Mesh._reprN  sD    z 211
+$/
+
+CWdoWWdoWQTWWWWr   c                    | j         S r+   )r   r,   s    r   r=   zMesh.__repr__U  s
    :r   c                .    d | j         j        D             S )Nc                V    g | ]&}|j         |j                                         k    $|'S r   )rH   client)r   rL   s     r   
<listcomp>z&Mesh.local_devices.<locals>.<listcomp>Z  s<     < < <!!("8"8":"::: :::r   )rV   r   r,   s    r   r   zMesh.local_devicesX  s'    < <t|( < < < <r   c                8    t          | j        | j                  S Nr   )AbstractMeshr   ry   r,   s    r   abstract_meshzMesh.abstract_mesh]  s    (T_EEEEr   c                :    t          | j        | j        |          S r   )r   rV   r!   r%   new_axis_typess     r   with_axis_typeszMesh.with_axis_typesa  s    do.IIIIr   )rV   r   r!   r   ry   r   r(   r   )r(   r   )$r?   r@   rA   __doc__rB   r   r   r   r   r   r   r   rC   r0   	functoolscached_propertyr   r   r   r   rR   r   r2   r   r   r   r   r   r   r   r   r=   r   r  r  __classcell__)r   s   @r   r   r      s#        0 0d &&&& 15! ! ! ! ! ! ! !F- - -
G 
G 
G  	% 	% 	% 	% 	%	 	 	   N N 8N
 N N N
    8 0 0 0 F F 8F   8 8 8 8 0 0 800 0 0 D D D # # # $ $ $ 3 3 3 " " "   X X X   < < < F F FJ J J J J J J Jr   r   )dtypec                      e Zd Zd ZdS )_ThreadResourcesLocalStatec                D    t           g| _        | j        d         | _        d S )Nr   )	EMPTY_ENVr   r   r,   s    r   __init__z#_ThreadResourcesLocalState.__init__i  s    DJz"~DHHHr   N)r?   r@   rA   r  r   r   r   r  r  g  s#            r   r  c                     e Zd ZdZddd$dZd	 Zd
 Zd Zed             Z	ed%d            Z
ej        d             Zej        d             Zej        d             Zed             Zed             Zd&dZej        d'd            Zej        d'd            Zej        d'd            Zej        d'd            Zed             Zed             Zed             Zed             Zed             Zd  Zd! Zed(d#            ZdS ))r  a  AbstractMesh contains only axis names and axis sizes.

  It does not contain concrete devices compared to `jax.sharding.Mesh`. You
  should use this as an input to the sharding passed to with_sharding_constraint
  and mesh passed to shard_map to avoid tracing and lowering cache misses when
  your mesh shape and axis names stay the same but the devices change.
  See the description of https://github.com/jax-ml/jax/pull/23022 for more
  details.
  Nr   r   tuple[tuple[str, int], ...]ry   r   c                   || _         | j         r)t          t          | j                    \  | _        | _        nd\  | _        | _        |t
          j        | j        in|| _        t          | j        	                                          | _
        d S )N)r   r   )r   listzip_axis_names_axis_sizesrm   rs   ry   rZ   r;   r   )r%   r   ry   s      r   r  zAbstractMesh.__init__{  s    "D 2+/T5E0F+G+G(d((+1(d(=G=O	(899& 	O"4?#8#8#:#:;;Dr   c                8    t          | j        | j        f          S r+   )r   r   r   r,   s    r   r   zAbstractMesh.__hash__  s    !4#9:;;;r   c                    t          |t                    sdS t          |           t          |          k    rdS | j        |j        k    o| j        |j        k    S r   )rx   r  r   r   r   r   s     r   r   zAbstractMesh.__eq__  s[    e\** U	$xx2e99T 11 >"e&==?r   c                n    d                     d | j        D                       }d| j         }d| | dS )Nr   c              3  ,   K   | ]\  }}d | d| V  dS r6   r   )r   r|   r:   s      r   r   z(AbstractMesh.__repr__.<locals>.<genexpr>  s2      EEDAq-a--A--EEEEEEr   r   zAbstractMesh(r   )r   r   ry   )r%   r<   r   s      r   r=   zAbstractMesh.__repr__  sJ    		EED4DEEEEEI
+$/
+
+C,9,c,,,,r   c                    | j         S r+   )r  r,   s    r   r!   zAbstractMesh.axis_names      r   r(   r   c                    | j         S r+   )r  r,   s    r   r   zAbstractMesh.axis_sizes  r  r   c                *    t          | j                  S r+   r   r,   s    r   r   zAbstractMesh._name_to_type  r   r   c                F    | j         rt          j        | j                   ndS r   )r  r   r   r,   s    r   r   zAbstractMesh.size  s"    *.*:A49T%&&&Ar   c                4    t          j        | j                  S r+   )r   r   r   r,   s    r   r0   zAbstractMesh.shape  s    "4#3444r   c                    d S r+   r   r,   s    r   r   z"AbstractMesh._internal_device_list  s    4r   c                    | j         dk    S r   r   r,   s    r   rR   zAbstractMesh.empty  r   r   c                .    t          | j        |          S r   )r  r   r  s     r   r  zAbstractMesh.with_axis_types  s    (^DDDDr   rU   c                b    t          d | j                                        D                       S )Nc              3  6   K   | ]}|t           j        k    V  d S r+   rm   ru   r   s     r   r   z8AbstractMesh._are_all_axes_collective.<locals>.<genexpr>  *      IIQqI((IIIIIIr   ra   ry   keysr,   s    r   _are_all_axes_collectivez%AbstractMesh._are_all_axes_collective  -    II$/2F2F2H2HIIIIIIr   c                b    t          d | j                                        D                       S )Nc              3  6   K   | ]}|t           j        k    V  d S r+   rm   rs   r   s     r   r   z2AbstractMesh._are_all_axes_auto.<locals>.<genexpr>  )      CCqqIN"CCCCCCr   r*  r,   s    r   _are_all_axes_autozAbstractMesh._are_all_axes_auto  -    CCDO,@,@,B,BCCCCCCr   c                b    t          d | j                                        D                       S )Nc              3  6   K   | ]}|t           j        k    V  d S r+   r(  r   s     r   r   z4AbstractMesh._any_axis_collective.<locals>.<genexpr>  r)  r   r[   ry   r+  r,   s    r   _any_axis_collectivez!AbstractMesh._any_axis_collective  r-  r   c                b    t          d | j                                        D                       S )Nc              3  6   K   | ]}|t           j        k    V  d S r+   r0  r   s     r   r   z.AbstractMesh._any_axis_auto.<locals>.<genexpr>  r1  r   r6  r,   s    r   _any_axis_autozAbstractMesh._any_axis_auto  r3  r   c                $    t          d           d S )NrV   _raise_value_errorr,   s    r   rV   zAbstractMesh.devices  s    y!!!!!r   c                $    t          d           d S )Nr   r<  r,   s    r   r   zAbstractMesh.device_ids      |$$$$$r   c                $    t          d           d S )Nr   r<  r,   s    r   r   zAbstractMesh.is_multi_process  s    )*****r   c                $    t          d           d S )Nr   r<  r,   s    r   r   zAbstractMesh.local_devices  s    '''''r   c                $    t          d           d S )Nr2   r<  r,   s    r   r2   zAbstractMesh.local_mesh  r?  r   c                $    t          d           d S )Nr   r<  r,   s    r   r   zAbstractMesh.__enter__  s    {#####r   c                $    t          d           d S )Nr   r<  r   s       r   r   zAbstractMesh.__exit__  s    z"""""r   r   c                D    t           j                            |            d S r+   )r   abstract_mesh_context_managerr   r   s    r   '_extremely_unsafe_enter_tracing_contextz4AbstractMesh._extremely_unsafe_enter_tracing_context  s    ,66t<<<
Fr   )r   r  ry   r   r  )r(   r  )r(   rU   r   r  ) r?   r@   rA   r  r  r   r   r=   rC   r!   r   r	  r
  r   r   r0   r   rR   r  r,  r2  r7  r:  rV   r   r   r   r2   r   r   staticmethodrH  r   r   r   r  r  p  s         26	< 	< 	< 	< 	< 	<< < <? ? ?- - -
   8    8 0 0 0 B B B 5 5 5   8   8E E E E J J J J D D D D J J J J D D D D " " 8" % % 8% + + 8+ ( ( 8( % % 8%$ $ $# # #    <  r   r  c                &    t          d|            )Nz AbstractMesh does not implement )r#   ro   s    r   r=  r=    s    <d<<===r   r   c              #     K   t           j                            |           }	 d V  t           j                            |           d S # t           j                            |           w xY wr+   )r   rF  
swap_localr   r   prev_vals     r   set_abstract_meshrP    se      5@@FF(A	EEE,66x@@@@@J,66x@@@@   A !A)c                 $    t           j        j        S r+   )r   rF  r   r   r   r   get_abstract_meshrS    s    		1	77r   c              #     K   t           j                            |           }	 d V  t           j                            |           d S # t           j                            |           w xY wr+   )r   device_contextrM  r   rN  s     r   set_concrete_meshrV    sd      &11$77(2	EEE''11111J''1111rQ  c                 $    t           j        j        S r+   )r   rU  r   r   r   r   get_concrete_meshrX    s    		"	((r   c              #    K   t          | j                  5  t          j        d          5  t	          |           5  d V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NT)rP  r  r   sharding_in_typesrV  rG  s    r   set_meshr[    sM     $,-- 
 
$T**
 
,=d,C,C
 
	EEE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sW   A<A$AA$AA$AA$A<$A(	(A<+A(	,A<<B B )rG   r   rH   rI   r(   r   )r(   rv   rI  r>   )8r  
__future__r   r   collections.abcr   r   
contextlibrq   r	  r   	threadingtypingr   r   numpyrS   jax._srcr   r   r	   r   r
   jax._src.libr   r   MeshAxisNameResourceAxisNamer   r   cacherk   Enumrm   r}   r   dictr   rZ   r   ContextDecoratorr   rR   objectr  localr  r   r  r=  contextmanagerrP  rS  rV  rX  r[  r   r   r   <module>rm     sG   + * " " " " " "     . . . . . . . .               " " " " " " " "     ) ) ) ) ) ) % % % % % %       ) ) ) ) ) )  3 3 32 2 2 2 2* 2 2 2B Su555R R R 65R8    	        IsU38_445cJ cJ cJ cJ cJ:& cJ cJ cJL KXRXb777<<==	        .-// r r r r r r r rn> > > A A A A8 8 8 2 2 2 2) ) ) 
 
 
 
 
 
r   