
    Vpf$                       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 d d
lmZmZmZmZ d dlmZmZmZmZ eecZZeecZZeZeZ ej!        Z"ed             Z#d0dZ$d1dZ%d Z&e&ej'        _(        d Z)e)ej'        _*        d2dZ+e+ej,        _+        d Z-e-ej,        _(        d Z.e.ej,        _*        d Z/e
j0        d             Z1d3d Z2e
j0        d!             Z3e
j0        d"             Z4d# Z5e5ej6        _*        d$ Z7e7ej6        _(        g d%d4d(Z8d5d*Z9e
j:        d+             Z;d, Z<g d%d4d-Z=d. Z>d/S )6    )annotations)contextmanager)Any)core)api_util)linear_util)flatten_fun_nokwargs)ad)partial_eval)tree_flattentree_unflattentree_structuretreedef_tuple)unzip2safe_mapsafe_zip
split_listc               #     K   t           j        j        j        j        } |                                 }	 |                                }|V  |                     |           d S # |                     |           w xY wN)r   thread_local_statetrace_statetrace_stackstackpopwith_cur_sublevelappend)r   maintraces      V/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/experimental/attrs.py	top_tracer    &   ss      

!
-
9
?%	$""$$E
KKK	LLELLs   A" "A9objr   attrstrc                ~    t                      5 }|                    | |          cd d d            S # 1 swxY w Y   d S r   )r    process_getattr)r!   r"   r   s      r   jax_getattrr&   0   s    {{ ,e  d++, , , , , , , , , , , , , , , , , ,s   266valPytreec                    t                      5 }|                    | ||          cd d d            S # 1 swxY w Y   d S r   )r    process_setattr)r!   r"   r'   r   s       r   jax_setattrr+   4   s    {{ 1e  dC001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   377c                "    t          ||          S r   getattr)_r!   r"   s      r   _getattr_implr0   8       	d		    c                (    t          |||           d S r   )setattr)r/   r!   r"   r'   s       r   _setattr_implr5   <   s    	#tSr2   r   pe.DynamicJaxprTracec                b     j         j        d          fd}||fj        vrt          ||          }j                            |           t          |          \  }}t          ||          }t          ||t          ||                     j                            ||f           d S d S )Nc                x   t          j        t          j        |                     }t          j        |t          j                                                  }                    |          x}j        t          |          <   j
                            |           j                            |           |S r   )r   raise_to_shapedget_avalpeDynamicJaxprTracersource_info_utilcurrentnewvartracer_to_varid
attrs_varsr   tracers)xavaltracervarframer   s       r   
new_tracerz#_ensure_tracked.<locals>.new_tracerC   s    a 0 011D"5$0C0K0K0M0MNNF,1LL,>,>>C%
bjj
)	C   	M   Mr2   )
r   jaxpr_stackattrs_trackedr.   attrs_initsr   r   mapr4   r   )	r   r!   r"   rJ   init_val	init_vals	init_treerD   rI   s	   `       @r   _ensure_trackedrR   @   s    
*
 
$%      
4[+++sD!!H	X&&&'11Iy*i((GC~i99:::	T{+++++ ,+r2   c                N    |                      ||           t          ||          S r   )rR   r.   r   r!   r"   s      r   _getattr_stagingrU   T   s(    T"""	d		r2   c                T    |                      ||           t          |||           d S r   )rR   r4   )r   r!   r"   r'   s       r   _setattr_stagingrW   Y   s0    T"""	#tSr2   c                   t          d |D                       \  }}t          d |D                       }t          |g|R           \  }}t          |g|R           \  }}	||	k    rt          t	          t          t          j        |           |          |          \  }
}t          |
          	                    ||          \  }}}t           |            |          }t           |            |          }|||fS )Nc              3  *   K   | ]\  }}}||f|fV  d S r    .0oats       r   	<genexpr>zjvp.<locals>.<genexpr>`   s0      II1a!QIIIIIIr2   c              3  <   K   | ]\  }}t          ||          V  d S r   r&   r\   r]   r^   s      r   r`   zjvp.<locals>.<genexpr>a   s0      ;;TQ{1a((;;;;;;r2   )r   tupler   	Exceptionr	   
_set_attrslu	wrap_init_jvpcall_wrappedr   )fprimalstangentsattr_tangentsattrsattr_primalsprimals_flatin_treetangents_flatin_tree_f_out_treeout_primals_flatout_tangents_flattangent_attrs_outout_primalsout_tangentss                    r   jvpr|   _   s   II=IIIII%;;U;;;;;,&'?w'?'?@@,(-)C()C)CDD-	/%ja%&H&H'RR,"h;?88;P;PM<# <#8%'8xxzz+;<<+

,=>>,	l$5	55r2   c              '  n   K   t          | |          D ]\  \  }}}t          |||           |i fV V  d S r   )zipr+   )ro   	attr_valsargsr]   r^   rE   s         r   rf   rf   l   sV      ui((  ifq!a1aRxr2   funlu.WrappedFunc                :    t          t          |                     S r   )jvpfun2jvp_subtrace2)r   s    r   ri   ri   r   s    	s##	$	$$r2   c              #     K   t          j        t          j                  5 }|| |fi fV \  }}}~d d d            n# 1 swxY w Y   |||fV  d S r   )r   new_mainr
   JVPTrace)rl   rm   r   rz   r{   ry   s         r   r   r   u   s      }R[!! TWh'+++ 1K0               	\#4444444s   <A A c              #    K   g | _         |                                 fdt          ||          D             }|i fV }t          j        |          }t          d |D                       \  }}g }| j         D ]{\  }	}
                    t          |	|
                    }t          |	|
|j                   t          |j
                  t          j        ur|                    |	|
|j
        f           || ` |||fV  d S )Nc                |    g | ]8\  }}t          |          t          j        urt          j        ||          n|9S rZ   )typer
   Zero	JVPTracer)r\   rE   r_   r   s      r   
<listcomp>z!jvp_subtrace2.<locals>.<listcomp>   sR     4 4 4Aq .2!WWBG-C-CUAq))) 4 4 4r2   c              3  2   K   | ]}|j         |j        fV  d S r   )primaltangent)r\   r_   s     r   r`   z jvp_subtrace2.<locals>.<genexpr>   s+      $P$Pqah	%:$P$P$P$P$P$Pr2   )rL   r   r~   rN   
full_raiser   r&   r+   r   r   r   r
   r   r   )r   rl   rm   
in_tracersansout_tracersrz   r{   ry   r!   namerG   r   s               @r   r   r   }   s6     $

 
 
"
"%4 4 4 4224 4 4*"n#E$c**+$$P$PK$P$P$PPP+|' < <ksDk#t4455FT6=)))FN27**T6>:;;;
\#4444444r2   c                   |                      |          }t          |j        t          j                  rt          |||j                  S ||f| j        j        vr!| j        j        	                    ||f           t          |||          S r   )
r   
isinstancer   r
   r   r4   r   r   rL   r   )r   r!   r"   maybe_tracerrG   s        r   _setattr_jvpr      s    L))&(( -3fm,,,	4[
000	J##S$K000	dF	#	##r2   c                "    t          ||          S r   r-   rT   s      r   _getattr_jvpr      r1   r2   )ro   ro   list[tuple[Any, str]]c          	        d |D             }d |D             }t          |          \  }}t          t          |          g|                                R           }t	          t          t          j        |           |          |          \  }}	t          |g||R  \  }
}}}}t          ||||| |	            f||          }t           |	            |
          |fS )Nc                4    g | ]\  }}t          ||          S rZ   rb   rc   s      r   r   zlinearize.<locals>.<listcomp>   &    6661+a##666r2   c                Z    g | ](}t          j        t          j        |                    )S rZ   )r   r:   r;   r\   ps     r   r   zlinearize.<locals>.<listcomp>   s-    MMM1$T]1%5%566MMMr2   )r   r   r   childrenr	   rf   rg   rh   
_linearize	_lin_wrapr   )rk   ro   rl   rp   
attr_avalsrq   rr   treeru   rv   
primal_out	out_pvalsjaxprconsts	attrs_outf_lins                   r   	linearizer      s   66666,MMMMM*&w//,	|44Jw7G7G7I7IJJ	K	K$%ja%&H&H$OO,"h4>5(5(&5( 5( 5(1*i	
E69j7HHJJ:O9& &%	

J	/	/	66r2   	traceablec                   t          t          |                     \  }}t          d |D                       t          d |D                       z   }t          ||f          \  }}t	          ||          \  }}t          j        ||          \  }	}
}t           |            |
          \  }}}d |D             }|g |||	| |            fS )Nc              3  T   K   | ]#}t           j                            |          V  $d S r   )r<   
PartialValknownr   s     r   r`   z_linearize.<locals>.<genexpr>   s2      <<qBM''**<<<<<<r2   c              3     K   | ]G}t           j                            t          j        |                                                    V  Hd S r   )r<   r   unknownr   r;   at_least_vspacer   s     r   r`   z_linearize.<locals>.<genexpr>   s\       ( ( m++DM!,<,<,L,L,N,NOO ( ( ( ( ( (r2   c                6    g | ]}|                                 S rZ   )	get_known)r\   pvals     r   r   z_linearize.<locals>.<listcomp>   s"    GGGT((GGGr2   )_split_attrsri   rd   r   r	   r<   trace_to_jaxpr_nounitsr   )r   rl   jvpfunro   in_pvalsr/   rr   jvpfun_flatrv   r   r   r   out_primals_pvalsout_tangents_pvalsout_tangent_attr_pvalsout_primals_constss                   r   r   r      s   tI//-&%<<G<<<<< ( (&( ( ( ( ((( Wg.//*!W.vw??+x6{HMM%FXXZZ++ @')?GG5FGGG
L 2L5KL

" "r2   c               /  h   K   | |fV \  }}}t          d |D                       \  }}|||f|fV  d S )Nc              3  *   K   | ]\  }}}||f|fV  d S r   rZ   r[   s       r   r`   z_split_attrs.<locals>.<genexpr>   s0      #M#MGAq!aVQK#M#M#M#M#M#Mr2   )r   )r   kwargsrl   rm   tangent_attrsro   tangent_attr_valss          r   r   r      s]      +/<%7%7"'8]##M#M}#M#M#MMM%		(-.555555r2   c                8    	 |\  	 	fd}|S )Nc                   	 t                     t                    z
  rt          t          |          \  }}|k    sJ  fdt          
          D             }t	          j        g||R  }t          |          		fdD             }t          	d           J t          |t          |          t                    z
  g          \  }}t          |          }|t          t          |                    fS )Nc                f    g | ]-\  }}                     |t          j        |                    .S rZ   getr
   r   )r\   r^   rF   rn   s      r   r   z,_lin_wrap.<locals>.f_lin.<locals>.<listcomp>   sK     @ @ @!!T $''274==99 @ @ @r2   c                ~    g | ]9}|                                 r|                                nt                    :S rZ   )is_knownr   next)r\   r   out_s     r   r   z,_lin_wrap.<locals>.f_lin.<locals>.<listcomp>   s8    
L
L
LQAJJLL81;;===d4jj
L
L
Lr2   )setre   r   r~   r   
eval_jaxpriterr   r   lenr   dict)rn   rm   	tangents_rt   attr_tangents_outtangents_outattr_tangents_outout_ctr   r   r   in_attrsrr   r   	out_attrsr   rv   s   `        @r   r   z_lin_wrap.<locals>.f_lin   s,   
=CMM):?&x00Ixh@ @ @ @%(:%>%>@ @ @N
/%
E.
E9
E
E
EC99D
L
L
L
L)
L
L
LCd###&0s3xxI7N6O&P&P#L#Hl33F4I'899::::r2   rZ   )
r   r   r   r   io_treer   r   r   rr   rv   s
   ```` `` @@r   r   r      sW    '8; ; ; ; ; ; ; ; ; ; ; ; 
,r2   c          	        d |D             }t          |          \  }}t          t          |          g|                                R           }t	          t          t          j        |           |          |          \  }}t          |g||R  \  }	}
}}}d |D             }t          |||
|| |            f||          }t           |            |	          |fS )Nc                4    g | ]\  }}t          ||          S rZ   rb   rc   s      r   r   zvjp.<locals>.<listcomp>   r   r2   c           
         g | ]K\  }}t          j        t          j        t          ||                                                              LS rZ   )r   r:   r;   r&   r   rc   s      r   r   zvjp.<locals>.<listcomp>   sW     ' ' 'Aq $T];q!3D3D%E%EFFVVXX ' ' 'r2   )r   r   r   r   r	   rf   rg   rh   r   	_vjp_wrapr   )rk   ro   rl   rp   rq   rr   r   ru   rv   r   r   r   r   r   r   f_vjps                   r   vjpr      s   66666,&w//,	|44Jw7G7G7I7IJJ	K	K$%ja%&H&H$OO,"h4>5(5(&5( 5( 5(1*i	' '%' ' '*
E69j7HHJJ:O9& &%	

J	/	/	66r2   c           
     b    	
 |\  	
d  j         D             i dd	 
fd}|S )Nc                @    g | ]}t          j        |j                  S rZ   )r
   UndefinedPrimalrF   )r\   vs     r   r   z_vjp_wrap.<locals>.<listcomp>   s%    >>>AR''>>>r2   )attr_cotangentsr   dict[tuple[Any, str], JaxVal]c               |   t          |           \  }}|k    sJ fdt          	          D             }t          j        d
g ||R           }t	          |t                    g          \  }}t          t          t          j        |                    }|t          t          |                    fS )Nc                f    g | ]-\  }}                     |t          j        |                    .S rZ   r   )r\   r^   rF   r   s      r   r   z,_vjp_wrap.<locals>.f_vjp.<locals>.<listcomp>   sE     ; ; ;At  ##Arwt}}55 ; ; ;r2   rZ   )
r   r~   r
   backward_passr   r   r   rN   instantiate_zerosr   )r   r   out_cts	out_tree_attr_ctsr   in_attr_barsarg_ctsargs_ctr   r   dummiesr   rr   r   r   rv   s    `       r   r   z_vjp_wrap.<locals>.f_vjp   s    %f--GYy    ; ; ; ;"9j99; ; ;H

5"fg7L7L87L7L
M
MC&sS]]O<<L'Wc"*>&H&HIIGDX|445555r2   )r   r   )invars)r   r   r   r   r   r   r   r   r   rr   rv   s   `` ` `` @@@r   r   r      s~    '8>>>>>'HJ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 
,r2   N)r!   r   r"   r#   )r!   r   r"   r#   r'   r(   )r   r6   r!   r   r"   r#   )r   r   )ro   r   )r   r   )?
__future__r   
contextlibr   typingr   jax._srcr   r   r   rg   jax._src.api_utilr	   jax._src.interpretersr
   r   r<   jax._src.tree_utilr   r   r   r   jax._src.utilr   r   r   r   rN   
unsafe_mapr~   
unsafe_zipJaxValr(   register_class_with_attrsregisterr    r&   r+   r0   	EvalTracer%   r5   r*   rR   DynamicJaxprTracerU   rW   r|   transformationrf   ri   r   r   r   r   r   r   r   transformation_with_auxr   r   r   r   rZ   r2   r   <module>r	     sR   # " " " " " % % % % % %                   & & & & & & 2 2 2 2 2 2 $ $ $ $ $ $ 4 4 4 4 4 4/ / / / / / / / / / / / @ @ @ @ @ @ @ @ @ @ @ @CZCZ		-  , , , ,1 1 1 1  !.   !. , , , ,$ (7  $   (8  $   (8  $6 6 6   
% % % % 5 5 5 5 5 5"$ $ $ +   *  ;= 
7 
7 
7 
7 
7 
7" " " " 6 6 6
  $ 57 7 7 7 7 7 7    r2   