
    Ph                     b   U d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 d dl
Z
d dlmc 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mZ d dlmZ d dlmZ d dl mZmZ d dlZd dl m!Z! d dl"Z"d dl#Z#d d	l$m%Z% d dl&Z&d d
l'm(Z( d dl)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 d dlm1Z1 d dl2mc m3Z4 d dl
m5Z5m6Z6m7Z7 d dl8m9Z9 g dZ:e
jv                  jx                  Z<e
jv                  jz                  Z= e&j|                  e?      Z@e
j                  j                  e?d      ZCi aDee
j                  j                  ef   eGd<   dZH ej                  e
j                  d d        d ZKed        ZL eM       ZN eM       ZOe5e6e7fZPd ZQd ZRd ZSeOd fdZTd ZUd ZVd  ZWd! ZXd" ZYd# ZZd$ Z[e! G d% d&             Z\d' Z]d( Z^e
j                  e
j                  j                  efZbd) Zc G d* d+e      Zde
j                  	 dId,e	e
j                  j                  ef   d-ed.eeed/f      d0efd1       Zge j:                  d2        Zhd3eifd4Zjdaked5        Zl G d6 d7e(      Zm G d8 d9e*      Zn G d: d;e0      Zo G d< d=e
j4                  j                        Zqd> Zred?        Zs	 	 	 dJd@d@dAdBdCZtdD ZudE Zve j:                  dKdF       ZwdG ZxdLdHZyy)M    N)AnyCallableDictListOptionalTupleUnion)TracerGraphModule)
FakeTensorFakeTensorModeunset_fake_temporarilyis_fake)enable_python_dispatcherenable_pre_dispatch)_extract_tensor_metadata)contextmanagernullcontext)	dataclass)count)TorchFunctionMode)TorchDispatchMode	_pop_mode
_push_mode   )SymNode)SymDispatchMode)Proxy)SymIntSymFloatSymBool)WeakTensorKeyDictionary)PythonKeyTracerdispatch_tracemake_fxDecompositionInterpreterpy_sym_typesget_innermost_proxy_modenot_implementedCURRENT_DECOMPOSITION_TABLEc                     t        |       d fS N)listxs    mC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/fx/experimental/proxy_tensor.py<lambda>r1   4   s    47D/    c                     t        |       S r,   )tuple)xs_s     r0   r1   r1   4   s    QVWYQZr2   c                 n    dj                  d t        |      D              }t        d| d| dd| i      S )z*FX gets confused by varargs, de-confuse it,c              3   &   K   | ]	  }d |   yw)argN ).0is     r0   	<genexpr>z!fake_signature.<locals>.<genexpr>8   s     8<a#aS	<s   zlambda z: fn()fn)joinrangeeval)r@   nargsargnamess      r0   fake_signaturerF   6   s:    xx85<88H'(5
!4tRjAAr2   c              #   @   K   t         }| a 	 t          |a y # |a w xY wwr,   )r*   )decomposition_tableold_decomposition_tables     r0   	decomposerJ   ;   s,      :"5>))&=#&=#s   	 c                     t        | d      sJ d       d| j                  v xr t        | j                  d   t              S )Nmetaz3All nodes traced with proxy_tensor should have metaval)hasattrrL   
isinstancer'   )nodes    r0   is_sym_noderQ   J   s<    4 W"WW DIIL*TYYu-=|"LLr2   c                     t        | t        j                        r||j                  | <   y t        | t              sJ t        |              | |j                  vr||j                  | <   y y r,   )rO   torchTensortensor_trackerr   typesymnode_tracker)objtracerproxys      r0   set_proxy_slotr[   N   s`    #u||$ &+c" #w'2c2'f,,,*/F""3' -r2   c                     t        | t        j                  t        f      sJ t	        |              t        | |dd       S )NFc                      yNTr;   r6   s    r0   r1   z has_proxy_slot.<locals>.<lambda>`   s    r2   )rO   rS   rT   r   rV   get_proxy_slot)rX   rY   s     r0   has_proxy_slotra   ^   s5    cELL'23>T#Y>3#vun==r2   c                     | S r,   r;   r.   s    r0   r1   r1   e   s    r2   c                     t        | t        j                        r|j                  }n,t        | t              sJ t        |              |j                  }| |vr|t        u rt        |  d|       |S  |||          S )Nz is not tracked with proxy for )	rO   rS   rT   rU   r   rV   rW   
no_defaultRuntimeError)rX   rY   default	transformtrackers        r0   r`   r`   e   sz    #u||$''#w'2c2'((
'j #&EfXNOOWS\""r2   c                 "    | j                         S r,   )detach)rM   s    r0   snapshot_fakerk   r   s    ::<r2   c                 4   t        |       rt        |       S t        | t              r| S t        | t        t
        f      r(| j                  | D cg c]  }t        |       c}      S t        | t        j                        rj| j                  s]t        d      }|5  t        j                  | j                  | j                         | j                  | j                         cd d d        S y t        | t"        t$        t&        f      r| S y c c}w # 1 sw Y   y xY w)NT)allow_fallback_kernels)devicedtype)r   rk   rO   r'   r-   r4   	__class__extract_valrS   rT   	is_sparser   empty_stridedshapestridern   ro   intfloatbool)rM   r/   fake_tensor_modes      r0   rq   rq   u   s    s|S!!	C	&
	C$	'}}c:ck!nc:;;	C	&}}  .TJ!**399cjjl3::]`]f]fg "! 	C#ud+	,
 
- ; "!s   D	ADDc                 8   t        |      | j                  j                  d<   t        |      r$t	        |      | j                  j                  d<   | S t        |t        j                        r.|j                  s"t	        |      | j                  j                  d<   | S )NrM   tensor_meta)	rq   rP   rL   r   r   rO   rS   rT   rr   )rZ   rM   s     r0   set_metar|      sp    (-EJJOOEs|)A#)F

& L 
C	&s}})A#)F

&Lr2   c                 f     t        j                  d      t        j                  | g|i |      S )zT
    Delays computation of f until it's called again
    Also caches the result
    r   )	functools	lru_cachepartial)fargskwargss      r0   thunkifyr      s1    
 "9q!)"3"3A"G"G"GHHr2   c                X   fd}t        | j                        D ]  \  }} ||fd|        t        | j                               D ]  \  }} ||fd|         || j                         fd        || j	                         fd       t        | t        |             y )Nc                     t        |      sJ t        | t              r%| j                  }t	        |t        || g|        y y r,   )callablerO   r   rP   r[   r   )outer_sproxy_callabler   inner_srY   s       r0   try_set_proxy_slotz(track_tensor.<locals>.try_set_proxy_slot   sA    '''gv&llG7FH^W,Tt,TU 'r2   c                     t        t        j                  j                  j                  j                  |      |       S r,   )r|   rS   opsatensym_sizerv   r/   r=   rZ   s     r0   r1   ztrack_tensor.<locals>.<lambda>   s*    8EIINN4K4K4O4OPUWX4Y[\+]r2   c                     t        t        j                  j                  j                  j                  |      |       S r,   )r|   rS   r   r   
sym_striderv   r   s     r0   r1   ztrack_tensor.<locals>.<lambda>   s*    8EIINN4M4M4Q4QRWYZ4[]^+_r2   c                 ~    t        t        j                  j                  j                  j                        |       S r,   )r|   rS   r   r   	sym_numelrf   r/   rZ   s    r0   r1   ztrack_tensor.<locals>.<lambda>   s'    %))..:R:R:Z:Z[`:acd1er2   c                 ~    t        t        j                  j                  j                  j                        |       S r,   )r|   rS   r   r   sym_storage_offsetrf   r   s    r0   r1   ztrack_tensor.<locals>.<lambda>   s'    (599>>CdCdClClmrCsuv:wr2   )	enumeratert   ru   numelstorage_offsetr[   _ProxyTensor)tensorrZ   constantrY   r   r=   ss    ` `   r0   track_tensorr      s    V &,,'11]_`a ( &--/*11_abc + v||~'efv,,.0wx66<x#@Ar2   c                :    fdfd | |       | S )Nc                 h   t        | t        j                        rt        | |       t	        |        y t        | t
              r't	        |        t        | j                  fd       y t        | t        t        f      rMt        t        j                        rt	        |        t        |       D ]  \  }} 	||    |              y t        | t              rP|J t        t        j                        rt	        |        | j                         D ]  \  }} 	||   d         y y )N)rY   r   c                       S r,   r;   rZ   s   r0   r1   z<track_tensor_tree.<locals>.wrap_with_proxy.<locals>.<lambda>   s    5r2   )rO   rS   rT   r   r|   r'   r[   rP   r4   r-   fxr   r   dictitems)
erZ   r   idxeekeyrM   get_constantrY   wrap_with_proxys
    `     r0   r   z*track_tensor_tree.<locals>.wrap_with_proxy   s    a&E&8DUA<(UA1666=9E4=)%*" %Q<RE#JS0AB (4  ###%*" GGISU3Z6 & r2   c                     y |    S r,   r;   )r   r   s    r0   r   z'track_tensor_tree.<locals>.get_constant   s    C= r2   r;   )	inner_res	proxy_resr   rY   r   r   s     ``@@r0   track_tensor_treer      s"    D! Iy(3r2   c                      t               S r,   )r   r;   r2   r0   maybe_disable_fake_tensor_moder      s     "##r2   c                   <    e Zd ZU eed<   eej                     ed<   y)r   rZ   r   N)__name__
__module____qualname__r   __annotations__r   rS   rT   r;   r2   r0   r   r      s    Lu||$$r2   r   c                       fd}|S )Nc                 n    | j                   }|j                  |j                  S  t        |             S r,   )rP   r   r`   )r   nrY   s     r0   innerzfetch_sym_proxy.<locals>.inner   s4    FF::!:: ->!V,..r2   r;   )rY   r   s   ` r0   fetch_sym_proxyr      s    / Lr2   c                       fdS )Nc                     t        | |       S r,   r`   trY   s    r0   r1   z$fetch_tensor_proxy.<locals>.<lambda>   s    ^Avq1r2   r;   rY   s   `r0   fetch_tensor_proxyr      s	    11r2   c           
      
    g  fd}t        j                  t        j                  |||f      st        j                  d       t        S t         |||      }|t        ur|S |s|t        j                  j                  j                  j                  t        j                  j                  j                  j                  t        j                  j                  j                  j                  fvr1 5   |j                  |i |}|t        ur|cd d d        S 	 d d d         j                  }t        j                   t        j                  t#        |      ||f      \  }}	t        j                  t$        d ||	f      xr) t        j                  t&        t(        t*        fd ||f      }
t        j,                  j.                  |j0                  v r|
r=t        j                   t$        d ||	f      \  }}t3               5   ||i |cd d d        S  j4                  r7t        j                  t        j                  d ||f      rt7        d| d      t        j                   t&        t(        t*        ft9         j                        t        j                   t$        d	 ||	f            \  }}|t        j                  j                  j:                  j                  u r.t        j                  j                  j<                  j                  } j                  j?                  d
||| j                  j@                  jC                  |jD                  jF                              }|jD                  jF                  d   dk(  r]|jD                  jF                  d   dk7  rAtI        |d   tJ              r$tM        |d         D ]  \  }}|d   |   |_'         n
||d   _'         ||i |}t        jP                  t$        d ||	f      }d }|t        j                  j                  j<                  j                  u r>|jS                         tT        k  r't3               5  |d   jW                         }d d d        nt        j,                  jX                  |j0                  vrg|
re|rct        j                  t        j                  d |      r=t3               5  t        j                   t$        d ||	f      \  }} ||i |}d d d        nd }t[        ||||       |S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   4xY w# 1 sw Y   @xY w)Nc                     t        |       t        v xs t        | j                        }j                  r*|xs& t        |       t
        j                  j                  fv }|sj                  t        |              |S r,   )	rV   HANDLED_TYPESra   rY   _allow_fake_constantrS   _subclassesr   append)r/   r
proxy_modeunrecognized_typess     r0   can_handle_tensorz%proxy_call.<locals>.can_handle_tensor  sh    G}$Lq*:K:K(L**?T!W!2!2!=!= ??A%%d1g.r2   zEProxyTensorMode tensors without proxy had unrecognized subclasses: %sc                     | j                   d uS r,   r   r   s    r0   r1   zproxy_call.<locals>.<lambda>'  s    QZZt5Kr2   c                      yNFr;   r_   s    r0   r1   zproxy_call.<locals>.<lambda>*  s    r2   c                     | j                   S r,   r   r   s    r0   r1   zproxy_call.<locals>.<lambda>1      

r2   c                     t        |        S r,   )r   r   s    r0   r1   zproxy_call.<locals>.<lambda>8  s    hopqhrdrr2   zHIt appears that you're trying to get value out of a tracing tensor with z - erroring out! It's likely that this is caused by data-dependent control flow or similar.  It may be possible to trace this with dynamic shapes; try setting tracing_mode='symbolic' in your make_fx call.c                     | j                   S r,   r   r   s    r0   r1   zproxy_call.<locals>.<lambda>B  s    QWWr2   call_function)namer6   r   c                     | j                   d uS r,   r   r   s    r0   r1   zproxy_call.<locals>.<lambda>  s    

RV@Vr2   c                 0    | j                         t        k  S r,   )r   CONSTANT_NUMEL_LIMITr   s    r0   r1   zproxy_call.<locals>.<lambda>  s    FZ9Zr2   c                     | j                   S r,   r   r   s    r0   r1   zproxy_call.<locals>.<lambda>  r   r2   r   rY   ).pytreetree_all_onlyrS   rT   not_implemented_logdebugNotImplementedmaybe_handle_decompr   r   sizerf   ru   r   rJ   rY   tree_map_onlyr   r   r   r    r!   Tagdata_dependent_outputtagsr   _error_on_data_dependent_opsre   r   
lift_freshlift_fresh_copycreate_proxygraph_target_to_stroverloadpacketr   rO   r   r   rZ   tree_any_onlyr   r   clonenondeterministic_seededr   )r   funcpre_dispatchr   r   r   r   rY   f_argsf_kwargsall_constant
const_argsconst_kwargs
proxy_argsproxy_kwargs	proxy_outr=   aoutany_constantr   r   s   `                    @r0   
proxy_callr    s    .?$P!!"ik}~JdF;A D		##UYY^^%:%:%B%BEIINNDaDaDiDi)  //A& Z& 
 F++ELL:LV:TW[]cVdeFH 	\+KfV^M_` 	_   &(G!<oPTV\~^	  yy&&$))3'-';';2VX4F($J 01Z8<8 21
 22v7K7KELLZruy  |B  uC  8DZ[_Z` a( (   &33	7#
))*\+<vx>PQ JN uyy~~((000yy~~--55!!..jR^4>4E4E4K4K4Z4Z[_[n[n[w[w4x / zI ##B'3.43F3F3O3OPQ3RVY3Yd1gt$ "$q'*1#A,q/ + &DGM


C. ''6VY_aiXjkLH
 uyy~~--555#))+I]:]+-Aw}}H .- 			)):  /Z\_` ,-'-';';2VX4F($J Z8<8H	 .- c9xGJ] Z0 21H .- .-s0   5T?TT*
*T6TT'*T36T?c            
            e Zd Z fdZdej
                  j                  dedef   de	edf   de
eef   def
dZd	 Zd
ef fdZd Z xZS )r#   c                 v    t         |   d       t               | _        t	        j
                         | _        y )Nr;   )autowrap_modules)super__init__r"   rU   weakrefWeakKeyDictionaryrW   )selfrp   s    r0   r  zPythonKeyTracer.__init__  s/    "-57&88:r2   mforward.r   r   returnc                      ||i |S r,   r;   )r
  r  r  r   r   s        r0   call_modulezPythonKeyTracer.call_module  s     '''r2   c                     |S r,   r;   )r
  attrattr_valparameter_proxy_caches       r0   getattrzPythonKeyTracer.getattr  s    r2   r   c                    t        |t        j                  j                        r| j                  j                         D ]  \  }}||u s| j                  d|di       c S  d }|s<d}	 d| }t        | j                  |      sn|dz  }"t        | j                  ||       | j                  d|di       S t        |t        t        t        f      r.|j                  j                  J |j                  j                  S t        | =  |      S )Nget_attrr;   r   _param_constantr   )rO   rS   nn	Parameterrootnamed_parameterscreate_noderN   setattrr   r    r!   rP   r   r  
create_arg)r
  r   r   pqualnamer=   rp   s         r0   r  zPythonKeyTracer.create_arg  s    a++,		22416++J2rBB 5 '+H!04H"499h7FA	 
 		8Q/##J"bAAFHg6766??...66??"w!!$$r2   c                     t        |t        j                        rt        || |d       S t        |t        j                  t        j
                  t        j                  f      rt        |j                  | |d       S |S )Nc                     | j                   S r,   r   r   s    r0   r1   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>  s    r2   c                      |        S r,   r;   r   s    r0   r1   z.PythonKeyTracer.unwrap_proxy.<locals>.<lambda>  s    QSr2   )rO   rS   rT   r`   r   r    r!   rP   )r
  r   s     r0   unwrap_proxyzPythonKeyTracer.unwrap_proxy  sY    a&!!T1.?@@ELL%..%--HI!!&&$=AAHr2   )r   r   r   r  rS   r  Moduler   r   r   r   strr  r  r  r$  __classcell__rp   s   @r0   r#   r#     sq    ;(XX__(/7S/A(INsTWx(bfgjlogobp(	(%C %,r2   r#   r  rY   concrete_args.r  c                     |j                  | |      }t        | t        j                  j                        r| j
                  j                  n| j                  }t        |j                  ||      S r,   )	tracerO   rS   r  r%  rp   r   r   r  )r  rY   r)  r   r   s        r0   r$   r$     sM     LL}-E&0uxx&G4>>""T]]Dv{{E400r2   c              #   ~  K   | t        |       }	 | t        ||        y t        j                  j	                  t        j                  j
                  j                        }	 | t        j                  j                  |       y # t        ||        w xY w# t        j                  j                  |       w xY wwr,   )r   r   rS   _C_unset_dispatch_mode_TorchDispatchModeKeyPROXY_set_dispatch_mode)dkolds     r0   _pop_proxy_mode_temporarilyr4    s      
~m	 IsB hh++EHH,J,J,P,PQ	-IHH'', sB HH'',s4   B=B AB=$B ( B=BB=!B::B=r   c                      t        j                        \  }|r$t        j                  j                  j
                  nd t        j                          fd       }|S )Nc                     t        j                  |       \  }}t        |      t              k(  sJ t              5 }t	        |t
              sJ t        |d 	       d d d          }t        j                  t        j                  	fd|      }t        j                  t        t        t        f	fd|      }|S # 1 sw Y   axY w)Nr   c                 "    t        | | d       S )Nc                     | j                   S r,   r   r.   s    r0   r1   z=wrap_key.<locals>.wrapped.<locals>.<lambda>.<locals>.<lambda>
  s    QWWr2   r   r   s    r0   r1   z+wrap_key.<locals>.wrapped.<locals>.<lambda>
  s    nQ3DEr2   c                 :     t        | j                               S r,   )r`   rP   r   s    r0   r1   z+wrap_key.<locals>.wrapped.<locals>.<lambda>  s    4nQVVV46r2   )r   tree_flattenlenr4  rO   ProxyTorchDispatchModer   r   rS   rT   r   r    r!   )
proxiesflat_proxiesproxies_specr  r   r2  r   flat_tensorstensorsrY   s
        r0   wrappedzwrap_key.<locals>.wrapped  s    %+%8%8%A"l< C$5555(,a!7888lL4PVW - k""LLE

 ""Xw'6

 
 -,s   "C  C	)r   r:  rS   r-  DispatchKeyPreDispatchr~   wraps)r   rA  rY   r   tensors_specrB  r2  r@  s   ```   @@r0   wrap_keyrG    sS    !'!4!4W!=L,-9			)	)tB__Q ( Nr2   c              #      K   t         Dt        j                         r0| a | t        j                  d<   	 d  d a d t        j                  d<   y d  y # d a d t        j                  d<   w xY ww)Noriginal_aten)ORIGINAL_ATENfx_tracebackhas_preserved_node_metacurrent_meta)r   s    r0   set_original_aten_oprN    sf      !E!E!G59!!/2	> M9=L%%o6 !M9=L%%o6s   0A,A A,A))A,c                       e Zd Zd ZddZy)PreDispatchTorchFunctionModec                     || _         y r,   r   )r
  rY   s     r0   r  z%PreDispatchTorchFunctionMode.__init__,  s	    r2   Nc                     |xs i }t         j                  j                  t         j                  j                  t         j                  j
                  g}||v r| j                  j                  d||i       S  ||i |S )Nr   )rS   r-  _set_grad_enabledamp_enter_autocast_exit_autocastrY   r  )r
  r   typesr   r   pre_dispatch_opss         r0   __torch_function__z/PreDispatchTorchFunctionMode.__torch_function__/  sr    2HH&&II%%II$$

 ##;;**?D$KK T$V$$r2   r;   N)r   r   r   r  rY  r;   r2   r0   rP  rP  *  s    %r2   rP  c                   N     e Zd Zd fd	Zedd       Z fdZ fdZddZ xZ	S )r<  c                 d   |r$t         j                  j                  j                  nd }t        |   |       || _        || _        d| _        || _	        || _
        || _        t        |      | _        i | _        g | _        t         j                  j                   j"                  | _        g | _        y r^   )rS   r-  rC  rD  r  r  rY   tracing_modeenable_tracingr   r   r   ProxySymDispatchModesym_modetrace_state	_managersr/  r0  	_mode_keyenter_stack)r
  rY   r]  r   r   r   r2  rp   s          r0   r  zProxyTorchDispatchMode.__init__=  s    1=UXX!!--4("($8!,H),V4 77== DFr2   c                     | j                   j                  d      5  t        |      5  | j                  ||||      cd d d        cd d d        S # 1 sw Y   nxY wd d d        y # 1 sw Y   y xY wr   )r`  enablerN  inner_torch_dispatchr
  r   rW  r   r   s        r0   __torch_dispatch__z)ProxyTorchDispatchMode.__torch_dispatch__Q  sP    ]]!!%(*>t*D,,T5$G +E*D((*D*D(((s!   A$A	A$A	A$$A-c                 4   | j                   j                  d      }| j                  j                  |       |j	                          t
        j                  j                  | j                        }| j                  j                  |       t        |          S r^   )r`  rf  rb  r   	__enter__rS   r-  r.  rc  rd  r  )r
  r  maybe_prev_proxy_moderp   s      r0   rk  z ProxyTorchDispatchMode.__enter__V  sn    MM  &a 	 % = =dnn M 56w ""r2   c                     | j                   j                         }t        |   |||      }| j                  j                         }|t
        j                  j                  |       |s|j                  |||      S |j                  d d d       S r,   )rb  popr  __exit__rd  rS   r-  r1  )r
  exc_type	exc_value	tracebackr  bmb_previous_proxy_moderp   s          r0   ro  zProxyTorchDispatchMode.__exit__`  s    NN GXy)< "&!1!1!5!5!7!-HH''(>?::h	9==::dD$//r2   c                     | j                   s ||i |S |t        j                  j                  fv r ||i |S t	        | || j
                  ||      S r,   )r^  primrn   rf   r  r   rh  s        r0   rg  z+ProxyTorchDispatchMode.inner_torch_dispatchp  sY    ""(((DKK''((((($d&7&7vFFr2   )FFTrZ  )
r   r   r   r  r   ri  rk  ro  rg  r'  r(  s   @r0   r<  r<  <  s/    F( H H#0 Gr2   r<  c                   L     e Zd Z fdZed        Zdeeee	f   fdZ
d Z xZS )r_  c                 >    t         |           || _        d| _        y r^   )r  r  rY   r^  )r
  rY   rp   s     r0   r  zProxySymDispatchMode.__init__{  s     #r2   c              #   b   K   | j                   }|| _         	 d  || _         y # || _         w xY wwr,   )r^  )r
  rs  r3  s      r0   rf  zProxySymDispatchMode.enable  s1     !!	&"%D#Ds   /# /	,/r   c                      t         fd|D              } j                  j                  d||i       }t        j                  | j                        }t        ||       |S )Nc              3      K   | ]E  }t        |t              r/ t        |j                  j                               j                  n| G y wr,   )rO   r'   r`   rP   rY   )r<   r   r
  s     r0   r>   z6ProxySymDispatchMode._compute_proxy.<locals>.<genexpr>  sD      
 ;EQ:U/N1664;;/166[\\s   AAr   )r4   rY   r  r   r   r|   )r
  r   r   r   n_argsn_outp_outs   `      r0   _compute_proxyz#ProxySymDispatchMode._compute_proxy  sY     

 
 ''vrJ,r2   c                    | j                   s ||i |S |t        j                  k(  r@t        |d   t              r|d   dk(  r|d   S t        |d   t              r|d   dk(  r|d   S |rJ  ||i |}t        |t
              r:t        | j                  |||      }t        |j                  | j                  |       |S )Nr   r   )r   r   r   )r^  operatormulrO   rv   r'   r   r  r[   rP   rY   )r
  r   rW  r   r   r   p_out_thunks          r0   __sym_dispatch__z%ProxySymDispatchMode.__sym_dispatch__  s    ""((( 8<<$q'3'DGqLAwDGS)d1glAw
 zD#F# c<("4#6#6TRUVK388T[[+>
r2   )r   r   r   r  r   rf  r	   r   r    r!   r  r  r'  r(  s   @r0   r_  r_  z  s9    # & &eFHg4M.N r2   r_  c                        e Zd Zddej                  j
                  dej                  j                  f fdZ fdZ fdZ	 fdZ
 fdZ xZS )	r&   module	new_graphc                    t        |   |fi | || _        t        j                  j
                  j                  | j                        | _        t               | j                  _	        t        j                         | j                  _        || _        | j                  i | _        t        | j                  d      | _        y )Nrealr]  )r  r  r  rS   r   rZ   GraphAppendingTracerrY   r"   rU   r  r	  rW   rH   r<  mode)r
  r  r  rH   r   rp   s        r0   r  z!DecompositionInterpreter.__init__  s    *6*"hhnn99$..I%<%>"&-&?&?&A##6 ##+')D$*4;;VL	r2   c                     t         |   |||      }t        j                  j	                  | j
                  j                  |      | j                        }t        ||d | j                         |S Nr   )r  placeholderrS   r   r   r  rY   r   r
  targetr   r   r   rZ   rp   s         r0   r  z$DecompositionInterpreter.placeholder  sT    g!&$7t~~99&A4;;O#utDKKH
r2   c                     t         |   |||      }t        j                  j	                  | j
                  j                  |      | j                        }t        ||d | j                         |S r  )r  r  rS   r   r   r  rY   r   r  s         r0   r  z!DecompositionInterpreter.get_attr  sT    gvtV4t~~66v>L#utDKKH
r2   c                      t            |||      } fd} j                  j                  t        j                  ||             |S )Nc                 6    t        | j                  | d       S )Nc                 .    | j                   j                  S r,   )rZ   rP   r.   s    r0   r1   zADecompositionInterpreter.output.<locals>.unwrap.<locals>.<lambda>  s    qww||r2   )r`   rY   )r   r
  s    r0   unwrapz/DecompositionInterpreter.output.<locals>.unwrap  s    !!T[[!5KLLr2   )r  outputr  r   tree_map)r
  r  r   r   r   r  rp   s   `     r0   r  zDecompositionInterpreter.output  s=    gnVT62	Mfoofc:;
r2   c                     t        | j                        5  | j                  5  t        |   |i |cd d d        cd d d        S # 1 sw Y   nxY wd d d        y # 1 sw Y   y xY wr,   )rJ   rH   r  r  run)r
  r   r   rp   s      r0   r  zDecompositionInterpreter.run  sF     t//0$))7;// 3<)00))000s!   AA	AA	AA$r,   )r   r   r   rS   r   r   Graphr  r  r  r  r  r'  r(  s   @r0   r&   r&     sD    
Muxx33 
M 
M0 0r2   r&   c                 N     t        j                  ||f      \  } fd}||fS )Nc                 F    t        j                  |       \  }} |i |S r,   )r   tree_unflatten)	flat_argsfn_args	fn_kwargsr   specs      r0   rB  z-wrapper_and_args_for_make_fx.<locals>.wrapped  s*    #229dCW*	**r2   )r   r:  )r   r   r   r  rB  r  s   `    @r0   wrapper_and_args_for_make_fxr    s/     ))4.9OIt+ Ir2   c               #      K   t        j                         } t        j                  d       	 d  t        j                  |        y # t        j                  |        w xY wwr   )rS   is_autocast_cache_enabledset_autocast_cache_enabled)	old_values    r0   disable_autocast_cacher    sF     //1I	$$U+4((3((3s   *A!A A!AA!FTr   r   r   c                n     dv sJ i t        j                          fd       }|S )Nr  fakesymbolicc                     ddl m} t        j                  d |       }t	               }t               dk(  rt               ndk(  r@dd lj                  j                  j                  |       ~t        d |       d      nid	k(  rVdd lj                  j                  j                  |        |       t        d
      n#j                  J d       t        d       t               }t               }d	k(  sr
t               }r
t               }t               }rt        |      }t!        |      }dfd}|j"                  }	d ||d}
t        j                  |
   |       } t%        t'        j(                        d      r:t'        j(                        j*                  j,                  t&        j.                  z  rt1        t3        |            }n}t5              5  5  |5  |5  |5  |	5  |5  t7               5  t9        t;        || |      |t=        |            }d d d        d d d        d d d        d d d        d d d        d d d        d d d        d d d        d	k(  r_        S # 1 sw Y   OxY w# 1 sw Y   SxY w# 1 sw Y   WxY w# 1 sw Y   [xY w# 1 sw Y   _xY w# 1 sw Y   cxY w# 1 sw Y   gxY w# 1 sw Y   kxY w)Nr   )ShapeEnvc                 "    t         j                  S r,   )r   PHr_   s    r0   r1   z*make_fx.<locals>.wrapped.<locals>.<lambda>
  s    r2   r  r  r   T)rm   allow_non_fake_inputs	shape_envstatic_shapesr  F)rm   r  r  z2shape_env should be set if tracing with 'symbolic'zUnexpected tracing type: r  c                     ddl m}  |d       }t        | j                        rdz  j	                  | |      S t        |       t        u r+dk(  r&j                  j                  | |d       | |      S | S )	Nr   )ConstantSourceinputr   )sourcer  )positive)hintr  )	torch._dynamo.sourcer  rO   rT   from_tensorrV   rv   create_symintnodecreate_symbol)r/   r  r  	arg_country   r  rS   r]  s      r0   	wrap_fakez+make_fx.<locals>.wrapped.<locals>.wrap_fake>  s     <#eI;$78F!U\\*Q	'33Af3EEaCLJ$> 2293J3J1f_c3J3dklu{2||Hr2   c                     | S r,   r;   r.   s    r0   r1   z*make_fx.<locals>.wrapped.<locals>.<lambda>R  s    ar2   r  __code__)rY   r)  )symbolic_shapesr  r   r  r#   r   torch._dynamo_dynamoutilsdetect_fake_moder   r  AssertionErrorr   r   rP  r<  r`  rN   inspectr  r  co_flags
CO_VARARGSrF   r;  rJ   r  r$   rG  r4   )r   r  phs	fx_tracerpython_dispatcher_modepre_dispatch_modeproxy_function_moder   r  r`  wrap_fn_mapr   r   r  ry   r  rS   r   _allow_non_fake_inputsr   rH   r   r   r]  s                @@@@r0   rB  zmake_fx.<locals>.wrapped  s    	.ooot4#%	 +6!*}V# $}}22CCDI'#1+/*@&j"&	$  Z' $}}22CCDI'$J	#1+0*@'$) 
 -66	 ,b.bb, !#<\N!KLL&1m!, :%%=%?" 3 5#.=">y"I+I,89EAUIe	g
 		 	" &&  !

 {<8$?w~~a(*59J9S9S9\9\_f_q_q9q "!SX.DD *+-=?UWhj}z#9#;xdI|LU^nstwnxyA $<zX k~Wh?U-=+
 :%#AK $<#;zzXX k~j}WhWh?U?U-=-=++s    K#KK	J?	J3J'J$JJ	J'J3J?	!K)K1K#JJJ$ J''J0,J33J<8J?	?KKKKK 	K##K,)r~   rE  )r   rH   r]  r  r   r   r   rB  s   ``````` r0   r%   r%     sK     7777" __Qf f fP Nr2   c                  R    t         j                  j                  j                         S r,   )rS   r  _python_dispatch _get_current_dispatch_mode_stackr;   r2   r0   get_torch_dispatch_modesr  q  s    ;;''HHJJr2   c                      t         j                  j                  t         j                  j                  j                        S r,   )rS   r-  _get_dispatch_moder/  r0  r;   r2   r0   r(   r(   u  s'    88&&uxx'E'E'K'KLLr2   c              #   2  K   d }| sAt         j                  j                  t         j                  j                  j                        }	 d  | t         j                  j                  |       y y # | t         j                  j                  |       w w xY wwr,   )rS   r-  r.  r/  r0  r1  )enable_current	maybe_olds     r0   disable_proxy_modes_tracingr  y  sx     
 I HH11%((2P2P2V2VW	3 HH''	2 !9 HH''	2 !s   AB	A0 #B0$BBc                 t    |t         v r| 5  t        |   |i |cd d d        S t        S # 1 sw Y   t        S xY wr,   )r*   r   )r   opr   r   s       r0   r   r     s9    	((.r2DCFC Z s   )7c                     t        | ||      \  }}t               5   t        ||      |      }ddd       |S # 1 sw Y   S xY w)a  A helper function used to get the GraphModule for the given func.

    It's expected to be used in the ProxyTensor tracing context.
    It detaches the args and kwargs from the current tracer so that the trace of
    the current graph module can be created without any side-effects.
    r  N)r  r  r%   )r   r   r   r]  rB  all_argsgms          r0   get_isolated_graphmoduler    sE     5T4HGX	$	&8WW<8B 
'I 
'Is	   9Ar,   )Nr  F)F)r  )z
contextlibr~   typingr   r   r   r   r   r   r	   rS   torch.utils._pytreer  _pytreer   torch.fxr
   r   torch._subclasses.fake_tensorr   r   r   r   torch._dispatch.pythonr   r   r   torch.fx.passes.shape_propr   r   r   r  dataclassesr   r  r  torch.utils._statsr   loggingtorch.overridesr   torch.utils._python_dispatchr   r   r   sym_noder   _sym_dispatch_moder   r   torch.fx.tracebackrr  rK  r   r    r!   torch.utils.weakr"   __all__r   r   rv  	getLoggerr   log_logginggetArtifactLoggerr   r*   _opsOperatorBaser   r   register_pytree_nodeSizerF   rJ   object
proxy_slotrd   r'   rQ   r[   ra   r`   rk   rq   r|   r   r   r   r   r   r   r   rT   r  r  r   r  r#   _disable_dynamor%  r$   r4  rx   rG  rJ  rN  rP  r<  r_  Interpreterr&   r  r  r%   r  r(   r  r   r  r;   r2   r0   <module>r     s     D D D  $ $ ( e e P  ? 2  !   $  -   /  ) ) + + 4 Cyy~~yy~~g!nn66xARS GI T%**"9"98"CD I    EJJ(ACZ [B
 > > X
X
'*M0 > )3k #:IB,+\$ % % %
2 uxx11:>gT.f .b  481EHHOOX-.11  c3h01 	1 1 - -$t 6  $%#4 %$;G. ;G|:? :~(0uxx33 (0V 4 4 !%#(v
 !&)-vrKM 3 3 r2   