
    uki                        d dl mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZmZmZ d d	lmZ d d
lmZ ej&                  j                  Z G d d      Z G d d      ZddZ ej0                  d      Zej5                   eej6                  e             ej9                  d         ej:                  e        ej<                  ed        dej>                  dej@                  fdZ! ejD                  ee!d       dej@                  dejF                  dz  fdZ$de%e&ef   dejF                  ddfdZ'y)     )partialwraps)Any)config)core)dispatch)	tree_util)xla_metadata_lib)adbatchingmlir)
xla_client)irc                   "    e Zd ZdZd Zd Zd Zy)_XlaMetadataWrapperag  A wrapper class to allow XlaMetadataContextManager to be used as a decorator.

  When XlaMetadataContextManager is used as a decorator on a function `f`, it
  returns an instance of this class. This wrapper ensures that when `f` is
  called, it runs within the metadata context. It also forwards attribute
  access to `f` via `__getattr__`, and if an attribute of `f` is callable (e.g.,
  the `.lower()` method of a jitted function), it wraps that attribute so it
  too runs within the metadata context when called. This allows decorated
  functions to be used seamlessly with JAX transformations like `jax.jit`.
  c                 B    || _         || _         t        |      |        y N)_f_ctxr   )selffctxs      P/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jax/_src/xla_metadata.py__init__z_XlaMetadataWrapper.__init__*   s    DGDIE!HTN    c                 j    | j                   5   | j                  |i |cd d d        S # 1 sw Y   y xY wr   )r   r   )r   argskwargss      r   __call__z_XlaMetadataWrapper.__call__/   s1    	 &TWWd%f%& & &s   )2c                 x     t         j                  |      t              sS t               fd       }|S )Nc                  X    j                   5   | i |cd d d        S # 1 sw Y   y xY wr   )r   )r   r   attrr   s     r   wrapperz0_XlaMetadataWrapper.__getattr__.<locals>.wrapper8   s,    99 %T$V$% % %s    ))getattrr   callabler   )r   namer#   r"   s   `  @r   __getattr__z_XlaMetadataWrapper.__getattr__3   s<    477D!DD>k
4[% % Nr   N)__name__
__module____qualname____doc__r   r   r'    r   r   r   r      s    	
&
r   r   c                   ,    e Zd ZddgZd Zd Zd Zd Zy)XlaMetadataContextManagerprevupdatesc                     || _         y r   )r0   )r   r0   s     r   r   z"XlaMetadataContextManager.__init__C   s	    DLr   c                     | j                   sy t        j                  j                         | _        t        j                  j                  t        j                  | j                  | j                                y r   )r0   r   xla_metadata_context_manager	get_localr/   	set_localr
   update_metadata)r   s    r   	__enter__z#XlaMetadataContextManager.__enter__F   sN    <<33==?DI
''11((DLLAr   c                 p    | j                   sy t        j                  j                  | j                         y r   )r0   r   r3   r5   r/   )r   exc_type	exc_value	tracebacks       r   __exit__z"XlaMetadataContextManager.__exit__O   s$    <<
''11$))<r   c                     t        ||       S r   )r   )r   r   s     r   r   z"XlaMetadataContextManager.__call__T   s    q$''r   N)r(   r)   r*   	__slots__r   r7   r<   r   r,   r   r   r.   r.   @   s     y!)=
(r   r.   Nc                     | t        |      S t        t        |j                                     t	        j
                  fd|       S )Nc                 2    t         j                  |       S )N)xla_metadata_kvs)xla_metadata_value_pbind)vhashable_metadatas    r   <lambda>z"set_xla_metadata.<locals>.<lambda>^   s    &++ 1 , 
 r   )r.   tuplesorteditemsr	   tree_map)xr   rE   s     @r   set_xla_metadatarL   X   sF    Y$V,,fV\\^45	
 	
	 r   xla_metadata_valuec                    | S r   r,   )avalrA   s     r   rF   rF   k   s     r   c                     | fS r   r,   )ct_r   s      r   rF   rF   n   s    RE r   r   valc                P    t        |      }t        |      }|t        ||       |gS r   )dict_target_op_to_attach_metadata_attach_xla_metadata_to_op)r   rS   rA   xla_metadataop_to_attach_metadatas        r   !_xla_metadata_value_lowering_rulerZ   q   s2     &',7<&|-BC
,r   F)	cacheable
value_mlirreturnc                 X    | j                   }|t        |t        j                        ry |S r   )owner
isinstancer   Block)r\   ops     r   rV   rV      s'    "Z:b"((+	)r   rX   rb   c                    | ri i }}| j                         D ]>  \  }}t        j                  j                  t	        |      j                               ||<   @ |j                  D ]5  }|dk(  s	|j                  |   D ]  }|j                  ||j                  <    7 t        j                  j                  ||z        |j                  d<   y y )Nzmhlo.frontend_attributes)
rI   r   
StringAttrgetstrlower
attributesr"   r&   DictAttr)rX   rb   ctx_attributesexisting_attributeskrD   r"   as           r   rW   rW      s     *,b'N""$ <1--++CFLLN;nQ<  /	+	+t$ 	/A()
aff
%	// 13,,1BMM,- r   r   )(	functoolsr   r   typingr   jax._srcr   r   r   r	   r
   jax._src.interpretersr   r   r   jax._src.libr   jax._src.lib.mlirr   _xla
config_extr   r.   rL   	PrimitiverB   def_implapply_primitivedef_abstract_evaldefvectorized
deflinear2LoweringRuleContextValuerZ   register_lowering	OperationrV   rU   rf   rW   r,   r   r   <module>r      s:   %      % 4 4 #  __##
 D( (0
 &t~~&:;    H$$&:;  & &'M N   + , "$A B		!	!(*   ;u
bhh 2<<$;N sCx.&(ll	r   