
    uki              	          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	 d dl
mZmZmZmZmZ d dlmZmZ d dlmZmZmZmZ d d	lmZ d d
lmZ eecZZee cZ Z!d Z"d dZ#d Z$ejJ                  d        Z& ejN                  d      Z(de(_)         ejT                  e(       d Z+e(jY                  e+       d Z-d Z. ej^                  e(e.       d Z0e0ejb                  e(<   d Z2e2ejf                  e(<   d Z4e4ejj                  e(<    eejl                  dd       ejn                  e(<   ed        Z8d Z9e9ejt                  e(<   de;e<   dejz                  de>e;e<   ejz                  dz  f   fdZ?e?ej                  e(<   y)!    )partial)core)dispatch)linear_util)
debug_infoflatten_fun)safe_mapsafe_zipweakref_lru_cacheunzip2
split_list)tree_flattentree_unflatten)admlirpartial_evalbatching)func)irc                     t        |       S )N)scheduling_group)xla_metadata_call)names    ]/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/experimental/scheduling_groups.pyr   r      s    	D	11    Nc                 *    | fdS t        | fi S )Nc                     t        | fi S N_xla_metadata_call)gmetas    r   <lambda>z#xla_metadata_call.<locals>.<lambda>$   s    '2T2 r   r   )fr"   s    `r   r   r   "   s    Y22	A	&	&&r   c                       fd}|S )Nc                     t        d
| |      }t        | |f      \  }}t        j                  
|      }t	        ||      \  }}t        d |D              }t        ||      }t        j                  |d|i}	t         |       |	      S )Nr   r   c              3   F   K   | ]  }t        j                  |        y wr   )r   shaped_abstractify.0xs     r   	<genexpr>z6_xla_metadata_call.<locals>.wrapped.<locals>.<genexpr>.   s     CAT,,Q/C   !jaxpr)
r   r   lu	wrap_initr   tuple_trace_to_jaxprxla_metadata_call_pbindr   )argskwargsdbg	args_flatin_treer$   out_treein_avalsr/   	outs_flatfunr"   s             r   wrappedz#_xla_metadata_call.<locals>.wrapped)   s    
(#tV
<C%tVn5Iw
SS)Aa)KAxCCCHAx(E#(()I5IDII(*i00r    )r>   r"   r?   s   `` r   r    r    (   s    1 
.r   c                 b    t        j                  | |      \  }}}t        j                  ||      S r   )petrace_to_jaxpr_dynamicr   ClosedJaxpr)flat_funr<   r/   _constss        r   r3   r3   4   s.    ..xB%F			%	((r   r   Tc                     | j                   S r   )	out_avals)r/   r<   r"   s      r    _xla_metadata_call_abstract_evalrJ   >   s    	r   c                     t        | t              rt        j                  j	                  |       S t        dt        |             )Nzmlir attr handler for type(x)=)
isinstancestrr   
StringAttrgetNotImplementedErrortype)r,   s    r   attr_getrR   C   s8    3==Q
 ?tAwjA
BBr   c          
         t        j                  |j                        }t        |      \  }}|D cg c]'  \  }}t	        j
                  || j                  |      ) }	}}g || j                  }
t	        j                  d|| j                  t        |      |
| j                  | j                        \  }}}|j                  j                  }t	        j                  |      }|D cg c]  }| j                  j!                  |       }}g | j"                  ||	|}t%        j&                  |t(        j*                  j!                  |      t	        j,                  |            }t(        j.                  j!                  |j1                         D ci c]  \  }}|t3        |       c}}      |j4                  j6                  d<   t	        j8                  |j:                  |      }t=        |t        |      g      \  }}| j                  j?                  t	        j@                  tC        ||                  }| jE                  |       |S c c}}w c c}w c c}}w )N)const_loweringavalr   zmhlo.frontend_attributes)#r   jaxpr_const_argsr/   r   r   ir_constantrT   avals_inlower_called_computationmodule_contextlen	avals_out	tokens_inr   valueflatten_ir_typesrO   dim_var_valuesfunc_dialectCallOpr   FlatSymbolRefAttrflatten_ir_valuesDictAttritemsrR   	operation
attributesunflatten_ir_values_like_typesresultsr   update_tokensTokenSetzipset_tokens_out)ctxr/   r6   r"   const_args_and_avals
const_argsconst_avalscrU   const_arg_valuesr<   func_opoutput_typeseffectssymbol_nameflat_output_typesefftokenscallkv	out_nodes
tokens_outs                          r   _xla_metadata_call_loweringr   I   s    ..u{{;"#78*k *+
!T q););$G+ + +{*S\\*(#'#@#@5#"4"4c*ox	mmS]]$$ '< ""+++L9.56sCMMc"6&6	A3	A	A)9	AD	A$			--11+>
T"
$$ ;=++//"&**,/$!Qq(1+~/;1$..67 11$,,M) S\N;&)}}**4==Wf9M+NO*Z 	-+ 7 0s   ,I("II
c                l    t        j                  || |      \  }}t        j                  |d|i|}||fS Nr/   )r   batch_jaxpr2r4   r5   )	axis_datavals_indims_inr/   r"   batched_jaxprdims_outoutss           r   _xla_metadata_call_batcherr   f   s?    $11%GL-		!	!7	H-	H4	H$	xr   c                P   |D cg c]  }t        |t        j                          }}t        j                  ||d      \  }}|D cg c]  }t        |t        j                        r|! }}t	        j
                  g | |d|i|}	|	d t        |       |	t        |      d  }}
t        |      }t        |j                  |      D cg c]5  \  }}|rt        |      n"t        j                  |j                               7 }}}t        |d       J |
|fS c c}w c c}w c c}}w )NFr/   )rL   r   Zero	jvp_jaxprr4   r5   r[   iterrm   rI   nextto_tangent_aval)primalstangentsr/   r"   tnzs	jaxpr_jvpout_nzsnz_tangentsr   primals_outnz_tangents_outnz_outsrU   nztangents_outs                   r   _xla_metadata_call_jvpr   m   s   -56Z277#	#6#6||E36)W$CqJq"'',BC+C		!	!	R7	R[	R		RT	R$!%ms7|!4d3w<=6I+!'"%eoow"?AdB $&$w-27743G3G3I+JJ A, A	gt		$$	$	l	"" 	7CAs   "DD'D	:D"c                  
 t        j                  || d      \  }dgt              z  dgt              z  z   }t	        j
                  |j                  |d      \  }t	        j                  |      
t        j                  |d|i}|j                  D cg c]  }|j                          c}
fd}	|||	fS c c}w )NFTr/   c                    |D cg c]  }t        |t        j                        r|! }}t        g | |      D cg c]
  \  }}|s	| }}}t	        j
                  |di}t        |      }t              D 	
cg c]'  \  }	}
|	rt        |      nt        j                  |
      ) }}	}
t        |d       J |S c c}w c c}}w c c}
}	w r   )rL   r   r   rm   r4   r5   r   r   )r   r   r   r   r,   uinputsr   nz_outs_r   ar   	jaxpr_linr"   r   tangent_avals_outused_inputss               r   xla_metadata_call_linz5_xla_metadata_call_lin.<locals>.xla_metadata_call_lin   s    &EjBGG.D1EKE 8' 8K 8+FLDAq!aLFL!&&HiH4HGG}HW&78:A !DNbggaj0 :D :$'''K FL:s   CC
C
C,C)r   r   r[   sumrB   	dce_jaxprr/   close_jaxprr4   r5   rI   r   )r   r/   r   r"   r   lin_outs
jaxpr_lin_r   r   r   r   r   r   r   s      `      @@@@r   _xla_metadata_call_linr   {   s    ||E36)WWs7|#tfs7|&;;(LL(EJ*knnZ()#(('GG$G+49OODqq((*D  
gw(=	== Es   Cr/   c                 
    ||fS r   r@   )rF   ____________________r,   ys           r   r#   r#      s
    1a& r   c                     d  fd} j                   j                  j                         }t        j                  t        j                  ||      |      \  }}}t        j                  ||      j                  fS )Nc                       y r   r@   r@   r   r   r#   z"_transpose_jaxpr.<locals>.<lambda>   s    r   c                     t        |       \  }}t        j                  j                  dj                  ||      }|D cg c]   }t        |t        j                        s|nd " }}t        |      \  }_        |S c c}w )NF)	r   r   backward_passr/   rG   rL   r   r   r;   )	in_flat
primals_incts_inoutctcts_outcellr:   r/   s	         r   
transposedz$_transpose_jaxpr.<locals>.transposed   su    '9J


5;;u||Z
PCAD
E2ZBGG,2$6
EC
E)#.GT]N Fs   %A>r'   )
r/   r   with_unknown_namesrB   rC   r0   r1   r   rD   r;   )	r/   r<   r:   r   r8   trans_jaxprrF   rG   r   s	   ` `     @r   _transpose_jaxprr      sj    	$ 	113#44ll:#.:+q&			+v	.	==r   c                    t        || f      \  }}t        d |D              }t        |||      \  }}t        j                  |d|i|}	t        ||	      S )Nc              3   F   K   | ]  }t        j                  |        y wr   )r   typeofr*   s     r   r-   z/_xla_metadata_call_transpose.<locals>.<genexpr>   s     3a4;;q>3r.   r/   )r   r2   r   r4   r5   r   )
r   r/   r   r"   r   r:   r<   r   r;   r   s
             r   _xla_metadata_call_transposer      s`    !:v"67'73733(*5(GD+x$$gI[IDI'	'	**r   used_outputseqnreturnc           	      V   t        |       s0t        j                  |      sdgt        |j                        z  d fS |j
                  d   }t        j                  |t        |             \  }}t        |j
                  |      }t        j                  t        |j                  |      D cg c]
  \  }}|s	| c}}t        |j                  |       D cg c]
  \  }}|s	| c}}|j                  ||j                  |j                  |j                        }||fS c c}}w c c}}w )NFr/   )r/   )anyrB   has_effectsr[   invarsparams_cached_closed_call_dcer2   dictnew_jaxpr_eqnrm   outvars	primitiverw   source_inforo   )	r   r   jaxpr_closed_jaxprr   
new_paramsr~   usednew_eqns	            r   dce_jaxpr_xla_metadata_ruler      s    	\	2>>##67S_$d**::g& 88eL!#,CJJl3*CJJ4=WQq=CKK6?WQ$q?	mmZ!5!5sQ' 
g	 >?s   ,
D
7D

D%"D%r   )A	functoolsr   jax._srcr   r   r   r0   jax._src.api_utilr   r   jax._src.utilr	   r
   r   r   r   jax._src.tree_utilr   r   jax._src.interpretersr   r   r   rB   r   jax._src.lib.mlir.dialectsr   ra   jax._src.lib.mlirr   map
unsafe_maprm   
unsafe_zipr   r   r    cacher3   	Primitiver4   multiple_resultssimple_implrJ   def_abstract_evalrR   r   register_loweringr   fancy_primitive_batchersr   primitive_jvpsr   primitive_linearizations$closed_call_partial_eval_custom_rulepartial_eval_jaxpr_custom_rulesr   r   primitive_transposeslistboolJaxprEqnr2   r   	dce_rulesr@   r   r   <module>r      s      & 5' ' ; H H ;  CZCZ2'
 ) 
) %dnn%89 '+  $   ( )  % %&F GC4   *,G H :T ! !"5 6
# *@  % &>$ 4J  / 0 B33W@B  " "#6 7 > >+ 0L  + ,d4j r{{ %*4:r{{T7I+I%J %@  !r   