
    vh                         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 d d	lmZ eecZZd d
lZd Zd Z	 	 ddZd Zdej2                  fdZd Zd Zd Zd Zd Zd Z y
)    )partial)core)dispatch)dtypes)mesh)state)DuplicateSpecErrorNamedSharding)PartitionSpec)safe_zipNc                 D    t        j                  | j                  d      S )NT)allow_extended_dtype)r   canonicalize_dtypedtype)x___s      M/opt/face_recognition/venv/lib/python3.12/site-packages/jax/_src/lax/utils.py_input_dtyper   "   s    		"	"177	FF    c                        fdS )Nc                  .     t         fdD              S )Nc              3   <   K   | ]  }|   j                     y wN	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prims           r   standard_primitiver6   (   sg     "=%=.		$--00$78$dJ
mX~GH 
+r   c                     | j                   S r   )array_abstraction_level)as    r   _get_array_abstraction_levelr:   3   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mr9   s      r   _get_abstract_mesh_from_avalsrF   5   s    
! aDzz}ajjoo-	
		!**//"D"D+++?s CJJOO,./ / 	


A *+	%	%99r   c                    t        j                         }t        |      }|j                  s|j                  rF|j                  s|j                  r.|j                  r|n|}t        |t                     }||S |g|z  S |#t        j                  d| j                   d       ||i |}	| ||	g|i |}	|	S t        d |D              rt        d| j                   d      |	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.experimental.shard.auto_axes(fun, out_shardings=...)`c              3   \   K   | ]$  }|j                   j                  j                   & y wr   )r>   spec	unreduced)r   r9   s     r   r    z%call_sharding_rule.<locals>.<genexpr>X   s     
41::??$$
4s   *,zunreduced rule for zQ is not implemented. Please file an issue at https://github.com/jax-ml/jax/issues)rA   get_abstract_meshrF   r?   _are_all_axes_auto_or_manualr
   Pr   ShardingTypeErrorr0   anyNotImplementedError)
r5   sh_ruler4   num_outavalskwargscur_mesh	aval_meshsout_shardings
             r   call_sharding_rulerY   F   s   '')(+E2)~~>>)@@%OOIi%A12aS7]2_

 
 
TYYK (P 	PQ Q
 %*6*,!,AA&AL 
	 
4e
44		{ +; ;< < 
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               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>i   s     HQ!++4+8Hs   Tr\   z operation with inputs: z' produces an illegally sharded result: )lenrY   r	   joinr   rA   rB   r   str_short_avalpspec	frozensetrN   )r5   r.   r/   r2   r4   	multi_outrS   rT   
out_shapes
out_dtypesrR   out_shardingse	avals_strr   out_aval_strs                   r   call_shape_dtype_sharding_rulerk   ^   s   5+F+*5+F+*(C
Od'3&m^WH7<H@FHM 
Z	.. 
 	3		H%HHI+,66>8''qvvD&&z:tQWW'0{GL

 
 &( 4(>	+,123	3s   8 	CBCC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 r}t	        j                  || j                         t        | ||||dg|i |\  }}} ||i |}t	        j                  |||
||      }t	        j                  |g| j                         |S |t        j                  u rJ ||i |}t        d	 |D              rt        j                  nt        j                  } || ||i ||
      S |t        j
                  u rt	        j
                   ||i ||

      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   UnshapedArrayr   avals     r   r    z)standard_abstract_eval.<locals>.<genexpr>        DdZd001D   $&keyFr   r>   vmac              3   >   K   | ]  }t        |      t        u   y wr   )typeint)r   ds     r   r    z)standard_abstract_eval.<locals>.<genexpr>   s     !@Q$q'S.!@s   r   )ro   r   AbstractRefrC   r   rp   r"   multiple_resultsrz   maxr:   ShapedArraycheck_avals_context_meshr0   rk   DShapedArray	TypeError)r5   r.   r/   r1   r2   r3   r4   rS   rT   r9   r   least_specialized	out_shape	out_dtyperX   out_vmaout_avalshapetys                      r   r-   r-   r   s     
a!U&&'&qc *V?A  a++,21# 6  
 
DeD	DKeK	D"""	"e.v.)3u*FGH$***!!%3)Gj*m^U*	**&Iy, ((G9	LH 	!!8*dii8OD---((E!!@%!@@$

   eZ1&19==D...j%:6:iPP
E,
--r   c                 X   | j                   sJ t        d |D              sJ |       t        t        t        |      t
              } ||i |}	|t        j                  u rt        j                  || j                         t        | |||d dg|i |\  }
}} ||i |}t        |	t              r|	ft        |
      z  }	t        |
||	||      D cg c]"  \  }}}}}t        j                  |||||      $ }}}}}}t        j                  || j                         |S |t        j                  u r[ ||i |}t        |	t              r|	ft        |      z  }	t        ||	      D cg c]  \  }}t        j                  ||       c}}S t!        ||      c c}}}}}w c c}}w )Nc              3   P   K   | ]  }t        |t        j                           y wr   rn   rq   s     r   r    z6standard_multi_result_abstract_eval.<locals>.<genexpr>   rs   rt   ru   Trw   r   )r~   r"   r   maprz   r:   r   r   r   r0   rk   ro   boolr_   ziprp   r   )r5   r.   r/   r1   r2   r3   rS   rT   r   
weak_typesre   rf   rg   out_vmasrW   r|   r   shrx   	out_avalsr   s                        r   #standard_multi_result_abstract_evalr      s    
				DeD	DKeK	D#dE*0LMu//*$***!!%3,Jj*mT4-	--)J
M )&)H*d#=3z?2j14Z2RS S-Q9b# !!!Q)bcR SI S 	!!)TYY7D...U-f-J*d#=3z?2j$'
J$?A y u	: A A E,
--SAs   'F,!F&c                  &    t        d | D              S )Nc              3   4   K   | ]  }|j                     y wr   r   rq   s     r   r    z+_standard_weak_type_rule.<locals>.<genexpr>   s     .T^^.s   r!   )rS   rT   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   r0   r   AttributeError)r   s    r   dtype_to_stringr      s]    	rxx##$$	 			::	 		U	s   '* 	66A 	AA)NNNN)!	functoolsr   jax._srcr   r   r   r   rA   r   jax._src.named_shardingr	   r
   jax._src.partition_specr   rM   jax._src.utilr   r   
unsafe_zipnumpyr   r   r&   r6   r:   AbstractMeshrF   rY   rk   r-   r   r(   r   r%   r   r   <module>r      s   &     %  E 6 "CZ GD JN&*	 F:x/D/D :"0/(%.N.</	r   