
    Wh?%                       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 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j%        Z&d1dZ'd2dZ(d Z)e)ej*        _+        d Z,e,ej*        _-        d3dZ.e.ej/        _.        d Z0e0ej/        _+        d Z1e1ej/        _-        d Z2e	j3        d             Z4d4d!Z5e	j3        d"             Z6e	j3        d#             Z7d$ Z8e8ej9        _-        d% Z:e:ej9        _+        g d&d5d)Z;d6d+Z<e	j=        d,             Z>d- Z?g d&d5d.Z@d/ ZAd0S )7    )annotations)Any)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float0objr   attrstrc                    t          j                    5 }|                    | |          cd d d            S # 1 swxY w Y   d S N)r   take_current_traceprocess_getattr)r   r   ts      \/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/jax/experimental/attrs.pyjax_getattrr    (   s       (AS$''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   7;;valPytreec                    t          j                    5 }|                    | ||          cd d d            S # 1 swxY w Y   d S r   )r   r   process_setattr)r   r   r!   r   s       r   jax_setattrr%   ,   s       -AS$,,- - - - - - - - - - - - - - - - - -s   8<<c                "    t          ||          S r   getattr)_r   r   s      r   _getattr_implr*   0       	d		    c                (    t          |||           d S r   )setattr)r)   r   r   r!   s       r   _setattr_implr/   4   s    	#tSr,   tracepe.DynamicJaxprTracec                L     j          fd}||fj        vrt          ||          }j                            |           t          |          \  }}t          ||          }t          ||t          ||                     j                            ||f           d S d S )Nc                T   t          j        |           }t          j        |t          j                                                  }                    |          x}j        t          |          <   j	        
                    |           j        
                    |           |S r   )r   get_avalpeDynamicJaxprTracerr   currentnewvartracer_to_varid
attrs_varsappendtracers)xavaltracervarframer0   s       r   
new_tracerz#_ensure_tracked.<locals>.new_tracer;   s    =D"5$0C0K0K0M0MNNF,1LL,>,>>C%
bjj
)	C   	M   Mr,   )	rB   attrs_trackedr(   attrs_initsr<   r   mapr.   r   )	r0   r   r   rC   init_val	init_vals	init_treer=   rB   s	   `       @r   _ensure_trackedrJ   8   s    
+%      
4[+++sD!!H	X&&&'11Iy*i((GC~i99:::	T{+++++ ,+r,   c                N    |                      ||           t          ||          S r   )rJ   r(   r0   r   r   s      r   _getattr_stagingrM   L   s(    T"""	d		r,   c                T    |                      ||           t          |||           d S r   )rJ   r.   )r0   r   r   r!   s       r   _setattr_stagingrO   Q   s0    T"""	#tSr,   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ar   s       r   	<genexpr>zjvp.<locals>.<genexpr>X   s0      II1a!QIIIIIIr,   c              3  <   K   | ]\  }}t          ||          V  d S r   r    rT   rU   rV   s      r   rW   zjvp.<locals>.<genexpr>Y   s0      ;;TQ{1a((;;;;;;r,   )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   jvprs   W   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5r,   c                `    t          ||          D ]\  \  }}}t          |||            | | S r   )zipr%   )rb   rf   	attr_valsargsrU   rV   r>   s          r   r]   r]   d   sC    ui((  ifq!a1a	
D/r,   funlu.WrappedFunc                :    t          t          |                     S r   )jvpfun2jvp_subtrace2)rx   s    r   r`   r`   j   s    	s##	$	$$r,   c                    t          j                    }d |D             }t          j        d          }|5   | |||          \  }}}d d d            n# 1 swxY w Y   |||fS )Nc                    g | ]E}t          |t                    s,t          |          t          k    rt          j        |          n|FS rR   )
isinstancer	   r   r   from_primal_value)rT   r   s     r   
<listcomp>zjvpfun2.<locals>.<listcomp>p   s^     ? ? ?01 0:!T/B/B ,((f$$ $Q'''*+? ? ?r,   rs   )r   TraceTagr   transform_name_stack)rb   rc   rd   tagctxrq   rr   rp   s           r   r{   r{   m   s    #? ?5=? ? ?(-e44#
 M M341S'83L3L0K0M M M M M M M M M M M M M M M	l$5	55s   AAAc           	     |   t          j                    5 }t          j        ||          g |_        fdt          ||          D             }t          j                  5   | | }t          t          j	        |                    \  }}g }	|j        D ]o\  }
}	                    t          |
|                    \  }}t          |
||           t          |          t          j        ur|	                    |
||f           p	 d d d            n# 1 swxY w Y   |`|||	fcd d d            S # 1 swxY w Y   d S )Nc                |    g | ]8\  }}t          |          t          j        urt          j        ||          n|9S rR   )typer   r	   	JVPTracer)rT   r>   r   r0   s      r   r   z!jvp_subtrace2.<locals>.<listcomp>|   sR     6 6 6a 04Awwbg/E/E",ua+++1 6 6 6r,   )r   r   r   JVPTracerD   ru   set_current_tracer   rF   to_primal_tangent_pairr    r%   r   r	   r<   )rb   r   rc   rd   parent_trace
in_tracersansrq   rr   rp   r   nameprimaltangentr0   s                 @r   r|   r|   w   s      8LKc**EC6 6 6 6!'8446 6 6J			&	& 9 9AzNc"(U-I3)O)O"P"Pk<* 9 9+366{37M7MNNCv&&&==''

"
"Cw#7
8
8
8	9	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 	&778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s7   AD1"B$DD1D	D1D		D11D58D5c           	     4   |                      |          \  }}t          |t          j                  rt	          |||          S ||f| j        j        vr!| j        j                            ||f           t	          ||t          j        | ||                    S r   )	r   r   r   r	   r.   r   rD   r<   r   )r0   r   r   maybe_tracerr   r   s         r   _setattr_jvpr      s    00>>/&'!! &3f%%%	4[	///	I""C;///	dBL@@	A	AAr,   c                "    t          ||          S r   r'   rL   s      r   _getattr_jvpr      r+   r,   )rf   rf   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 rR   rY   rZ   s      r   r   zlinearize.<locals>.<listcomp>   &    6661+a##666r,   c                6    g | ]}t          j        |          S rR   )r   r4   rT   ps     r   r   zlinearize.<locals>.<listcomp>   s"    777Qa  777r,   )r   r   r   childrenr
   r]   r^   r_   
_linearize	_lin_wrapr   )rb   rf   rc   rg   
attr_avalsrh   ri   treerl   rm   
primal_out	out_pvalsjaxprconsts	attrs_outf_lins                   r   	linearizer      s   66666,77,777*&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6r,   	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   )r5   
PartialValknownr   s     r   rW   z_linearize.<locals>.<genexpr>   s2      <<qBM''**<<<<<<r,   c              3     K   | ]G}t           j                            t          j        |                                                    V  Hd S r   )r5   r   unknownr   r4   to_tangent_avalr   s     r   rW   z_linearize.<locals>.<genexpr>   s\       ( ( m++DM!,<,<,L,L,N,NOO ( ( ( ( ( (r,   c                6    g | ]}|                                 S rR   )	get_known)rT   pvals     r   r   z_linearize.<locals>.<listcomp>   s"    GGGT((GGGr,   )_split_attrsr`   r[   r   r
   r5   trace_to_jaxpr_nounitsr   )r   rc   jvpfunrf   in_pvalsr)   ri   jvpfun_flatrm   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

" "r,   c                     | |i |\  }}}t          d |D                       \  }}|                    |           |||fS )Nc              3  *   K   | ]\  }}}||f|fV  d S r   rR   rS   s       r   rW   z_split_attrs.<locals>.<genexpr>   s0      #M#MGAq!aVQK#M#M#M#M#M#Mr,   )r   store)	rb   r   rw   kwargsrc   rd   tangent_attrsrf   tangent_attr_valss	            r   r   r      s_    %&Q%7%7%7"'8]##M#M}#M#M#MMM%	++e	(-	--r,   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 rR   getr   r	   )rT   rV   r?   re   s      r   r   z,_lin_wrap.<locals>.f_lin.<locals>.<listcomp>   sK     @ @ @!!T $''274==99 @ @ @r,   c                ~    g | ]9}|                                 r|                                nt                    :S rR   )is_knownr   next)rT   r   out_s     r   r   z,_lin_wrap.<locals>.f_lin.<locals>.<listcomp>   s8    
L
L
LQAJJLL81;;===d4jj
L
L
Lr,   )setr\   r   ru   r   
eval_jaxpriterr   r   lenr   dict)re   rd   	tangents_rk   attr_tangents_outtangents_outattr_tangents_outout_ctr   r   r   in_attrsri   r   	out_attrsr   rm   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::::r,   rR   )
r   r   r   r   io_treer   r   r   ri   rm   s
   ```` `` @@r   r   r      sW    '8; ; ; ; ; ; ; ; ; ; ; ; 
,r,   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 rR   rY   rZ   s      r   r   zvjp.<locals>.<listcomp>   r   r,   c                |    g | ]9\  }}t          j        t          ||                                                    :S rR   )r   r4   r    r   rZ   s      r   r   zvjp.<locals>.<listcomp>   sL     ' ' 'Aq k!Q//00@@BB ' ' 'r,   )r   r   r   r   r
   r]   r^   r_   r   	_vjp_wrapr   )rb   rf   rc   rg   rh   ri   r   rl   rm   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6r,   c           
     b    	
 |\  	
d  j         D             i dd	 
fd}|S )Nc                @    g | ]}t          j        |j                  S rR   )r   UndefinedPrimalr?   )rT   vs     r   r   z_vjp_wrap.<locals>.<listcomp>   s%    >>>AR''>>>r,   )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 rR   r   )rT   rV   r?   r   s      r   r   z,_vjp_wrap.<locals>.f_vjp.<locals>.<listcomp>   sE     ; ; ;At  ##Arwt}}55 ; ; ;r,   rR   )
r   ru   r   backward_passr   r   r   rF   instantiate_zerosr   )r   r   out_cts	out_tree_attr_ctsr   in_attr_barsarg_ctsargs_ctr   r   dummiesr   ri   r   r   rm   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5r,   )r   r   )invars)r   r   r   r   r   r   r   r   r   ri   rm   s   `` ` `` @@@r   r   r      s~    '8>>>>>'HJ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 
,r,   N)r   r   r   r   )r   r   r   r   r!   r"   )r0   r1   r   r   r   r   )rx   ry   )rf   r   )r   ry   )B
__future__r   typingr   jax._srcr   r   r   r   r^   jax._src.ad_utilr	   jax._src.api_utilr
   jax._src.interpretersr   r   r5   jax._src.tree_utilr   r   r   r   jax._src.utilr   r   r   r   jax._src.dtypesr   r   rF   
unsafe_mapru   
unsafe_zipJaxValr"   register_class_with_attrsregisterr    r%   r*   	EvalTracer   r/   r$   rJ   DynamicJaxprTracerM   rO   rs   transformation2r]   r`   r{   r|   r   r   r   r   r   transformation_with_aux2r   r   r   r   rR   r,   r   <module>r     sf   # " " " " "             % % % % % %       & & & & & & # # # # # # 2 2 2 2 2 2 $ $ $ $ $ $ 4 4 4 4 4 4/ / / / / / / / / / / / @ @ @ @ @ @ @ @ @ @ @ @ ) ) ) ) ) ) ) )CZCZ		-( ( ( (- - - -  !.   !. , , , ,$ (7  $   (8  $   (8  $6 6 6   
% % % % 6 6 6 8 8 8$B B B +   *  ;= 
7 
7 
7 
7 
7 
7" " " " . . .  $ 57 7 7 7 7 7 7    r,   