
    uki^,                        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
 d dlmZmZ d d	lmZ d d
lmZ d dlmZmZmZ eecZZd Zd Z	 	 	 d!dZd Zde	j:                  fdZd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z( ejR                  ejT                        jV                  Z, ejR                  ejZ                        jV                  Z.dede/defdZ0dede/defd Z1y)"    )partialN)core)dispatch)dtypes)mesh)state)DuplicateSpecErrorNamedSharding)PartitionSpec)safe_zip)DimSizeDTypeShapec                     | j                   S Ndtype)x___s      M/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/lax/utils.pyinput_dtyper   $   s    	
.    c                        fdS )Nc                  .     t         fdD              S )Nc              3   <   K   | ]  }|   j                     y wr   	weak_type).0iargss     r   	<genexpr>z6_argnum_weak_type.<locals>.<lambda>.<locals>.<genexpr>(   s     CaQ 1 1Cs   all)r!   r   argnumss   ` r   <lambda>z#_argnum_weak_type.<locals>.<lambda>(   s    CC7CC r    )r%   s   `r   _argnum_weak_typer(   '   s	    	CCr   c	                     |xs t         }t        j                  |      }	|	j                  t	        t
        j                  |	             |	j                  t	        t        |	| |||||||
             |	S r   )	_standard_weak_type_ruler   	Primitivedef_implr   r   apply_primitivedef_abstract_evalstandard_abstract_eval)

shape_rule
dtype_rulenameweak_type_rulesharding_rulevma_ruleunreduced_rulereduced_rulememory_space_ruleprims
             r   standard_primitiver:   *   sk     "=%=.		$--00$78$dJ
mX~-/0 
+r   c                     | j                   S r   )array_abstraction_level)as    r   _get_array_abstraction_levelr>   7   s    A,E,E%Er   returnc                    d }| D ]  }|t         j                  u r|j                  j                  j                  r7||||j                  j                  k7  rc|j
                  r2|j                  j                  j
                  rt        j                  c S t        d| d|j                  j                         |j                  j                  } |t        j                  S |S )Nz3Mesh for all inputs should be equal. Got one mesh: z and another mesh: )	r   abstract_tokenshardingr   emptyare_all_axes_automesh_libempty_abstract_mesh
ValueError)in_avalsmr=   s      r   _get_abstract_mesh_from_avalsrJ   9   s    
! aDzz}ajjoo-	
		!B!B+++?s CJJOO,./ / 	


A *+	%	%99r   c                     | ||g|i |S t        d |D              rt        d| j                   d      t        d ||gn|D              rt        d| j                   d      |S )Nc              3   \   K   | ]$  }|j                   j                  j                   & y wr   )rB   specreducedr   r=   s     r   r"   z$call_reduced_rule.<locals>.<genexpr>L   s     0Q	 	 0   *,zreduced rule for Q is not implemented. Please file an issue at https://github.com/jax-ml/jax/issuesc              3   L   K   | ]  }||j                   j                    y wr   )rM   rN   r   ss     r   r"   z$call_reduced_rule.<locals>.<genexpr>P   s$      	AM 
 	   "$anyNotImplementedErrorr2   )r9   r7   out_snum_outavalskwargss         r   call_reduced_ruler]   I   s    00000%00

DII; '9 	9: : 	 	W_5'% 	 

DII; '9 	9: : 
,r   c                     | ||g|i |S t        d |D              rt        d| j                   d      t        d ||gn|D              rt        d| j                   d      |S )Nc              3   \   K   | ]$  }|j                   j                  j                   & y wr   )rB   rM   	unreducedrO   s     r   r"   z&call_unreduced_rule.<locals>.<genexpr>[   s     2q	"	"2rP   zunreduced rule for rQ   c              3   L   K   | ]  }||j                   j                    y wr   )rM   r`   rS   s     r   r"   z&call_unreduced_rule.<locals>.<genexpr>_   s&      	aM 
		 	rU   rV   )r9   r6   rY   rZ   r[   r\   s         r   call_unreduced_rulerb   W   s    %2%26222E22

dii[ )9 	9: : 	 	wUGE 	 

dii[ )9 	9: : 
,r   c                    t        j                         }t        |      }|j                  s|j                  rl|j                  s|j                  rT|j                  r|n|}t        |t                     }	||	n|	g|z  }	t        | ||	|g|i |}	t        | ||	|g|i |}	|	S |#t        j                  d| j                   d       ||i |}
t        | ||
|g|i |}
t        | ||
|g|i |}
|
S )Nzsharding rule for z is not implemented. Please file an issue at https://github.com/jax-ml/jax/issues. You can work around this error by dropping that operation into full auto sharding mode via: `jax.sharding.auto_axes(fun, out_shardings=...)`)rE   get_abstract_meshrJ   rC   _are_all_axes_auto_or_manualr
   Pr]   rb   r   ShardingTypeErrorr2   )r9   sh_ruler6   r7   rZ   r[   r\   cur_mesh	aval_meshrY   out_shardings              r   call_sharding_rulerl   f   sG   '')(+E2)~~>>)@@%OOI)QS)E_E5'G*;ElE7>-2>6<>EneW@/4@8>@EL_

 
 
TYYK (F 	FG G
 %*6*,"
L,C27C;AC,$
NL'E49E=CE,	r   c           
          ||i |}	 ||i |}
|rt        |	      nd }	 t        | ||||g|i |}|	|
|fS # t        $ r}|r dj                  d |D              }|j                  t
        j                  n|j                  }t        j                  |	|
||j                  t               t        j                  j                  d      }t        j                  |  d| d|       |d }~ww xY w)Nz, c              3   @   K   | ]  }|j                  d         yw)Tshort_dtypesN)	str_short)r   r    s     r   r"   z1call_shape_dtype_sharding_rule.<locals>.<genexpr>   s     HQ!++4+8Hs   Tro   z operation with inputs: z' produces an illegally sharded result: )lenrl   r	   joinr   rE   rF   r   str_short_avalpspec	frozensetMemorySpaceDevicerg   )r9   r0   r1   r4   r6   r7   	multi_outr[   r\   
out_shapes
out_dtypesrZ   out_shardingse	avals_strr   out_aval_strs                    r   call_shape_dtype_sharding_ruler      s    5+F+*5+F+*(C
Od'3&m^\7	M 
Z	.. 
 
3		H%HHI+,66>8''qvvD&&Jaggy{d4L 
 
 &( 4(>	+,123
3s   9 	C.B'C))C.c           
         t        d |D              rt        j                  j                  S d }|D ]f  }|j                  s|S|j
                  |j
                  k7  r:t        d| j                   d|j                          d|j                                |}h |t        j                  j                  S |j
                  S )Nc              3   j   K   | ]+  }|j                   t        j                  j                  k(   - y wr   )memory_spacer   rw   AnyrO   s     r   r"   z-_default_memory_space_rule.<locals>.<genexpr>   s%     ?A4++//	/?s   13z&memory_space of all inputs passed to `z/` must be the same. Got one operand with type: z  and another operand with type: )
r$   r   rw   r   ndimr   rG   r2   rq   rx   )r9   r[   r\   	prev_avalr=   s        r   _default_memory_space_ruler      s    ???) a66!7!71>>!I2499+ >//8/B/B/D.E F))*9: : I """			r   c                 ,    t        | g|i |}|g|z  S r   )r   )r9   rZ   r[   r\   out_mem_spaces        r   multi_mem_space_ruler      s#    ,TDEDVD-
7	""r   c	           	         |	D ]Y  }t        |t        j                        rt        d| d|  d      t        |t        j
                        rJt        d| d|         t        d |	D              sJ |	       | j                  rJ  ||	i |
}t        t        |	t                    }|t        j
                  u rt	        j                  |	| j                         t        | |||||dg|	i |
\  }}} ||	i |
}|t        | g|	i |
n ||	i |
}t	        j
                  ||||||      }t	        j                  |g| j                         |S t        |	|      )	NzAttempting to pass a Ref z to a primitive: z- -- did you forget to unpack ([...]) the ref?z&Attempting to pass an unexpected type c              3   P   K   | ]  }t        |t        j                           y wr   
isinstancer   ShapedArrayr   avals     r   r"   z)standard_abstract_eval.<locals>.<genexpr>        BDZd../B   $&keyFr   rB   vmar   )r   r   AbstractRefrG   r   r   r$   multiple_resultstypemaxr>   check_avals_context_meshr2   r   r   	TypeError)r9   r0   r1   r3   r4   r5   r6   r7   r8   r[   r\   r=   r   least_specialized	out_shape	out_dtyperk   out_vmar   out_avals                       r   r/   r/      s     -a!U&&'21#5FLN O Oa))*?s C%%)F, - -- 
BEB	BIEI	B"""	"e.v.)3u*FGH$***!!%3)Gj*m^e*/#*/'-*/&Iy, ((G)1 0GuGG&88  9	L-1H 	!!8*dii8O
E,
--r   c                    | j                   sJ t        d |D              sJ |       t        t        t        |      t
              } ||i |}	|t        j                  u rt        j                  || j                         t        | |||d d dg|i |\  }
}} ||i |}t        | t        |
      g|i |}t        |	t              r|	ft        |
      z  }	t        |
||	|||      D cg c]$  \  }}}}}}t        j                  ||||||      & }}}}}}}t        j                  || j                         |S t!        ||      c c}}}}}}w )Nc              3   P   K   | ]  }t        |t        j                           y wr   r   r   s     r   r"   z6standard_multi_result_abstract_eval.<locals>.<genexpr>   r   r   r   Tr   )r   r$   r   mapr   r>   r   r   r   r2   r   r   rr   r   boolzipr   )r9   r0   r1   r3   r4   r5   r[   r\   r   
weak_typesrz   r{   r|   out_vmasout_mem_spacesrT   dr   shr   ms	out_avalss                         r   #standard_multi_result_abstract_evalr      sq    
				BEB	BIEI	B#dE*0LMu//*$***!!%3,Jj*mT4-	--)J
M )&)H)$JR%R6RN*d#=3z?2j 69Z~6/0 01Q9b#r !!!Q)b&)< 0I 0
 	!!)TYY7
E,
--0s   1)Ec                  &    t        d | D              S )Nc              3   4   K   | ]  }|j                     y wr   r   r   s     r   r"   z+_standard_weak_type_rule.<locals>.<genexpr>   s     .T^^.s   r#   )r[   r\   s     r   r*   r*      s    	..	..r   c                     	 t        t        j                  |       j                        S # t        $ r Y nw xY w	 | j                  S # t
        $ r Y t        |       S w xY wr   )strnpr   r2   r   AttributeErrorr   s    r   dtype_to_stringr      s]    	rxx##$$	 			::	 		U	s   '* 	66A 	AAr   signedc                   |rxt        j                  |       st        j                         S | t        kD  r#t        j                  t
        j                        S t        j                  t
        j                        S t        j                  |       st        j                         S | t        kD  r#t        j                  t
        j                        S t        j                  t
        j                        S )zGReturns a integer dtype large enough to contain indices in dimension d.)r   is_constant_dimr   default_int_dtype
_int32_maxr   r   int64int32default_uint_dtype_uint32_maxuint64uint32)r   r   s     r   int_dtype_for_dimr      s    "%%''!"Z288BHHGRXXbhh5GG"&&(("#k/288BIIJrxx		7JJr   shapec                   |r| D ][  }t        j                  |      r/|t        kD  s"t        j                  t        j
                        c S t        j                         c S  t        j                  t        j                        S | D ][  }t        j                  |      r/|t        kD  s"t        j                  t        j                        c S t        j                         c S  t        j                  t        j                        S )zCReturns a integer dtype large enough to contain indices in `shape`.)r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   s      r   int_dtype_for_shaper     s     *			a	 z>"((#
#''))* 88BHH +			a	 {?"))$
$((**+ 88BIIr   )NNNNNN)2	functoolsr   numpyr   jax._srcr   r   r   r   rE   r   jax._src.named_shardingr	   r
   jax._src.partition_specr   rf   jax._src.utilr   jax._src.typingr   r   r   r   
unsafe_zipr   r(   r:   r>   AbstractMeshrJ   r]   rb   rl   r   r   r   r/   r   r*   r   iinfor   r   r   r   r   r   r   r   r'   r   r   <module>r      s  &      %  E 6 " 1 1CZD JN9=)- F:x/D/D : 6/. "#
.>.6/	 RXXbhh##
bhhryy!%%	K 	KT 	Ke 	Ku  % r   