
    Vpf             	         U 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 d dlZd dlZd dlZd dlmZmZmZ d dlmZ d dl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% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[ eSe\cZ\Z]eRe^cZ^Z_d Z`eaZbeaZceaZddMd Ze G d! d"ef          Zg G d# d$e+d%                   ZhdNd)Zie"jj        dOd/            Zke"jj        dPd6            Zli Zmd7end8<   i Zod7end9<   i Zpd7end:<   d; Zqeqepejr        <   dd<d=Zsed>d?d@dAe.f         Zt G dB d%e,          Zue#jv        	 dQdRdG            Zwe#jv        	 dQdRdH            Zxe"jy        dSdJ            ZzdK Z{e"jy        dSdL            Z|e"jy        dSdM            Z} ed@dNg          Z~ edAdNg          Z ed?g           Z G dO d>e          Z	 dTdUd]ZdVdbZdWddZeZdXdg            ZeZdYdj            ZdZdlZd[dpZeZdq             Zd\dyZd]d{ZeZd^d}            ZeZ G d~ d          Z e            Z G d d          Z e            Z G d de          Zeeeef         Zeeef         Zd_dZefee8df         ee8df         ee         ee         ee4         f         Zeedef         ee         ee         e8gef         Zi Zdend<   d`dZeee         ee         ee         ee         eaeegefeef         f         Zeeeef         e0ge0f         ZdadZe	d             ZeeddbdZeee         ee         ee         ee         eaeaeegefeef         f         ZeddcdZeZddd            Z eedd           eej        <    eedd           eejr        <   dedZdfdZdgdZ eZe          ZdhdZ eeZdC          did            Z	 dQdjdZ	 dQdkdZeZdld            Zeee         e8gefee         ee8df         f         f         ZdmdZi Zdend<   dndZeeej        <   eZdod            ZdpdZeeejr        <   eZdqd            ZdrdĄZeZdsdń            ZdtdȄZdrdɄZ G dʄ dej,                  Zd̄ Zeej        e<   dud΄Z G dτ dЦ          ZdvdԄZeeeedf                  e8gefeeedf                  ee8df         f         f         Zi Zdend<   ee8gefeee4df                  ee8df         f         f         Zi Zdend<   dwdڄZ G dۄ dej+                  Zi Zd7end<   e"jy        dބ             Zd߄ Ze"jj        d             Z G d de          ZːdxdZ̐dydZ͐dzdZΐd{dZϐd|dZe#jv        	 dTddd}d            Zdddd~dZe#jv        	 dTdd            Z	 dTdd Ze	d             Ze#jv        	 	 ddd            Ze#jv        	 dTdd            ZeZeeeaef         efedf         f         Zeefeef                  ZeZېdd	Zܐdd
ZݐddZސddZߐddZddZddZddZdd!Z G d" d#          Zdd(Zdd,Zdd2ZeZeZdd5Z G d6 d7e          Zdd:Zdd<Zdd?Zi Zd7end@<   ddCZdD ZdE ZdF Ze"jy        ddG            ZdendH<   ddIZddLZdS (      )annotations)
namedtuple)CallableSequenceHashable)contextmanagerAbstractContextManager)partialN)Any
NamedTupleUnion)ref)ad_util)api_util)config)core)dtypeseffects)linear_util)profiler)source_info_util)
compute_on)flattened_fun_in_treeflatten_fun_nokwargsfun_sourceinfo)TraceTracerJaxprLiteralget_avalAbstractValueClosedJaxprnew_jaxpr_eqnConcreteArrayVarDropVarraise_to_shapedAtomJaxprEqn	PrimitiveShapedArrayDShapedArraymapped_avalunmapped_avalDBIdxInDBIdxOutDBIdx	InputType
OutputTypeget_referentJaxprEqnContext)AbstractRef)	PyTreeDeftreedef_tupletree_unflattentree_flattentree_structureKeyPathgenerate_key_pathskeystr)unzip2safe_zipsafe_maptoposort
split_listmerge_listspartition_list
OrderedSetas_hashable_functionweakref_lru_cache	subs_listc                    | S N xs    b/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/interpreters/partial_eval.pyidentityrQ   9   s        flu.WrappedFun	orig_typeInputType | None	in_knowns
list[bool]returnc                  	
 || S t          d |D                       rUt          d |D                       s<d t          ||          D             }t          j        | t          |                    S  G d d          		fd|D             fd|D             }d t          ||          D             }d	 t          |          D             }d
 t          ||          D             }t          |          
	
fd|D             }d |D             }d t          g ||R           D             fd|D             }t          j        | g ||R           S )Nc              3      K   | ]	\  }}|V  
d S rL   rM   ).0_es      rP   	<genexpr>z+_update_annotation_known.<locals>.<genexpr>H   s&      	"	"1!	"	"	"	"	"	"rR   c              3     K   | ]=\  }}|j         D ]0}t          |          t          u t          |          t          u V  1>d S rL   )shapetyper-   r0   )r\   ar]   ds       rP   r_   z+_update_annotation_known.<locals>.<genexpr>I   s`       * *41aag * *aL(( 1gg(((((* *rR   c                    g | ]	\  }}||
S rM   rM   )r\   tyknowns      rP   
<listcomp>z,_update_annotation_known.<locals>.<listcomp>K   s!    GGGyr5GGGGrR   c                      e Zd Zd ZdS )&_update_annotation_known.<locals>.Namec                    || _         d S rL   rc   )selfrc   s     rP   __init__z/_update_annotation_known.<locals>.Name.__init__P   s    A4666rR   N)__name__
__module____qualname__rn   rM   rR   rP   Namerj   O   s        %%%%%rR   rr   c                ,    g | ]\  }} |          S rM   rM   )r\   rc   r]   rr   s      rP   rh   z,_update_annotation_known.<locals>.<listcomp>Q   s%    
*
*
*tq!4477
*
*
*rR   c                    g | ]S\  }}|t          |          t          u r4|                    t          fd |j        D                                 n|TS )c              3  b   K   | ])}t          |          t          u r|j                 n|V  *d S rL   rb   r0   val)r\   rd   namess     rP   r_   z6_update_annotation_known.<locals>.<listcomp>.<genexpr>R   sQ        2  2$% 15Q50@0@aea  2  2  2  2  2  2rR   ra   rb   r-   updatetuplera   )r\   rc   r^   rx   s      rP   rh   z,_update_annotation_known.<locals>.<listcomp>R   s     I I I15AaI1gg%% 88%  2  2  2  2)* 2  2  2 2 28 3 3 3+,I I IrR   c                    g | ]	\  }}||
S rM   rM   )r\   rc   rg   s      rP   rh   z,_update_annotation_known.<locals>.<listcomp>U   s!    
<
<
<Ee
<1
<
<
<rR   c                "    g | ]\  }\  }}|
|S rM   rM   )r\   or]   r^   s       rP   rh   z,_update_annotation_known.<locals>.<listcomp>W   s%    >>>ia!QA>>>>rR   c                    g | ]	\  }}||
S rM   rM   )r\   r   ks      rP   rh   z,_update_annotation_known.<locals>.<listcomp>X   s!    >>>daA>>>>rR   c                ~    h | ]9}t          |          t          u r!|j        D ]}t          |          u |v|:S rM   )rb   r-   ra   )r\   rc   rd   rr   expl_names_s      rP   	<setcomp>z+_update_annotation_known.<locals>.<setcomp>Z   sZ     = = =aDGG|$;$;QW$;$;77d??q';'; ';';';';rR   c                     g | ]}|j         d fS Frl   )r\   ns     rP   rh   z,_update_annotation_known.<locals>.<listcomp>\   s    000U|000rR   c                4    i | ]\  }}|t          |          S rM   r0   )r\   ir   s      rP   
<dictcomp>z,_update_annotation_known.<locals>.<dictcomp>^   s$    LLLdaaqLLLrR   c                    g | ]P}t          |          t          u r4|                    t          fd |j        D                                 n|dfQS )c              3  D   K   | ]}                     ||          V  d S rL   get)r\   rd   name_maps     rP   r_   z6_update_annotation_known.<locals>.<listcomp>.<genexpr>_   s1      $I$IAX\\!Q%7%7$I$I$I$I$I$IrR   ry   Trz   )r\   rc   r   s     rP   rh   z,_update_annotation_known.<locals>.<listcomp>_   sy     I I I=>477l** u$I$I$I$I$I$I$IIIJJJ0149 I I IrR   )allanyzipluannotater|   set	enumerate)rS   rU   rW   new_typeavals
expl_names
impl_names	impl_part	expl_partrr   r   r   rx   s            @@@@rP   _update_annotation_knownr   ?   s#   
 q 
	"	"		"	"	""" +
 * *9 * * * * *+ HGC	9$=$=GGGH;q%//***& & & & & & & &
*
*
*
*	
*
*
*%I I I I9BI I I% =
<S	22
<
<
<%>>3ui#8#8>>>*>>c*i88>>>*J+= = = = =5 = = =*00Z000)LLi0J*0Jz0J0J&K&KLLL(I I I IBGI I I)	Q0)0i00	1	11rR   c                  b    e Zd ZdZddZedd            Zedd            ZddZddZ	ddZ
dS )
PartialValao  Partial value: either a known value or an unknown (abstract) value.

  Represented as a pair `(aval_opt, const)` of one of two kinds:
  * `(None, <Constant>)` indicates a known value, where the constant is either a
    Tracer or satisfies `core.valid_jaxtype(const)`;
  * `(<AbstractValue>, None)` indicates an unknown value characterized by an
    abstract value.
  xs'tuple[AbstractValue | None, core.Value]c                J   |\  }}t           j        j        rst          |t          t          d           f          s
J |            |8t          |t          j                  st          j        |          s
J |            |d u |d u z  sJ t          
                    | |          S rL   )r   enable_checksvalue
isinstancer"   rb   r   r   valid_jaxtyper|   __new__)clsr   pvconsts       rP   r   zPartialVal.__new__l   s    IB! ,]DJJ788<<"<<<mz%==m '' m*/ mm DjUd]++++==b!!!rR   r   
core.ValuerY   c                $    t          d |f          S rL   r   )r   r   s     rP   rg   zPartialVal.knownw   s    tUm$$$rR   avalr"   c                $    t          |d f          S rL   r   )r   r   s     rP   unknownzPartialVal.unknown{   s    tTl###rR   boolc                    | d         d u S )Nr   rM   rm   s    rP   is_knownzPartialVal.is_known   s    7d?rR   core.Value | Nonec                &    | d         | d         ndS )z)Get the known value, if known, else None.r   N   rM   r   s    rP   	get_knownzPartialVal.get_known   s    1go4774/rR   c                \    |                                  }|t          |          S | d         S )zEGet AbstractValue directly (if unknown) or from the constant (known).Nr   )r   r!   rm   rg   s     rP   r!   zPartialVal.get_aval   s,    NNEe__!WnrR   N)r   r   )r   r   rY   r   )r   r"   rY   r   rY   r   )rY   r   rY   r"   )ro   rp   rq   __doc__r   classmethodrg   r   r   r   r!   rM   rR   rP   r   r   c   s         	" 	" 	" 	" % % % ;% $ $ $ ;$   0 0 0 0     rR   r   c                       e Zd Zd# fdZd$dZd%d
Zd&dZd'dZd'dZd'dZ	d(dZ
d)dZd'dZd Zd Zd Zd*dZd Zd Zd Zd Zd Zd  Zd! Zd" Z xZS )+
JaxprTrace
name_stacksource_info_util.NameStackc               B     t                      j        |  || _        d S rL   )superrn   r   )rm   r   args	__class__s      rP   rn   zJaxprTrace.__init__   s"    EGGd DOOOrR   rw   r   rY   JaxprTracerc                ,    |                      |          S rL   	new_constrm   rw   s     rP   purezJaxprTrace.pure       >>#rR   r   c                ,    |                      |          S rL   r   r   s     rP   liftzJaxprTrace.lift   r   rR   c                H    t          | |j        t          |                    S rL   )r   pvalFreeVarr   s     rP   subliftzJaxprTrace.sublift   s    tSXws||444rR   c                    t          |t                    r|j        j        | j        k    rt          t          | t                              |          d           S rL   )r   r   _tracelevel	Exceptionr   r   rg   r   s     rP   r   zJaxprTrace.new_const   sJ    #v 3:#3tz#A#AotZ--c22D999rR   c           
         t          |          }t          | t                              |          t	          |t          |                              S rL   )r!   r   r   r   r    r(   )rm   rw   r   s      rP   new_instantiated_literalz#JaxprTrace.new_instantiated_literal   sF    C==DtZ//55sOD$9$9::< < <rR   c                $    t          |          }t          |t                    r6 fd|j        D             }|                    t          |                    }t           t                              |          t          |                    S )Nc                    g | ]C}t          |t                    r*|j        j        j        k     r                    |          n|DS rM   r   r   r   r   new_instantiated_constr\   rd   rm   s     rP   rh   z5JaxprTrace.new_instantiated_const.<locals>.<listcomp>   sc     $ $ $ Q''O,-HNTZ,G,G **1---MN$ $ $rR   ry   )
r!   r   r-   ra   r{   r|   r   r   r   ConstVar)rm   rw   r   ra   s   `   rP   r   z!JaxprTrace.new_instantiated_const   s    C==D$%% -$ $ $ $
$ $ $e [[uU||[,,dtZ//55x}}EEErR   r   r   c                    |                                 }||                                }t          |          t          u r6 fd|j        D             }|                    t          |                    }t           t          	                    |          t                                S                      |          S )Nc                    g | ]C}t          |t                    r*|j        j        j        k     r                    |          n|DS rM   r   r   s     rP   rh   z&JaxprTrace.new_arg.<locals>.<listcomp>   sc     & & & q&))Q./hntz.I.I ,,Q///OP& & &rR   ry   )r   r!   rb   r-   ra   r{   r|   r   r   r   LambdaBindingr   )rm   r   r   r   ra   s   `    rP   new_argzJaxprTrace.new_arg   s    NNE
 }]]__d	d|	#	#& & & &*& & & {{u{..z11$77III^^E"""rR   tracerc                    |j                                         }||S t          |          t          j        v r-t          j        |          dk    r|                     |          S |                     |          S NrM   )	r   r   rb   r   literalable_typesnpra   r   r   )rm   r   r   s      rP   instantiate_constzJaxprTrace.instantiate_const   sm    K!!##E}m	e.	.	.28E??b3H3H,,U333**5111rR   c                   |j                                         }||S t          t          |          t	          j        |                    }t          | t                              |          t          |                    S rL   )
r   r   r(   r!   r   isscalarr   r   r   r   )rm   r   r   r   s       rP   instantiate_const_abstractedz'JaxprTrace.instantiate_const_abstracted   sd    K!!##E}mXe__bk%.@.@AAdz11$77%IIIrR   c                n    |t           v rt          |         | g|R i |S |                     |||          S rL   )custom_partial_eval_rulesdefault_process_primitiverm   	primitivetracersparamss       rP   process_primitivezJaxprTrace.process_primitive   sI    ---&y1$KKKKFKKK++IwGGGrR   c                8    d |D             }t          d |D                       r |j        |i |S t           j        |          }d |D             } |j        |i |\  }}                                 }t          j                                        |          }	|j	        r0 fd|D             }
t          ||
||||	          }|
D ]	}||_        
|
S t           t                              |          d           }t          ||g||||	          |_        |S )Nc                @    g | ]}|j                                         S rM   )r   r   r\   ts     rP   rh   z8JaxprTrace.default_process_primitive.<locals>.<listcomp>   s&    222Qaf  222rR   c              3     K   | ]}|d uV  	d S rL   rM   r\   cs     rP   r_   z7JaxprTrace.default_process_primitive.<locals>.<genexpr>   s&      
)
)Q1D=
)
)
)
)
)
)rR   c                    g | ]	}|j         
S rM   r   r   s     rP   rh   z8JaxprTrace.default_process_primitive.<locals>.<listcomp>       %%%QV%%%rR   r   c                b    g | ]+}t          t                              |          d           ,S rL   r   r   r   r\   r   rm   s     rP   rh   z8JaxprTrace.default_process_primitive.<locals>.<listcomp>   sC     + + + !z'9'9$'?'?FF + + +rR   )r   bindmapr   abstract_eval_current_truncated_name_stackr   currentreplacemultiple_resultsnew_eqn_recipereciper   r   r   )rm   r   r   r   constsr   out_avalr   r   sourceout_tracerseqnr   
out_tracers   `             rP   r   z$JaxprTrace.default_process_primitive   so    32'222F

)
)&
)
)
))) /Y^V.v...$('22G%%W%%%E/	/A&AAHg3355J%''//:/FFF! + + + +!)+ + +k7KFG!# #c**!sAHHtZ%7%7%A%A4HHj(:,	)/&B BjrR   c           	        ()* t                               |          }|r | ||||          S t                              |          pd }t          d |D                       \  }}}	t          j        j        sEt          | j        d          }
t          |
t          |          t          |                    \  }
}n`|j        ,t          j        |t          d |D                                 }t          | j        t          |          |j        d          \  }
} |||d          } |j        t!          |
|j        |          g|	R i |} |            \  }}}}}t#          |t%          |          g          \  }}t          j        j        rt'          |	          t'          |          }}d gt)          |j                  z  }t+          |j                  D ]t\  }\  }}|rjt-          |          r[t-          |          x}||<   |j        r@t1          |j        |j                  D ]%\  }}t3          |          t4          u r
|||j        <   &un|	}t9          |||          }t;           j        t;           j        |                    )t;           j         |          (d |D             *t)          )          t)          (          z   }tC          |tE          |                    }  || t;          tF          j$        |          |          } t          j        j        rg }!|D ]\  }}"tK          |tL                    rJ t3          |          tN          u r8()*fd|j        D             }#|(                    t          |#          	          }|!)                    tU           tV          ,                    |          d                      n fd
|D             }! -                                }$t]          j/                    0                    |$          }%tc          g )(*R |!|| |j2        |%          }&|!D ]	}'|&|'_3        
ti          ||!|          S )Nc                    | S rL   rM   pr]   __s      rP   <lambda>z)JaxprTrace.process_call.<locals>.<lambda>       A rR   c                    g | ]	}|j         
S rM   r   r   s     rP   rh   z+JaxprTrace.process_call.<locals>.<listcomp>       5N5N5Naf5N5N5NrR   Fc              3     K   | ]}|d fV  	dS TNrM   r\   rc   s     rP   r_   z*JaxprTrace.process_call.<locals>.<genexpr>
  s&       = =q!T = = = = = =rR   r   c                :    g | ]}|                                 |S rM   r   r   s     rP   rh   z+JaxprTrace.process_call.<locals>.<listcomp>*  %    BBBQZZ\\B1BBBrR   
call_jaxprc                f    g | ]-}t          |          t          u rg |j                 n|.S rM   )rb   r1   rw   )r\   rd   env_tracersres_tracersunknown_arg_tracerss     rP   rh   z+JaxprTrace.process_call.<locals>.<listcomp>7  s]     D D D34T!WW'' F[E;E1DEaeLL-.D D DrR   ry   c                b    g | ]+}t          t                              |          d           ,S rL   r  r\   rc   rm   s     rP   rh   z+JaxprTrace.process_call.<locals>.<listcomp><  sC     ( ( ( !z'9'9!'<'<dCC ( ( (rR   r   )5call_partial_eval_rulesr   call_param_updaterspartition_pvalsr   dynamic_shapesr   trace_to_subjaxpr_nounits_fwdmainpartial_eval_wrapper_nounitsr|   in_typer   r   trace_to_subjaxpr_nounits_dynr  r   rD   sumiterlenr   nextra   r   rb   r0   rw   rJ   r  r   r   
full_raisedictconvert_constvars_jaxpropnot_r   r%   r-   r{   appendr   r   r   r  r   r  r	  r  r   r  rE   )+rm   r   rS   r   r   ruleupdate_paramsrW   in_avals	in_constsf_auxconst_paramsoutfwds
out_knownsout_typejaxprenv
out_constsnon_fwd_res
in_consts_
in_knowns_in_consts_fullidxr   explicitr   d1d2resnum_new_argsstaged_paramsr  r]   ra   r   r  r  r   r&  r'  r(  s+   `                                       @@@rP   process_callzJaxprTrace.process_call   s   "&&y11D 7T$	1gv666'++I66N;M;MM%45N5Ng5N5N5N%O%O"Ix  & @(DIu==b,Ry1A1A-28__> >gb## 
	K5 = =H = = ===>>-aE)<L<L./i@ @gb# !=A66L ).1"aiKK 5#5 5 5'35 5C-0SUU*D*hs(s:.?@@J " !#IY*jvAI.n#,QY#7#7 , ,
#h 	,Z(( 	,$($4$4
4!nS!Z ,dj!'22 , ,BbU"")+rv&, !n
D.+
6
6C d,c$.#.F.FGGKdos++KBBgBBB{##c+&6&66L,CE,J,JKKKM!M-RWi1H1H".0 0M " (k N N'$dM22222::%%D D D D D D8<
D D D%5<<00$;tZ-?-?-E-EtLLMMMMN( ( ( (&( ( (k3355J%''//:/FFF
K;KK7JKK$i! !C ((S!((z;
;;;rR   rS   rT   c                P   %& t                               |          pd }t          d |D                       \  }}}t          |d                   \  }	}
fdt	          |	|          D             }t          | j        d          }t          |t          |          t          |                    \  }% ||d          }d         &t          &          %&fd	            }t          |t          |
          |
          } |j        |g|R i |} %            \  }}}}t          |t          |          t          |j                  z
  g          \  }}t          j        d         d         d           5  t#          |          }d d d            n# 1 swxY w Y    d                     }t          ||          \  }}dt          |          z  dt          |          z  z   g |	R z   }t%           j        |          }t%           j        |          }d |D             }t          |          t          |          z   } |t%          t*          j        |          |          }t          ||t          |          |          }|d= fdt	          ||          D             } fd|D             } t          j        |j        d         h          }!t3          j                    }"t7          g |||R | |||!|"          }#| D ]	}$|#|$_        
t;          || |          S )Nc                    | S rL   rM   r  s      rP   r  z(JaxprTrace.process_map.<locals>.<lambda>G  r  rR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z*JaxprTrace.process_map.<locals>.<listcomp>H  r  rR   in_axesc                D    g | ]\  }}t          d          ||          S )	axis_size)r.   )r\   axr   r   s      rP   rh   z*JaxprTrace.process_map.<locals>.<listcomp>R  sD     C C C#2t #6+#6DAA C C CrR   Fr   out_axes_thunk)closurec                                  \  } }}}t          |                        \  }}t          |          dt          |j                  z  z   S Nr   rF   r|   r6  	constvars)rG  r]   rI  out_axesrC  r_  s       rP   const_out_axes_thunkz4JaxprTrace.process_map.<locals>.const_out_axes_thunk\  sR     #j!UA":~~/?/?@@ka8__tc%/&:&::::rR   )r[  r_  	axis_namer]  rc  rL   c                :    g | ]}|                                 |S rM   r!  r   s     rP   rh   z*JaxprTrace.process_map.<locals>.<listcomp>v  r"  rR   r[  rf  r$  c                R    g | ]#\  }}t          d          d         ||          $S r]  rh  r/   )r\   r^  rc   r   s      rP   rh   z*JaxprTrace.process_map.<locals>.<listcomp>~  sK     F F FR vk2F;4GQOO F F FrR   c                b    g | ]+}t          t                              |          d           ,S rL   r  r*  s     rP   rh   z*JaxprTrace.process_map.<locals>.<listcomp>  C     ' ' ' tZ%7%7%:%:DAA ' ' 'rR   )r,  r   r-  rF   r   trace_to_subjaxpr_nounitsr0  r1  r|   rH   r9  r  rD   r6  re  r   extend_axis_envr:  r  r   r8  r;  r<  filter_named_axis_effectsr   r   r  r  r  rE   )'rm   r   rS   r   r   r?  rW   r@  rA  unk_in_axesconst_in_axesin_avals_mappedrD  rg  rE  rG  out_avals_mappedrI  rJ  rK  rT  r$  rf  staged_out_axesr]   staged_in_axesconst_tracersr&  r(  rU  rV  	out_avalsr  effssrc_infor  r   rC  r_  s'   `   `                                @@rP   process_mapzJaxprTrace.process_mapF  s   '++I66N;M;MM%45N5Ng5N5N5N%O%O"Ix "0	6);L!M!MKC C C C'*;'A'AC C CO 	"!TY66A)!U9-=-=*/*@*@B BFAs !=A66L,-N.111; ; ; ; ; 21; eM.B.B';= = =L ).
7Y
7
7
7,
7
7C/2suu,J % s3xx#eo2F2F'F&GHHOJ 
	f[16+3F	M	M 2 2*511j2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 (v&'))H'
H==OQCHH_wS'99OkOOKN 3S99Mdos++KBBgBBB}%%K(8(88L!M&#bgy*A*A<PPM"'"8"8ZQ Q QM&'F F F F!/3CDDF F FI' ' ' '%' ' 'K)%-&:M9NOOD'))H
M=M;M9LMM$ihP PC((S!((z;
;;;s    FF #F c                    
 d |D             }t          g |          \  }
d |D             }t          |          \  }g ||} j        
 fd}	||	fS )Nc                :    g | ]}|                                 |S rM   r!  r   s     rP   rh   z0JaxprTrace.post_process_call.<locals>.<listcomp>  %    FFFF1FFFrR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z0JaxprTrace.post_process_call.<locals>.<listcomp>      ---A---rR   c                                                    t          | t          |           t          j                  z
  g          \  }}t	          j        |          }g |t	          j                  R }fdD             }t                                        pd } |g t          |                    }t          |t                              }                                }t          j                                        |          }	t          |||j        |	          }
|D ]	}|
|_        
t%          ||          S )Nc                b    g | ]+}t          t                              |          d           ,S rL   r  r\   rc   traces     rP   rh   z>JaxprTrace.post_process_call.<locals>.todo.<locals>.<listcomp>  C     ) ) ) !
(:(:1(=(=tDD ) ) )rR   c                    | S rL   rM   r  s      rP   r  z<JaxprTrace.post_process_call.<locals>.todo.<locals>.<lambda>      a rR   r#  r   )with_cur_sublevelrD   r6  re  r  r   r8  r,  r   r9  r:  r  r   r  r	  r  r   r  rE   )rE  rK  rT  ry  
in_tracersr  r?  
new_paramsr   r  r  r   r  rJ  rI  r0  rz  rG  r   r   rm   s               @rP   todoz*JaxprTrace.post_process_call.<locals>.todo  s\   $$&&e"3SC4H4H)H(IJJoj#%6<<m@]@S)93%?%?@@j) ) ) )') ) )k)--i88P=O=Om =S__==j
/Fu/M/MNNNj5577j'))11Z1HHf:{Iz =&2 2c**!sAHH[*===rR   )tracers_to_jaxprr-  r0  )rm   r   r  r   unknown_out_tracersrT  	out_pvalsrK  rE  r  rJ  rI  r0  rz  rG  s   `` `      @@@@@rP   post_process_callzJaxprTrace.post_process_call  s    FFkFFF&r+>??OE3-----I(7	(B(B%J	:
J

C9D> > > > > > > > > > > >" 9rR   c           
     z    d |D             }t          g |          \  }d |D             }t          |          \  }g ||} j        t          j        d         d         d           5  t                    d d d            n# 1 swxY w Y    f
d}	fd}
d ||	|
ffS )Nc                :    g | ]}|                                 |S rM   r!  r   s     rP   rh   z/JaxprTrace.post_process_map.<locals>.<listcomp>  r  rR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z/JaxprTrace.post_process_map.<locals>.<listcomp>  r  rR   rh  r]  c                d  
                                  t          | t          |           t          j                  z
  g          \  }}t	          j        |          }t	          j                  }t                    }dt          |          z  dt                    z  z   }t          	                              pd } |g t          |          t                    z             }t          ||t          |                    }fdt          |          D             }	fd|	D             }
                                }t          j                                        |          }t!          g ||R |
|j        |          }|
D ]	}||_        
t'          |
|          S )Nrc  rL   c                    | S rL   rM   r  s      rP   r  z;JaxprTrace.post_process_map.<locals>.todo.<locals>.<lambda>  r  rR   rj  c                R    g | ]#\  }}t          d          d         ||          $S rl  rm  )r\   rd   rc   r   s      rP   rh   z=JaxprTrace.post_process_map.<locals>.todo.<locals>.<listcomp>  sK     G G Gq! !!4f[6I1aPP G G GrR   c                b    g | ]+}t          t                              |          d           ,S rL   r  r  s     rP   rh   z=JaxprTrace.post_process_map.<locals>.todo.<locals>.<listcomp>  r  rR   r   )r  rD   r6  re  r  r   r8  r|   r,  r   r9  r   r  r   r  r	  r  r   r  rE   )rE  rK  rT  ry  r&  rw  rx  r?  rV  rz  r  r   r  r  r   r  r$  rJ  rI  r0  rv  out_axes_unknownrG  r   r   rm   s                  @rP   r  z)JaxprTrace.post_process_map.<locals>.todo  s   $$&&e"3SC4H4H)H(IJJoj#%6<<m(#..k.//oc#hh3s88);;n)--i88P=O=Om#mFBC3s880CDDm=.$)/$:$:&02 2 2mG G G G"?4DEEG G Gi) ) ) )') ) )k5577j'))11Z1HHf9]9[99;$mU]FL Lc**!sAHH[*===rR   c                x    t          |           \  }t          |          dt          j                  z  z   S rb  rd  )rf  out_axes_knownrI  r  rG  s     rP   out_axes_transformz7JaxprTrace.post_process_map.<locals>.out_axes_transform  s:    )7
H)M)M&>""TC,@,@%@@@rR   )r  r-  r0  r   rq  r:  )rm   r   r  r   r  rT  r  rK  rE  r  r  r$  rJ  rI  r0  rv  r  rG  s   `` `       @@@@@@@rP   post_process_mapzJaxprTrace.post_process_map  s~   FFkFFF&r+>??OE3-----I/>y/I/I,J *
J

C9D		f[16+3F	M	M 2 2*511j2 2 2 2 2 2 2 2 2 2 2 2 2 2 2> > > > > > > > > > > > > >4A A A A A A A %))***s   9BBBc                \    t          j                    t          | j                  d          S rL   )r   current_name_stackr6  r   r   s    rP   r  z(JaxprTrace._current_truncated_name_stack  s&    .00T_1E1E1F1FGGrR   c               P    ~~t          d |D                       rJ  |j        | S )Nc              3  >   K   | ]}|                                 V  d S rL   r!  r   s     rP   r_   z5JaxprTrace.process_custom_jvp_call.<locals>.<genexpr>  s*      11A1::<<111111rR   )r   call_wrapped)rm   primfunjvpr   symbolic_zeross         rP   process_custom_jvp_callz"JaxprTrace.process_custom_jvp_call  s<     	^11111111113W%%rR   c                    t           rL   NotImplementedErrorrm   r  r]   s      rP   post_process_custom_jvp_callz'JaxprTrace.post_process_custom_jvp_call  
     rR   c           	         t          ||d         j        g          \  }}t          d |D                       sJ t          d |D                       }|r+d |D             }d |D             }	 |j        |g||	R i |S  fd|d         D             }
t	           j        |          }t          ||          }t          ||
||t          j	        t          j                              }|
D ]	}||_        
|
S )	Nres_treec              3  >   K   | ]}|                                 V  d S rL   r!  r   s     rP   r_   z6JaxprTrace.process_custom_transpose.<locals>.<genexpr>  s*      00Aqzz||000000rR   c              3  >   K   | ]}|                                 V  d S rL   r!  r   s     rP   r_   z6JaxprTrace.process_custom_transpose.<locals>.<genexpr>  s*      ;;q!**,,;;;;;;rR   c                (    g | ]}|j         d          S r   r  r   s     rP   rh   z7JaxprTrace.process_custom_transpose.<locals>.<listcomp>      ---16!9---rR   c                (    g | ]}|j         d          S r  r  r   s     rP   rh   z7JaxprTrace.process_custom_transpose.<locals>.<listcomp>  r  rR   c                b    g | ]+}t          t                              |          d           ,S rL   r  r  s     rP   rh   z7JaxprTrace.process_custom_transpose.<locals>.<listcomp>  sC     6 6 6 !z'9'9$'?'?FF 6 6 6rR   	out_types)call)rD   
num_leavesr   r  r  r   r9  r  r   
no_effectsr   r  r  )rm   r  r  r   r   res_tslin_tslin_all_known	res_cvals	lin_cvalsr  r  r  r  r   s   `              rP   process_custom_transposez#JaxprTrace.process_custom_transpose  sG   &*<*G)HIINFF0000000000;;F;;;;;M --f---i--f---iTYt>i>)>>>v>>>6 6 6 6!'!46 6 6kt-w77jT***j:{D*
/+3557 7c**!sAHHrR   c                    t           j        |          }t          d |D                       \  \   t          | j        d          }t          |t                    t                              \  }}|                    ||||          }	 |            \  }
}}}t          |	t          |	          t          |j
                  z
  g          \  }}t           j        |          }t           j        |          } fd|D             }t          j        t          |          d          }t            fd            }                                 }t%          j                                        |          }t+          g |||R ||j        t/          ||t          |          t          |          z   |||          |j        |          }|D ]	}||_        
t5          |
||          S )	Nc                    g | ]	}|j         
S rM   r  r   s     rP   rh   z6JaxprTrace.process_custom_vjp_call.<locals>.<listcomp>  s    .G.G.G!qv.G.G.GrR   T)	out_treesr  c                b    g | ]+}t          t                              |          d           ,S rL   r  r*  s     rP   rh   z6JaxprTrace.process_custom_vjp_call.<locals>.<listcomp>  ro  rR   rM   c                     t          |           }t          |j        d          }t          |t	                    t	                              \  }}t          j                    5  |                                }d d d            n# 1 swxY w Y    |            \  }}}}t          |t          |          t          |j
                  z
  g          \  }}	t          |t          |                    }
|
g |	|R fS NT)_interleave_funrp  r0  r1  r|   r   new_sublevelr  rD   r6  re  convert_envvars_to_constvars)zerosfwd_rC  out_flatrG  rz  rI  rJ  r]   rT  converted_jaxprfwdr@  rW   rm   s              rP   fwd_jaxpr_thunkz;JaxprTrace.process_custom_vjp_call.<locals>.fwd_jaxpr_thunk  s+   S%((d&tTY==d.
i  %//3 3idC ' '$$&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '*-#%%'j)UC(S]]3u3G3G%G$HIIfa4UCHHEEollcll**s   )B

BBr   	fun_jaxprr  
num_constsbwdr  r  )r  r   r-  rp  r0  r1  r|   r  rD   r6  re  r   r8  r   r#   r:  _memoizer  r   r  r	  r  initial_styler9  r   r  rE   )rm   r  rS   r  r  r   r  r  rC  r  rG  rz  rI  rJ  rK  rT  r'  r&  r  closed_jaxprr  r   r  r  r   r@  rW   s   `  `                     @@rP   process_custom_vjp_callz"JaxprTrace.process_custom_vjp_call  s.    $3W==G-.G.Gw.G.G.GHHIx!!TY55A)!U9-=-=uXOOFAsyyC	(6  8 8H(+%J	5# CMM#eo:N:N,N+OPPOJd1377Kdos++K' ' ' '%' ' 'K#$;E$B$BBGGL
+ 
+ 
+ 
+ 
+ 
+ 
+ X
+ 3355J%''//:/FFF
?;??w??$d&8.=),SCHH)<"%-;	= = =
 0 0C ((S!((z;
;;;rR   c                    t           rL   r  r  s      rP   post_process_custom_vjp_callz'JaxprTrace.post_process_custom_vjp_call   r  rR   )r   r   )rw   r   rY   r   )rw   r   rY   r   )rw   r   rY   r   )rY   r   )r   r   rY   r   )r   r   rY   r   )rS   rT   )ro   rp   rq   rn   r   r   r   r   r   r   r   r   r   r   r   rW  r}  r  r  r  r  r  r  r  r  __classcell__)r   s   @rP   r   r      s       ! ! ! ! ! !      5 5 5 5: : : :
< < < <
F F F F# # # #"2 2 2 2J J J JH H H  2Q< Q< Q<fB< B< B< B<H  6++ ++ ++ZH H H& & &    $*< *< *<X      rR   r   r   pvalslist[PartialVal]1tuple[list[bool], list[AbstractValue], list[Any]]c                T    d | D             }d | D             }d | D             }|||fS )Nc                6    g | ]}|                                 S rM   r!  r\   r   s     rP   rh   z#partition_pvals.<locals>.<listcomp>)  s     FFFDMMOOFFFrR   c                ^    g | ]*}|                                 |                                +S rM   )r   r!   r  s     rP   rh   z#partition_pvals.<locals>.<listcomp>*  s-    FFFdmmooFDMMOOFFFrR   c                ^    g | ]*}|                                 |                                +S rM   r   r   r  s     rP   rh   z#partition_pvals.<locals>.<listcomp>+  s/    FFFdmmooFDNNFFFrR   rM   )r  knownsr   r  s       rP   r-  r-  &  sK     GFFFF&FFFFF%FFFFF&		rR   Sequence[bool]r@  Sequence[AbstractValue]rA  r   c              '  H  K   t          |          t          |          cfd| D             }t                      }t          |          t          |          cxu r|u sn J |fi fV \  }^ }}}}	t          |          \  }
}}g ||R g ||
|||	R fV  d S )Nc                    g | ]R}|r't                               t                              n&t                               t                              SS rM   )r   rg   r7  r   )r\   rg   	in_avals_rM  s     rP   rh   z0partial_eval_wrapper_nounits.<locals>.<listcomp>3  sf     J J J6; 5: 2jtJ//000  i11J J JrR   )r5  objectr7  r-  )rW   r@  rA  in_pvalssentinelrI  
maybe_fwdsr  rT  rJ  rG  rz  rK  r  rM  s                @@rP   r1  r1  .  s      x..$y//)ZJ J J J J?HJ J J(XX(	i	"	"d:x&@&@	L	L	L	LH	L	L	L	L	L	L5=KO.C.C+%	+:y#s&5i&@&@#*i*sMzM:MyM%MMMMMMMMMrR   r0  core.MainTracer2  r3   instantiatebool | Sequence[bool]c           
   '  	   K   |                                   t          |          \  }}d gt          |          z  t          |          t          |          }}t	          |          D ]l\  }	\  }
}|r`t          |          rPt          |          }t          |
t                    rt	          |
j                  D ]\  }}t          |t                    r|j
                 Tt           t                              ||j
                           t          |j        |                             |j
        <   t          j        |j        |         |j
                           sJ fd|
j        D             }|
                    t%          |                    }
t           t                              |
          t          |                    |	<   nt	          |          D ]K\  }	\  }
}|s
|	         J t          |
t                    r"t'          fd|
j        D                       sJ Lg }t          |          }|D ]\  }
}|rt          |          st          |
t                    r6fd|
j        D             }|
                    t%          |                    }
t           t                              |
          t)                                }|                    |           t-          |||          }|i fV }t          |t.                    r|gt          |          z  }t1           j        t1          t          j        |                    } fdt7          ||          D             }d |D             }d |D             }d |D             }t9          ||          \  }}}d	 |j        D             }d
 t	          t=          j        |j         |j!                            D             fd|D             }d t	                    D             fd|D             }t%          d t7          ||          D                       }~ ~ ~~~~~~~g ||R ||t%          |          ||ffV  d S )Nc                Z    g | ]'}t          |          t          u r|j                 n|(S rM   rv   r\   rd   rO  s     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>T  E     & & & +/q''U*:*:&& & & &rR   ry   c              3  b   K   | ])}t          |          t          up|j                 d uV  *d S rL   rv   r  s     rP   r_   z0trace_to_subjaxpr_nounits_dyn.<locals>.<genexpr>]  sS       & & a%J)>d)J & & & & & &rR   c                Z    g | ]'}t          |          t          u r|j                 n|(S rM   rv   r  s     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>g  r  rR   c                n    g | ]1\  }}|r(                                         |                    n|2S rM   r   r8  r\   instr   r  s      rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>u  U     ? ? ?T1 BFL(()9)9!)<)<===1 ? ? ?rR   c                6    g | ]}|                                 S rM   r!  r   s     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>y  s     >>>QAJJLL>>>rR   c                h    g | ]/}|                                 |j                                        0S rM   )r   r   r   r   s     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>z  sB     , , ,!jjll,16++-- , , ,rR   c                :    g | ]}|                                 |S rM   r!  r   s     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>~  s%    <<<qqzz||<<<<rR   c                    g | ]	}|j         
S rM   r   r\   vs     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>  s    ---!qv---rR   c                4    i | ]\  }}|t          |          S rM   r1   r\   r   r  s      rP   r   z1trace_to_subjaxpr_nounits_dyn.<locals>.<dictcomp>  s:     M M MA 

 M M MrR   c                    g | ]P}t          |          t          u r4|                    t          fd |j        D                                 n|dfQS )c              3  D   K   | ]}                     ||          V  d S rL   r   )r\   rd   idx_maps     rP   r_   z;trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>.<genexpr>  s1      #G#G!GKK1$5$5#G#G#G#G#G#GrR   ry   Trz   )r\   rc   r  s     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>  sy     L L L<=$q''\)) xxe#G#G#G#Gqw#G#G#GGGxHHH/0$8 L L LrR   c                L    i | ]!\  }}|t          |j        j                  |"S rL   )idr  rw   r\   r   r   s      rP   r   z1trace_to_subjaxpr_nounits_dyn.<locals>.<dictcomp>  s6       DAq} qx|a}}rR   c                T    g | ]$}                     t          |                    %S rM   r   r	  r\   r   id_maps     rP   rh   z1trace_to_subjaxpr_nounits_dyn.<locals>.<listcomp>  s+    ;;;!FJJr!uu--;;;rR   c              3  $   K   | ]\  }}||V  d S rL   rM   r\   r   r  s      rP   r_   z0trace_to_subjaxpr_nounits_dyn.<locals>.<genexpr>  s&      <<FAsa<<rR   )"r  r@   r6  r5  r   r7  r   r-   ra   r0   rw   r   r   r   r   r   same_referentr{   r|   r   r   r=  rE   r   r  r8  
full_lowerr   r  outvarsitchainre  invars)!r0  rW   r2  r  rA  r@  which_explicitin_consts_iterin_knowns_iterrP  r   rQ  constvalr   rd   ra   r  r   in_argsansr  rG  rK  rI  rT  rJ  rz  rH  rF  r  r  rO  r  s!                                @@@@rP   r3  r3  ;  sI     
 
 
 
"
"%#G__(N /3Vc'll-B.#'	??DOO..(11 < <cD( <D(( <n%%h	D,	'	' 
/dj)) 	P 	PDAq5!! Pae$,eZ%7%7%H%H&x~a'899; ; QU# %hnQ&79NOOOOO& & & &*& & &{{u{..'z/A/A$/G/G(0(:(:< <nS  )11 & &cD(;N3/;;;$%% & & & & &*& & & & & & & &
 *	??.    ndH  ^,,  	D,	'	' /& & & &*& & &{{u{..5*"4"4T":":MOOLLf 	:y99'rk# T"" +-#c((*KE$c$/3&?&?@@+? ? ? ? #K = =? ? ?+ ?>+>>>*, ,{ , , ,* =<K<<<+$Z==/%c--u}---)M M"28EOU\#J#JKKM M M'L L L LAJL L L( In,E,E   &;;;;s;;;$<<c#tnn<<<<<#
Iunnn'3Y*sdJhLLLLLLLrR   zdict[Primitive, Callable]r   r+  r,  c                    |                      d          }|| S t          |          t          j        u sJ t	          | t          j        |d                    S )Nr$  rM   r#  )r   rb   r   r   r9  r#   )r   r]   r  rI  s       rP   _closed_call_param_updaterr    sU    
**\
"
"%
]6M	e
	"	"	"	"	f!1%!<!<	=	=	==rR   
debug_infoc                   t          t          j        | |          ||          \  }}}\   t          d |D                       sJ |S )Nc              3  @   K   | ]}t          |t                    V  d S rL   )r   r"   )r\   r   s     rP   r_   z$abstract_eval_fun.<locals>.<genexpr>  s,      CCZm,,CCCCCCrR   )trace_to_jaxpr_dynamicr   	wrap_initr   )r  r   r   r   r]   	avals_outs         rP   abstract_eval_funr&    sV    .l3
4 4!Y2	CCCCC	C	CCCC	rR   JaxprEqnReciper   r   r   c                  f    e Zd ZddgZddZd Zedd            Zedd            Zd Z	d Z
d ZdS )r   r   r  r  r   r   JaxprTracerRecipe | Nonec                b   t          |t                    sJ |\  }}t          |t                    r0|j        j        j        k    rt          j        |d| d           t          |t                    r"t          fd|j	        D                       sJ | _        || _
        || _        d S )NzTracer from a higher level: z
 in trace c              3     K   | ]D}t          |t                     p)t          |t                    o|j        j        j        k    V  Ed S rL   )r   r   r   r   r   )r\   rd   r  s     rP   r_   z'JaxprTracer.__init__.<locals>.<genexpr>  sp       B B34  6*** /jK.H.H //5;.B B B B B BrR   )r   r   r   r   r   r   escaped_tracer_errorr-   r   ra   r   r  )rm   r  r   r  r   r   s    `    rP   rn   zJaxprTracer.__init__  s    dJ'''''IB%   JU\%75;%F%F%
HHHHHJ J J"l## B B B B B8:B B B B B B B BDKDIDKKKrR   c                (    d| j          d| j         dS )NzTraced<:>)r   r   r   s    rP   __repr__zJaxprTracer.__repr__  s    /TY//////rR   rY   r"   c                4    | j                                         S rL   )r   r!   r   s    rP   r   zJaxprTracer.aval  s    9rR   Sequence[JaxprTracer]c                    t          | j        t                    r| j        j        S t          | j        t
                    rd | j        j        D             S g S )Nc                <    g | ]}t          |t                    |S rM   )r   r   r\   rd   s     rP   rh   z'JaxprTracer.parents.<locals>.<listcomp>  s'    GGGAJq+,F,FGaGGGrR   )r   r  r'  r  r   r-   ra   r   s    rP   parentszJaxprTracer.parents  sR    $+~.. [##	DI|	,	, GGGGGGirR   c                d    | j                                         }|t          j        |          S | S rL   )r   r   r   r  r   s     rP   r  zJaxprTracer.full_lower  s0    I!!E_U###krR   c                4    | j                                         S rL   )r   r   r   s    rP   r   zJaxprTracer.is_known  s    9rR   c                   | j                                         r&t          | j                                                   S t	          | j        t          t          t          f          rt          | j        j	                  S | S rL   )
r   r   r5   r   r   r  r   r   r    rw   r   s    rP   r5   zJaxprTracer.get_referent  sf    y $)--//000	DK'8W!=	>	> $+/***krR   N)r  r   r   r   r  r)  r   )rY   r2  )ro   rp   rq   	__slots__rn   r0  propertyr   r6  r  r   r5   rM   rR   rP   r   r     s        x )   0 0 0       8     8           rR   Fr  Sequence[PartialVal]0tuple[Jaxpr, list[PartialVal], list[core.Value]]c                    t          j                    }t          j        t          |          5 }t          | ||          } |                     |          \  }\  }}}|rJ ~~ ~ddd           n# 1 swxY w Y   |||fS )a  
  Partially evaluate a function, building a jaxpr for un-evaluated computation.

  Args:
    fun: lu.WrappedFun representing the function to be partially evaluated. The
      function must be flattened, in the sense of accepting jaxpr type arguments
      and returning a flat list of jaxpr type outputs.
    pvals: sequence of PartialVals of length equal to the number of inputs to
      `fun` indicating which inputs are known or unknown.
    instantiate: optional bool or sequence of bools of length equal to the
      number of outputs of `fun` indicating which outputs should be forced to be
      treated as unknown and hence instantiated in the jaxpr. If a single bool,
      the value is applied to all outputs. Default False.

  Returns:
    A triple where the first element is a jaxpr representing the computation
    which depends on unknown inputs; the second element is a list of PartialVals
    of length equal to the length of the output of `fun` representing which
    outputs are known and unknown (along with their values and abstract values,
    respectively); the third element is a list of known residual values. The
    returned jaxpr takes as inputs the known residual values followed by values
    of the originally unknown inputs.
  r   N)r   r  r   new_mainr   trace_to_subjaxprr  	r  r  r  r  r0  rI  r  r  rJ  s	            rP   trace_to_jaxprrB    s    8 (:<<}Z,>??? 4
C{
3
3C&)&6&6u&=&=#E#IvsNNNc3	               
	6	!!   5A00A47A4c                    t          j                    }t          j        t          |          5 }t          | ||          } |                     |          \  }\  }}}|rJ ~~ ~d d d            n# 1 swxY w Y   |||fS )Nr   )r   r  r   r?  r   rp  r  rA  s	            rP   trace_to_jaxpr_nounitsrE    s    
 (:<<}Z,>??? 4
#C{
;
;C&)&6&6u&=&=#E#IvsNNNc3	              
 
	6	!!rC  r  c              #     K   t          d |D                       s
J |            t          | ||          E d {V \  }}}}d |D             }~||||ffV  d S )Nc              3  @   K   | ]}t          |t                    V  d S rL   r   r   r\   r   s     rP   r_   z,trace_to_subjaxpr_nounits.<locals>.<genexpr>  ,      ;;BZJ'';;;;;;rR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z-trace_to_subjaxpr_nounits.<locals>.<listcomp>      +++!qv+++rR   )r   _trace_to_subjaxpr_nounits)r0  r  r  r  rI  rK  rJ  r  s           rP   rp  rp    s      
 
;;(;;;	;	;EEXEEE3M
K4# 4# )# )# )# )# )# )#%+uj#++{+++)	:s+++++++rR   c              #  v  K   |                                  d |D             }d |D             }fd|D             }t          |||          }|i fV }t          |t          t          f          sJ d|             t          d |D                       sJ d|             t          |t                    r|gt          |          z  }t          j	        t          t          j        |                    }fdt          ||          D             }d |D             }	t          ||	          \  }
}}||
||fS )Nc                6    g | ]}|                                 S rM   r!  r  s     rP   rh   z._trace_to_subjaxpr_nounits.<locals>.<listcomp>  s     999999rR   c                ^    g | ]*}|                                 |                                +S rM   r  r  s     rP   rh   z._trace_to_subjaxpr_nounits.<locals>.<listcomp>  /    PPPP  PPPrR   c                b    g | ]+}|                                                     |          ,S rM   )r   r   )r\   r   r  s     rP   rh   z._trace_to_subjaxpr_nounits.<locals>.<listcomp>  s2    PPPPd##PPPrR   ;Got unexpected return type when tracing function to jaxpr: c              3  r   K   | ]2}t          |t          j                  pt          j        |          V  3d S rL   r   r   r   r   r\   rO   s     rP   r_   z-_trace_to_subjaxpr_nounits.<locals>.<genexpr>$  >      NNQZ4;''@4+=a+@+@NNNNNNrR   c                n    g | ]1\  }}|r(                                         |                    n|2S rM   r  r  s      rP   rh   z._trace_to_subjaxpr_nounits.<locals>.<listcomp>)  r  rR   c                :    g | ]}|                                 |S rM   r!  r   s     rP   rh   z._trace_to_subjaxpr_nounits.<locals>.<listcomp>+  s%    ===

=!===rR   )r  rE   r   listr|   r   r   r6  r  r8  r   r  r   r  )r0  r  r  rW   rA  r  r  r  r  out_tracers_rI  rK  rJ  r  s                @rP   rM  rM    s     

 
 
"
"%99999)PPPPP)PPPPPPP*	:y99'rk#	C$	'	' K KICIIK K K	NN#NNN	N	N K KICIIK K KT"" +-#c((*KE$c$/3&?&?@@+? ? ? ? #K = =? ? ?+==[===,+JEE%S	eZ	,,rR   c              #  R  K   t          d |D                       s
J |            t          | ||          E d {V \  }}}}d |D             }d |D             }d t          |          D             fd|D             }	d t          ||	          D             }
~||	||
|ffV  d S )Nc              3  @   K   | ]}t          |t                    V  d S rL   rH  rI  s     rP   r_   z0trace_to_subjaxpr_nounits_fwd.<locals>.<genexpr>7  rJ  rR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z1trace_to_subjaxpr_nounits_fwd.<locals>.<listcomp>:  rL  rR   c                ^    g | ]*}|                                 |                                +S rM   r  r  s     rP   rh   z1trace_to_subjaxpr_nounits_fwd.<locals>.<listcomp>=  rQ  rR   c                4    i | ]\  }}t          |          |S rM   r	  r
  s      rP   r   z1trace_to_subjaxpr_nounits_fwd.<locals>.<dictcomp>>  $    666ABqEE1666rR   c                T    g | ]$}                     t          |                    %S rM   r  r  s     rP   rh   z1trace_to_subjaxpr_nounits_fwd.<locals>.<listcomp>?  s+    BBB!FJJr!uu--BBBrR   c                    g | ]	\  }}||
S rL   rM   r  s      rP   rh   z1trace_to_subjaxpr_nounits_fwd.<locals>.<listcomp>@  s    HHHCCK1KKKrR   r   rM  r   r   )r0  r  r  r  rI  rK  rJ  r  rA  rF  pruned_constsr  s              @rP   r/  r/  2  s     
 
;;(;;;	;	;EEXEEE3M
K4# 4# )# )# )# )# )# )#%+uj#++{+++) QPPPP)669!5!5666&BBBBzBBB$HH3z4#8#8HHH-i4444444rR   c              #    K   t          d |D                       s
J |            t          | ||          E d {V \  }}}}d |D             }d |D             }d t          |          D             fd|D             }	d |D             }
d t          |
          D             fd|D             }d	 t          ||	|          D             }~||	||||ffV  d S )
Nc              3  @   K   | ]}t          |t                    V  d S rL   rH  rI  s     rP   r_   z1trace_to_subjaxpr_nounits_fwd2.<locals>.<genexpr>O  rJ  rR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<listcomp>R  rL  rR   c                ^    g | ]*}|                                 |                                +S rM   r  r  s     rP   rh   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<listcomp>U  rQ  rR   c                4    i | ]\  }}t          |          |S rM   ra  r
  s      rP   r   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<dictcomp>V  rb  rR   c                T    g | ]$}                     t          |                    %S rM   r  r  s     rP   rh   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<listcomp>W  s+    !D!D!D&**RUU"3"3!D!D!DrR   c                ^    g | ]*}|                                 |                                +S rM   r  r  s     rP   rh   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<listcomp>Z  rQ  rR   c                4    i | ]\  }}t          |          |S rM   ra  r
  s      rP   r   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<dictcomp>[  s$    777ABqEE1777rR   c                T    g | ]$}                     t          |                    %S rM   r  r  s     rP   rh   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<listcomp>\  s+    "E"E"E6::bee#4#4"E"E"ErR   c                "    g | ]\  }}}||
|S rL   rM   )r\   r   f1f2s       rP   rh   z2trace_to_subjaxpr_nounits_fwd2.<locals>.<listcomp>^  s.     1 1 1BjRZ %/ZZrR   re  )r0  r  r  r  rI  r  rJ  r  rA  
input_fwdsrK  output_fwdsrf  r  s                @rP   trace_to_subjaxpr_nounits_fwd2ru  J  sh     
 
;;(;;;	;	;EEXEEE/I
K0# 0# %# %# %# %# %# %#!+ufc++{+++) QPPPP)669!5!5666&!D!D!D!DV!D!D!D* QP	PPP*77:!6!6777&"E"E"E"Ef"E"E"E+1 1c&*k&J&J 1 1 1- 
KM3GGGGGGGrR   rw   c                  j    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   dS )r'  r   eqn_idr2  r  zSequence[ref[JaxprTracer]]out_tracer_refszSequence[core.AbstractValue]rz  r+   r   dict[str, Any]r   core.Effectsr   source_info_util.SourceInfosource_infor6   ctxNro   rp   rq   __annotations__rM   rR   rP   r'  r'  h  s{         +++####----))))****rR   r  r2  r  r   r+   r   ry  r   rz  r|  r{  r}  JaxprEqnContext | Nonec                   |j         s|j        r=d|v sJ d|vs3t          |d                   t          |d         j                  k    sJ |j        rnd|v r1t          |d                   t          |d         j                  k    sJ d|v r1t          |d                   t          |d         j                  k    sJ d |D             }|p/t	          t          j                    t          j        j	                  }t          t                      t          |           t          t          |          ||||||	  	        S )Nr$  donated_invarsr[  c                @    g | ]}t          j        |j                  S rM   r   r(   r   r   s     rP   rh   z"new_eqn_recipe.<locals>.<listcomp>  s%    AAAt#AF++AAArR   )call_primitivemap_primitiver6  r  r6   r   current_compute_typer   threefry_partitionabler   r'  r  r|   r  r   )r  r  r   r   r   r|  r}  rz  s           rP   r  r  s  sa     O!8 O6!!!!F**'())S1E1L-M-MMMMM Oy!""c&*>*E&F&FFFFF&&'())S1E1L-M-MMMMMAA[AAA) 	Dz>@@%<BD D#	%
"3"3Sk5J5J!9fg{
 
 rR   getvarCallable[[JaxprTracer], Atom]r  core.JaxprEqnc           	          |\	  }}}}}}}}	}
 fd|D             }d |D             } fdt          ||          D             }t          ||||||	|
          S )Nc                &    g | ]} |          S rM   rM   )r\   r   r  s     rP   rh   z!recipe_to_eqn.<locals>.<listcomp>  s!    +++1VVAYY+++rR   c                "    g | ]} |            S rM   rM   )r\   t_refs     rP   rh   z!recipe_to_eqn.<locals>.<listcomp>  s    666U666rR   c                N    g | ]!\  }}|t          |          n
 |          "S rL   r'   )r\   rc   r   r  s      rP   rh   z!recipe_to_eqn.<locals>.<listcomp>  sC     6 6 6A 9WQZZZ&&)) 6 6 6rR   )r   r$   )r  r  r]   r  rx  rz  r  r   effsrcr}  r  r  r  s   `             rP   recipe_to_eqnr    s     1j/9dFC++++
+++&66o666+6 6 6 6Y446 6 6'	vwfc3	D	DDrR   .tuple[Jaxpr, tuple[Any, ...], tuple[Any, ...]]c                   t          j                    i i }i }i }dfddfddfdt                      }g }t          g | |          D ]j        }t          |t                    r|j        |vrt          |j	                  }fdt          |j        |j                  D             }	|                    t          ||	|j        |j        |j        |j        |j                             |                    |j                   t          |t*                    r@t-          fd| D                       st          j        d                       t          |t0                    ri|                    t5          |j                            }
|
,           x}
|t5          |j                  <   |j        ||
<   |
t5                    <   t          |t8                    r|j        |           <   t          |t:                    r|J t=          |          t?          |                                           \  }}g |t          |           }t?          |                                           \  }}t          |          }	tC          |||	|          }tE          |||	||          }tF          j$        j%        ot          j&        |           |||fS )a  Constructs Jaxpr given tracers for inputs and outputs.

  Params:
    in_tracers: the tracers that were created for the function inputs
    out_tracers: the tracers that were output by the function.

  Returns: a triple of a `Jaxpr`, a list of constant values corresponding to
    the `constvars` in the returned Jaxps, and a list of environment values.
    The vars for the environment values have been prepended to the Jaxpr's
    `invars`.
  r   r   rY   r)   c                r    t          | j                  t          u r| j        nt          |                    S rL   )rb   r  r    r	  )r   t_to_vars    rP   get_atomz"tracers_to_jaxpr.<locals>.get_atom  s+    AH~~00188hr!uuoErR   JaxprTracer | Noner&   c                    | J   | j                             }                    t          |           |          }||u sJ |S rL   )r   
setdefaultr	  )r   varvar_gensymr  type_substitutes      rP   newvarz tracers_to_jaxpr.<locals>.newvar  sT    ===
&((
)
)Cr!uuc**D$;;;;JrR   r   r"   c                    t          | t                    rBfd| j        D             }d |D             }|                     t	          |                    } | S )Nc                V    g | ]%}t          |          t          u r |          n|&S rM   )rb   r   )r\   rd   r  s     rP   rh   z=tracers_to_jaxpr.<locals>.type_substitute.<locals>.<listcomp>  s5    PPPd1gg44xx{{{!PPPrR   c                L    g | ]!}t          |          t          u r|j        n|"S rM   rb   r    rw   r5  s     rP   rh   z=tracers_to_jaxpr.<locals>.type_substitute.<locals>.<listcomp>  s.    AAAaQ7**quuAAArR   ry   )r   r-   ra   r{   r|   )r   ra   r  s     rP   r  z)tracers_to_jaxpr.<locals>.type_substitute  sa    $%% -PPPPTZPPPeAA5AAAe[[uU||[,,dKrR   c                    g | ]:\  }} |            t           |                    n  |                      ;S rL   r  )r\   rc   rfr  r  s      rP   rh   z$tracers_to_jaxpr.<locals>.<listcomp>  sb     E E Eq" 35"$$,7??1--...FF2244LL E E ErR   c              3      K   | ]}|u V  	d S rL   rM   )r\   	in_tracerr   s     rP   r_   z#tracers_to_jaxpr.<locals>.<genexpr>  s'      <<Ii<<<<<<rR   zTracer not in input tracers: NF)r   r   rY   r)   )r   r  rY   r&   r   r"   rY   r"   )'r   r  r   rC   r  r   r'  rw  r  r  r   rz  rx  r=  r$   r   r   r   r|  r}  addr   r   r,  r   r   r	  rw   r   r    	TypeErrorr@   itemsmake_jaxpr_effectsr   r   r   r   check_jaxpr)r  r  r  rJ  constid_to_varprocessed_eqn_idseqnsrin_atomsr  r  env_varsenv_valsr  
const_vars
const_valsjaxpr_effectsrI  r  r  r  r   r  r  s                     @@@@@@rP   r  r    sk    ;==&"$(& "#').F F F F F F             ee $/j/;/00  a	A!^$$ 	
*	*	*x..E E E E E #AK1B C CE E EM(GQ[!("#)Q]AEC C 	D 	D 	Dah'''	A}	%	% <<<<<<<<< P'+N1+N+NOOOfQiiii	Ax	 	  r!%yy))c	*0&))3nRYY'eshr!uuoo	Aw		 uc&&))nn	Aw		 
	
laLLciikk**(H2X2Hj112&!&,,..11*j+&&'$Z$GG-

F}. .%8!1%!8!8	
H	$$rR   rI  r   c                   t           j        j        ot          j        |            | j        o<| j                            dt          | j                  z  | j        j	        z             }t          d| j        | j        z   | j        | j        | j        |          }t           j        j        ot          j        |           |S )z+Moves the constvars to the start of invars.rL   	arg_namesrM   )re  r  r  r  r   r   )r   r   r   r   r  r   _replacer6  re  r  r   r  r  r  r   )rI  dbglifted_jaxprs      rP   r:  r:    s     	8!1%!8!8 	MU-66#eo...1A1KK 7 M M##o<$}5:$}> > >, 	?!1,!?!?	rR   r   intc                   |dk    r|                                  S t          j        j        ot	          j        |            t          | j        |g          \  }}| j        o,| j        	                    | j        j
        |d                   }|                      t          |          ||          }t          j        j        ot	          j        |           |S )zGMove n invars to constvars. Like an inverse of convert_constvars_jaxpr.r   Nr  )re  r  r   )r	  r   r   r   r   r  rD   r  r   r  r  r|   )rI  r   re  r  r  r  s         rP   convert_invars_to_constvarsr    s     !VV==??8!1%!8!8 s33)V 	0U-66 *122. 7 0 0#y)9)9&*-  / /,?!1,!?!?	rR   num_env_varsc                l   t          d | j        D                       rt          t          j        j        ot          j        |            t          | j	        |g          \  }}t          | j        |z   || j        | j        | j                  }t          j        j        ot          j        |           |S )Nc              3  J   K   | ]}t          |t          j                  V  d S rL   r   r   JaxprInputEffectr\   r  s     rP   r_   z/convert_envvars_to_constvars.<locals>.<genexpr>  s/      LLsC1	2	2LLLLLLrR   )re  r  r  r  r   )r   r   r  r   r   r   r   r  rD   r  r   re  r  r  )rI  r  r  r  r  s        rP   r  r    s    LLemLLLLL 
8!1%!8!8|n==(FEOh$>!'UZ"'-1 1 1/ 	B!1/!B!B	rR   r#   unknowns@tuple[ClosedJaxpr, ClosedJaxpr, list[bool], list[AbstractValue]]c                    t          |t                    rt          |          n|}t          | t          |          |          S )an	  Unzip a jaxpr in two by data dependence into 'known' and 'unknown' parts.

  That is, given a jaxpr and a sequence of booleans indicating which jaxpr
  inputs (i.e. invars) are considered unknown, produce two jaxprs, a list of
  booleans representing which of the original jaxpr's outputs are unknown (i.e.
  have a data dependence on an unknown input), and a list of abstract values
  representing residuals (part of the first jaxpr's output and the second
  jaxpr's input). The two jaxprs result from partitioning the original jaxpr's
  first-order primitive applications based on whether all the inputs to the
  application are known (in which case the application is represented in the
  'known' jaxpr and its result is considered known) or whether any inputs to the
  application are unknown (in which case the application is represented in the
  'unknown' jaxpr and its result is considered unknown). Higher-order primitives
  are recursively unzipped in two.

  The `instantiate` argument can be used to ensure some outputs are lifted into
  the 'unknown' jaxpr.

  For example, give an input jaxpr:

    { lambda ; a:f32[] b:f32[]. let
        c:f32[] = cos a
        d:f32[] = sin a
        e:f32[] = neg d
        f:f32[] = mul e b
      in (c, f) }

  then applying this function with `unknowns=[False, True]` and
  `instantiate=False` produces as an output triple:

    # jaxpr_known
    { lambda ; a:f32[]. let
       b:f32[] = cos a
       c:f32[] = sin a
       d:f32[] = neg c
     in (b, d) }

    # jaxpr_unknown
    { lambda ; a:f32[] b:f32[]. let c:f32[] = mul b a in (c,) }

    # out_unknowns
    [False, True]

  Notice in particular that the first output (jaxpr_known) contains all the
  primitive applications which do not have a data dependence on an unknown
  input. Also notice the input and output types: the input type of the first
  jaxpr produced represents the type of the known inputs of the original jaxpr,
  and the output type of the second jaxpr produced represents the type of the
  unknown outputs of the original jaxpr.

  In the above example, the output of jaxpr_known named `d` is a _residual_
  output, and corresponds to the input named `a` in jaxpr_unknown. In general,
  jaxpr_known will produce extra outputs (at the end of its output list)
  corresponding to intermediate values of the original jaxpr which must be
  passed to jaxpr_unknown (as leading inputs).
  )r   rZ  r|   _partial_eval_jaxpr_nounits)rI  r  r  s      rP   partial_eval_jaxpr_nounitsr    s>    x '1d&C&CTk"""+	$UE(OO[	I	IIrR   c                    t          j        t          j                             g  fd}d t	           j                  D             }t          t          j        |          |          \  }}}\   \  \  }}	}
t          j        j	        r(t          j
        |           t          j
        |	           d |j        D             d t	           j                  D             k    sJ d |j        D             d t	           j        |          D             d |
D             z   k    sJ d |	j        D             d	 |
D             d
 t	           j                  D             z   k    sJ d |	j        D             d t	           j        |          D             k    sJ t          ||          }t          |	d          }||||
fS )Nc                    	 t                      d t          j                  D             	 	fdD             }t           d           t          	d           cxu rn J t	          |          \  }}}t          |          }d |D             }d |D             }
                    |||f           d |D             }g ||S )Nc              3  $   K   | ]\  }}||V  d S rL   rM   r\   rc   uks      rP   r_   z;_partial_eval_jaxpr_nounits.<locals>.fun.<locals>.<genexpr>V  s+      KK51bKQKKKKKKrR   c                    g | ]R}|r't                               t                              n&t                               t                              SS rM   )r   r   r7  rg   )r\   r  known_vals_inunknown_avalss     rP   rh   z<_partial_eval_jaxpr_nounits.<locals>.fun.<locals>.<listcomp>W  sh     R R R?A <> ;
""4#6#6777%%d=&9&9::R R RrR   )r  c                8    g | ]}|                                  S rM   r!  r  s     rP   rh   z<_partial_eval_jaxpr_nounits.<locals>.fun.<locals>.<listcomp>]  s#    >>>D'>>>rR   c                Z    g | ](}t          j        t          j        |                    )S rM   )r   r(   r!   )r\   r  s     rP   rh   z<_partial_eval_jaxpr_nounits.<locals>.fun.<locals>.<listcomp>^  s-    KKKA%dmA&6&677KKKrR   c                ^    g | ]*}|                                 |                                +S rM   r  r  s     rP   rh   z<_partial_eval_jaxpr_nounits.<locals>.fun.<locals>.<listcomp>`  s/    PPP4Pdnn&&PPPrR   )r5  r   r@  r7  rE  r:  r=  )r  r  jaxpr_unknown_r  	residualsjaxpr_unknownout_unknowns	res_avalsknown_vals_outr  cellrS   in_unknownsr  rI  s   `        @rP   r  z(_partial_eval_jaxpr_nounits.<locals>.funT  s+   ''MKKC$D$DKKKMR R R R REPR R RHt$$]D(A(AIIIIIIIII+A	8,. ,. ,.(NIy+N;;M>>I>>>LKKKKKIKK}i8999PP9PPPN(^(i((rR   c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>c  s!    KKKuq"KKKKrR   c                    g | ]	}|j         
S rM   r   r   s     rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>m  s    
.
.
.a16
.
.
.rR   c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>n  s!    
E
E
EB"
E1
E
E
ErR   c                @    g | ]}|j                                         S rM   r   strip_weak_typer   s     rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>p  s&    
A
A
A16!!##
A
A
ArR   c                @    g | ]\  }}||                                 S rM   r  r  s      rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>q  s<       51b1   rR   c                6    g | ]}|                                 S rM   r  r  s     rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>r  s$    @@@**,,@@@rR   c                @    g | ]}|j                                         S rM   r  r   s     rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>t  s&    
B
B
B16!!##
B
B
BrR   c                6    g | ]}|                                 S rM   r  r  s     rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>u  s$    
2
2
211
2
2
2rR   c                @    g | ]\  }}||                                 S rM   r  r  s      rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>v  <       51b1   rR   c                @    g | ]}|j                                         S rM   r  r   s     rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>y  s&    
C
C
C16!!##
C
C
CrR   c                @    g | ]\  }}||                                 S rM   r  r  s      rP   rh   z/_partial_eval_jaxpr_nounits.<locals>.<listcomp>z  r  rR   rM   )r   r$  r   jaxpr_as_funr   r@  r#  r   r   r   r  r  r  rz  r#   )rI  r  r  r  known_avalsjaxpr_knownr]   consts_knownr  r  r  closed_jaxpr_knownclosed_jaxpr_unknownr  rS   s   ```          @@rP   r  r  O  sz   l4$U++,,!	$) ) ) ) ) ) ) ) ) LKENK @ @KKK+%;BL<M<M{%[%["+q,.2+*<	  $[!!!]###
.
.;-
.
.
.
E
E#enk::
E
E
EF F F F B
A[-@
A
A
A C,N,N   @@i@@@AA A A A C
B]-A
B
B
B
2
2	
2
2
2 C,L,L      
 D
C]-B
C
C
C C,N,N       #;==$]B77	1<	JJrR   r  in_instensure_out_unknownsensure_out_instsaveableCallable[..., RematCases_]0tuple[Jaxpr, Jaxpr, list[bool], list[bool], int]c           	        t          |          t          u r|ft          | j                  z  }t          |          t          u r|ft          | j                  z  }t          |          t          u r|ft          | j                  z  }t          | t          |          t          |          t          |          t          |          |          \  }}}}	}
}|dk    rt          d          ||||	|
fS )Nr   z<Cannot use `partial_eval_jaxpr_custom` with stateful jaxprs.)rb   r   r6  r  r  !_partial_eval_jaxpr_custom_cachedr|   
ValueErrorrI  r  r  r  r  r  r  jaxpr_stagedr  out_instnum_resnum_res_refs               rP   partial_eval_jaxpr_customr    s    
']]dj3u|,,,G	
$&&.03u}3E3EE	/d""&(3u}+=+==O'u[/A/A(-g(-.A(B(B(-o(>(>J J J+|\8Wk
 1__
FH H H	lL(G	CCrR   5tuple[Jaxpr, Jaxpr, list[bool], list[bool], int, int]c           	        t          |          t          u r|ft          | j                  z  }t          |          t          u r|ft          | j                  z  }t          |          t          u r|ft          | j                  z  }t          | t          |          t          |          t          |          t          |          |          \  }}}}	}
}||||	|
|fS rL   )rb   r   r6  r  r  r  r|   r  s               rP   partial_eval_jaxpr_statefulr    s     
']]dj3u|,,,G	
$&&.03u}3E3EE	/d""&(3u}+=+==O'u[/A/A(-g(-.A(B(B(-o(>(>J J J+|\8Wk
 
lL(G[	PPrR   tuple[bool, ...]c                  2345 i 2t                      5t                      }d2fd}d2fd}d5fd}	dd}
t          j        d          4g g }}t          |||| j                   t          t          |dd          | j                   | j        D ]}t          t          ||j                            \  }}t          
                    |j                  }|r |||||          \  }}}}}|o|                    |           |o|                    |           |D ]G}t          |j        t                    r|                    |           25                    |           Ht          ||||j                   t%          |          ret          |	||j                  }|                    |                    |                     t          t          |dd          |j                   a|                    |           t)           ||j        gd |j        D             R i |j                  } |
|j                  st          |t.                    r&t          t          |dd          |j                   t          |t0                    rddlm}m} 4fd|j        D             }t9          t:                   |j                  }t          j        |||t?           ||j                   gd g          tC                      tE          j#                    tI          d d                    }|                    |           t          t          |dd          |           5%                    |           t          j        ||j        |t?           ||j&                  gd g          tC                      tE          j#                    tI          d d                    }|                    |           t          t          |dd          |j                   t          |tN                    sJ t          |	||j                  }|                    |                    |                     t          t          |dd          |j                   t          t          || j                            }t9          |d                   t9          |d                   }!} tQ          d 5D                       s
J 5            tS          | j        |!|          D ]\  }"}#}$|$r |	|#|"           t          tT          j+        | |          } t          tT          j+        |!|          }!tY          || j                  \  3}%tY          | | j                  \  }&}%3fd|D             }'tY          |'t9          |                    \  }(}%g 3|(})g |&5}*t[          | j        |)|*|          }+t]          | j        |)|*||+          },t^          j0        j1        ot          j2        |,           tY          || j                  \  }%}-tY          |!| j                  \  }%}.g 5|(|-}/t[          | j        |/|.|          }0t]          | j        |/|.||0          }1t^          j0        j1        ot          j2        |1           |,|1| |!tg          5          tg          |(          fS ) NrO   r)   rY   tuple[bool, bool]c                D    t          |           t          u r|          S dS )N)FTrb   r&   rO   rJ  s    rP   readz/_partial_eval_jaxpr_custom_cached.<locals>.read  s     Aww#~~Vm=rR   unkr   r  r  r&   Nonec                *    | |fdk    sJ | |f|<   d S )N)TFrM   )r  r  r  rJ  s      rP   writez0_partial_eval_jaxpr_custom_cached.<locals>.write  s)    ;-''''4[CFFFrR   c                b    t          |          t          u r| s                    |           |S rL   )rb   r&   r  )r  rO   r  s     rP   ensure_instantiatedz>_partial_eval_jaxpr_custom_cached.<locals>.ensure_instantiated  s-    Aww#~~d~mmAHrR   c                4    t          d | D                       S )Nc                F    h | ]}t          |t          j                  |S rM   r   r   NamedAxisEffectr\   r^   s     rP   r   zI_partial_eval_jaxpr_custom_cached.<locals>.has_effects.<locals>.<setcomp>  s*    OOOq:a9M+N+NOOOOrR   )r   r   s    rP   has_effectsz6_partial_eval_jaxpr_custom_cached.<locals>.has_effects  s    OOGOOOPPPrR   _offload)suffixFTr  c                    g | ]	}|j         
S rM   r   rV  s     rP   rh   z5_partial_eval_jaxpr_custom_cached.<locals>.<listcomp>  s    666a16666rR   r   )device_put_pTransferToMemoryKindc                0    g | ]} |j                   S rM   r   )r\   r  r  s     rP   rh   z5_partial_eval_jaxpr_custom_cached.<locals>.<listcomp>  s#    777a66!&>>777rR   )devicessrcsr   c              3  B   K   | ]}t          |          t          u V  d S rL   r  r   s     rP   r_   z4_partial_eval_jaxpr_custom_cached.<locals>.<genexpr>  s,      //T!WW^//////rR   c                    g | ]}|v S rM   rM   )r\   r  	ins_knowns     rP   rh   z5_partial_eval_jaxpr_custom_cached.<locals>.<listcomp>  s    <<<a9n<<<rR   )rO   r)   rY   r
  )r  r   r  r   r  r&   rY   r  )r  r   rO   r)   rY   r)   r   )4rG   r   r  r  r  r
   re  r  r@   partial_eval_jaxpr_custom_rulesr   r   r=  r   r   r7   r  r  r   r	  ensure_enumr   r   SaveableTypeOffloadablejax._src.dispatchr  r   rZ  r)   r*   r9  dstr   r   new_source_infor6   r{   r  RecomputeTyper   r   r;  or_rF   r  r   r   r   r   r  r6  )6rI  r  r  r  r  r  residual_refsr  r  r  r  
known_eqnsstaged_eqnsr  unks_ininst_inr>  eqn1eqn2unks_outinst_outrT  r  inputspolicyr  r   resvarsoutvars_copyoffload_eqn
reload_eqnunzippedr  r  rO   r  ensure_instr]   
outs_knownref_res_is_inputnon_input_res_refsins_known_and_ref_resknown_outvarsknown_effectsr  
ins_stagedouts_stagedstaged_invarsstaged_effectsr   rJ  r&  r  r  s6                                                     @@@@rP   r  r    sL    ')#)||)#-<<-     
          
Q Q Q Q ;j)))&k*e['5<000geUD!!5?333Z 16 16cc$
3344GW*..s}==D .6,0D7GS,Q,Q)dD(Hc
&z  &&(I1C1CD1I1I  !afk** 	


A




--



	%8S[1111	W %6&<<fF33444	'%t
$
$ck222288
-F663:666F F F:=*F F G Gf	S[	!	! 6Z%E%E 6GE5%((#+6666fk** 6HHHHHHHH77773;777Dz#+..m'<..vz::;4&IIIEE#355D%((	* *
 	+&&&GE5$''111!!!]S[,..vz::;4&IIIEE#355D%((	* *

 	:&&&GE5$''5555&-00000('3:>>3;;f;55666GE5$''5555Cem,,--(,,d8A;.?.?,	//Y///	/	/:::::!%-?KK 1 1a{0''a000RV\+>??,RVX?;;(U\::,)Q u}==-*a<<<<m<<<()94;N;NOOa;I;(:;+J++-$U_6K%2J@ @-eo'<m -1 1+>!1+!>!> %,77-!Z!(EM::.![@I@ 2@Z@-%eo}&1;@ @.u"KA A,?!1,!?!?
|\8S^^
 
!
!
# #rR   c                      e Zd ZdS )r.  Nro   rp   rq   rM   rR   rP   r.  r.  '            rR   r.  c                      e Zd ZdS )r)  NrL  rM   rR   rP   r)  r)  *  rM  rR   r)  c                  $    e Zd ZU ded<   ded<   dS )r*  
MemoryKindr  r,  Nr~  rM   rR   rP   r*  r*  -  s"         ////////rR   r*  casebool | RematCases
RematCasesc                P    t          | t                    r| rt          nt          S | S rL   )r   r   Saveable	Recompute)rQ  s    rP   r(  r(  4  s(    d +*88*	+rR   .z&dict[Primitive, PartialEvalCustomRule]r'  namestrr3  r4  r  r*   PartialEvalCustomResultc                ,    d|  d}t          |          )Nz-custom-policy remat rule not implemented for zA, open a feature request at https://github.com/google/jax/issues!r  )rW  r  r3  r4  r  msgs         rP   .partial_eval_jaxpr_custom_rule_not_implementedr\  J  s,    
K 
K 
K 
K#C   rR   r   r"   c                    |S rL   rM   )r   r   s     rP   _default_res_aval_updaterr^  V  s    	+rR   c              #     K   d V  d S rL   rM   )r]   s    rP   trivial_ctxr`  Z  s      EEEEErR   )res_avalr}  jaxpr_param_nameparams_updaterParamsUpdaterra  ResAvalUpdater8Callable[[core.ParamDict], AbstractContextManager[None]]Dtuple[JaxprEqn, JaxprEqn, Sequence[bool], Sequence[bool], list[Var]]c          	        |j         |          } ||j                   5  t          |||dd|          \  }	}
}}}d d d            n# 1 swxY w Y   t          ||j                  \  }}t          ||j                  \  }}t          ||j                  \  }}t          ||j                  \  }}t          j                    i |j         | |	ii |j         | |
i} |||t          t          j	        |          |||          \  }fd|
j        d |         D             }t          |g |||j        |	j        |j        |j                  }t          g ||||j        ||
j        |j        |j                  }t          |j                  t          |
j                  k    sJ d t!          |j        |          D             }||||||z   fS )NFc                D    g | ]}  |j                             S rM   r   )r\   r  r  params_knownra  s     rP   rh   z1call_partial_eval_custom_rule.<locals>.<listcomp>q  sA     9 9 9 vhh|SX6677 9 9 9rR   c                H    g | ]\  }}t          |          t          u || S rM   r  r\   rO   r  s      rP   rh   z1call_partial_eval_custom_rule.<locals>.<listcomp>z  6     . . .GAtaC rR   )r   r  rF   r  r  r   r  r  r;  r<  r$   r   r   r|  r}  r6  r   )rb  rc  r  r3  r4  r  ra  r}  rI  r  r   r7  r8  r  r&  r]   out_binders_knownrG  out_binders_stagedparams_stagedr  	eqn_known
eqn_stagednew_instr  rj  s         `                 @@rP   call_partial_eval_custom_rulert  ]  s    *%
&%
s3: S S!%'5%RR ;Kx7S S S S S S S S S S S S S S S  44,)Q'#+>>Q #*55-!Z(3;??!;==&>CJ> 0+>>,@SZ@!1<@@- .wBGX..'<! !,9 9 9 9 9 9&-hwh79 9 9)I'G):'GY'GM<9LOSW6 6) 6y6:68J ]M)13?CGM M* 
Z		3|':#;#;	;	;	;	;. .s3:w77 . . .(	J(Hy4H	HHs   AAA)ra  ParamsUpdater2c          
        t          d |j        D                       }t          |j        |          g |R g |R ||          \  }}	}
}}}}||z   }t	          |
|j                  \  }}t	          ||j                  \  }}t	          ||j                  \  }}t	          ||j                  \  }}t          j                    i |j        | |ii |j        | |	i} |||t          t          j
        |
          |t          d |D                       ||          \  }t          fd|	j        d |         D             |g          \  }}d t          ||          D             }t          |||          }t!          g ||g |||j        |j        |j        |j                  }t!          g |||||j        ||	j        |j        |j                  }t+          |j                  t+          |	j                  k    sJ t+          |          t+          |          z   t+          |j        j                  k    sJ t+          |          t+          |          z   t+          |          z   t+          |	j        j                  k    sJ t+          |          t+          |          z   t+          |j        j                  k    sJ d t          |j        |          D             }g |||}|||
||fS )Nc              3  @   K   | ]}t          |t                    V  d S rL   )r   r'   r   s     rP   r_   z7closed_call_partial_eval_custom_rule.<locals>.<genexpr>  s,      ??a:a))??????rR   c              3     K   | ]}|d u V  	d S rL   rM   r\   rS   s     rP   r_   z7closed_call_partial_eval_custom_rule.<locals>.<genexpr>  s&      	%	%!t)	%	%	%	%	%	%rR   c                :    g | ]}  |                    S rM   rM   )r\   r  r  rj  ra  s     rP   rh   z8closed_call_partial_eval_custom_rule.<locals>.<listcomp>  s?     1 1 1 vhh|Q''(( 1 1 1rR   c                    g | ]	\  }}||
S rL   rM   )r\   r  rS   s      rP   rh   z8closed_call_partial_eval_custom_rule.<locals>.<listcomp>  s    NNN41aAIQIIIrR   c                H    g | ]\  }}t          |          t          u || S rM   r  rl  s      rP   rh   z8closed_call_partial_eval_custom_rule.<locals>.<listcomp>  rm  rR   )r|   r  (_closed_jaxpr_partial_eval_custom_cachedr   rF   r  r   r  r  r;  r<  r4  rD   r@  r   rJ   r$   r   r   r|  r}  r6  rI  )rb  rc  r  r3  r4  r  ra  dropvarsr  r   r7  r8  r  num_res_valout_fwdr  rn  r]   r&  rG  ro  rp  res_val_bindersres_ref_bindersres_val_varsrq  rr  rs  new_varsr  rj  s         `                      @@rP   $closed_call_partial_eval_custom_ruler    ss    ??3;?????(.
*%
&'[w[[(HV V S+|Xxk7 +%''#+>>Q44,)Q #*55-!Z(3;??!;==&>CJ> 0+>>,@SZ@!1<@@- .wBGX..		%	%W	%	%	%%%wm!M !M, &01 1 1 1 1 1%hwh/1 1 13>-&A &A"/? ON3#@#@NNN/7$5GG,:i:/:B/B/BM<9LOSW6 6) K|KoK
K/ ]M<;O _cg7 7* 
Z		3|'<#=#=	=	=	=	=	Y#o..	.#k6G6N2O2O	O	O	O	O	Z3//	/#l2C2C	Cs<K]KdGeGe	e	e	e	e			#o"6"6	6#k>O>W:X:X	X	X	X	X. .s3:w77 . . .(9x9,99(	J(H	<<rR   r~  r   _tuple[ClosedJaxpr, ClosedJaxpr, Sequence[bool], Sequence[bool], int, int, Sequence[int | None]]c                   t          | j        ||dd|          \  }}}}}	}
t          |j                  |	z
  }t	          |j        |g          \  }}t          ||          \  }}d t          t          ||                    D             fd|D             }t          |dg|z  d |D             z             }t          j
        || j                  }t          j
        || j                  }|||||
|	|fS )NFc                >    i | ]\  }\  }}|
t          |          |S rM   ra  )r\   r   r  bs       rP   r   z<_closed_jaxpr_partial_eval_custom_cached.<locals>.<dictcomp>  s<       )!VaRUUA   rR   c                T    g | ]$}                     t          |                    %S rM   r  )r\   r  r  s     rP   rh   z<_closed_jaxpr_partial_eval_custom_cached.<locals>.<listcomp>  s+    222AW[[A222rR   Tc                    g | ]}|d u S rL   rM   ry  s     rP   rh   z<_closed_jaxpr_partial_eval_custom_cached.<locals>.<listcomp>  s    /K/K/KaT	/K/K/KrR   )r  rI  r6  r  rD   rF   r   r   prune_jaxpr_outputsr   r#   r  )rI  r3  r4  r~  r  jaxpr_known_jaxpr_staged_r7  r8  r  r  num_out_primalsout_varsres_varsout_dropvars_knownr]   r  r  r   r  s                      @rP   r}  r}    s5    "%+w"': : L,x;
 ,--;/!,"68IJJ(H(8<<a yX?Q1R1R'S'S   '2222222' %TF_,/K/K7/K/K/KKM M,  u|<<+!->>,	lHh[RY	YYrR   r$  c                
    ||fS rL   rM   )r]   r  ____________rO   ys          rP   r  r    s
    1a& rR   c                
    ||fS rL   rM   )r]   r  r  r  r  ______rO   r  s           rP   r  r    s
    1a& rR   list[int | None]c                   t          t          | j        | j                            | j        D ]v}|j        t
          v rf|                    fd|j        D                       }t          |j                 |          \  }}t          |j        |          D ]\  }}|||<   wd t          | j                  D             fd| j        D             S )Nc                l    g | ]0}t          |          t          u r|n                    ||          1S rM   rb   r    r   )r\   rc   rF  s     rP   rh   z%_jaxpr_forwarding.<locals>.<listcomp>  sI      5  5  5$% &*!WW%7%7TXXa^^  5  5  5rR   r  c                    i | ]\  }}||	S rM   rM   r  s      rP   r   z%_jaxpr_forwarding.<locals>.<dictcomp>  s    CCC41a!QCCCrR   c                    g | ]B}t          |          t          u rd n'                                        |                    CS rL   r  )r\   r  rF  idxss     rP   rh   z%_jaxpr_forwarding.<locals>.<listcomp>  sS     
" 
" 
" q''W$$$$$((488A;;*?*? 
" 
" 
"rR   )	r9  r   r  r  r   forwarding_rulesr	  r  r   )rI  r  fwd_varsr]   v_origv_newrF  r  s         @@rP   _jaxpr_forwardingr    s   c%,==>>$Z  c
}(((KK  5  5  5  5), 5  5  5K 6 6c$S]3C88khs{H55  -&%$v,CC9U\+B+BCCC$
" 
" 
" 
" 
"=
" 
" 
" "rR   used_outputsc                <    t          | t          |                    S rL   )_prune_jaxpr_outputs_cachedr|   rI  r  s     rP   r  r    s    	$UE,,?,?	@	@@rR   c                   d t          | j        |          D             }| j        oct          j        | j        j        | j        j        | j        j        t          d t          | j        j	        |          D                                 }| 
                    ||          }t          j        j        ot          j        |           |S )Nc                    g | ]	\  }}||
S rM   rM   r\   r  r  s      rP   rh   z(_prune_jaxpr_outputs.<locals>.<listcomp>  !    AAA41aqAQAAArR   c              3  $   K   | ]\  }}||V  d S rL   rM   r  s      rP   r_   z'_prune_jaxpr_outputs.<locals>.<genexpr>  +      PP$!QaPAPPPPPPrR   )r  r   )r   r  r   r   JaxprDebugInfo
traced_forfunc_src_infor  r|   result_pathsr	  r   r   r   r  )rI  r  r  r  	new_jaxprs        rP   _prune_jaxpr_outputsr    s    AA3u}l;;AAA' 	RT0!5#3#A PP#e.;\JJPPPPPR R# mmGm<<)<!1)!<!<	rR   c                <    t          | t          |                    S rL   )_prune_closed_jaxpr_outputsr|   r  s     rP   prune_closed_jaxpr_outputsr    s     
%UE,,?,?	@	@@rR   )trace_context_in_keyc                R    t          t          | j        |          | j                  S rL   )r#   r  rI  r  r  s     rP   r  r    s*     
)%+|DD\
# 
# #rR   tuple[Jaxpr, list[bool]]c                    t          |          t          u r|ft          | j                  z  }t	          | t          |          t          |                    S rL   )rb   r   r6  r  
_dce_jaxprr|   )rI  r  r  s      rP   	dce_jaxprr    sO     
+$.3u|#4#44K	E5..k0B0B	C	CCrR   $tuple[Jaxpr, list[bool], list[bool]]c                    t          |           }t          ||          \  }}t          |t          | j                  g          \  }}t          |          rt          |t          |                    }|||fS rL   )r:  r  rD   r6  re  r4  r  )rI  r  r  jaxpr_r  used_inputs_used_constsused_inputss           rP   dce_jaxpr_constsr    s{     #5))&%fl;;)\'s5?7K7K6LMM+{ I+Is;7G7GHHI	K	,,rR   c                   i dfddfd
}dd}g }t          || j        |           | j        d d d         D ]}t          |j                  }t          |          s$ ||          sdgt	          |j                  z  }nKt                              |j        t                    }	 |	||          \  }}
|
|
                    |
           t          ||j        |           t          | j                  }t          t          j        ||          }d t          | j        |          D             }d t          | j        |          D             }|d d d         }t          | j        |||          }| j        ot#          j        | j        j        | j        j        t+          d t          | j        j        |          D                       t+          d t          | j        j        |          D                                 }t1          | j        |||||          }t2          j        j        ot#          j        |           ||fS )Nr  r&   rY   r   c                0                         | d          S NFr   )r  rJ  s    rP   r  z_dce_jaxpr.<locals>.read  s    771erR   rO   r)   r  r  c                X    t          |           t          u r |           p|| <   d S d S rL   r  )rO   r  rJ  r  s     rP   r  z_dce_jaxpr.<locals>.write  s2    Aww#~~tAww|!c!fff ~rR   r  r*   c                    d | j         D             }t          |          pt          j        | j        | j                  S )Nc                F    h | ]}t          |t          j                  |S rM   r  r  s     rP   r   z2_dce_jaxpr.<locals>.has_effects.<locals>.<setcomp>  s*    NNN!*Q8L*M*MNANNNrR   )r   r   r   primitive_uses_outfeedr   r   )r  r{  s     rP   r  z_dce_jaxpr.<locals>.has_effects  s9    NNs{NNND::O4S]CJOOOrR   Fc                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z_dce_jaxpr.<locals>.<listcomp>/  s!    @@@$!Qa@A@@@rR   c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z_dce_jaxpr.<locals>.<listcomp>0  r  rR   c              3  $   K   | ]\  }}||V  d S rL   rM   r  s      rP   r_   z_dce_jaxpr.<locals>.<genexpr>6  s+      LL$!Q!LALLLLLLrR   c              3  $   K   | ]\  }}||V  d S rL   rM   r  s      rP   r_   z_dce_jaxpr.<locals>.<genexpr>7  r  rR   )r  r&   rY   r   )rO   r)   r  r   rY   r  )r  r*   rY   r   )r  r  r  r   r6  r  	dce_rulesr   r   _default_dce_ruler=  r;  r/  r   r  re  r   r   r  r  r  r|   r  r  r   r   r   r   r  )rI  r  r  r  r  new_eqnsr  	used_outsused_insr>  new_eqnr  r  r  r  r  r  r  rJ  r  s                     @@rP   r  r    s    #           P P P P (eU]L)))Z" 	% 	%cD#+&&Iy>> !++c"2"2 !3sz??*hh]]3=*;<<d$y#..h		   sz8$$$$D%,''+BFK55+@@#elK88@@@&AA3u}l;;AAA'	$$B$$$U_fgtLL- 	RT0!5#3#ALL#e.8+FFLLLLLPP#e.;\JJPPPPPR R# EOVWdM3OO)<!1)!<!<	K	rR   r  tuple[list[bool], JaxprEqn]c                6    dgt          |j                  z  |fS r  )r6  r  )r  r  s     rP   r  r  @  s     #cj//	!3	&&rR   zdict[Primitive, DCERule]r  "tuple[list[bool], JaxprEqn | None]c           	        t          |j        d         |           \  }}t          |j        |          }t                              |j                  }|r |||d          }t          |          st          |           s|j        s|d fS t          d t          |j
        |          D             d t          |j        |           D             |j        ||j        |j        |j                  }||fS )Nr$  r#  r   c                    g | ]	\  }}||
S rM   rM   r\   r  useds      rP   rh   z'dce_jaxpr_call_rule.<locals>.<listcomp>S  s!    ???wq$$????rR   c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z'dce_jaxpr_call_rule.<locals>.<listcomp>T  s!    AAAwq$DAAAArR   )r  r   r9  r,  r   r   r   r   r$   r   r  r  r|  r}  )r  r  r  r  r  r?  r  s          rP   dce_jaxpr_call_ruler  H  s   $SZ%=|LL)[CJ9555*%))#-88- ;z;::J	[		  #l"3"3  I<M  ??#cj+66???AA#ck<88AAAz9#4coswP PG rR   #tuple[core.ClosedJaxpr, list[bool]]c                r    | j         | j        }}t          ||          \  }}t          j        ||          |fS rL   )rI  r  r  r   r#   )r  r  rI  r  r  r  s         rP   _cached_closed_call_dcer  Z  s=     ,%$UL99)[		)V	,	,k	99rR   c           	     V   |j         d         }t          |t          |                     \  }}t          |j         |          }t	          d t          |j        |          D             d t          |j        |           D             |j        ||j	        |j
        |j                  }||fS )Nr$  r#  c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z.dce_jaxpr_closed_call_rule.<locals>.<listcomp>h  s!    ===WQ=q===rR   c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z.dce_jaxpr_closed_call_rule.<locals>.<listcomp>i  s!    ???WQ$?q???rR   )r   r  r|   r9  r$   r   r  r  r   r   r|  r}  )r  r  r  r  r  r  r  s          rP   dce_jaxpr_closed_call_ruler  a  s     :l#&5feL>Q>QRR,CJ<888*==CJ44===??CK66???	mZ!5sQ Q' 
g	rR   c                "    t          | d          S r   )r#   )rI  s    rP   close_jaxprr  n  s    	UB		rR   r  to_movec                <    t          | t          |                    S )zEReorder `invars` by moving those indicated in `to_move` to the front.)_move_binders_to_frontr|   r  r  s     rP   move_binders_to_frontr  r  s     
 eGnn	=	==rR   c                2   t          | j                  t          |          k    sJ t          | j        j        |          }t          | j        j        || j        j        | j        j        | j        j	                  }t          j        || j                  }|S rL   )r6  r@  _move_to_frontrI  r  r   re  r  r  r   r   r#   r  )r  r  
new_invarsr  new_closed_jaxprs        rP   r  r  w  s     
\"	#	#s7||	3	3	3	3l07AA*L&0* &.0B0G &.0 0) %i1DEE	rR   lstr   c                l    d t          | |          D             d t          | |          D             z   S )Nc                    g | ]	\  }}||
S rM   rM   r\   eltmoves      rP   rh   z"_move_to_front.<locals>.<listcomp>  s!    
:
:
:93T
:3
:
:
:rR   c                    g | ]	\  }}||
S rM   rM   r  s      rP   rh   z"_move_to_front.<locals>.<listcomp>  s!    
>
>
>93
>3
>
>
>rR   r   )r  r  s     rP   r  r    sC    
:
:C 1 1
:
:
:
>
>C 1 1
>
>
>? @rR   c                R    t          | t          t          j        |                    S )zDReorder `invars` by moving those indicated in `to_move` to the back.)r  r  r;  r<  r  s     rP   move_binders_to_backr    s      
|S'-B-B	C	CCrR   c                  >    e Zd ZddgZddZd Zd Zd Zdd
Zd Z	dS )DynamicJaxprTracerr   _debug_infoNc                \    || _         || _        | j         j        j        | _        || _        d S rL   )r   
_line_infoframer   r  r   )rm   r  r   	line_infos       rP   rn   zDynamicJaxprTracer.__init__  s+    DKDO{(3DDIIIrR   c                    | j         j        j                            t	          |                     }|| S | j         j        j                            |          }|| S t          j        |          S rL   )r   r  tracer_to_varr   r	  constvar_to_valr   r  )rm   r  rw   s      rP   r  zDynamicJaxprTracer.full_lower  s`    
+

)
-
-bhh
7
7C
{4K
+

+
/
/
4
4C
{4K?3rR   c                    dS r   rM   r   s    rP   	_contentszDynamicJaxprTracer._contents  s    2rR   c                   
 | j         j        j        sdt          j        | j                   S | j         j                            |           \  }}| j        }|dS d|j	        pd d|j
         d}t          |          
|r
rt          
fd|D                       r
fd|D             
d	 
D             }t          |          d
k    rd|d          }nHt          |          dk    rd|d          d|d
          }n |^ }}dd                    |           d| }|dt          |          d
k    rdnd d| dz  }nI|rGd |d d         D             }	|dd                    |	          z   z  }t          |          dk    r|dz  }d|z   S )Nz-
This DynamicJaxprTracer was created on line  z.The error occurred while tracing the function z	<unknown> for z. c              3  >   K   | ]}|t                    k     V  d S rL   )r6  r\   r   arg_infos     rP   r_   z1DynamicJaxprTracer._origin_msg.<locals>.<genexpr>  s.      %K%KAa#h--&7%K%K%K%K%K%KrR   c                     g | ]
}|         S rM   rM   r  s     rP   rh   z2DynamicJaxprTracer._origin_msg.<locals>.<listcomp>  s    111!(1+111rR   c                :    g | ]\  }}| t          |           S rM   )r?   )r\   rW  paths      rP   rh   z2DynamicJaxprTracer._origin_msg.<locals>.<listcomp>  s-    FFFztTd*F4LL**FFFrR   r   zthe argument r      zthe arguments z and z, z, and zOThis concrete value was not available in Python because it depends on the valuesz of .c           
         g | ]Y}d t          j        |t          j                    t          j        d                     dt	          j        |j                   ZS )z  operation T)print_shapesz
    from line )r   pp_eqnJaxprPpContextJaxprPpSettingsr   	summarizer|  )r\   r  s     rP   rh   z2DynamicJaxprTracer._origin_msg.<locals>.<listcomp>  s|     . . . MS$"5"7"79M[_9`9`9`aaM M/9#/JJM M . . .rR      zBThis value became a tracer due to JAX operations on these lines:

z

z/

(Additional originating lines are not shown.)
)r   r0  jaxpr_stackr   r  r  r  find_progenitorsr  r  r  arg_info_allr   r6  join)rm   	invar_posprogenitor_eqnsr  originr  arg_info_strrestlastmstsr  s             @rP   _origin_msgzDynamicJaxprTracer._origin_msg  sP   ;' L?!+DO<<? ? @ $(;#4#E#Ed#K#K i

C
{RK"1kK K8;K K KFC  H FX F#%K%K%K%K%K%K%K"K"K F1111y111hFFXFFFi	Y1		5y|55y>>QI	!II9Q<IItE		$EEtEE '/29~~/A/Ar' '#' ' ' (ff 
 F. . )!,. . .d   ++d++, -f	_			!	!EE&=rR   rY   r  c                R    | j         j        j        st          j        | d           d S rL   )r   r0  r  r   r,  r   s    rP   _assert_livezDynamicJaxprTracer._assert_live  s/    ;' 2%dD1112 2rR   c                    | j         j        }|j                            |j                            t          |                               }|| nt          |          S rL   )r   r  r  r   r  r	  r5   )rm   r  rw   s      rP   r5   zDynamicJaxprTracer.get_referent  sO    KE


#
#E$7$;$;BtHH$E$E
F
FC;44L$5$55rR   rL   rY   r  )
ro   rp   rq   r:  rn   r  r  r(  r*  r5   rM   rR   rP   r  r    s        }%)          & & &P2 2 2 26 6 6 6 6rR   r  c                4    t          j        | j                  S rL   r  rN   s    rP   (_dynamic_jaxpr_tracer_shaped_abstractifyr.    s    		af	%	%%rR   effects.Effectsc                   t                      }t                      }d t          t          j        | |                    D             }|D ]5}|j        t          j        u r|j        \  }d ||<   |j	        D ]}	t          |	t          j                  r|	j        t          |j                  k    r:t          d|	 d| dt          j        | |||t                                           |j        |	j                 }
|                    |
|          x}|u r=t          d|	 d|
 d| dt          j        | |||t                                           |	                    |          }	|                    |	           
7|S )Nc                    i | ]\  }}||	S rM   rM   r  s      rP   r   z&make_jaxpr_effects.<locals>.<dictcomp>  s    FFFtq!aFFFrR   z`JaxprInputEffect` z is invalid.
 Equation: z


 Jaxpr: z$ does not have corresponding input: z.
 Equation: input_index)r  r   r   r  r  r   r   mutable_array_pr  r   r   r  r3  r6  r  r  r   r   r	  r  )re  r  r  r  r  r  all_varsr  outvarr  invarr3  s               rP   r  r    s   XX(%%-FFy)V)D)DEEFFF(  c
},,,gfhv{  	C1	2	2 3?c#*oo--GC G G!G G IvwceeDDG GH H H
 
3?+#<<x888KXEEIc I I(-I I #I I :i$FF	I IJ J J kkkk22#$ 
rR   c                      e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d Zd'dZd(d"Zd# Zd$ Zd% Z	d&S ))JaxprStackFramezCallable[[AbstractValue], Var]r  zdict[TracerId, Var]r  zdict[ConstId, Tracer]constid_to_tracerzdict[Var, Any]r  zlist[DynamicJaxprTracer]r   zlist[JaxprEqn]r  z	list[Var]r  rz  r   zlist[tuple[Any, str]]attrs_trackedrZ  attrs_inits
attrs_varsDebugInfo | Noner   c                    t          j                    | _        i | _        i | _        i | _        g | _        g | _        g | _        t                      | _	        g | _
        g | _        g | _        d | _        d S rL   )r   r  r  r:  r  r   r  r  r   r   r;  r<  r=  r   r   s    rP   rn   zJaxprStackFrame.__init__  si    +--DKDDDDLDIDK55DLDDDODOOOrR   r  r  c                :    | j                             |           d S rL   )r  r=  )rm   r  s     rP   add_eqnzJaxprStackFrame.add_eqn  s    ISrR   r  DynamicJaxprTracer  Sequence[Tracer]rY   Ktuple[Jaxpr, list[Any], list[tuple[PyTreeDef, PyTreeDef, tuple[Any, str]]]]c                    t           j                  t          t           j                                                            k    sJ  j         j        z   }t          d t           j                  D                       \  }} fd|D             } fd|D             }||z   }t           j	        
                                          \  }	}
t          |	 j        | j                  }t          |	|| j        |          }t          ||
          \  }}
t          ||
          \  }}
d  j        D             }t#           j         j                   |t%          |
          t'          || j                  fS )Nc              3  4   K   | ]}t          |          V  d S rL   )r;   r   s     rP   r_   z+JaxprStackFrame.to_jaxpr.<locals>.<genexpr>  sA       "A "AQ"A "A "A "A "A "ArR   c           	     t    g | ]4}|D ]/}j         t                              |                             05S rM   )r  r	  r8  )r\   r   rO   rm   r  s      rP   rh   z,JaxprStackFrame.to_jaxpr.<locals>.<listcomp>  s[     6 6 6"6 6-. '5+;+;A+>+>(?(?@ 6 6 6 6rR   c                D    g | ]}j         t          |                   S rM   r  r	  r\   r   rm   s     rP   rh   z,JaxprStackFrame.to_jaxpr.<locals>.<listcomp>  s'    GGGa*2a551GGGrR   c                ,    g | ]}t          |          S rM   )r<   )r\   init_vals     rP   rh   z,JaxprStackFrame.to_jaxpr.<locals>.<listcomp>   s     LLLx.**LLLrR   )r6  r  r   valuesr=  r  r@   
get_statesr;  r  r  r  r  r   _const_folding_and_forwarding_inline_literalsr<  
set_statesrZ  r   )rm   r  r  r  	state_ans	end_treesstate_outvarsexplicit_outvarsr  re  	constvalsr  rI  
init_treess   ``            rP   to_jaxprzJaxprStackFrame.to_jaxpr  s    t!""c#d.@.G.G.I.I*J*J&K&KKKKK_t{*F! "A "A!+D,>!?!?"A "A "A A AIy6 6 6 6 6(6 6 6MGGGG;GGG..G!$"6"<"<">">??Iy&y$+?OQUQZ[[M)VWdiGGE4UIFFE9'y99E9LL4;KLLLJt!4#3444$y//3z9d>P#Q#QQQrR   c                >    t           j                  t          t           j                                                            k    sJ t	           j                                                  \  }} fd|D             }t          | j        | j	                  }t          | j        | j	        |          }t          ||          \  }}t          ||          \  }}t          |          \  }}t          j        j        ot#          j        |           |||fS )Nc                D    g | ]}j         t          |                   S rM   rI  rJ  s     rP   rh   z-JaxprStackFrame.to_jaxpr2.<locals>.<listcomp>(  s'    CCC!D&r!uu-CCCrR   )r6  r  r   rM  r@   r  r  r  r  r  r   rO  rP  _add_implicit_outputsr   r   r   r   r  )rm   r  re  rV  expl_outvarsr  rI  rH  s   `       rP   	to_jaxpr2zJaxprStackFrame.to_jaxpr2$  s   t!""c#d.@.G.G.I.I*J*J&K&KKKKK!$"6"<"<">">??IyCCCC{CCCL&y$+|(,	3 3M)T[,	! !E 5UIFFE9'y99E9+E22OE8
:4#3E#:#:(I%%rR   c                     t          |t                    r6 fd|j        D             }|                    t	          |                    }                     |          S )Nc                r    g | ]3}t          |t                    rj        t          |                   n|4S rM   )r   r   r  r	  r   s     rP   rh   z*JaxprStackFrame.newvar.<locals>.<listcomp>7  sK     ( ( ( 1;1f0E0EL4%bee,,1 ( ( (rR   ry   )r   r-   ra   r{   r|   r  )rm   r   	new_shapes   `  rP   r  zJaxprStackFrame.newvar4  sl    $%% 1( ( ( ( J( ( (i[[uY//[00d;;trR   c                   | j                             t          |                    }|sdS |h| j        d d d         D ]T}t	          |j                  z  }|r9                    |                               d |j        D                        Ufdt          | j                  D             }t	          | j
                  z  fd| j        D             }||fS )NNNr  c                >    h | ]}t          |          t          u |S rM   r  r   s     rP   r   z3JaxprStackFrame.find_progenitors.<locals>.<setcomp>E  s#    DDD!T!WW^^A^^^rR   c                "    g | ]\  }}|v 	|S rM   rM   )r\   r   r  active_varss      rP   rh   z4JaxprStackFrame.find_progenitors.<locals>.<listcomp>F  s'    PPPTQqK?O?Oq?O?O?OrR   c                <    g | ]}d  |j         D             z  |S )c                >    h | ]}t          |          t          u |S rM   r  r   s     rP   r   z>JaxprStackFrame.find_progenitors.<locals>.<listcomp>.<setcomp>I  s#    >>>AtAww#~~a~~~rR   r  )r\   r  re  s     rP   rh   z4JaxprStackFrame.find_progenitors.<locals>.<listcomp>H  sI     L L L#>>>>>JL# L L LrR   )r  r   r	  r  r   r  difference_updater{   r  r   r  )	rm   r   r  r  producedinvar_positions
const_eqnsre  re  s	          @@rP   r  z JaxprStackFrame.find_progenitors<  s   


 
 F
,
,C Z%Ky2 F FS[!!K/h	 F%%h///DDszDDDEEEPPPPYt{%;%;PPPOc$"6777IL L L L L L LJJ&&rR   N)r  r  )r  rB  r  rC  rY   rD  )
ro   rp   rq   r  rn   rA  rX  r]  r  r  rM   rR   rP   r9  r9    s        (((($$$$****!!!!####&&&&     R R R R(& & &   ' ' ' ' 'rR   r9  rV  Sequence[Any]tuple[Jaxpr, tuple[Any, ...]]c                   t          t          | j        |                    i g }dfd| j        D ][}|                    fd|j        D                       }t          d |j        D                       }|j        t          v rt          fd|j        D                       r{|syfd	|j        D             }t          |j                 ||          \  }}|d u t          d
 |D                       k    sJ t          |j        |          D ]\  }}	|	|	|<   ||}|j        t          v rG|sEt          |j                 |          \  }
}t          |j        |
          D ]\  }}|||<   |D|}|                    |           ]t                                                    \  }}fd| j        D             }t!          || j        ||          }t#          || j        |||| j                  }||fS )Nrc   r)   rY   c                ^    t          | t                    r                    | |           n| S rL   r   r&   r   )rc   var_subss    rP   apply_var_subz4_const_folding_and_forwarding.<locals>.apply_var_subQ  s+    !+As!3!3:8<<1:rR   c                &    g | ]} |          S rM   rM   r\   r  rr  s     rP   rh   z1_const_folding_and_forwarding.<locals>.<listcomp>U  s#    CCC1mmA..CCCrR   r  c              3  J   K   | ]}t          |t          j                  V  d S rL   r  r  s     rP   r_   z0_const_folding_and_forwarding.<locals>.<genexpr>W  sC       3 3" &c7+CDD 3 3 3 3 3 3rR   c              3  J   K   | ]}t          |t                    |v V  d S rL   r   r&   r\   r  r  s     rP   r_   z0_const_folding_and_forwarding.<locals>.<genexpr>Z  s6      BBAz!S/A/ABAKBBBBBBrR   c                h    g | ].}t          |t                    r                    |          nd /S rL   rp  rx  s     rP   rh   z1_const_folding_and_forwarding.<locals>.<listcomp>\  sF     ( ( ( %/q#$6$6@6::a===D ( ( (rR   c              3     K   | ]}|d uV  	d S rL   rM   r   s     rP   r_   z0_const_folding_and_forwarding.<locals>.<genexpr>_  s&      %H%Hatm%H%H%H%H%H%HrR   c                &    g | ]} |          S rM   rM   rt  s     rP   rh   z1_const_folding_and_forwarding.<locals>.<listcomp>m  s#    999aq!!999rR   )rc   r)   rY   r)   )r9  r   re  r  r	  r  r   r   r   const_fold_rulesr   r  r  r=  r@   r  r  r   r   )rI  rV  r  r  has_input_effect	consts_in
consts_outr  r  r   r  r  r  new_constvarsnew_constvalsnew_outvarsr  r  rr  r  rq  s                     @@@rP   rO  rO  L  s   EOY ? ?@@&((; ; ; ; ; ;Z  c
++CCCC
CCC+
D
DC 3 3&)k3 3 3 3 3)))BBBBBBBBB 	* 	*( ( ( (J( ( (i,S];IsKKj'o#%H%HZ%H%H%H"H"HHHHHck:.. ( ($!Q=a&)	(C
}(((1A(*3=9#>>hs{H55 7 7-&%hv.	(COOC!'!7!7-99995=999+$]EL+&.0 0-M5<h!5#35 5)	M	!!rR   zdict[Primitive, ConstFoldRule]r|  zdict[Primitive, ForwardingRule]r  tuple[Jaxpr, list[Any]]c                V   d | j         D             fdt          t          |                    D             }d t          | j        ||          D             dfdt          j                    i fd	fd
fdddfd| j        D             fd| j        D             z  fd| j        D             }fdt          | j        |          D             }fd| j	        D             }g }| j        D ]U}fd|j	        D             }fd|j        D             }	|
                    |                    ||	                     Vfd| j        D             }
t          |||
|          }t          |||
||| j                  }||fS )Nc                F    h | ]}t          |t          j                  |S rM   r  r  s     rP   r   z#_inline_literals.<locals>.<setcomp>  s@     A A A3 g&>??A3 A A ArR   c                H    g | ]t          fd D                       S )c              3  .   K   | ]}|j         k    V  d S rL   r2  )r\   r  r   s     rP   r_   z._inline_literals.<locals>.<listcomp>.<genexpr>  s*      HH3#/Q.HHHHHHrR   )r   )r\   r   input_effectss    @rP   rh   z$_inline_literals.<locals>.<listcomp>  sG     6 6 6 HHHH-HHHHH 6 6 6rR   c                    i | ]M\  }}}t          |          t          j        v !t          j        |          5|7|t          ||j                  NS rM   )rb   r   r   r   ra   r    r   )r\   r  r   r^   s       rP   r   z$_inline_literals.<locals>.<dictcomp>  s^     
N 
N 
NGAq!!WW...rx{{.1. WQ...rR   rc   r)   rY   Literal | Nonec                    t          | t                    r| n+t          | t                    r                    |           nd S rL   )r   r    r&   r   )rc   litss    rP   litz_inline_literals.<locals>.lit  s@    a)) aajC>P>P 0txx{{{rR   c                8     t          |                     S rL   )_substitute_vars_in_type)r   r  newnamenewvarss    rP   r  z"_inline_literals.<locals>.<lambda>  s     8w M MNN rR   c                v                         |           p#                    |  | j                            S rL   )r   r  r   )r  r  r  s    rP   r  z"_inline_literals.<locals>.<lambda>  s0    '++a..IG$6$6q&&..$I$I rR   c                @    t          t          |                     S rL   )r'   r  )r   r  r  s    rP   r  z"_inline_literals.<locals>.<lambda>  s    !9$!N!NOO rR   r   r"   Sequence[Var]c                R    t          | t                    rd | j        D             S g S )Nc                <    g | ]}t          |t                    |S rM   rw  r5  s     rP   rh   z;_inline_literals.<locals>.vars_in_shape.<locals>.<listcomp>  s'    :::Az!S'9'9:a:::rR   )r   r-   ra   r   s    rP   vars_in_shapez'_inline_literals.<locals>.vars_in_shape  s/    $%% ;::::::IrR   c           	         h | ]J}|j         D ]@}t          j        |g |j                            D ]}t	          |t
                    |AKS rM   )r  r  r  r   r   r&   )r\   r  atomr  r  s       rP   r   z#_inline_literals.<locals>.<setcomp>  s{     
$ 
$ 
$cj 
$ 
$d8TFMM$)$<$<==
$ 
$c""
$! 
$ 
$ 
$ 
$ 
$rR   c                b    h | ]+}t          j        |g |j                            D ]}|,S rM   )r  r  r   )r\   r6  r  r  s      rP   r   z#_inline_literals.<locals>.<setcomp>  s`     D D DHfX}}V['A'ABBD D  D D D DrR   c                D    g | ]}|v  |           |          S rM   rM   )r\   r  r  r  r  s     rP   rh   z$_inline_literals.<locals>.<listcomp>  s2    OOOaa4iiAi33q66iiirR   c                8    g | ]\  }}|v 	 |          |S rM   rM   )r\   r  r   r  r  s      rP   rh   z$_inline_literals.<locals>.<listcomp>  s9     0 0 0A4iiAi iirR   c                &    g | ]} |          S rM   rM   )r\   r  r  s     rP   rh   z$_inline_literals.<locals>.<listcomp>  s!    ---1A---rR   c                <    g | ]} |          p
 |          S rM   rM   )r\   rO   r  r  s     rP   rh   z$_inline_literals.<locals>.<listcomp>  s.    3331cc!ffA333rR   c                N    g | ]!}|v r |          n |j                   "S rM   r   )r\   r  dropvarr  r  s     rP   rh   z$_inline_literals.<locals>.<listcomp>  s7    MMMAdss1vvvMMMrR   )r  r  c                <    g | ]} |          p
 |          S rM   rM   )r\   r  r  r  s     rP   rh   z$_inline_literals.<locals>.<listcomp>  s.    999aQ!33q66999rR   )rc   r)   rY   r  )r   r"   rY   r  )r   ranger6  r   re  r   r  r  r  r  r=  r	  r  r   r   )rI  rV  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s                @@@@@@@@@@rP   rP  rP    s   A A%- A A A-6 6 6 6$S^^446 6 6
N 
Ns5?I3C0E 0E 
N 
N 
N$      -1KMM''NNNNNN&IIIII#OOOOO'   

$ 
$ 
$ 
$uz 
$ 
$ 
$$  D D D D5= D D D D$OOOOOO5?OOO-0 0 0 0 0U_i!@!@ 0 0 0--------*(Z A Ac33333
333FMMMMMMMMMGOOCKKvwK??@@@@999995=999+$]J&.0 0-M:{H!5#35 5)	M	!!rR   c                      e Zd Zg Zed             Zd Zd ZexZZ	ddZ
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )rB  c                &    | j         j        d         S Nr  )r0  r  r   s    rP   r  zDynamicJaxprTrace.frame  s    9 $$rR   c                2   t          | |t          j                              }| j        j                            |           | j                            |          x| j        j        t          |          <   }| j        j	                            |           |S rL   )
r  r   r  r  r   r=  r  r  r	  r  )rm   r   r   r  s       rP   r   zDynamicJaxprTrace.new_arg  s~    d,<,D,F,FGGFJf%%%151B1B41H1HHDJRZZ(3JS!!!MrR   c                   | j         j                            t          |                    }|[t	          t          |          t          j        |                    }|                     |          }| 	                    ||          }|S N)	weak_type
r  r:  r   r	  r(   r!   r   is_weakly_typed_lift_tracers_in_aval
_new_const)rm   r   r   r   s       rP   r   zDynamicJaxprTrace.new_const  ss    Z)--bee44F~Xa[[F4J14M4MNNNd''--dtQ''fMrR   rY   r  c                J   t          | |t          j                              }| j        j                            |           | j                            |          x| j        j        t          |          <   }|| j        j	        t          |          <   || j        j
        |<   |S rL   )r  r   r  r  r   r=  r  r  r	  r:  r  )rm   r   r   r   r  s        rP   r  zDynamicJaxprTrace._new_const  s    d,<,D,F,FGGFJf%%%151B1B41H1HHDJRZZ(3*0DJ A'&'DJs#MrR   c                   | j         j                            t          |                    }|[t	          t          |          t          j        |                    }|                     |          }| 	                    ||          }|S r  r  )rm   r   r   r   s       rP   r   zDynamicJaxprTrace.sublift  su     Z)--bee44F~Xa[[F4J14M4MNNNd''--dtQ''fMrR   c                     t          |t                    rt          d |j        D                       s|S  fd|j        D             }|                    t          |                    S )Nc              3  @   K   | ]}t          |t                    V  d S rL   r   r   r5  s     rP   r_   z:DynamicJaxprTrace._lift_tracers_in_aval.<locals>.<genexpr>  s,      ::!
1f%%::::::rR   c                h    g | ].}t          |t                    r                    |          n|/S rM   )r   r   r8  r   s     rP   rh   z;DynamicJaxprTrace._lift_tracers_in_aval.<locals>.<listcomp>  sI     " " " $.a#8#8?T__Qa " " "rR   ry   r   r-   r   ra   r{   r|   )rm   r   ra   s   `  rP   r  z'DynamicJaxprTrace._lift_tracers_in_aval  s    t\** ::tz:::::k" " " "j" " "E;;U5\\;***rR   c                    | j         j                            t          |                    }|t	          j        |          |S rL   )r  r  r   r	  r   r,  rm   r   r  s      rP   r  zDynamicJaxprTrace.getvar  s;    
*
"
&
&r&zz
2
2C
{%f---JrR   c                *   | j         j                            t          |                    }|
J d            | j         j                            |           | j                             |j                  x}| j         j        t          |          <   |S )Nz5a jaxpr variable must be created only once per tracer)r  r  r   r	  r   r=  r  r   r  s      rP   makevarzDynamicJaxprTrace.makevar  sz    
*
"
&
&r&zz
2
2C;;O;;;Jf%%%151B1B6;1O1OOC$*
"2f::
.JrR   c                    t          |t                    r*|j        j        | j        u r|j        j        | j        k    r|S |                     |          S rL   )r   r   r   r0  sublevelr   r   s     rP   r   z#DynamicJaxprTrace.instantiate_const  sM    3 !CJOty$@$@J4=00j^^C   rR   c                n    |t           v rt          |         | g|R i |S |                     |||          S rL   )custom_staging_rulesr   r   s       rP   r   z#DynamicJaxprTrace.process_primitive  sI    (((!),TFGFFFvFFF)))WfEEErR   c                    d |D             } |j         |i |\  }}t          |t          t          f          |j        k    st          | d| d          |j        s|gn|}t          j                     fd|D             }t           j	        |          }t           j
        |          }	t          ||	|||          }
 j                            |
           |j        r|n|                                S )Nc                    g | ]	}|j         
S rM   r   r   s     rP   rh   z?DynamicJaxprTrace.default_process_primitive.<locals>.<listcomp>  r   rR   z;.abstract_eval() method should return a tuple or a list if z2.multiple_results is true. Otherwise it shouldn't.c                2    g | ]}t          |          S rM   r  r\   rc   rm   r|  s     rP   rh   z?DynamicJaxprTrace.default_process_primitive.<locals>.<listcomp>  s&    OOO%dA{;;OOOrR   )r  r   r|   rZ  r
  r  r   r  r  r  r  r$   r  rA  pop)rm   r   r   r   r   rz  r   r  r  r  r  r|  s   `          @rP   r   z+DynamicJaxprTrace.default_process_primitive  s.   %%W%%%E00%B6BBIwy5,//93MMM) ; ;09; ; ; < < < $-#=L9I"*,,KOOOOOYOOOKg&&F$,,,G
FG#% %CJs#4K;;+//:K:KKrR   c                "   |j         ,t          j        |t          d |D                                 }t	          | |j         |          }g ||t          j                    5  t          ||j                  }t          || j
        |          \  }}d d d            n# 1 swxY w Y   |                    dd          rt          j        |gR ddiS t          j                    }	g |D ]\  }
}t          |
          t           u rBfd|
j        D             }|
                    t          d |D                                 }
                    t)          | |
|	                     t+          | j                  }t+          | j        t+          | j                            }t+          | j                  }t3          |t5          |          	          }t6                              |          }|r; ||d
gt9          |          z  t9                    t9          |          z             }t;          g ||||||d         j        |	          }| j                             |           d tC          |          D             S )Nc              3  B   K   | ]}t          |j                  d fV  dS r  )r(   r   r   s     rP   r_   z1DynamicJaxprTrace.process_call.<locals>.<genexpr>  sE       : :#$ !0 7 7> : : : : : :rR   r  inlineFpropagate_source_infoc                    g | ]N}t          |          t          u rg |j                 n$t          |          t          u r|j                 n|OS rM   )rb   r1   rw   r2   )r\   rd   r  r  r  s     rP   rh   z2DynamicJaxprTrace.process_call.<locals>.<listcomp>#  sn     ( ( ( 37q''W2D2D'6'J'..'+Aww(':':QU##( ( (rR   c              3  4   K   | ]}t          |          V  d S rL   )r5   r5  s     rP   r_   z1DynamicJaxprTrace.process_call.<locals>.<genexpr>&  s(      &F&F1|A&F&F&F&F&F&FrR   ry   r#  Tr$  c                "    g | ]\  }\  }}|
|S rM   rM   )r\   r   r]   keeps       rP   rh   z2DynamicJaxprTrace.process_call.<locals>.<listcomp>4  s%    EEE,!YaEAEEErR   )"r2  r   r   r|   _extract_implicit_argsr   r  debug_info_finalrW  trace_to_subjaxpr_dynamic2r0  r   
eval_jaxprr   r  rb   r-   ra   r{   r=  r  r  r  r   r  r9  r:  r,  r6  r$   r   r  rA  r   )rm   r  rS   explicit_tracersr   implicit_tracersr  rI  rH  r|  r   r]   ra   r  re  r  r  r?  r  r  r  r  s                      @@@rP   rW  zDynamicJaxprTrace.process_call  s6   y
+a : :(8: : : : : ; ;a-dAI?OPP7#7&67J				 Y Y Q 344c :1diTW X X XeXv	Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
 zz(E"" :_UF :Z : : :38: : :"*,,KK F Fa	d|	#	#( ( ( ( ( ( J( ( ( {{&F&F&F&F&F!F!F{GG+D$DDEEEEj))FDKT%;V!D!DEEI$,,,Gf)@)G)GHHHJ'++N;;M F =dVc:J6K6K-K!$Vs3C/D/D!DF Fj
-)-f-w"J|$<$D#% %C 	JsEE#k8"<"<EEEEs   &1B##B'*B'c                    J rL   rM   )rm   r  r  r   s       rP   r  z#DynamicJaxprTrace.post_process_call6      LrR   c                    d |D             }|d         |d         cfdt          ||d                   D             }t          j        |d         d           5  t          j                    5  t	          | j        |t          ||j                            \  }}}	\   d d d            n# 1 swxY w Y   t          j	        
                    |j                  }
|
rt          d|
            |d	                     }fd
t          ||          D             }t          j                     fd|D             }t           j        |          }t           j        t           j        |	                    }t           j        |          }dt%          |	          z  |d         z   }t'          |||t)          |                    }|d	= t*                              |          }|r+ ||dgt%          |          z  t%          |	                    }t          j        |j        h          }t1          g ||||||          } j                            |           d d d            n# 1 swxY w Y   |S )Nc                    g | ]	}|j         
S rM   r   r   s     rP   rh   z1DynamicJaxprTrace.process_map.<locals>.<listcomp>:      (((1(((rR   rh  r]  c                J    g | ]\  }}|t          j        ||          n| S rL   )r   r.   )r\   rc   in_axisr]  s      rP   rh   z1DynamicJaxprTrace.process_map.<locals>.<listcomp><  sP     L L L&Aw #. (GQ???45L L LrR   r[  global_axis_sizer  z2Ordered effects not supported for map primitives: r_  c                L    g | ] \  }}|t          j        ||          n|!S rL   )r   r/   )r\   rc   out_axisrh  r]  s      rP   rh   z1DynamicJaxprTrace.process_map.<locals>.<listcomp>I  sR     G G G!a ) %iHaHHH/0G G GrR   c                2    g | ]}t          |          S rM   r  r  s     rP   rh   z1DynamicJaxprTrace.process_map.<locals>.<listcomp>M  s&    QQQ!'a==QQQrR   rL   rj  T)r   r   rq  r  trace_to_subjaxpr_dynamicr0  r  rW  r   ordered_effects	filter_inr  r   r  r  r  r   r  r6  r9  r:  r,  r   rr  r$   r  rA  )rm   r  rS   r   r   r@  reduced_in_avalsrI  reduced_out_avalsr  r  rf  rz  r  r  re  r  new_in_axesr  r?  r{  r  rh  r]  r|  s   `                     @@@rP   r}  zDynamicJaxprTrace.process_map9  s}   (((((H!+.{0CIyL L L L*-hy8I*J*JL L L 
	i0B)CT	J	J   @ @/Hty*'=+=>>0@ 0@ 0@, &"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @  /99%-HHo	 ? >,;> > ? ? 	?)()++hG G G G G%():H%E%EG G Gi %,..kQQQQQyQQQk4;((fdk3t'=v#F#FGGiDL+..gc&kk)F9,==kh#:5#A#AC C Cj
%
&)--m<<m	 S"]:vG/Dc&kkRR
+EMI;GGd/I//-$dK9 9c
j9              : s7    I442B2&I42B6	6I49B6	:F.I44I8;I8c                    J rL   rM   )rm   r  r  r   s       rP   r  z"DynamicJaxprTrace.post_process_map^  r  rR   c                   d |D             t          j                    5  t          | j                  \  }}}\   d d d            n# 1 swxY w Y   t          j        t          |          d          }	t           j                  t          fd            }
 fd|D             }t           j	        |          }t           j	        t           j
        |                    }t           j        |          }t          g ||||t          |	|
t          |          |          |j        t!          j                              } j                            |           |S )Nc                    g | ]	}|j         
S rM   r   r   s     rP   rh   z=DynamicJaxprTrace.process_custom_jvp_call.<locals>.<listcomp>b  r  rR   rM   c                    j         D ]}|o|                                 t          | 
          \  }}t          | t	          |                    \  }}g 
|R }t          |             |          \  }}}	\   ||	 |            fS rL   )storesresetrF   _jvp_jaxpr_zerosr|   r  )in_zerosstorenz_tangent_avals
zero_avalsjvp_	out_zerosr  rI  r]   rK  r@  r  main_s             rP   jvp_jaxpr_thunkzBDynamicJaxprTrace.process_custom_jvp_call.<locals>.jvp_jaxpr_thunkh  s    :66%u6%3Hh%G%G"
(hj8I8IJJodI0H0/00i!:4)!T!TeQ
BJ		++rR   c                0    g | ]}t          |          S rM   r  r*  s     rP   rh   z=DynamicJaxprTrace.process_custom_jvp_call.<locals>.<listcomp>q  $    BBB1%dA..BBBrR   )r$  r  r  r  )r   r  r  r0  r#   r:  r   r  r  r  r   r  r$   r9  r6  r   r   r  r  rA  )rm   r  r  r  r   r  r  rz  r  closed_fun_jaxprr  r  r  re  r  r  r@  r  s   `  `            @@rP   r  z)DynamicJaxprTrace.process_custom_jvp_calla  s   (((((H				 ] ])B3	S[)\)\&iFB] ] ] ] ] ] ] ] ] ] ] ] ] ] ]'(?	(J(JBOO	NNE, , , , , , X, CBBB	BBBKg&&FDKT%;V!D!DEEI$,,,G
-)-f-w(8-<(+F,:< < < ")(0224 4C 	Js   AAAc                    J rL   rM   r  s      rP   r  z.DynamicJaxprTrace.post_process_custom_jvp_call  r  rR   c                    d |D             t          j                    5  t          | j                  \  }}	}
\   d d d            n# 1 swxY w Y   t          j        t          |          d          }t           j                  t          fd            } fd|	D             }t           j	        |          }t           j	        t           j
        |
                    }t           j        |          }t          g ||||j        t          ||t          |
          |||          |j        t#          j                              } j                            |           |S )Nc                    g | ]	}|j         
S rM   r   r   s     rP   rh   z=DynamicJaxprTrace.process_custom_vjp_call.<locals>.<listcomp>  r  rR   rM   c                     j         D ]}|o|                                 t          |           }t          | 	                      \  }}}}|rt          ||fS rL   )r  r  r  r  r  )
r  r  r  rI  r]   r  atrr  r@  r  s
          rP   fwd_jaxpr_from_zeroszGDynamicJaxprTrace.process_custom_vjp_call.<locals>.fwd_jaxpr_from_zeros  sf    :66%u6S%((d7eeggxPPeQ	'''F]rR   c                0    g | ]}t          |          S rM   r  r*  s     rP   rh   z=DynamicJaxprTrace.process_custom_vjp_call.<locals>.<listcomp>  r  rR   r  )r   r  r  r0  r#   r:  r   r  r  r  r   r  r$   r  r9  r6  r   r   r  r  rA  )rm   r  r  r  r  r   r  r  r  rz  r  r  r  r  r  re  r  r  r@  r  s   `  `              @@rP   r  z)DynamicJaxprTrace.process_custom_vjp_call  s   (((((H				 ] ])B3	S[)\)\&iFB] ] ] ] ] ] ] ] ] ] ] ] ] ] ]'(?	(J(JBOO	NNE      X CBBB	BBBKg&&FDKT%;V!D!DEEI$,,,G
-)-f-w8J'7-A(+F!$	,:	< < <
 ")(0224 4C 	Jsr  c                    J rL   rM   r  s      rP   r  z.DynamicJaxprTrace.post_process_custom_vjp_call  r  rR   c               x    t          ||j        g          \  }	}
d |D             }g d |	D             |t          j                    5  t	          | j        |          \  }}}\   d d d            n# 1 swxY w Y   t          j        t          |          d          }t          t          j
        |          t          ||f                    \  }t           j                  t          fd            } fd|D             }t           j        |          }t           j        t           j        |                    }t           j        |          }t%          g ||||t'          ||||||          |j        t+          j                              } j                            |           |S )Nc                    g | ]	}|j         
S rM   r   r   s     rP   rh   z>DynamicJaxprTrace.process_custom_transpose.<locals>.<listcomp>  s    ***Q!&***rR   c                    g | ]	}|j         
S rM   r   r   s     rP   rh   z>DynamicJaxprTrace.process_custom_transpose.<locals>.<listcomp>  s    000qAF000rR   rM   c                     j         D ]} |                                  t                                 \  }}}\   ||fS rL   )r  r  r  )r  rI  r]   r  
in_avals_tr  transpose_flats       rP   transpose_jaxpr_thunkzIDynamicJaxprTrace.process_custom_transpose.<locals>.transpose_jaxpr_thunk  sN    !(77%%++----6
%%'':/ /eQF]rR   c                0    g | ]}t          |          S rM   r  r*  s     rP   rh   z>DynamicJaxprTrace.process_custom_transpose.<locals>.<listcomp>  r  rR   )r$  r  r  r  lin_treeout_tree)rD   r  r   r  r  r0  r#   r:  r   r   r$  r9   r   r  r  r  r   r  r$   r9  r   r   r  r  rA  )rm   r  r  r   	transposer  r  r  r  tracers_restracers_lin
in_avals_pr$  rz  call_constsclosed_call_jaxprin_tree2r  r  r  re  r  r  r  r  r  s   `                      @@@rP   r  z*DynamicJaxprTrace.process_custom_transpose  s=     *'H4G3HIIK**'***J=00K000=9=J				 ' '/H
	:0' 0',j)["' ' ' ' ' ' ' ' ' ' ' ' ' ' ' (
++R1 1  4
Y(/C!D!D F  FNH 	NNE      X CBBB	BBBKg&&FDKT%;[!I!IJJI$,,,G
-)-f-w(93H'08&.C C C *1(0224 4C 	Jss   A66A:=A:N)rY   r  )ro   rp   rq   r:  r;  r  r   r   r   r   r  r   r  r  r  r   r   r   rW  r  r}  r  r  r  r  r  r  rM   rR   rP   rB  rB    sl       )% % 8%     $   	 	 	+ + +    ! ! !F F F
L L L$$F $F $FL  # # #J    <    @  & & & & &rR   rB  r  c              /  N   K   d t          ||           D             }||fV V  d S )Nc                    g | ]	}|D ]}|
S rM   rM   )r\   pairrO   s      rP   rh   z#_interleave_fun.<locals>.<listcomp>  s%    
?
?
?$
?
?Q1
?
?
?
?rR   r  )every_othersr   kwargsargs_s       rP   r  r    s?      
?
?T<00
?
?
?%v		rR   c                     i t           j        j                                        t	                       fd}|S )Nc                                          |           }|u rUt          j        j        }t          j        _        	  |  x}| <   |t          j        _        n# |t          j        _        w xY w|S rL   )r   r   thread_local_statetrace_state)r   rE  
prev_statecellsfnsaved_stater  s      rP   memoizedz_memoize.<locals>.memoized  sx    
))D(
#
#C
h*6j,7d)9BI%eDk.8++j+8888Js   
A A.)r   r  r  copyr  )r  r  r  r  r  s   ` @@@rP   r  r    sZ    
%'388::+XX(	 	 	 	 	 	 	 	 
/rR   c              '  z  K   t          |t          |           g          \  }}t          t          j        |          }t          | ||          }g ||R i fV }t          t          |          d          \  }}	|	rJ |d |         ||d          }}
d |D             }t          ||          \  }}g |
||fV  d S )Nr  c                D    g | ]}t          |          t          j        u S rM   )rb   r   SymbolicZeror   s     rP   rh   z$_jvp_jaxpr_zeros.<locals>.<listcomp>  s&    EEE1tAww'..EEErR   )rD   r6  r  r   r   rE   divmodrF   )r  r  primal_tangent_avals
in_primalsnz_in_tangentsr  tangentsrE  r   raggedout_primalsout_tangentsr  out_nz_tangentsr]   s                  rP   r  r    s      )*>XPP*nw+Z88.>>BB(&
&X&&***#SXXq!!)!V!"1"gs122w|+EEEEE)%i>>/1(+(()333333rR   c                  L    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   dS )	DebugInfoz
str | Noner  zinspect.Signature | None	signaturePyTreeDef | Nonein_treeCallable[[], PyTreeDef] | Noner  r   
has_kwargsrX  r  Nr~  rM   rR   rP   r+  r+    sU         %%%%****/////rR   r+  r  r.  r-  out_tree_thunkr/  r0  r   r  c                    t          j        |           }n# t          t          f$ r d }Y nw xY wt	          |           }t          ||||||          S rL   )inspectr,  r  r  r   r+  )r  r.  r1  r0  r  sigr|  s          rP   r   r     sb     r""ss
i	 ,,,###,B(	8S'>:
 
 s    ,,c                \    t          |           pd\  }}}t          | j        ||||          S )zIMake a DebugInfo from data available to final-style primitives like pmap.)NNF)r   r   rS   )r  r  r.  r  has_kwss        rP   r  r  	  s4    4R88O<O'8W	BD'8Wj	A	AArR   r   list[tuple[str, KeyPath]] | Nonec                    | j         d nt          |           }|d S d |j                                        D             S )Nc                F    g | ]\  }}t          |          D ]	\  }}||f
S rM   )r>   )r\   rW  	dummy_argkey_pathr]   s        rP   rh   z arg_info_all.<locals>.<listcomp>	  sQ     
< 
< 
<tY/	::
< 
<h 
 
< 
< 
< 
<rR   )r.  sig_info	argumentsr  )r  bas     rP   r  r  	  sO    {"tt"Z
< 
<",2D2D2F2F 
< 
< 
< <rR   inspect.BoundArguments | Nonec                    | j         | j        d S 	 t          | j         dg| j         j        z            }n#  Y d S xY w| j        r|n|i f\  }}	  | j        j        |i |S # t          t          f$ r Y d S w xY wr  )r.  r,  r:   r  r0  r  r  r  )r  
dummy_argsr   r  s       rP   r<  r<  	  s    [CM1$$eWs{7M-MNNJJ44"~CJ3C,$3=t.v...
Z	    44s   #6 ;A! !A65A6list[KeyPath] | Nonec                    | j         d S 	 |                                  j        }t          |                                  dg|z            }d t          |          D             S #  Y d S xY w)NFc                    g | ]\  }}|S rM   rM   )r\   r  r]   s      rP   rh   zresult_info.<locals>.<listcomp>%	  s    AAAWT1DAAArR   )r  r  r:   r>   )r  r  dummy_results      rP   result_inforF  	  sr    \$$B*J!#,,..5'J2FGGL BA 2< @ @AAAA44s   ?A# #A()keep_inputsr   r>  rG  list[bool] | None`tuple[Jaxpr, list[AbstractValue], list[Any], list[tuple[PyTreeDef, PyTreeDef, tuple[Any, str]]]]c                   t          j        t          d          5 }d|_        t	          | ||||          \  }}}}~~ d d d            n# 1 swxY w Y   ||||fS )NTdynamicrM   rG  r   )r   r?  rB  r  r  )	r  r@  r   rG  r0  rI  rz  r  r;  s	            rP   r#  r#  (	  s     }&555 D.G	4{z/K /K /K+E9fmc	              
 
	6=	00s   #AAArM  Sequence[bool] | Nonec                  |dgt          |          z  n|}t                      }||_        t          ||          5  t	          j                    5  t          |t          j                              }t          |j
        |          }d t          ||          D             } | j        | }	t          |j        |	          }
|                    ||
          \  }}}~ ~~~~~
~	d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t           j        j        ot          j        |           |d |j        D             ||fS )NTc                    g | ]	\  }}||
S rM   rM   r\   r   r  s      rP   rh   z-trace_to_subjaxpr_dynamic.<locals>.<listcomp>I	  !    IIIDDI1IIIrR   c                    g | ]	}|j         
S rM   r   r   s     rP   rh   z-trace_to_subjaxpr_dynamic.<locals>.<listcomp>O	  s    ///A///rR   )r6  r9  r   extend_jaxpr_stackr   reset_name_stackrB  r   cur_sublevel_input_type_to_tracersr   r   r  r  r8  rX  r   r   r   r  r  )r  r0  r@  rG  r   r  r  r  in_tracers_r  r  rI  r  r;  s                 rP   r  r  9	  s    +6*=X&&;+


%%$&& > >(8(I(K(K > >dD$5$7$788E'x@@JIIC
K$@$@IIIK
#
K
(Ce&,,K#(>>%#E#E E6=T5%[#> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 	8!1%!8!8	/////	FFs6   DBC."D.C2	2D5C2	6DD	D	#tuple[Jaxpr, OutputType, list[Any]]c                    t          j        t          d          5 }d|_        t	          | ||          \  }}}~~ d d d            n# 1 swxY w Y   |||fS )NTrK  rM   )r   r?  rB  r  r  r  r   r0  rI  rH  r  s         rP   trace_to_jaxpr_dynamic2r\  R	  s     }&555 D8dJOOE8Vc               
&	  s   AAAc                (   t          | j                  \  }}t                      }||_        t	          ||          5  t          j                    5  t          |t          j	                              }t          |j        |          }d t          ||          D             } | j        | }	t          |j        |	          }
|                    |
          \  }}}~ ~~~~~
~	d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |||fS )Nc                    g | ]	\  }}||
S rM   rM   rQ  s      rP   rh   z.trace_to_subjaxpr_dynamic2.<locals>.<listcomp>f	  rR  rR   )r@   r2  r9  r   rT  r   rU  rB  r   rV  rW  r   r   r  r  r8  r]  )r  r0  r   r@  rG  r  r  r  rX  r  r  rI  rH  r  s                 rP   r  r  \	  s    !--(K


%%$&& > >(8(I(K(K > >dD$5$7$788E'x@@JIIC
K$@$@IIIK
#
K
(Ce&,,K#ook::E8VT5%[#> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 
&	  s6   DBC-!D-C1	1D4C1	5DDDc              #     K   | j         |fz   | _         	 d V  || j         d         u sJ | j         d d         | _         d S # || j         d         u sJ | j         d d         | _         w xY wr  )r  )r0  r  s     rP   rT  rT  n	  s      %0$-	EEED$R(((((',D D$R(((((',D,,,,s	   ? 'A&,tuple[Jaxpr, list[AbstractValue], list[Any]]c           	     
   t          j        t                    5 }d|_        t          j                    5  t          | ||||          \  }}}\   d d d            n# 1 swxY w Y   ~ ~d d d            n# 1 swxY w Y   |||fS )NrM   rM  )r   new_base_mainrB  r  r  r  )r  r@  r   rG  r0  rI  rz  r  s           rP   trace_to_jaxpr_finalrc  x	  s&    +,, D				 M M%>T8&M &M &M"eYM M M M M M M M M M M M M M M 	T               
	6	!!s4   A5AA5A 	 A5#A 	$A55A9<A9c                    t          j        t                    5 }d|_        t          j                    5  t          | ||          \  }}}d d d            n# 1 swxY w Y   ~ ~d d d            n# 1 swxY w Y   |||fS r   )r   rb  rB  r  r  r  r[  s         rP   trace_to_jaxpr_final2re  	  s    +,, D				 R R :3j Q QeXvR R R R R R R R R R R R R R RT	              
 
&	  s4   A0AA0A	A0A	A00A47A4r;  AttrsTrackedvals
AttrStatesc                Z    t          | |          D ]\  \  }}}t          |||           d S rL   )r   setattr)r;  rg  objattrrw   s        rP   rQ  rQ  	  sC    t44  {TCCs rR   c                    d | D             S )Nc                4    g | ]\  }}t          ||          S rM   )getattr)r\   rk  rl  s      rP   rh   zget_states.<locals>.<listcomp>	  s&    	>	>	>#t'#t

	>	>	>rR   rM   )r;  s    rP   rN  rN  	  s    	>	>	>	>	>>rR   
axes_specs#Sequence[AbstractedAxesSpec] | Noner   c                  	 d |D             }t          ||           }t          ||          }t          ||          \  	}d |D             }	fdt          ||          D             }g ||R }t	          j        |           |S )Nc                J    g | ] }t          t          |          d d          !S )ndimr   )ro  r!   rV  s     rP   rh   z+infer_lambda_input_type.<locals>.<listcomp>	  s*    
9
9
9q78A;;**
9
9
9rR   c                    g | ]}|d fS r   rM   )r\   rf   s     rP   rh   z+infer_lambda_input_type.<locals>.<listcomp>	  s    777"2u+777rR   c                <    g | ]\  }}t          ||          d fS )T)	_arg_type)r\   rO   r  r  s      rP   rh   z+infer_lambda_input_type.<locals>.<listcomp>	  s.    MMMDAq9T1a(($/MMMrR   )_canonicalize_specs_complete_specs_collect_implicitr   r   _check_input_type)
rp  r   ndimspartial_specsspecsimplicit_typesimplicit_sigexplicit_sig
input_typer  s
            @rP   infer_lambda_input_typer  	  s     :
9D
9
9
9%%eZ88-
$
.
.%*477$77777,MMMMCe<L<LMMM,----*z"""	rR   specAbstractedAxesSpecdict[int, AbstractedAxisName]c                b    t          | t                    rd t          |           D             S | S )Nc                    i | ]
\  }}|||S rL   rM   )r\   r   rd   s      rP   r   z!_spec_to_dict.<locals>.<dictcomp>	  s    >>>TQAqrR   )r   r|   r   )r  s    rP   _spec_to_dictr  	  s3    e >>Yt__>>>>KrR   r|  Sequence[int]r~  #list[dict[int, AbstractedAxisName]]c                `    |i gt          |           z  S d t          | |          D             S )Nc                2    g | ]\  }}t          |          S rM   )r  )r\   r   r  s      rP   rh   z'_canonicalize_specs.<locals>.<listcomp>	  s$    ;;;AM!;;;rR   )r6  r   )r|  r~  s     rP   rx  rx  	  s:     ]4#e**;;UE):):;;;;rR   r}  c                F   i }t          | |          D ]\  }}|                                D ]l\  }}|                    ||j        |                   }||j        |         ur7||j        |         k    r&t	          d| d| d| d|j        |                    md |                                D             }g }	t          | |          D ]\  }}t          t          |          t                    rqt          |          }t          |j                  D ]M\  }}t          |t                    r3|                    t          |          t          |                    ||<   N|	                    |           t          d t          | |	          D                       sJ |	S )NzProvided size r  z* does not match prior associated name for z : c                ^    i | ]*\  }}t          |t                    t          |          |+S rM   )r   r   r	  )r\   rW  rd   s      rP   r   z#_complete_specs.<locals>.<dictcomp>	  sJ     7I 7I 7IdA*Q2G2G7IeeT7I 7I 7IrR   c              3     K   | ]8\  } p-t          fd t          |j                  D                        V  9dS )c              3  P   K   | ] \  }}t          |t                    o|vV  !d S rL   r  )r\   r   rd   r  s      rP   r_   z,_complete_specs.<locals>.<genexpr>.<genexpr>	  sV       !A !A%)Q ",Av!6!6!H1D= !A !A !A !A !A !ArR   N)r   r   ra   )r\   rO   r  s     @rP   r_   z"_complete_specs.<locals>.<genexpr>	  s       . .D X AS !A !A !A !A-6qw-?-?!A !A !A A A A . . . . . .rR   )r   r  r  ra   r  r   r!   r-   r9  r   r   r   r	  TracerAsNamer=  r   )
r   r}  sizesrO   r  r   rW  rd   named_tracersr~  s
             rP   ry  ry  	  s    ?A%T=)) x xga::<< x x4


4
,
,a	
!'!*		agajvvvvvaevvjkjqrsjtvvwwwx7I 7I!&7I 7I 7I-/1%T=))  ga(1++|,, >$ZZdAG$$ > >$!Qa   	>!%%bee\!__==$q'	LL 
 . .e,,. . . 
. 
. . . . 
,rR   ;tuple[dict[AbstractedAxisName, DBIdx], list[AbstractValue]]c                \   i }g }i }t          j                    }t          t          | |                    D ]\  }\  }}|                                D ]~\  }	}
|
|vrut          |j        |	                   |vrYt          t          |                    ||
<   |	                    t          t          |j        |	                                        t          |t                    r#|                    t          |          |           t          |          }t          | |          D ]\  }}|                                D ]e\  }	}
t          |j        |	                   |v rD|                    |
t          ||t          |j        |	                            z                        f||fS rL   )r  countr   r   r  r	  ra   r0   r7  r=  r(   r!   r   r   r  r6  )r   r~  r  r  r  counterexplicit_idxrO   r  r   rW  offsets               rP   rz  rz  	  s    +-$(*.*,HJJ' "+3tU+;+;!<!< 7 7lIQ::<< E E4	T		bnn4DDD4==))T
ohqwqz.B.BCCDDD!V 7!!"Q%%666 ~&T5!! P Pga::<< P P4	AGAJ+	+	+eF-=bnn-M$MNNOOOP 
~	rR   r  dict[AbstractedAxisName, DBIdx]rO   c                    t          |          }st          j        |          S  fdt          |j                  D             }t          d |D                       rJ t          t          |          |j        d          S )Nc                >    g | ]\  }}|v r|                  n|S rM   rM   )r\   r   rd   r  r  s      rP   rh   z_arg_type.<locals>.<listcomp>
  sG     G G G(,1 01Dyyd47mma G G GrR   c              3  @   K   | ]}t          |t                    V  d S rL   r  r5  s     rP   r_   z_arg_type.<locals>.<genexpr>
  s,      661Av&&666666rR   F)	r!   r   r(   r   ra   r   r-   r|   dtype)r  rO   r  r   ra   s   ` `  rP   rw  rw  
  s    
 
!$	0d*4000G G G G G09$*0E0EG G G%6666666666	eEllDJ	6	66rR   tuple[Jaxpr, OutputType]c                J  
 g | j         | j        }| j        }t          |          fd|D             }g ||}d t	          |          D             
d t	          |          D             d |D             }
fd|D             }dgt          |          z  dgt          |          z  z   }t          t          ||                    }t          | j         | j        || j	        | j
        | j                  }	t          j        j        ot          j        |            |	|fS )Nc                   g | ]}t          |          t          u rp                    |          st          |j                  t          u r@|j        j        D ]3}t          |          t          u |v                    |          p|4S rM   )rb   r&   r  r   r-   ra   )r\   rO   rd   seens      rP   rh   z)_add_implicit_outputs.<locals>.<listcomp>
  s     M M MqDGGsNN88A;; =K"&qv,,,">">6< #?">477c>>atmm ((1++">KmmmrR   c                4    i | ]\  }}|t          |          S rM   r  r  s      rP   r   z)_add_implicit_outputs.<locals>.<dictcomp>
  s$    !P!P!PTQ!gajj!P!P!PrR   c                `    i | ]+\  }}t          |          t          u |t          |          ,S rM   )rb   r&   r2   )r\   r   rO   s      rP   r   z)_add_implicit_outputs.<locals>.<dictcomp>
  s:     "5 "5 "5TQ%)!WW^^ #$Xa[[%3^^rR   c              3  $   K   | ]}|j         V  d S rL   r   rV  s     rP   r_   z(_add_implicit_outputs.<locals>.<genexpr>!
  s$      ((1((((((rR   c                    g | ]O}t          |          t          u r5|                    t          fd |j        D                                 n|PS )c              3     K   | ]E}t          |          t          u r)                    |                    |                    n|V  Fd S rL   )rb   r&   r   )r\   rd   in_mapout_maps     rP   r_   z3_add_implicit_outputs.<locals>.<listcomp>.<genexpr>"
  sk       $O $OABtAww#~~ %+JJq'++a..$A$A$A;<$O $O $O $O $O $OrR   ry   rz   )r\   rc   r  r  s     rP   rh   z)_add_implicit_outputs.<locals>.<listcomp>"
  s     F F F56$q''\)) xxe $O $O $O $O $OFGg$O $O $O O Ox P P P/0F F FrR   FT)re  r  r  r   r   r6  r|   r   r   r  r   r   r   r   r   r   r  )rI  r  r\  impl_outvarsr  
out_avals_rz  	kept_outsrH  r  r  r  r  s             @@@rP   r[  r[  
  s   ,U_,u|,&, v;;$M M M ML M M M, +l*\*' "Q!PY=O=O!P!P!P&"5 "5Yw=O=O "5 "5 "5'(((((*F F F F F:DF F F) gL)))TFS5F5F,FF)3y),,--(EOU\7EJM5#35 5)8!1%!8!8	H	rR   c                  ,    e Zd ZU ded<   d Zd Zd ZdS )r  r   r   c                8    t          j        |          | _        d S rL   )r   r5   r   )rm   r   s     rP   rn   zTracerAsName.__init__0
  s     ((DHHHrR   c                H    t          |t                    o| j        |j        u S rL   )r   r  r   )rm   others     rP   __eq__zTracerAsName.__eq__2
  s     e\**Dtx59/DDrR   c                *    t          | j                  S rL   )r	  r   r   s    rP   __hash__zTracerAsName.__hash__4
  s    dh<<rR   N)ro   rp   rq   r  rn   r  r  rM   rR   rP   r  r  .
  sO         
((() ) )E E E    rR   r  r  $Sequence[tuple[AbstractValue, bool]]r  Sequence[DynamicJaxprTracer]c                V  
 t          |          

fd|D             }t          
d           J 
t          |          D ]\  }\  }}|rt          |t                    s ||         }|J t          |j        |j        j                  D ]h\  }}	t          |t                    rN||j	                 | 
                    |	          ||j	        <   ||j	                 | 
                    |	          u sJ it          d |D                       sJ d t          ||          D             S )Nc                <    g | ]\  }}|rt                    nd S rL   )r7  )r\   r]   explexplicit_tracers_s      rP   rh   z*_extract_implicit_args.<locals>.<listcomp>>
  s0    NNN71d6T#$$$$NNNrR   c              3     K   | ]}|d uV  	d S rL   rM   r   s     rP   r_   z)_extract_implicit_args.<locals>.<genexpr>M
  s&      ,,qQd],,,,,,rR   c                "    g | ]\  }\  }}|
|S rM   rM   )r\   r   r]   r^   s       rP   rh   z*_extract_implicit_args.<locals>.<listcomp>N
  s%    	<	<	<	6Aq!	<!	<	<	<rR   )r5  r7  r   r   r-   r   ra   r   r0   rw   r   r   )r  r2  r  r   r   r   rQ  r   rR  rS  r  s             @rP   r  r  7
  sd    +,,NNNNgNNN'		&	&	.	.	. 'w// 	> 	>a	$ :dL99 QZFdj&+"344 > >B	B		 >26?"!33B77'"&/rv%"9"9""="=====	>
 
,,G,,,	,	,,,,	<	<S'22	<	<	<<rR   r   !Callable[[AbstractValue], Tracer]rC  c                p    g dfd}|D ])}                      |  ||                               *S )Nrc   r"   rY   c                    t          | t                    rTt          d | j        D                       r6fd| j        D             }|                     t          |                    S | S )Nc              3  B   K   | ]}t          |          t          u V  d S rL   )rb   r0   r5  s     rP   r_   zN_input_type_to_tracers.<locals>._substitute_tracers_in_aval.<locals>.<genexpr>[
  s-      *M*M477e+;*M*M*M*M*M*MrR   c                Z    g | ]'}t          |          t          u r|j                 n|(S rM   rv   )r\   rd   r  s     rP   rh   zO_input_type_to_tracers.<locals>._substitute_tracers_in_aval.<locals>.<listcomp>\
  s5    MMMDGGu$4$4z!%  !MMMrR   ry   r  )rc   ra   r  s     rP   _substitute_tracers_in_avalz;_input_type_to_tracers.<locals>._substitute_tracers_in_avalZ
  so    !\"" *s*M*MQW*M*M*M'M'M *MMMMQWMMMeXXE%LLX)))HrR   )rc   r"   rY   r"   )r=  )r   r@  r  rc   r  s       @rP   rW  rW  P
  sl      *       ? ?agg99!<<==>>>>	rR   r  dict[Var, Literal]rJ  dict[Var, Var]rc   c                     t          |t                    rUt          d |j        D                       r7 fd|j        D             }|                    t          |                    S |S )Nc              3  @   K   | ]}t          |t                    V  d S rL   rw  r5  s     rP   r_   z+_substitute_vars_in_type.<locals>.<genexpr>g
  s,      (M(MAs););(M(M(M(M(M(MrR   c                p    g | ]2}|v r|         j         nt          |t                    r|         n|3S rM   )rw   r   r&   )r\   rd   r  rJ  s     rP   rh   z,_substitute_vars_in_type.<locals>.<listcomp>h
  sV     < < <./  6kkVAY]]1c""0*s1vv()< < <rR   ry   r  )r  rJ  rc   ra   s   ``  rP   r  r  d
  s     <   S(M(MQW(M(M(M%M%M < < < < <347< < <E88%,,8'''HrR   Sequence[Const]tuple[Jaxpr, list[Const]]c                  	 d | j         D             d t          | j                   D             dfd		fd| j         D             }t          j        t	          t
          | |                    }t          ||          \  }}}\   ||fS )	Nc                    i | ]d}t          |j        t          j                  rCt	          |j        j                  t          j        u F|j        j        R||j        j        j        eS rM   )	r   r   r   UnshapedArrayrb   r  bintra   boundr   s     rP   r   zpad_jaxpr.<locals>.<dictcomp>s
  sg     B B Ba!&$"455B$)++AFL+ qv|!+++rR   c                4    i | ]\  }}|t          |          S rM   r   r  s      rP   r   zpad_jaxpr.<locals>.<dictcomp>v
  s$    	:	:	:$!Q!U1XX	:	:	:rR   r   r"   rY   c                   t          | t          j                  rNt          | j                  t          j        u r.| j        s't          dt          j	        t                              S t          | t                    r_fd| j        D             }t          d |D                       rt          nt          } |t          |          | j        | j                  S | S )NrM   c           	     d    g | ],}                     |                     ||                    -S rM   r   )r\   rd   boundsr  s     rP   rh   z1pad_jaxpr.<locals>.substitute.<locals>.<listcomp>}
  s3    AAAvzz!TXXa^^,,AAArR   c              3  B   K   | ]}t          |          t          u V  d S rL   )rb   r  r5  s     rP   r_   z0pad_jaxpr.<locals>.substitute.<locals>.<genexpr>~
  s,      ==!tAww#~======rR   )r   r   r  rb   r  r  ra   r,   r   _scalar_type_to_dtyper  r-   r   r|   r  )r   ra   typr  r  s      rP   
substitutezpad_jaxpr.<locals>.substitutex
  s    4+,, dj1A1ATY1N1N
 2OV9#>>???	D,	'	' AAAAAdjAAAe==u=====OKK<cSutz4>:::krR   c                0    g | ]} |j                   S rM   r   )r\   r  r  s     rP   rh   zpad_jaxpr.<locals>.<listcomp>
  s%    777Qjj  777rR   r  )r  r   r   r$  r
   _eval_jaxpr_paddedr#  )
rI  r  r@  eval_paddedpadded_jaxprr]   padded_constsr  r  r  s
          @@@rP   	pad_jaxprr  q
  s    B B5< B B B& 
;	:)EL"9"9	:	:	:$	 	 	 	 	 	 	 8777%,777(W%7GGHH+'=k8'T'T$,="	}	$$rR   c                  $    e Zd ZU ded<   ded<   dS )BoundedAxisSizezint | DynamicJaxprTracerrw   r  r  Nr~  rM   rR   rP   r  r  
  s%         *****rR   r  list[Const] list[Const | DynamicJaxprTracer]c                   i fd}dfd}t          || j        |           t          || j        |           t          j        |           }| j        D ]}fd|j        D             }fd|j        D             }t          |j                 }	 |	||gt          ||j                  R i |j	        }
t          ||j        |
           t          j
        ||           t          || j                  S )Nc                N    t          |           t          u r| j        n|          S rL   r  r  s    rP   r  z _eval_jaxpr_padded.<locals>.read
  s#    GGw&&155CF2rR   rY   r  c                    || <   d S rL   rM   )r  rw   rJ  s     rP   r  z!_eval_jaxpr_padded.<locals>.write
  s    CFFFrR   c                :    g | ]}t          |j                  S rM   _substitute_axis_sizesr   r\   r  rJ  s     rP   rh   z&_eval_jaxpr_padded.<locals>.<listcomp>
  s&    III'QV44IIIrR   c                :    g | ]}t          |j                  S rM   r  r  s     rP   rh   z&_eval_jaxpr_padded.<locals>.<listcomp>
  s&    JJJ'QV44JJJrR   r,  )r  re  r  r   	last_usedr  r  padding_rulesr   r   clean_up_dead_vars)rI  r  r   r  r  r  r  r@  rz  r>  outsrJ  s              @rP   r  r  
  s:    #3 3 3 3 3      eU_f%%%eU\4   nU##)Z 1 1cIIIIcjIIIHJJJJckJJJI'D4)Jc$
&;&;JJJszJJDs{D!!!Ci0000	T5=	!	!!rR   r9  c           	     ^   t          |t                    rg }|j        D ]c}t          |t          j                  rv|j        s t          |j                  t          j        u sJ |                    t          t          |j                  t          |j        j                                       t          |          t          j        u rt          |j        t          j                  rmt          |j        j                  t          j        u rH|j        j        rJ |                    t          | |         |j        j        j                             :|                    |                     ||                     et          t!          |          |j        |j                  S |S rL   )r   r-   ra   r   DArrayrb   r  r  r=  r  r  _datar  r&   r   r   r|   r  )rJ  r   shprd   s       rP   r  r  
  sO   l## 
CZ 	" 	"	At{	#	# "79tAG}}	9999

?3qw<<QW]1C1CDDEEEEGGtxJqvt7H$I$I$)++6<

?3q616<+=>>????

3771a==!!!!c

DJ???KrR   rd   int | core.DArray | core.Varc                H   t          | t          j                  r)| j        rJ t	          | j                  t          j        u S t          | t          j                  rDt          | j        t          j	                  o$t	          | j        j                  t          j        u S dS r  )
r   r   r  ra   rb   r  r  r&   r   r-   )rd   s    rP   _is_bint_axis_sizer  
  s    4; -w==DI%%!TX -qvt011 ,$)+-	rR   r  r  r  c                    | j         rt          t          |           t          | <   d S t          t          |           t          | <   d S rL   )r
  r
   _trivial_padding_rule_multir  _trivial_padding_rule)r  s    rP   def_trivial_paddingr  
  sC    	 ?!"=tDDM$!"7>>M$rR   c                     | j         |i |gS rL   r  r  r]   r  r   r   s        rP   r  r  
  s    
$)T
$V
$
$	%%rR   c                     | j         |i |S rL   r  r  s        rP   r  r  
  s    	D	#F	#	##rR   c                   |j         rt          t          |d          \  }}|rt          t          ||          }|                     |          \  }	}
 | j        g |	|R i |
S )NrM   r#  )re  r  r  r9  get_bind_paramsr  )r  r@  rz  r$  r   r   r  r  r  subfunsbind_paramss              rP   call_padding_ruler   
  s    4!44 )*b 9 9,---F|444*--j99';		2G	2d	2	2	2k	2	22rR   c              #    K   t          d |D                       s
J |            |                                 }t          |j        |          }|i fV }t	          |t
          t          f          sJ d|             t          d |D                       sJ d|             t	          |t                    r|gt          |          z  n|}t          |j	        t          t          j        |                    }t          t          t          |          ||          }t          ||          \  }}}	d |D             }
~~~||
||	ffV  d S )Nc              3  @   K   | ]}t          |t                    V  d S rL   rH  rI  s     rP   r_   z$trace_to_subjaxpr.<locals>.<genexpr>
  s,      88BZJ''888888rR   rS  c              3  r   K   | ]2}t          |t          j                  pt          j        |          V  3d S rL   rU  rV  s     rP   r_   z$trace_to_subjaxpr.<locals>.<genexpr>
  rW  rR   c                    g | ]	}|j         
S rM   r  r   s     rP   rh   z%trace_to_subjaxpr.<locals>.<listcomp>
  rL  rR   )r   r  r  r   r   rZ  r|   r   r6  r8  r   r  r
   instantiate_const_atr  )r0  r  r  r  r  r  r  rI  r  rJ  r  s              rP   r@  r@  
  s      
88%888	8	8??%???

 
 
"
"%5=%((*"n#	C$	'	' K KICIIK K K	NN#NNN	N	N K KICIIK K K,6{D,I,IZC(({+E$c$/3&?&?@@+G0%88+{SS+'
K@@%++{+++)Z	63'''''''rR   partial_eval_jaxprc                Z    |r(|                      |                     |                    S |S rL   r  )r  r  r   s      rP   r  r  
  s1     ""5#3#3F#;#;<<<MrR   arg_tracers	list[Any]c                     t           j        |          }t           j        |          }t           j        |          }t          t	          g |j        |j        g ||                    t          j                    |j	        D ]}fd|j        D             }d |j
        D             }	|j        j        sn'                    j        |j        j        z             }
 j                            t!          j        ||	|j        |j        |j        |
                     t          j        |j
        |	           t          t	          g |j        |j        g ||                     fdfd|j
        D             S )Nc                N    g | ]!}t          |t                    r|n|         "S rM   )r   r    )r\   rO   rJ  s     rP   rh   z+inline_jaxpr_into_trace.<locals>.<listcomp>
  s0    JJJ!:a))5aas1vJJJrR   c                8    g | ]}t          d |j                  S )r
  )r&   r   r   s     rP   rh   z+inline_jaxpr_into_trace.<locals>.<listcomp>
  s"    4441s2qv444rR   r   c                    t          | j                  }j        j                            |           |          j        j        t          |          <   |S rL   )r  r   r  r   r=  r  r	  )r  r   rJ  r  r  s     rP   
new_tracerz+inline_jaxpr_into_trace.<locals>.new_tracer  sM    ty#66F	Kv&&&,/IEKbjj)MrR   c                v    g | ]5}t          |t                    r|j        n|v r|         n
 |          6S rM   )r   r    rw   )r\   rO   r  
tracer_envs     rP   rh   z+inline_jaxpr_into_trace.<locals>.<listcomp>  sY     
5 
5 
5!" a)) !%%Zz!}}z!}}
5 
5 
5rR   )r  r   r  r9  r   re  r  r   r  r  r  r|  r   r	  r  rA  r   r$   r   r   r   r  )r  rI  r  r  ry  re  argvarsr  r  r  src_rJ  r  r  r  s   `          @@@@rP   inline_jaxpr_into_tracer  
  s    eov..-%,..)k**'S!B5?!BU\!B!79!7w!79 9 : :# 	 ""#Z . .cJJJJszJJJF44444G1 PCCKK3>CO4N#NKOO 		K*67CM+.:s{DJ J K K KW----#C(I%/(IEL(I(?&(?;(?%A %A  B  B*      

5 
5 
5 
5 
5&+m
5 
5 
5 5rR   )rS   rT   rU   rV   rW   rX   rY   rT   )r  r  rY   r  )rW   r  r@  r  rA  r   )
r0  r  rW   r  r2  r3   r  r  rA  r   r   )r  rT   r  r<  r  r  rY   r=  )r0  r  r  r  r  r<  rL   )r  r2  r  r2  r   r+   r   ry  r   rz  r|  r{  r}  r  rY   r'  )r  r  r  r'  rY   r  )r  r2  r  r2  rY   r  )rI  r   rY   r   )rI  r   r   r  rY   r   )rI  r   r  r  rY   r   )rI  r#   r  r  r  r  rY   r  )rI  r   r  r  r  r  r  r  r  r  r  r  rY   r  )rI  r   r  r  r  r  r  r  r  r  r  r  rY   r  )rI  r   r  r  r  r  r  r  r  r  r  r  rY   r  )rQ  rR  rY   rS  )rW  rX  r  r  r3  r  r4  r  r  r*   rY   rY  )r   ry  r   r"   rY   r"   )rb  rX  rc  rd  r  r  r3  rX   r4  rX   r  r*   ra  re  r}  rf  rY   rg  )rb  rX  rc  ru  r  r  r3  rX   r4  rX   r  r*   ra  re  rY   rg  )rI  r#   r3  r  r4  r  r~  r  r  r   rY   r  )rI  r   rY   r  )rI  r   r  r  rY   r   )rI  r   r  r  rY   r   )rI  r#   r  r  rY   r#   )rI  r#   r  r  rY   r#   )rI  r   r  r  r  r  rY   r  )rI  r   r  r  r  r  rY   r  )rI  r   r  r  r  r  rY   r  )r  rX   r  r*   rY   r  )r  rX   r  r*   rY   r  )r  r  rY   r  )r  rX   r  r*   rY   r  )rI  r   rY   r#   )r  r#   r  r  rY   r#   )r  r#   r  r  rY   r#   )r  r   r  r  rY   r   )rY   r/  )rI  r   rV  rl  rY   rm  )rI  r   rV  rl  rY   r  )r  r   r.  r-  r1  r/  r0  r   r  rX  rY   r+  )r  rT   r  rX  rY   r+  )r  r+  rY   r7  )r  r+  rY   r?  )r  r+  rY   rB  )
r  rT   r@  r  r   r>  rG  rH  rY   rI  )r  rT   r0  r  r@  r  rG  rN  r   r>  rY   rI  )r  rT   r   r>  rY   rY  )r  rT   r0  r  r   r>  rY   rY  rb  )
r  rT   r@  r  r   r>  rG  rN  rY   r`  )r;  rf  rg  rh  )r;  rf  )rp  rq  r   rl  rY   r3   )r  r  rY   r  )r|  r  r~  rq  rY   r  )r   rl  r}  r  rY   r  )r   rl  r~  r  rY   r  )r  r  rO   r   r  r  rY   r"   )rI  r   rY   r  )r  rB  r2  r  r  r  rY   r  )r   r  r@  r  rY   rC  )r  r  rJ  r  rc   r"   rY   r"   )rI  r   r  r  rY   r  )rI  r   r  r  r   r  rY   r  )rJ  r9  r   r"   rY   r"   )rd   r  rY   r   )r  r+   rY   r  )r0  r  r  r  r  r<  )r  r   r  r   )
r  rB  rI  r   r  rl  r  r  rY   r	  )
__future__r   collectionsr   collections.abcr   r   r   
contextlibr   r	   	functoolsr
   r3  	itertoolsr  operatorr;  typingr   r   r   weakrefr   numpyr   jax._srcr   r   r   r   r   r   r   r   r   r   r   jax._src.api_utilr   r   r   jax._src.corer   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   jax._src.state.typesr7   jax._src.tree_utilr8   r9   r:   r;   r<   r=   r>   r?   jax._src.utilr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r  
unsafe_mapr   
unsafe_ziprQ   r  TracerIdAvalIdConstIdr   r|   r   r   r-  transformation_with_auxr1  r3  r   r  r+  r,  r  closed_call_pr&  JaxprTracerReciper   annotate_functionrB  rE  transformationrp  rM  r/  ru  r   r   r   r'  r  r  r  r:  r  r  r  r  r  r  r  rX  rP  r.  rV  r)  rU  r*  rS  r   RematCases_r(  rZ  rY  PartialEvalCustomRuler'  r\  r9  rd  re  r^  r`  rt  ru  r  r}  call_pr  r  r  r  r  r  r  r  r  DCERuler  r  r  r  r  r  r  r  r  r  r  r.  _shaped_abstractify_handlersr  r9  rO  ConstFoldRuler|  ForwardingRuler  rP  rB  r  r  r  r  r+  r   r  r  r<  rF  r#  r  r\  r  rT  rc  re  AbstractedAxisNamer  rf  rh  rQ  rN  r  r  rx  ry  rz  rw  r[  r  r  rW  r  ConstValr  r  r  r  r  r  r  r  r  r   r@  r  r  rM   rR   rP   <module>r8     s   # " " " " " " " " " " " " 8 8 8 8 8 8 8 8 8 8 = = = = = = = =                ) ) ) ) ) ) ) ) ) )                                               & & & & & &       % % % % % %      / / / / / / / / / /Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q - , , , , ,( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (O O O O O O O O O O O O O O O O O O O O O O O O O O
 CZCZ   	
"2 "2 "2 "2H) ) ) ) ) ) ) )XU U U U U}% U U Un    
N 
N 
N 
N RM RM RM RMj 8:  9 9 9 957  7 7 7 713  3 3 3 3> > >
 +E D& '.2      oy*gF 2 2 2 2 2& 2 2 2j 
 */"" "" "" "" ""H 
 */
" 
" 
" 
" 
" 	, 	, 	, 	,- - -. 5 5 5 5. H H H H4 *Y
(
(:j5'**
?B//	 	 	 	 	Z 	 	 	" 26    2E E E EQ% Q% Q% Q%f 
 
 
 
    	 	 	 	=J =J =J =J~ /K /K /KdD D D D0Q Q Q Q* r# r# r# r#j 
        MOO	        <>>    *    =,;<
J$%     hn 5uXt^7L (S	!J K  c;$$J  KM  L L L L! ! ! ! (4.(4.(4."4.#tT;tTz*+ , 4S>=9=HI        
 2KDO	I I I I I ID 8D>8D>8D>#D>3T4Ad
+, - 2K)= )= )= )= )= )=V Z Z Z Z6 G)<88: :   , G0,@@B B   2 3
" " " " A A A A    0/0DEE A A A A
 		777# # # 87# 49D D D D D ;@- - - - - +  +  +  + Z DJ)dU8T>%::;< =' ' ' '
 ')	 ( ( ( (        -	$+  : : : :
 
 
 
 !;	$
        > > > >
    @ @ @ @D D D D
C6 C6 C6 C6 C6 C6 C6 C6J& & &<d %&8 9   :Y' Y' Y' Y' Y' Y' Y' Y'v&" &" &" &"P 	%T	
X&	$uS$Y
 %$"7
78: 46  5 5 5 5J	$uS$Y
 %$"7
789 57  6 6 6 6-" -" -" -"`Z Z Z Z Z
 Z Z Zz 35  4 4 4 4         
4 
4 
4    
      B B B B
< < < <
 
 
 
B B B B 
 $(1
 &*1 1 1 1 1 1* *.#'G G G G G G2 
7;! ! ! ! ! $(! ! ! ! !$ - - - 
 $()-	" " " " " 
7;! ! ! ! !   	 !	
c
!"$ 
 E#s(O$
   ? ? ? ?      < < < <$ $ $ $N   <
7 
7 
7 
7   :       = = = =2   (    		% % % %.    j   " " " ".   "    ,. - - - -? ? ? ?& & &$ $ $3 3 3 ( ( ( ($       5 5 5 5 5 5rR   