
    uki              
         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	 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mZmZ d dlmZ d dlmZ d dlmZmZ ej8                  ecZZej>                  e cZ Z! e
jD                  e#       dd d ddddddddZ$ejJ                  d        Z&ejN                  d        Z(d Z)y)    )annotations)partial)core)dispatch)linear_util)stages)traceback_util)util)
xla_bridge)
_shard_map_axes_to_pspec)_shared_code_pmap_prepare_pmapjit)Mesh)lax)tree_maptree_unflattenN )in_axesout_axesstatic_broadcasted_argnumsdevicesbackend	axis_sizedonate_argnumsglobal_arg_shapesc               6    ~	dd l mc m t              nt	         ||      \  t        t        j                        rt              dd f
d
t        j                         fd       }
fd}||
_        |
S )Nr   T)__checkc                ,  
 t        ||
      }| r&|j                  D ]  }t        j                  |        t	        t        |      f      }t        |j                  ||j                  |j                        \  }}}t        |t        |j                        D 	
cg c]
  \  }	}
|
s	|	 c}
}	      }| r>t        j                         dkD  r'j                  |j                  |t!        |            }n|j                  }|||||fS c c}
}	w )N)r      )r   	flat_argsr   	check_argr   _get_devices_cached_shard_mapflat_funin_axes_flatout_axes_thunkr   	enumeratedonated_invarsxbprocess_count host_local_array_to_global_arraylist)r   argskwargspargmesh_pmappedin_specs	out_specsivaljitted_fflat_global_args	axis_namer   r   r   donate_tuplefr   mhur   static_broadcasted_tuples                H/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/pmap.pyinfer_paramszpmap.<locals>.infer_params1   s   a(,D"GWiv	OA  #3 Q(9,7D$5	

D!..!*:*:I%G!Hh	(1!2B2B(CKfasKMH 2##%)==
++tT(^- %q$	<GG Ls   $
D/Dc                      	| i |\  }}}}}} || }t        j                         dkD  r
j                  || |             }t        |j	                         |      S )Nr!   )r+   r,    global_array_to_host_local_arrayr   out_tree)r/   r0   r9   r:   r1   r3   r6   _outsrA   r>   s            r@   wrappedzpmap.<locals>.wrappedD   sk    8D	995H4A%&D	A11$ikJd!**,--    c                 b    
| ddi|\  }}}}}}t        t        t        j                  |            }t	        j
                  |j                  ||      } |j                  | j                         }	t	        j                  |	j                  ||j                         |	j                        }	|	S )Nr   F)	no_kwargs)r.   mapr   shaped_abstractifyr   make_args_infoin_treetracelowerLowered	_loweringrD   
_no_kwargs)r/   r0   r9   r:   r1   rE   r<   abstract_args	args_infoloweredrA   s             r@   rP   zpmap.<locals>.lowerM   s    8D	99 &95H1a T446FGHM%%aiiMIhnn./557GnnW..	1::<'.'9'9;GNrH   ) jax.experimental.multihost_utilsexperimentalmultihost_utilstupler   
isinstancer   _TempAxisNamereprr
   wrapsrP   )r=   r;   r   r   r   r   r   r   r   r   rG   rP   r<   rA   r>   r?   s   ```` ```    @@@@r@   pmapr_   %   s     00%1E'Nw'6G.7S3)%|	4--.YI"& H H& ::a=. .	 '-	.rH   c           
     
   	  j                   		 fd}| _         t        t        t        t              |            }fd}t         |      }t        |j                  |||dt        |j                              ||fS )Nc                 \    j                   D ]  }||j                            | i |S N)storesreset)r/   r0   storef_transformedr&   s      r@   reset_stores_f_transformedz5_cached_shard_map.<locals>.reset_stores_f_transformed^   s7     		 $)&))rH   c                 B    t        t        t                             S rb   )rK   r   r   )r;   r(   s   r@   <lambda>z#_cached_shard_map.<locals>.<lambda>e   s    c'.)<n>NO rH   F)r3   r5   r6   	check_vma
axis_names)
rf   rZ   rK   r   r   _handle_reshapesr   call_wrappedsetrk   )
r&   r3   r'   r(   r;   rg   r5   r6   funrf   s
   `  ``    @r@   r%   r%   [   s~    ((-*
 6(3w~y9<HI(O)<@#
S%%D8(E #DOO 46 I
 rH   c                    t        d t        |      t        |            } | | }t        d t        |      t         |                   S )Nc                8    || S t        j                  | |g      S rb   )r   squeezexaxs     r@   ri   z"_handle_reshapes.<locals>.<lambda>n   s    RZ S[[RD5I rH   c                8    || S t        j                  | |g      S rb   )r   expand_dimsrs   s     r@   ri   z"_handle_reshapes.<locals>.<lambda>q   s    RZ S__Q5M rH   )r   r.   )r=   r   r(   r/   r0   outs         r@   rl   rl   l   sF    	It*d7m
-$	4#	Ms)T."23
5 5rH   c                   |#| j                   t        j                   |      }n,| j                   t        j                          n| j                   }t        j                         dkD  r|d | j                   S |d | j                   S )N)r   r!   )r   r+   r,   global_axis_sizelocal_axis_size)r1   r   devss      r@   r$   r$   t   sr    QYY.::g&D99,2::<!))D!###$$	 q  	!!rH   rb   )*
__future__r   	functoolsr   jax._srcr   r   r   lur   r	   r
   r   r+   jax._src.shard_mapr   r   jax._src.apir   r   r   jax._src.meshr   jax._src.laxr   jax._src.tree_utilr   r   safe_maprK   
unsafe_mapsafe_zipzip
unsafe_zipregister_exclusion__file__r_   cacher%   transformation2rl   r$   r   rH   r@   <module>r      s    #    &  #  % 9 > >   7--Z--Z ! ! !( +3q1$&dd3l  
  5 5"rH   