
    uki                    @   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/home/cdr/jupyterlab/.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                D    t        j                  | |      s	J | |f       | S r!   )r   	typematchr$   s     r   add_abstractr(   0   s$    	1	%1v%		
(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                  :    e Zd ZdgZddZddZed	d       Z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   c                ,    t        | j                        S r!   )r.   r-   rA   s    r   r8   zZero.instantiateN   s    499%%r   N)r-   core.AbstractValuereturnstr)r1   r   rI   r5   )	__name__
__module____qualname__	__slots__r=   rB   staticmethodrE   r8    r   r   r5   r5   D   s*    h) 1 1&r   r5   c                    d| j                   fS )NrP   r,   r6   s    r   <lambda>rR   Q   s    b!&&\ r   c                    t        |       S r!   )r5   )r-   _s     r   rR   rR   Q   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_implrX   T   s+    	q	
 **+. / /	
(r   stop_gradientr	   stop_gradient_pc                    | S r!   rP   rW   s    r   rR   rR   \   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__a   r>   r   c                .    | j                   j                  S r!   )	__class__rK   rA   s    r   rB   zSymbolicZero.__repr__d   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`   rK   )r<   nameattrterrs        r   __getattr__zSymbolicZero.__getattr__i   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_valuez   s    55788r   N)r-   rG   rI   NonerH   )r1   r   rI   r]   )rK   rL   rM   r=   rB   ro   rO   rE   rP   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   ru   rv   s    ` r   zero_from_primalrw   ~   s    + 
!S	r   c                R    t        |       t        u rt        | j                        S | S r!   )r#   r5   r]   r-   rW   s    r   replace_internal_symbolic_zerosry      s     !%aDaff	7a7r   c                R    t        |       t        u rt        | j                        S | S r!   )r#   r]   r5   r-   rW   s    r   "replace_rule_output_symbolic_zerosr{      s     aL0aff7a7r   
zeros_likezeros_like_p)r   r   r   r   rI   r   )r-   rG   rI   r   )r7   zZero | ArrayrI   r   )r   r   rI   r   )F)r   JaxTypeOrTracer | ZerorI   JaxTypeOrTracer | SymbolicZero)r   r   rI   r~   )1
__future__r   collections.abcr   rf   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   rX   rZ   r]   rw   JaxTypeOrTracerry   r{   r}   rP   r   r   <module>r      sM   # $    # < < = , " ! ! !( +CL" )$	* *    !- 9; 5 :-& & T13M N (8) 8   , -  ! !+ .9 9< 88"@88%8*@8 $L1i 1r   