
    vh<                       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 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mZmZ d dlmZmZmZmZ d dlmZmZ ee cZ Z!ee"cZ"Z#eZ$eZ%eZ&eZ'ejP                  Z(ejR                  Z)ejT                  Z+ejX                  Z,d9dZ-d:dZ.d;dZ/d;dZ0d Z1e1ejd                  _3        d Z4e4ejd                  _5        d Z6e6ejd                  _7        d Z8	 	 d<dZ9e9ejt                  _9        d Z;e;ejt                  _3        d Z<e<ejt                  _5        d Z=e=ejt                  _7        d Z>e
j~                  d        Z@d=dZAe
j~                  d        ZBe
j~                  d        ZCd ZDeDej                  _5        d  ZFeFej                  _3        eDej                  _5        eFej                  _3        g d!d>d"ZHd?d#ZIe
j                  d$        ZKd% ZLg d!d@d&ZMd' ZN G d( d)      ZOd* ZPePejd                  _Q        d+ ZReRejd                  _S        d, ZTd- ZUeUejt                  _Q        d. ZVeVejt                  _S        d/ ZWeWej                  _Q        d0 ZXeXej                  _S        d1 ZYeYej                  _Q        d2 ZZeZej                  _S         G d3 d4      Z[e[Z\d5 Z]e]ejd                  _^        d6 Z_e_ejt                  _^        d7 Z`y8)A    )annotations)AnyCallable)core)source_info_util)api_util)linear_util)Zero)flatten_fun_nokwargs)ad)partial_eval)tree_flattentree_unflattentree_structuretreedef_tuple)unzip2safe_mapsafe_zip
split_list)dtypefloat0c                z    t        j                         5 }|j                  | |      cd d d        S # 1 sw Y   y xY wN)r   take_current_traceprocess_getattr)objattrts      I/opt/face_recognition/venv/lib/python3.12/site-packages/jax/_src/attrs.pyjax_getattrr    .   s5      (AS$'( ( (   1:c                |    t        j                         5 }|j                  | ||      cd d d        S # 1 sw Y   y xY wr   )r   r   process_setattrr   r   valr   s       r   jax_setattrr&   2   s7      -AS$,- - -   2;c                H    dd l m} t        | ||j                  |d            S Nr   )	jax.numpynumpyjax_extendattrexpand_dims)r   r   r%   jnps       r   jax_appendattrr/   6   s    	T3??3#:	;;    c                |    t        j                         5 }|j                  | ||      cd d d        S # 1 sw Y   y xY wr   )r   r   process_extendattrr$   s       r   r,   r,   :   s7      0AT3/0 0 0r'   c                    t        ||      S r   getattr)_r   r   s      r   _getattr_implr7   >       	d	r0   c                    t        |||       y r   )setattr)r6   r   r   r%   s       r   _setattr_implr;   B   s    	#tSr0   c                    dd l m} t        ||t              }|t        u r|}nGt	        ||t        j                  |      t        j                  |             |j                  ||g      }t        |||       y r)   )	r*   r+   r5   dne_sentinel_check_append_type_agreementr   typeofconcatenater:   )r6   r   r   r%   r.   curnews          r   _extendattr_implrC   F   s^    T<(#L
C dDKK,<dkk#>NO
//3*
%C	#tSr0   c                D   t        j                  |j                  d   d|      }t        j                  |j                  d   d|      }t        j                  ||      sBt	        d| d|j                          d|j                          d|j                          d	      y )Nr   zcan only append to attr z with values of trailing shape z#, but appendattr got value of type z which has trailing shape .)r   mapped_avalshape	typematch	TypeError	str_short)r6   r   curtypevaltypeexpectedgots         r   r>   r>   Q   s    gmmA.7;(q)1g6#	#	&

"4&(G
  C
9#--/9J!	MN N 
'r0   c                   	
  j                   	t        j                         
	
 fd}||t        f	j                  v rt        d|       |||f	j                  vr|t        ||t              }	j                  j                  |       t        |      \  }}t        ||      }t        ||t        ||             	j                  j                  |||f       y y )Nc                   t        j                  |       }t        j                  |      }j	                  |      x}j
                  t        |      <   j                  j                  |       j                  j                  |       |S r   )
r   get_avalpeDynamicJaxprTracernewvartracer_to_varid
attrs_varsappendtracers)xavaltracervarframesource_infotraces       r   
new_tracerz#_ensure_tracked.<locals>.new_tracer_   sr    ==D""5$<F,1LL,>>C%

bj
)	C 	MM Mr0   z%can't read/write to append-only attr )r^   r   currentAppendattrs_trackedrI   r5   r=   attrs_initsrX   r   mapr:   r   )r`   r   r   kindra   init_val	init_vals	init_treerY   r^   r_   s   `        @@r   _ensure_trackedrk   Z   s    
++% ((*+ 
4E///
;D6B
CC	4e111sD,/H	X&'1Iy*i(GC~i9:	T401 2r0   c                H    | j                  ||t               t        ||      S r   )rk   	ReadWriter5   r`   r   r   s      r   _getattr_stagingro   s   s!    T9-	d	r0   c                L    | j                  ||t               t        |||       y r   )rk   rm   r:   )r`   r   r   r%   s       r   _setattr_stagingrq   x   s     T9-	#tSr0   c                X   dd l m} | j                  }||t        f|j                  v rt        d      ||t        f|j                  v}t        ||t              }|t        ur4t        ||t        j                  |      t        j                  |             |r@|j                  j                  |       |j                  j                  ||t        f       |}n;|t        usJ t        j                  |       5  |j                  ||g      }d d d        t!        ||       y # 1 sw Y   xY w)Nr   z+can't append to read/write-only attr {attr})r*   r+   r^   rm   rd   rI   rc   r5   r=   r>   r   r?   re   rX   set_current_tracer@   r:   )	r`   r   r   r%   r.   r^   first_writerh   r\   s	            r   _extendattr_stagingru   }   s   
++%	4u222
A
BBdF#5+>+>>+S$-(\! dDKK,A4;;sCST	X&	T623F<'''				& 0#/f0	#tV0 0s   6D  D)c                   t        d |D              \  }}t        d |D              }t        |g|      \  }}t        |g|      \  }}	||	k7  rt        t	        j
                  d| |i       }
t        t        t        j                  | |
      |      |      \  }}t        |      j                  ||      \  }}}t         |       |      }t         |       |      }|||fS )Nc              3  0   K   | ]  \  }}}||f|f  y wr    .0oar   s       r   	<genexpr>zjvp.<locals>.<genexpr>   s     I1a!QI   c              3  :   K   | ]  \  }}t        ||        y wr   )r    )rz   r{   r|   s      r   r}   zjvp.<locals>.<genexpr>   s     ;TQ{1a(;s   	attrs_jvp
debug_info)r   tupler   	Exceptionr   r   r   
_set_attrslu	wrap_init_jvpcall_wrappedr   )fprimalstangentsattr_tangentsattrsattr_primalsprimals_flatin_treetangents_flatin_tree_dbgf_out_treeout_primals_flatout_tangents_flattangent_attrs_outout_primalsout_tangentss                     r   jvpr      s    I=II%;U;;,&'?w'?@,(-)C()CD-	/KGR8#%aC0%8'C,"h;?8;P;PM<#8%'8xz+;<+
,=>,	l$5	55r0   c                T    t        ||      D ]  \  \  }}}t        |||         | | S r   )zipr&   )r   r   	attr_valsargsr{   r|   rZ   s          r   r   r      s5    ui( ifq!a1a	
D/r0   c                *    t        t        |             S r   )jvpfun2jvp_subtrace2)funs    r   r   r      s    	s#	$$r0   c                >   t        j                         }|D cg c];  }t        |t              s't	        |      t
        k(  rt        j                  |      n|= }}t        j                  d      }|5   | |||      \  }}}d d d        fS c c}w # 1 sw Y   xY w)Nr   )	r   TraceTag
isinstancer
   r   r   from_primal_valuer   transform_name_stack)	r   r   r   tagr   ctxr   r   r   s	            r   r   r      s    #5=?01 0:!T/B(f$ $$Q'*+, ?( ?--e4#
 M34S'83L0K0M	l$5	55?M Ms   A B2BBc           
        t        j                         5 }t        j                  ||      }g |_        t        ||      D cg c]9  \  }}t        |      t        j                  urt        j                  |||      n|; }}}t        j                  |      5   | | }	t        t        |j                  |	            \  }
}g }|j                  D ]`  \  }}|j                  t        ||            \  }}t        |||       t        |      t        j                  usM|j                  |||f       b 	 d d d        |`
fcd d d        S c c}}w # 1 sw Y   xY w# 1 sw Y   y xY wr   )r   r   r   JVPTracerd   r   typer
   	JVPTracerrs   r   rf   to_primal_tangent_pairr    r&   rX   )r   r   r   r   parent_tracer`   rZ   r   
in_tracersansr   r   r   r   nameprimaltangents                    r   r   r      sV     8LKKc*EC!'846a 04Awbgg/E",,ua+1L 6J 6				& 9zNc"(U-I-I3)O"Pk<** 9+366{37MNCv&='

"
"Cw#7
8	9	9 	&778 869 98 8s<   -E>E
 EBEE2E
EE	EE%c           	     >   | j                  |      \  }}t        |t        j                        rt	        |||      S ||f| j
                  j                  vr'| j
                  j                  j                  ||f       t	        ||t        j                  | ||            S r   )	r   r   r   r
   r:   r   rd   rX   r   )r`   r   r   maybe_tracerr   r   s         r   _setattr_jvpr      s    00>/&'!3f%%	4[		///	II""C;/	dBLL@	AAr0   c                    t        ||      S r   r4   rn   s      r   _getattr_jvpr      r8   r0   )r   c          	     
   |D cg c]  \  }}t        ||       }}}|D cg c]  }t        j                  |       }}t        |      \  }}	t	        t        |      g|	j                               }
t        j                  d| |i       }t        t        t        j                  | |      |      |
      \  }}t        |g|| \  }}}}}t        |||||	 |       f||      }t         |       |      |fS c c}}w c c}w )Nzattrs linearizer   )r    r   rQ   r   r   r   childrenr   r   r   r   r   r   
_linearize	_lin_wrapr   )r   r   r   r{   r|   r   p
attr_avalsr   r   treer   r   r   
primal_out	out_pvalsjaxprconsts	attrs_outf_lins                       r   	linearizer      s   0561+a#6,6*67Qa 7*7&w/,	|4Jw7G7G7IJ	K$-q'2>#%aC0%8$@,"h4>5(5(&5(1*i	
E69j7HJ:O9&%	
J	/	66 77s
   C:D c                z   t        t        |             \  }}t        d |D              t        d |D              z   }t        ||f      \  }}t	        ||      \  }}t        j                  ||      \  }	}
}t         |       |
      \  }}}|D cg c]  }|j                          }}|g |||	| |       fS c c}w )Nc              3  Z   K   | ]#  }t         j                  j                  |       % y wr   )rR   
PartialValknownrz   r   s     r   r}   z_linearize.<locals>.<genexpr>   s     <qBMM''*<s   )+c              3     K   | ]D  }t         j                  j                  t        j                  |      j                                F y wr   )rR   r   unknownr   rQ   to_tangent_avalr   s     r   r}   z_linearize.<locals>.<genexpr>   s9      ( mm++DMM!,<,L,L,NO (s   A
A)	_split_attrsr   r   r   r   rR   trace_to_jaxpr_nounitsr   	get_known)	traceabler   jvpfunr   in_pvalsr6   r   jvpfun_flatr   r   r   r   out_primals_pvalsout_tangents_pvalsout_tangent_attr_pvalspvalout_primals_constss                    r   r   r      s    tI/-&%<G<< (&( ((( Wg./*!W.vw?+x66{HM%FXZ+ @')?5FGT(GG
L 2L5KL

" " Hs   B8c                p     | |i |\  }}}t        d |D              \  }}|j                  |       |||fS )Nc              3  0   K   | ]  \  }}}||f|f  y wr   rx   ry   s       r   r}   z_split_attrs.<locals>.<genexpr>   s     #MGAq!aVQK#Mr~   )r   store)	r   r   r   kwargsr   r   tangent_attrsr   tangent_attr_valss	            r   r   r      sH    %&%7%7"'8]##M}#MM%	++e	(-	--r0   c                8    	 |\  	 	fd}|S )Nc           
     d   t        |       t              z
  rt        t        |      \  }}|k(  sJ t              D cg c]*  \  }}| j	                  |t        j                  |            , }}}t        j                  g|| }t        |      }D 	cg c]-  }	|	j                         r|	j                         n
t        |      / }}	t        |d       J t        |t        |      t              z
  g      \  }
}t        |
      }|t!        t        |            fS c c}}w c c}	w r   )setr   r   r   getr   r
   r   
eval_jaxpriteris_knownr   nextr   lenr   dict)r   r   	tangents_r   r|   r[   attr_tangents_outout_r   tangents_outattr_tangents_outout_ctr   r   in_attrsr   r   	out_attrsr   r   s                r   r   z_lin_wrap.<locals>.f_lin   s'   
=CM)?&x0Ixh%(:%>@!!T $''2774=9 @N @
//%
E.
E9
EC9DBK
LQAJJL1;;=d4j8
LC
Ld###&0s3xI7N6O&P#L#Hl3F4I'89:::@ Ms   /D'2D-rx   )
r   r   r   r   io_treer   r   r   r   r   s
   ```` `` @@r   r   r      s    '8; ; 
,r0   c          
     F   |D cg c]  \  }}t        ||       }}}t        |      \  }}t        t        |      g|j	                               }t        j                  d| |i       }	t        t        t        j                  | |	      |      |      \  }
}t        |
g|| \  }}}}}|D cg c]2  \  }}t        j                  t        ||            j                         4 }}}t        ||||| |       f||      }t!         |       |      |fS c c}}w c c}}w )Nz	attrs vjpr   )r    r   r   r   r   r   r   r   r   r   r   r   r   rQ   r   	_vjp_wrapr   )r   r   r   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   f_vjps                      r   vjpr     s-   0561+a#6,6&w/,	|4Jw7G7G7IJ	K$KGR8#%aC0%8$@,"h4>5(5(&5(1*i	 &'Aq k!Q/0@@B '* '
E69j7HJ:O9&%	
J	/	66 7's   D27Dc           
         	
 |\  
 j                   D cg c]!  }t        j                  |j                        # c}	i dd	
 fd}|S c c}w )N)attr_cotangentsc          
        t        |       \  }}|k(  sJ t              D cg c]*  \  }}|j                  |t        j                  |            , }}}t        j
                  dg ||      }t        |t              g      \  }}	t        t        t        j                  |	            }
|
t        t        |            fS c c}}w )Nrx   )r   r   r   r   r
   backward_passr   r   r   rf   instantiate_zerosr   )r   r   out_cts	out_tree_r|   r[   attr_ctsr   in_attr_barsarg_ctsargs_ctr   r   dummiesr   r   r   r   r   s              r   r   z_vjp_wrap.<locals>.f_vjp   s    %f-GYy   "9j9;At  ##Arwwt}5 ;H ;


5"fg7L7L87L
MC&sS]O<L'Wc"*>*>&HIGDX|4555;s   /C
)r   zdict[tuple[Any, str], JaxVal])invarsr   UndefinedPrimalr[   )r   r   r   r   r   r   r   vr   r  r   r   s   `` ` ``  @@@r   r   r     sI    '816>AR'>'HJ 6 6 
, ?s   &Ac                  4    e Zd ZU ded<   ded<   d Zd Zd Zy)	BoxPyTree_valcore.OpaqueTraceState_tagc                D    || _         t        j                         | _        y r   )r  r   get_opaque_trace_stater  selfr%   s     r   __init__zBox.__init__/  s    DI++-DIr0   c                x    t        j                         5 }|j                  |       cd d d        S # 1 sw Y   y xY wr   )r   r   process_box_getr  r   s     r   r   zBox.get2  s3    		 	 	" %at$% % %s   09c                z    t        j                         5 }|j                  | |      cd d d        S # 1 sw Y   y xY wr   )r   r   process_box_setr  r%   r   s      r   r   zBox.set5  s5    		 	 	" *atS)* * *r!   N)__name__
__module____qualname____annotations__r  r   r   rx   r0   r   r  r  ,  s    ,.%*r0   r  c                    |j                   S r   r  r`   boxs     r   _box_get_implr$  9      	/r0   c                    ||_         y r   r!  r`   r#  r%   s      r   _box_set_implr(  =  s	    #(r0   c                ~    |j                   j                         | u }|r|j                   j                         | u sJ |S r   )r  
_trace_ref)r`   r#  is_args      r   	_is_localr,  A  s;    88 E)&CHH'')U222	-r0   c                t    t        | |      s!| j                  |dt        j                         |j                  S Nr  r,  rk   rR   BoxAttrr  r"  s     r   _box_get_stagingr1  F  s+    	5#		#vrzz2	/r0   c                l    t        | |      s!| j                  |dt        j                         ||_        y r.  r/  r'  s      r   _box_set_stagingr3  L  s)    	5#		#vrzz2#(r0   c                    |j                   S r   r!  r"  s     r   _box_get_jvpr5  R  r%  r0   c                    | j                  |      \  }}t        |t        j                        st	        | |      st
        t        |t        j                        r||_        y t        j                  | ||      |_        y r   )r   r   r   r
   r,  r   r  r   r`   r#  r%   r   r   s        r   _box_set_jvpr8  V  s[    005/&'
Wbgg
&)E3*?
O!CH||E673CHr0   c                    |j                   S r   r!  r"  s     r   _box_get_linearizer:  `  r%  r0   c                    | j                  |      \  }}t        |t        j                        st	        | |      st
        t        |t        j                        r||_        y t        r   )	r   r   r   r
   r,  r   r  NotImplementedErrorLinearizeTracerr7  s        r   _box_set_linearizer>  d  sM    005/&'
Wbgg
&)E3*?
O!CH
r0   c                  @    e Zd ZU ded<   ded<   ded<   ddZd	 Zd
 Zy)Listr  r  r  r  bool_is_argNc                `    |g n|d d  | _         t        j                         | _        d| _        y )NF)r  r   r  r  rB  r  s     r   r  zList.__init__t  s*    ks1vDI++-DIDLr0   c                z    t        j                         5 }|j                  | |      cd d d        S # 1 sw Y   y xY wr   )r   r   process_list_appendr  s      r   rX   zList.appendx  s5    		 	 	" .a""4-. . .r!   c                    t        j                         5 }t        ||       r$| j                  s| j                  d d  cd d d        S d d d        t        d      # 1 sw Y   t        d      xY w)NzAcan't read the value of a List that was not created in this scope)r   r   r,  rB  r  r   r  s     r   r   zList.get{  sm    		 	 	" a	1d	DLLyy|    ! " "  ! " "s   'AA,r   )r  r  r  r  r  rX   r   rx   r0   r   r@  r@  p  s!    ,-."r0   r@  c                :    |j                   j                  |       y r   )r  rX   r`   lstr%   s      r   _list_append_implrJ    s    ((//#r0   c                L    t        | |      st        | |       t        | ||      S r   )r,  _ensure_list_trackedrJ  rH  s      r   _list_append_stagingrM    s%    	5#	$	5#s	++r0   c                   | j                   }|dt        j                  f|j                  vrY|j                  j                  |j                         |j                  j                  |dt        j                  f       g |_        y y r.  )r^   rR   ListAttrrd   re   rX   r  )r`   rI  r^   s      r   rL  rL    sg    
++%	62;;u':'::	SXX&	VR[[9:CH ;r0   N)r   r   r   strreturnr  )r   r   r   rP  r%   r  rQ  None)r   r   r   rP  r%   ArrayrQ  rR  )r`   zpe.DynamicJaxprTracer   r   r   rP  rg   zpe.AttrKind)r   lu.WrappedFun)r   r   r   list[tuple[Any, str]])r   rT  )r   rU  )a
__future__r   typingr   r   jax._srcr   r   r   r	   r   jax._src.ad_utilr
   jax._src.api_utilr   jax._src.interpretersr   r   rR   jax._src.tree_utilr   r   r   r   jax._src.utilr   r   r   r   jax._src.dtypesr   r   rf   
unsafe_mapr   
unsafe_ziprS  JaxValr  	PyTreeDefrm   rc   register_class_with_attrsregisterr=   r    r&   r/   r,   r7   	EvalTracer   r;   r#   rC   r2   r>   rk   DynamicJaxprTracero   rq   ru   r   transformation2r   r   r   r   r   r   r   LinearizeTracer   r   transformation_with_aux2r   r   r   r   r  r$  r  r(  r  r,  r1  r3  r5  r8  r:  r>  r@  
AppendListrJ  rE  rM  rL  rx   r0   r   <module>rk     s   #    %  & # 2 $ 4/ / @ @ )CZCZ			LL		--(-<0!. !.  %5 !N2%2. (7   $ (8   $ (8   $( +>   '6  
% 6 6 8 8$B + * $0   !$0   !DF 7" . .$ 57 7* *!. !. 
 (8   $ (8   $* 4 + $6   !: %7   !" "" 
%6 ", ,@   (r0   