
    Vpf[                         d dl 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 d dlmZ d dlmZ d dlmZmZmZmZmZmZ  ej        e            ej        e           ej         e!cZ!Z"ej#        e$cZ$Z% G d dej&                  Z'ej(        d*d            Z) e)e	j*        j+        d                    Z*ej,         G d d                      Z-d Z.d Z/d+dZ0d Z1d Z2d  Z3d! Z4 G d" d#e
j5                  Z6d$ Z7d% Z8d& Z9 e6d'          Z:e7e
j;        e:<   e8ej<        e:<    ej=        e: ej>        e9d()                      ej?        e:           dS ),    )annotations)CallableN)Any)ad_util)api_util)core)custom_api_util)linear_util)source_info_util)traceback_util)util)ad)mlir)partial_eval)xla)tree_flattentree_leavestree_maptree_structuretreedef_tupletree_unflattenc                      e Zd ZdZd ZdS )
StoreEqualzFStores an unchanging value. Checks empty reads and unequal overwrites.c                    | j         t          j        ur*|| j         k    rt          j        d| j          d|           || _         d S )Nz Store assignment mismatch, from z to )_vallu_EMPTY_STORE_VALUEStoreException)selfvals     Y/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/custom_transpose.pystorezStoreEqual.store1   sV    y---#2B2B
ATY
A
AC
A
AC C CDIII    N)__name__
__module____qualname____doc__r"    r#   r!   r   r   /   s)        NN    r#   r   funlu.WrappedFunreturntuple[lu.WrappedFun, Any]c                \    t                      fd}|                    | |          |fS )Nc                      j         S N)r    )	out_stores   r!   <lambda>z)transformation_with_aux.<locals>.<lambda>;   s	    im r#   )r   wrap)genr)   gen_static_args	out_thunkr0   s       @r!   transformation_with_auxr6   7   s7     ll)####)	#		2	2I	==r#   c                  f    e Zd ZU ded<   dZded<   d	dZej        Zd
dZ	e
j        d             ZdS )custom_transposer   r)   NzCallable | None	transposec                >    t          j        | |           || _        d S r/   )	functoolsupdate_wrapperr)   )r   r)   s     r!   __init__zcustom_transpose.__init__I   s     T3'''DHHHr#   c                    || _         |S r/   )r9   )r   r9   s     r!   def_transposezcustom_transpose.def_transposeO   s    DNr#   c           	     F   t          |          \  }}t          |          \  }}t          ||f          \  }}t          t          j        | j                  |          \  }	}
t          |          \  }}t          j        |	g|R | j        ||||d}t          ||          S )N)r9   	out_typeslin_treeres_treeout_tree)	r   flatten_fun_nokwargsr   	wrap_initr)   custom_transpose_pbindr9   r   )r   rA   res_arglin_arg_rC   rB   	args_flatin_treeflat_fun	out_tree2out_types_flatrD   out_flats                 r!   __call__zcustom_transpose.__call__S   s    w''KAxw''KAx%w&899Iw /r|DH/E/EwOOHi+I66NH!&x :) : :151?080808: : :H (H---r#   )r)   r   )r9   r   )r$   r%   r&   __annotations__r9   r=   r	   forward_attr__getattr__r?   r   api_boundaryrR   r(   r#   r!   r8   r8   D   s         ---#)####     ,+    . . . . .r#   r8   c                4    t          || g|j        z            S r/   )r   
num_leaves)xtreedefs     r!   	tree_fillr[   j   s    	!w'9!9	:	::r#   c                <    t          | t          |                    S r/   )r[   r   )rY   trees     r!   tree_fill_liker^   m   s    	1nT**	+	++r#   c                R    t          d|           }t          t          |||          S )Nr   is_leaf)r[   r   r^   )full_treedefr]   ra   	full_trees       r!   tree_broadcastrd   p   s(    <(()	.$	7	C	C	CCr#   c                    t          d|           } t          d|          }	 t          d ||            n# t          $ r Y dS w xY wdS )Nr   c                    | S r/   r(   )rY   ys     r!   r1   z#is_treedef_prefix.<locals>.<lambda>x   s    ! r#   FT)r[   r   
ValueError)entireprefixs     r!   is_treedef_prefixrk   t   sc    Q&Q&^^VV,,,,	   55	s   5 
AAc                $    t          | dd          S )Nr$   z<unnamed transpose rule>)getattr)rules    r!   	rule_namero   }   s    	z#=	>	>>r#   c                    t          ||          sKt          | d          r|                     ||          t          dt	          |            d| d|           d S )N_transpose_type_errorzstructure of custom transpose rule's output does not prefix-match structure of primal function's linear inputs under custom transpose rule (z).
Transpose rule output: z
Linear primal inputs: )rk   hasattrrq   	TypeErrorro   )rn   rB   rule_out_trees      r!   check_transpose_rule_treesru      s    	8]	3	3 	/t,-- /&&x???.$-dOO. . %2. . $,	. ./ / /		/ 	/r#   c                     |             \  t          j        t          j                  d          fd}|S )Nr(   c                ~    t          | |f          } t          j                  g |R  }t          |          S r/   )r   r   jaxpr_as_funr   )rI   ct_outrL   ct_insrB   transpose_conststranspose_jaxprs       r!   r9   z,make_transpose_from_thunk.<locals>.transpose   sK    Wf-..I/T//N1ANINNNF(F+++r#   )r   ClosedJaxprpeconvert_constvars_jaxpr)thunkrB   r9   r{   r|   s    ` @@r!   make_transpose_from_thunkr      sc    &+egg#/#$ 1127 7/, , , , , , , 
r#   c                  &    e Zd ZdZdZdZd Zd ZdS )CustomTransposePrimitiveFTc                x    t          j        |          }t          |j        |          } |j        | ||fi |}|S r/   )r   find_top_tracemap
full_raiseprocess_custom_transpose)r   callargsparams	top_tracetracersoutss          r!   rH   zCustomTransposePrimitive.bind   sI     #D))I)&--G-9-dD'LLVLLDKr#   c                   d|v sJ d|v sJ t          |          }t          |                    d          |d                   |d<   t          j        t          j        |                    d                              }|g|fS )N
call_jaxprtranspose_jaxpr_thunkrB   r9   )dictr   popr   rF   r   rx   )r   r   
new_paramsr   s       r!   get_bind_paramsz(CustomTransposePrimitive.get_bind_params   s    6!!!!"f,,,,fJ7.//:   J{ <)*..*F*FGGHHD6:r#   N)r$   r%   r&   call_primitivemap_primitivemultiple_resultsrH   r   r(   r#   r!   r   r      sB        .-      r#   r   c               "    ~~|t           j        fS r/   )r   
no_effects)rK   rA   in_atomsr   s       r!   custom_transpose_typecheckr      s    	DO	##r#   c                  d|v rd|v sJ t          |d         |          }nd|v sJ |d         }t          ||f          }t          ||          \  }	}
~
t          d t	          |	          D                       sJ d | D             } t          ||           } ||	|          }t          ||t          |                     t          t          ||d           d	           \  }}d gt          t	          |	                    z  |z   S )
Nr   r   r   r9   c              3  @   K   | ]}t          j        |           V  d S r/   )r   is_undefined_primal).0rY   s     r!   	<genexpr>z2custom_transpose_transpose_rule.<locals>.<genexpr>   s0      IIq'***IIIIIIr#   c                z    g | ]8}t          |          t          j        u rt          j        |j                  n|9S r(   )typer   Zerozeros_like_avalaval)r   cts     r!   
<listcomp>z3custom_transpose_transpose_rule.<locals>.<listcomp>   sL     	 	 	 .2"XX-E-E	 	)	)	)2 	 	 	r#   c                
    | d u S r/   r(   rY   s    r!   r1   z1custom_transpose_transpose_rule.<locals>.<lambda>   s
    d r#   r`   c                
    | d u S r/   r(   r   s    r!   r1   z1custom_transpose_transpose_rule.<locals>.<lambda>   s
    T	 r#   )
r   r   r   allr   ru   r   r   rd   len)ctsrA   rC   rB   rD   r   r   r9   call_in_treerI   rJ   ry   ct_linct_lin_flatrK   s                  r!   custom_transpose_transpose_ruler      s_    &&6!!!!)&'3 3II V{#I(344, $L$77'7	IIK4H4HIII	I	IIII	 		 	 	#(C((&9Wf%%&Y.2H2HIIIXv/B/BCCC!!# # #.+q #k'**++	+k	99r#   c                0     t          j        |           | S r/   )r   rx   )r   r   r   s      r!   custom_transpose_loweringr      s    	&	:	&	&	--r#   custom_transpose_callT)r   )r)   r*   r+   r,   r/   )@
__future__r   collections.abcr   r;   typingr   jax._srcr   r   r   r	   r
   r   r   r   r   jax._src.interpretersr   r   r   r~   r   jax._src.tree_utilr   r   r   r   r   r   register_exclusion__file__safe_mapr   
unsafe_mapsafe_zipzip
unsafe_zipStorer   curryr6   rE   r   register_custom_decorator_typer8   r[   r^   rd   rk   ro   ru   r   	Primitiver   r   r   r   rG   custom_typechecksprimitive_transposesregister_lowering	lower_fun register_initial_style_primitiver(   r#   r!   <module>r      s   # " " " " " $ $ $ $ $ $                             $ $ $ $ $ $ & & & & & & % % % % % % # # # # # #       $ $ $ $ $ $ & & & & & & 4 4 4 4 4 4 % % % % % %O O O O O O O O O O O O O O O O $  #H - - - ! !( + + + -Z-Z
        > > > > /.!&q)+ +  / .  .  .  .  .  .  . 0/ .J; ; ;, , ,D D D D  ? ? ?
/ 
/ 
/      t~   @$ $ $
: : :@. . . .-.EFF -G ) *.M * +  DN,tDDDF F F % $%7 8 8 8 8 8r#   