
    vh^                    @   U 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mZmZ d dlmZmZ d d	lmZmZ d d
lmZ  e
j.                  e        ed      ZeZd%dZ ed      ZeZej<                  d        Zi Z ejB                  d        Z"d&dZ#i Z$de%d<   d Z&d'dZ' G d d      Z( ee(d d        d(dZ) ed      Z*de%d<   e*j=                  e)       e*jC                  d         G d d      Z+d)d Z,eZ-	 	 	 	 d*d!Z.	 	 	 	 d+d"Z/ ed#      Z0de%d$<   y),    )annotations)CallableN)AnyTypeVar)core)traceback_util)	Primitivevalid_jaxtypeget_aval)register_pytree_nodetree_map)Array	ArrayLike)safe_mapTc                    t        j                  |       }t        |d      r|j                  | |      S t        j                  | |      \  } }t
        j                  | |      S )N
vspace_add)r   typeofhasattrr   standard_insert_pvaryadd_jaxvals_pbind)xytys      K/opt/face_recognition/venv/lib/python3.12/site-packages/jax/_src/ad_util.pyadd_jaxvalsr   !   sS    {{1~"R==A		#	#Aq	)$!Q			Aq	!!    add_anyc                2    t        t        |          | |      S N)raw_jaxval_adderstyper   r   s     r   add_implr%   +   s    	47	#Aq	))r   c                6    t        j                  | |      sJ | S r!   )r   	typematchr$   s     r   add_abstractr(   0   s    	1			
(r   c                h    t        | d      r| j                         S t        t        |          |       S )Nvspace_zero)r   r*   aval_zeros_likersr#   avals    r   zeros_like_avalr.   5   s/    T=!	4:	&t	,,r   z"dict[type, Callable[[Any], Array]]r+   c                >    t        t        j                  |             S r!   )r.   r   r   vals    r   zeros_like_jaxvalr2   ;   s    	s+	,,r   c                P    t        | t              rt        | j                        S | S r!   )
isinstanceZeror.   r-   zs    r   instantiater8   >   s     4166""	
(r   c                  4    e Zd ZdgZddZddZedd       Zy)	r5   r-   c                    || _         y r!   r,   selfr-   s     r   __init__zZero.__init__F   	    DIr   c                "    d| j                    dS )NzZero()r,   r<   s    r   __repr__zZero.__repr__H   s    499+Qr   c                F    t        t        |       j                               S r!   )r5   r   to_tangent_avalr0   s    r   from_primal_valuezZero.from_primal_valueJ   s    --/00r   N)r-   core.AbstractValuereturnstr)r1   r   rH   r5   )__name__
__module____qualname__	__slots__r=   rB   staticmethodrE    r   r   r5   r5   D   s%    h) 1 1r   r5   c                    d| j                   fS )NrO   r,   r6   s    r   <lambda>rQ   N   s    b!&&\ r   c                    t        |       S r!   )r5   )r-   _s     r   rQ   rQ   N   s
    4: r   c                8    t        |       st        d|        | S )NzEstop_gradient only works on valid JAX arrays, but input argument is: )r
   	TypeErrorr   s    r   _stop_gradient_implrW   Q   s+    	q	
 **+. / /	
(r   stop_gradientr	   stop_gradient_pc                    | S r!   rO   rV   s    r   rQ   rQ   Y   s    A r   c                  4    e Zd ZddZddZd Zedd       Zy)	SymbolicZeroc                    || _         y r!   r,   r;   s     r   r=   zSymbolicZero.__init__^   r>   r   c                .    | j                   j                  S r!   )	__class__rJ   rA   s    r   rB   zSymbolicZero.__repr__a   s    >>"""r   c                `   	 t        | j                  |      }t        |      }|t        j                  u r|j                  |       S |t        j                  u r t        j                  |j                  |       S |S # t        $ r*}t        | j                  j                   d|       |d }~ww xY w)Nz has no attribute )getattrr-   r#   r   aval_propertyfgetaval_methodtypes
MethodTypefunKeyErrorAttributeErrorr_   rJ   )r<   nameattrterrs        r   __getattr__zSymbolicZero.__getattr__f   s    TYY%d t*a	
d  	 yy   $//  ^^$$%%7v
>s   A: :	B-%B((B-c                F    t        t        |       j                               S r!   )r\   r   rD   r0   s    r   rE   zSymbolicZero.from_primal_valuew   s    55788r   N)r-   rF   rH   NonerG   )r1   r   rH   r\   )rJ   rK   rL   r=   rB   rn   rN   rE   rO   r   r   r\   r\   ]   s%    #
" 9 9r   r\   c                &    fd}t        ||       S )Nc                f    t        |       j                         }rt        |      S t        |      S r!   )r   rD   r\   r.   )r   tangent_avalsymbolic_zeross     r   fzzero_from_primal.<locals>.f|   s.    A;..0L,''\**r   )r   )r1   rt   ru   s    ` r   zero_from_primalrv   {   s    + 
!S	r   c                R    t        |       t        u rt        | j                        S | S r!   )r#   r5   r\   r-   rV   s    r   replace_internal_symbolic_zerosrx      s     !%aDaff	7a7r   c                R    t        |       t        u rt        | j                        S | S r!   )r#   r\   r5   r-   rV   s    r   "replace_rule_output_symbolic_zerosrz      s     aL0aff7a7r   
zeros_likezeros_like_p)r   r   r   r   rH   r   )r-   rF   rH   r   )r7   zZero | ArrayrH   r   )r   r   rH   r   )F)r   JaxTypeOrTracer | ZerorH   JaxTypeOrTracer | SymbolicZero)r   r~   rH   r}   )1
__future__r   collections.abcr   re   typingr   r   jax._srcr   r   jax._src.corer	   r
   r   jax._src.tree_utilr   r   jax._src.typingr   r   jax._src.utilr   register_exclusion__file__r   mapr   r   	add_any_pdef_implr%   r"   def_abstract_evalr(   r.   r+   __annotations__r2   r8   r5   rW   rY   r\   rv   JaxTypeOrTracerrx   rz   r|   rO   r   r   <module>r      sM   # $    # < < = , " ! ! !( +CL" )$	* *    !- 9; 5 :-1 1 T13M N (8) 8   , -  ! !+ .9 9< 88"@88%8*@8 $L1i 1r   