
    i                       S SK Jr   S SKJrJrJr  g! \ Ga    S SKJrJ	r	  S SK
r
S SKJs  Jr  S SKJr  S SKJr  S SKJrJrJrJr  S SKJr  \" S	5      r\R2                  " \
R4                  R6                  R8                  5        \R2                  " \
R4                  R6                  R:                  5        \R2                  " \
R4                  R6                  R<                  5        \R2                  " \
R4                  R6                  R>                  5        S
r S r!\RD                  " \
R4                  R6                  RF                  5      S 5       r$\RD                  " \
R4                  R6                  RJ                  5      S 5       r&\RD                  " \5      S 5       r'\RD                  " \5      S 5       r(\RR                  S 5       r*SS jr      SS jr gf = f)    )annotations)executorch_call_delegateget_lowered_module_nameis_lowered_module)AnycastN)HigherOrderOperator)FakeTensorMode)disable_proxy_modes_tracingget_proxy_slotProxyTorchDispatchModetrack_tensor_tree)tree_flattenr   LoweredBackendModulec                  ^  U 4S jn[        U5      (       d  [        S5      e[        5          [        U/UQ76 nS S S 5        [	        T R
                  R                  U5        U/UQ7n[        R                  " XF5      nT R
                  R                  SUU0 SS9n[        WUS T R
                  S9$ ! , (       d  f       N}= f)Nc                   > [        U [        R                  [        R                  [        R                  45      (       d  U $ [        [        [        R                  U 5      TR                  U S 5      $ )Nc                    U R                   $ N)proxy)es    W/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/exir/delegate.py<lambda><trace_call_delegate.<locals>._unwrap_proxy.<locals>.<lambda>3   s    qww    )
isinstancetorchTensorSymIntSymFloatr   r   tracer)r   
proxy_modes    r   _unwrap_proxy*trace_call_delegate.<locals>._unwrap_proxy/   sP    a%,,enn!MNN!U\\1%z'8'8!=N r   zJexecutorch_call_delegate()'s first argument must be a LoweredBackendModulecall_functionr   )name)constantr    )r   
ValueErrorr   call_delegate_cpur   r    rootpytreetree_mapcreate_proxyr   )	r!   func_overloadlowered_moduleargsr"   out	node_args
proxy_args	out_proxys	   `        r   trace_call_delegater4   -   s    	 !00\  )*#N:T:C + 	 
 1 1 6 6G#+d+	__]>
%%22+ 3 
	 !T*2C2C
 	
 +*s   B11
B?c                R  ^ [         R                  R                  R                  [        [         R                  R                  R
                  [        0m[        R                  " [        TR                  5       5      U4S jUU4S j5      nU R                  R                  5       " U6 $ )Nc                ,   > T[        U 5         " U 5      $ r   )typea	map_typess    r   r   #call_delegate_cpu.<locals>.<lambda>W   s    iQ(+r   c                J   > [        U [        TR                  5       5      5      $ r   )r   tuplekeysr8   s    r   r   r;   Y   s    jE)..*:$;<r   )r   fximmutable_collectionsimmutable_dictdictimmutable_listlistr*   tree_map_onlyr=   r>   original_modulemodule)r.   r/   new_argsr:   s      @r   r(   r(   M   s|    
 HH**994HH**994
	 '').."#+<	
 --446AAr   c                   [        U /UQ5      u  p#[        S U 5       5      n[        R                  R	                  [        R                  R                  [        R                  R                  R                  5      5         [        U /UQ76 nU(       a1  S n[        R                  " [        R                  Xe5      sS S S 5        $ UsS S S 5        $ ! , (       d  f       g = f)Nc              3  |   #    U  H2  n[        U[        R                  5      (       d  M$  UR                  v   M4     g 7fr   )r   r   r   requires_grad).0fs     r   	<genexpr>)call_delegate_autograd.<locals>.<genexpr>b   s&      
%2jELL6QOAOO]s   #<<c                    U bM  U R                  5       n [        R                  " U 5      (       d  [        R                  " U 5      (       a  SU l        U $ )NT)detachr   is_floating_point
is_complexrK   )vars    r   fake_requires_grad2call_delegate_autograd.<locals>.fake_requires_gradq   s@    !jjl 223775;K;KC;P;P04C-Jr   )r   anyr   _C_ExcludeDispatchKeyGuardDispatchKeySetDispatchKeyAutogradCPUr   r*   rE   r   )r.   r/   flat_operands_rK   resrU   s          r   call_delegate_autogradr`   ]   s     ((?$(?@ 
%2
 
 XX..HH##EHH$8$8$D$DE
 +>ADAC ++ELL:LR%
 
( )
 
 
s   ;CC
Cc                *    [        U [        U/UQ76 nU$ r   )r4   r   )moder.   r/   r_   s       r   'call_delegate_proxy_torch_dispatch_moderc   |   s     "$(@.XSWX
r   c                T    U    [        U/UQ76 sS S S 5        $ ! , (       d  f       g = fr   )r(   )rb   r.   r/   s      r   call_delegate_fake_tensor_modere      s     $^;d; TTs   
'c                   ^  [        U 4S jU 5       5      nT R                  5          [        U/UQ76 nT R                  U5      sS S S 5        $ ! , (       d  f       g = f)Nc              3  F   >#    U  H  nTR                  U5      v   M     g 7fr   )unwrap_tensors)rL   argctxs     r   rN   .call_delegate_functionalize.<locals>.<genexpr>   s     G$3s11#66$s   !)r=   redispatch_to_nextr   wrap_tensors)rj   r.   r/   unwrapped_argsr_   s   `    r   call_delegate_functionalizero      sJ     G$GG##%*>KNKC##C( &%%s   A
Ac                :    [        U 5      R                  [        :H  $ )z
This function is added to avoid using isinstance(obj, LoweredBackendModule) as it will import LoweredBackendModule, which may cause a circular import.
)r7   __name__LOWERED_BACKEND_MODULE_TYPE)objs    r   r   r      s     Cy!!%@@@r   c                v    SnSn SU 3n[        X5      (       d  OUS-  nM  Uc   eU R                  X!5        U$ )zd
Adds the given lowered_module into the given root module and returns the
name of the module added.
Nr   lowered_module_   )hasattr
add_module)r)   r.   qualnameis       r   r   r      sX     (,H4**FA	 
 ###1r   )rs   r   returnbool)r)   ztorch.nn.Moduler.   rr   r{   str)+
__future__r   0torch._higher_order_ops.executorch_call_delegater   r   r   ImportErrortypingr   r   r   torch.utils._pytreeutils_pytreer*   
torch._opsr	   torch._subclasses.fake_tensorr
   "torch.fx.experimental.proxy_tensorr   r   r   r   r   fallthroughrX   r[   PythonDispatcherPythonTLSSnapshotADInplaceOrViewAutocastCPUrr   r4   py_implCompositeExplicitAutogradr(   Autogradr`   rc   re   py_functionalize_implro    r   r   <module>r      s   #`   Y !((.<  123MN(()=)=)N)NO(()=)=)O)OP(()=)=)M)MN(()=)=)I)IJ"8
@ %%ehh&:&:&T&TUB VB %%ehh&:&:&C&CD E: %%&<= > %%n5< 6< 33) 4)A 4 
	KYs   
 GGG