
    Ph                        d dl Z d dlZd dlZd dlZd dlmZmZ 	 d dl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mZ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m Z m!Z! dd	l"m#Z#m$Z$ dd
l%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ejn                  ejp                  ejr                  ejt                  ejv                  ejx                  dZ=ej|                  ej~                  ejv                  ejx                  dZ@ G d de2      ZA G d de2      ZB G d deA      ZC G d deA      ZD G d deA      ZE G d de2      ZFy# e	$ r dZY 5w xY w)    N)DictList)compiled_autograd)guard_scalarGuardOnDataDependentSymNodehas_free_symbolsis_symbolicSymTypes   )config	variables)trace_wrapped)unimplemented	UserErrorUserErrorType)GuardBuilderinstall_guard)
AttrSource)	fqnget_custom_getattrget_fake_valueget_real_valueguard_if_dynobject_has_getattributeproductproxy_args_kwargstensortype_to_dtype   )VariableTracker)ConstantVariable)SizeVariable)><z>=z<===!=)iszis notr$   r%   c                       e Zd ZdZdddddddd	d
ddddhej
                  Zd Zddddddej                  j                  f fdZ
d Zd Zedej                  fd       Zd Zd Zd ZddZd Z	 	 	 	 	 	 ddZ fdZ xZS ) TensorVariablez=A torch.Tensor input or an intermediate value in the FX graphproxydtypedevicelayoutndimsizestriderequires_gradis_quantizedis_contiguous	is_sparse
class_typespecialized_valuec                 j    t        | j                  j                  | j                  j                        S )z
        Get the actual value represented by this variable if computation is run
        using the user-provided inputs.
        NOTE: this runs actual tensor computation and may be
        slow and memory-intensive.
        )r   r)   nodetracerselfs    iC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_dynamo/variables/tensor.pyr   zTensorVariable.get_real_valueX   s#     djjootzz/@/@AA    N)r.   r/   r2   r5   c                    t        |   di | || _        || _        || _        || _        || _        |
| _        || _        || _	        || _
        || _        || _        |	| _        || _        y N )super__init__r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   )r:   r)   r*   r+   r,   r-   r0   r1   r3   r4   r.   r/   r2   r5   kwargs	__class__s                  r;   rA   zTensorVariable.__init__a   st    $ 	"6"

		*(*"$!2r<   c                     | j                   S Nr)   r9   s    r;   as_proxyzTensorVariable.as_proxy       zzr<   c                     | j                   S rE   )r4   r9   s    r;   python_typezTensorVariable.python_type   s    r<   valuec           
      :   | j                   | j                  | j                  t        | j                        | j
                  | j                  | j                  t        |       d}t        |       st        | j                         D cg c]  }t        |      rt        |      n| c}      |d<   t        | j                               |d<   t        t        j                  j                   D cg c]  }| j#                  |      r| c}      |d<   |S c c}w c c}w )N)r*   r+   r,   r-   r0   r1   r3   r4   r.   r/   memory_formatr2   )r*   r+   r,   intr-   r0   r1   r3   typer   tupler.   r	   r/   torch_prims_common_memory_formatsr2   )rK   propssxs       r;   
specializezTensorVariable.specialize   s     [[llll

O"00!..u+	
  & " ;@**,G,Q;q>Qq0,GE&M
 $ELLN3E(O%* #00@@@***; @&E/"  Hs   D,Dc                 b   | j                   s
t               |j                  j                  |j                  j                  d}	 t        | j                   j                         |      }|
t               t        |      r
t               t        |      r
t               t        ||      }t        |      r
t               ddlm} ddlm} t!        | j                   |      }	t#        |	j%                  |j&                                 |||	      |      S # t        $ r}t               |d }~ww xY w)N)LGr   )r   r   VariableBuilder)sourceNotImplementedErroroutputlocal_scopeglobal_scopeevalname	Exceptionr   r   getattrcallableguardsr   builderr]   r   r   
make_guardHASATTR)
r:   txrd   scope_input_associated_real_valueexc
real_valuer   r]   attr_sources
             r;   dynamic_getattrzTensorVariable.dynamic_getattr   s   {{%'' ii++"))2H2HI	1 ,00@0@0BE+J( (/%''"#?@%'':;%''94@
J &''), d3k,,\-A-ABC/r;/
;;1  	1%'S0	1s   $D 	D.D))D.c                     ddl m}m} j                  r! j	                         v rt        d d       d }dk(  r* j                   |j                   j                        }ndk(  r* j                   |j                   j                        }n҉dk(  r* j                   |j                   j                        }ndk(  r  j                   | j                        }n~d	k(  r7 j                  + |j                   j                  j                  d
k(        }nBdk(  rN j                  B j                  D cg c]!  }t        j                  j                  |      # }}t        |      }ndk(  r) j                   |j                   j                        }ndk(  r) j                    |j                   j                         }ndk(  r) j"                   |j                   j"                        }nedk(  r! j                   j%                  dg i       }n?dk(  r! j                   j%                  dg i       }ndk(  r j%                  dg i       }dk(  r | j'                               S |4 j(                  (t+         j-                  t.        j0                                j(                  t3        t4        j6                  j8                        rt;        t4        j6                  j8                        }t3        |d      r|t3        ||j=                         d         r_t4        j>                  j@                  t;        ||j=                         d         jB                  v rt        jD                  jG                         S | fd}	 |	       }| jI                        }|
tK               |S c c}w )Nr   )r    TorchVariablezIllegal getattr invocation  in strict moder-   r*   r+   r,   is_cudacudashaper0   r1   r3   r.   dimdatadetachrC   	overloadsr   c                     ddl m}  ddlm} 	 t	        j
                  t        j                        }t        |      t        j                  k7  ry  | |j                  j                                     S # t        $ r Y y w xY w)Nr   wrap_fx_proxy)GetAttrVariablerl   r)   )ri   r   miscr   inspectgetattr_staticrR   TensorAttributeErrorrP   typesGetSetDescriptorTypecreate_getattr_proxyrG   )r   r   static_attrrd   r:   rl   s      r;   try_generic_attr_handlingz=TensorVariable.var_getattr.<locals>.try_generic_attr_handling  sw    21 ")"8"8t"LK $(B(BB$)>>t}}PTU  &   s   $A8 8	BB)& r    rt   strict_checks_enabled_strict_mode_banned_opsr   r-   creater*   r+   r,   rP   r.   r   r!   r0   r1   r3   call_methodrJ   r^   r   rj   r   
TYPE_MATCHhasattrrR   opsatenrf   r|   Taginplace_viewtagsr   DelayGraphBreakVariablerr   r_   )
r:   rl   rd   r    rt   resultrW   sizesfnr   s
   ```       r;   var_getattrzTensorVariable.var_getattr   sE   5##t3355 ;D6QR6>dii3,%,,TYY7FW_!7,%,,TZZ8FX$++"9,%,,T[[9FX$++"9"4;;/FY4;;#:,%,,T[[-=-=-GHFW_!6CG99M9aY//66q99EM!%(F_$););)G,%,,T-?-?@F^#(9(9(E,%,,T->->?F[ T^^%?,%,,T^^<FW_!2%%b&"b9FV^		 1%%b%R8FV^%%b(B;F; !1!1!344
 $++"9$//,*A*ABC ;;"wuyy~~t'D.BK(Bq 12II**gb",,.:K.L.Q.QQ !~~==??
 >. /0F>))"d3F>%''M Ns   &O
c                      | j                   dkD  S )Nr   )r-   )r:   rl   s     r;   has_unpack_var_sequencez&TensorVariable.has_unpack_var_sequence0  s    yy1}r<   c           	         ddl m} || j                  r| j                  d   }nx| j                  |dt	        j
                  d      gi       }t        |t        t        f      sJ t        |t              r|j                  |j                        }n|j                  }t        |      }|D cg c]'  } |t        |       || j                         |         ) c}S c c}w )Nr   wrap_fx_proxy_clsr   r.   
target_clsrl   r)   )ri   r   r.   r   r    r   
isinstanceSymNodeVariableevaluate_exprr`   rK   rangerP   rG   )r:   rl   idxesr   length
dyn_lengthis          r;   unpack_var_sequencez"TensorVariable.unpack_var_sequence3  s    .=yy1!--!1!8!8!; <b

 "*@P.QRRRj/:'55bii@F'--F&ME 
 d$--/RSBTU
 	
 
s   ,,Cc                 J    t         j                  j                  j                  S rE   )rR   _dynamor   )_autograd_backward_strict_mode_banned_opsr9   s    r;   r   z&TensorVariable._strict_mode_banned_opsJ  s    }}##MMMr<   c                    +,-./01 j                   r! j                         v rt        d d       ddlm+m}m, ddlm} ddl	m
} t        |      }dv rZd }t        |      dk(  r|d   }nd	|v r|d	   }n|s|rJ d
 d       t        |      }	+fd}
dk(  r|
n+j                  }t               x}|	 ||      S  +j                  ||	         S  j                   j"                  j$                  j'                  d      x}n|	4 t        |             }t)        |      sP |t+        d |D                    S  t        |      |	      }t)        |      s +j                  t-        |            S  | j.                  j0                  dgt3         gt5        |      z   |             S dv r j6                  % +j                  t9         j6                              S  j                   j"                  j$                  j'                  d      x}6|j;                         }t)        |      s +j                  t-        |            S |rJ d
 d        | j.                  j0                  ddgt3         gt5        |      z   |             S dv r* j<                   +j                   j<                        }n\dk(  r4 j>                  ( +j                   j>                  j@                        }n#dk(  rd|v r|jC                  d      jE                         ntF        jH                  } jJ                    +j                  | jJ                  v       }n j                   j"                  j$                  j'                  d      x}$ +j                  |jK                  |            }njd }nfdk(  r j>                  t        |      dk(  rtM         jN                  tF        jN                        rtQ         fdtS        jT                         D              } jN                  jV                  dk(  r! +j                  d|jX                         }n +j                  d|jX                         }ndk(  rt        |      dk(  rt[        tW        |d   jE                                     dk(  r_|d   jE                         } +j                  t[        |            } | j.                  j0                  dgt3         |g|             S dk(  rt        |      dk(  rtM        |d   |      rwdd lm.} dd!l/m0} |d   jE                         }  |tc        tc        |d   jd                  d"      d#            |jf                  jh                        }|jk                   ||      S d$k(  rhtM         jN                  tF        jN                        rD jN                  jV                  d%k7  r jN                  jl                  nd&} +j                  |      }nd }|rX|rJ d
 d       t        |      dk(  r|jo                  |d         S |r% ,|D cg c]  }|jo                  |       c}      S |S d'k(  rtp        jr                  st        d(       tt        st        d)       |rJ d*        jv                  tF        jx                  k7  rt{        d+ jv                   d,      d-|v xr |d-   jE                         }|rB j}                  d.g i       }j.                  j1                  dd%|j                         fi       }n* j.                  j0                  dd/gt3          gi        }t        j                  |      S d0k(  rXdd1lmA} 1fd21 j                         j"                  j$                  d   } 1| j                               }  |       |      S d3v rt        d
        y d4k(  rtp        j                  st        d
        y d5k(  r% j}                  d +j                  d      gi       S d6k(  r|\  } }!,/fd7/ /|       r'tM        |!t              r|!j                  rt        d8        j.                  j0                  d9t        j                  gt3         gt5        |      z   |         +j                  d       S d:v rt        d
        y d;k(  rt        |      dkD  rt        d<       y d=k(  rct        |      dk(  rUt        |      dk(  rGd>|v rC |tF        j                        j                  ||d>   gz   i       }" j}                  d=|"gi       S d?k(  rt        |      d@k(  rzt        |      dk(  rldA|v rh |tF        j                        j                  |i       }" |tF        j                        j                  |"|dA   gi       }" j}                  d=|"gi       S dBk(  rh |tF        j                        j                   |d   gi       }" |tF        j                        j                  |"gi       }"|"j}                  d4g i       S dCk(  r|D #cg c]  }#|#jE                          c}#-|jU                         D $%ci c]  \  }$}%|$|%jE                          c}%}$0-0fdD}&dE |&_,         | j.                  j0                  d9|&gt3         gi        F      S dGv rit        |      dk(  sJ |d   }'tM        |'t        j                  j                  t        j                  t        j
                  t        j                  f      st        dH       tM        |'t        j                        rt        dI       nAtM        |'t        j                  j                        r|'jE                         .n|'j                  .t        j                  j                  t        j                  j                         J      }( jd                  s|'jd                  })|)sPtM        |'t        j                  j                        r,|'j                  jd                  r|'j                  jd                  })|)st        dK       j.                  j                  j                  |)j                  t        j                               t        j                  st        dL       t        j                  t        .M      ..fdN}* |j.                  j1                  d9|* j                         fi             S j.                  j                  j                   |'|(       |(S dOk(  r] j                         j"                  j$                  d   j                  t        |      dkD  r|d   j                  ndPk7  rt        dQ       y dRk(  r#t        |      dk(  rtM        |d   t              rdS | j.                  j0                  dgt3         gt5        |      z   |             S c c}w c c}#w c c}%}$w )TNzIllegal method invocation ru   r   )r    rt   TupleVariabler~   )UserDefinedClassVariable)r/   r.   r   ry   zTensor.z() unhandled args/kwargsc           
      d    t        | D cg c]  } j                  |fi | c}fi |S c c}w rE   )r!   r   )rW   optionsyr    s      r;   make_const_size_variablez<TensorVariable.call_method.<locals>.make_const_size_variableh  sA    #DEFAq,%,,Q:':AFJQ Fs   -r.   example_valuec              3   2   K   | ]  }t        |        y wrE   rO   .0rs     r;   	<genexpr>z-TensorVariable.call_method.<locals>.<genexpr>  s     0HAQ   r   )numelnelementz() unhandled kwargsr   )
ndimensionry   is_floating_pointr2   rN   rM   rP   c              3   F   K   | ]  \  }}j                   |v s|  y wrE   )r*   )r   kvr:   s      r;   r   z-TensorVariable.call_method.<locals>.<genexpr>  s$      9daTZZ1_9s   !!rw   ztorch.cuda.ztorch.ztorch.tensortypeas_subclassr\   TensorWithTFOverrideVariable__torch_function____func__
get_devicecpunumpyz+Tensor.numpy(). config.trace_numpy is Falsez&Tensor.numpy(). NumPy is not availablez!Tensor.numpy() doesn't take args.zcan't convert z1 layout tensor to numpy. Use Tensor.dense() firstforcer{   view_astolist)SourcelessBuilderc           	         fd}| j                   t        j                  t        j                  t        j                  t        j
                  fvrt        d       | j                         dk(  r	 || |      S | j                         dk(  r(t        |       D cg c]  \  }} ||||          c}}S t        |       D cg c]  \  }} |||          c}}S c c}}w c c}}w )Nc                     t         j                  |j                         j                  j                  j                               S )N)sym_num)r   r   itemr`   	shape_envcreate_unbacked_symint)r   	sub_proxyrl   s     r;   wrapz8TensorVariable.call_method.<locals>.tolist.<locals>.wrap   s>    *11!( "		 3 3 J J L 2  r<   z1Input tensor for tolist must be an integer tensorr   r   )r   )	r*   rR   int8int16int32int64r   ry   	enumerate)tensorr   r   r   val
sub_tensorr   rl   s         r;   r   z*TensorVariable.call_method.<locals>.tolist  s     <<JJKKKKKK	(  ""UV::<1$	22::<1$BKFBSTBS3Dil3BSTT *36):):: :1>):  Us   CC")backwarddata_ptrr   __len____setitem__c                     t        | t              r,| j                  t        j                  t        j
                  fv S t        |       rt        fd| j                  D              S y)Nc              3   .   K   | ]  } |        y wrE   r?   )r   r   has_bool_keys     r;   r   zCTensorVariable.call_method.<locals>.has_bool_key.<locals>.<genexpr>J  s     Fgd|D1gs   F)r   r(   r*   rR   boolr   anyitems)r   r   r   s    r;   r   z0TensorVariable.call_method.<locals>.has_bool_keyF  sK    a077uzz5::&>>>=1FaggFFF r<   zWboolean masking setitem backwards, see https://github.com/pytorch/pytorch/issues/114123call_function)resize_
resize_as_set_z(Tensor.set_.source_Tensor_storage_offsetadd_alphaaddcdiv_r   rK   __contains__redistributec                 (     | j                   i S rE   )r   )rW   args_as_valuekwargs_as_values    r;   redistribute_fn_with_prim_typeszCTensorVariable.call_method.<locals>.redistribute_fn_with_prim_types  s    %q~~}HHHr<   prim_r   >   register_hook"register_post_accumulate_grad_hookz0Unexpected callable type passed to register_hookzNYI - lambda variables as hooks)mutable_localz%No source for register_hook target fnz<Compilation of intermediate hooks requires compiled autograd)r   c                 0    t        |       } |       | S rE   )rf   )r   hook_callabler   rd   s     r;   _register_hook_trampolinez=TensorVariable.call_method.<locals>._register_hook_trampoline  s    $+FD$9M!"%!Mr<   requires_grad_TzTensor.requires_grad_new	new_empty)er   r   r   r   r    rt   r   ri   r   user_definedr   dictlenr   r   rf   r)   r7   metagetr   rQ   rO   r`   create_proxyr   listr.   r   r   r-   r*   r   popas_python_constantrR   contiguous_formatr2   r   r+   nextr   r   rP   __name__r   r]   torch_functionr   r   r^   r   r   from_tensor_varindexgetitem_constr   trace_numpynpr,   strided	TypeErrorr   rG   NumpyNdarrayVariabler   capture_scalar_outputsr(   r0   operatorsetitemmulr   diveqr   r   	functionsFunctoolsPartialVariableUserFunctionVariableNNModuleVariableNestedUserFunctionVariabler   RemovableHandleVariablebaseMutableLocalfuncrh   addrj   r   ID_MATCHr   compiled_autograd_enabled	functoolspartialr   side_effectsr   rK   r!   )2r:   rl   rd   argsrB   rt   r   r   dim_varry   r   RetVariabler   fakefake_rconstant_resultrN   
tensortypetensor_typetensor_type_constr]   r   py_clstorch_fnr  ar   tr)   r   r   outkeyrK   r   rW   r   r   r   fn_varhandle_variablesrcr   r    r   r   r   r   r   r   s2   ```                                        @@@@@@@r;   r   zTensorVariable.call_methodM  s    ##t3355 :4&PQDD*:f%%G4yA~q'& -X'$?W0XX.w'C -1FN(@P@W@W  T4((5;&q>)2+221S6:: 

,,00AAN;0WT402F+F3  +50H0H+HII0WT405F+F36/66s6{CC !&		&&! 'vT
':FC  **yy$.'..wtyy/ABB 

,,00AAN'/2+223v;??B.ABB: !&		&&! 'vT
':FC  **tyy/D5.55dii@O((TZZ-C5.55djj6R6RSO_$ #f, 

?+>>@,, 
 !!-"9"2"9"9!T%7%77# **//..22?CC$P"9"2"9"9&&]&C# #'FN

&D	Q4;;5 1779 J {{6)"9"2"9"9!*"5"5!67# #:"2"9"9Z0012# FND	QDa33567;MM
 q'446K 7 0 7 7K8H I &		&&! '.?'@&I  M!D	Q47$<=0D !W//1FtAw~~/CDj
 ''002H 0??D&(  \!jell&K)-)9)9U)BDKK%%E5.55e<O"OB.ABB:4yA~&44T!W==$PT%UPT1o&C&CA&FPT%UVV""W_%%KLFG@@@8{{emm+$T[[M1bc 
 v%N&/*L*L*NE$$R2r:		..!51::</2
 /		..!9/@$r/R (..r599X26 ]]_))..?F1C&$&r3//--GD6*+V^F$A$AGD6*+Y##B1H1A1H1H1K0LbQQ]"JC! S!un5''m #BII""   #D6DJ#6?
 +#**400..GD6*+V^D	A DEFNs4yA~#f+2BwRXGX"599-;;DF7O,,bF ##B"==JD	QFq 6!"599-;;BbIF"599-;;VVG_-rF ##B"==^#
 #588,::2d1gPRSF"599-;;B"MF%%b&"b99^# >BBTQ113TBMEK\\^T^TQq!"6"6"88^TOI :?tf~+4 ,bii,,#3 'vr2  LL t9>!>!WF''@@22++..	 PQ&)"F"FG ?@FI$7$7$P$PQ..0YY'44LL'nn99; M O ;;mm"69+>+>+W+WX** ++,,C!"IJ		  $$S^^L4I4I%JK(BB  "V &&}<"
 %II**'1*	  II""00vPTU""%%$--/*>*>*C*C+

-SY]DGMM+F 12
 u}TaJtAw4U" &		&&! 'vT
':FC g &VF CTs    x?>y+y	c                 n    | j                   j                  j                  |       t        |   ||      S rE   )r)   r7   _renamer@   rename)r:   rl   rd   rC   s      r;   rB  zTensorVariable.rename  s*    

%w~b$''r<   rE   r.  zList[VariableTracker]rB   zDict[str, VariableTracker]returnr   )r  
__module____qualname____doc__r   _nonvar_fieldsr   rR   fxProxyrA   rG   rJ   staticmethodr   rX   rr   r   r   r   r   r   rB  __classcell__rC   s   @r;   r(   r(   D   s    G 	 
	'	'N"B* 3xx~~3B %,,  B)<VYv
.Nn &	n
 -n 
n`( (r<   r(   c                   Z     e Zd ZdZed        Z fdZd Zd ZddZ		 	 	 	 	 	 d	dZ
 xZS )
r   zI
    Represents a symbolic size, e.g., as returned by tensor.size(0)
    c                    d|j                   j                  v r|j                   j                  d   |k(  sJ |t        |j                   |      }||j                   j                  d<   t        |t        j
                  t        t        f      r<t        |t        j
                        rt        |      n|}t        j                  |      S t        ||fi |S )Nr   )r7   r  r   r   sympyIntegerrO   r   r    r   r   )clsrl   r)   r   r   s        r;   r   zSymNodeVariable.create  s    ejjoo-::???3w>>>?$UZZ4G+2

(gsD9:&0%--&Hc'lgG#**733ug999r<   c                 @    t        |   di | || _        || _        y r>   )r@   rA   r)   r   )r:   r)   r   rB   rC   s       r;   rA   zSymNodeVariable.__init__  s!    "6"
r<   c                     t        | j                  t              r | j                  j                  j                  S t        | j                        S rE   )r   r   r
   r7   pytyperP   r9   s    r;   rJ   zSymNodeVariable.python_type  s5    dllH-<<$$+++%%r<   c                     | j                   S rE   rF   r9   s    r;   rG   zSymNodeVariable.as_proxy!  rH   r<   c                     	 t        | j                        S # t        $ r-}t        t        j
                  dt        |       d      d }~ww xY w)Nz=Consider annotating your code using torch._constrain_as_*(). constrain_as_size_example)	case_name)r   r   r   r   r   ANTI_PATTERNstr)r:   output_graphes      r;   r   zSymNodeVariable.evaluate_expr$  sP    	--* 	**OPSTUPVxX5 	s    	A(AAc                     ddl m}  || |j                  j                  d|gt	        | gt        |      z   |             S )Nr   r~   r   )ri   r   r`   r	  r   r
  )r:   rl   rd   r.  rB   r   s         r;   r   zSymNodeVariable.call_method.  sM     	+"BII"" #D6DJ#6?
 	
r<   rE   rC  )r  rE  rF  rG  classmethodr   rA   rJ   rG   r   r   rL  rM  s   @r;   r   r     sS     : :&
 &	

 -
 

r<   r   c                   L     e Zd ZdZed        Zd Z	 	 	 	 	 	 d fdZd Z xZ	S )r  z~
    Represents an np.ndarray, but backed by torch Tensor via torch._numpy.ndarray.
    Use this for Tensor.numpy() call.
    c                 .    ddl m}  |dt        | |d|S )Nr   r   r   r?   )ri   r   r  )rl   r)   r   r   s       r;   r   zNumpyNdarrayVariable.createG  s*    .  
+
 	
 	
r<   c                    	
 ddl m	 ddlm
 d } j	                         j
                  j                  d   }t        j                  |      }	 
fd}dv rEj                  j                  d	 j	                         fi       }t        j                  |      }n͉d	v rt        j                  t        |            S d
v rCt        t        |      x}      s%t        j                  t!        d |D                    S  |       S dk(  r<t        |j"                  x}      st        j                  t%        |            S  |       S dv rt'        d        ndv rt'        d       |
t)               |S )Nr   )numpy_attr_wrapperr   r~   r   c            	      n     j                   j                  dj                          fi             S )Nr   )r`   r	  rG   )rd   rc  r:   rl   r   s   r;   insert_into_graphz;NumpyNdarrayVariable.var_getattr.<locals>.insert_into_graph_  s;     		&&#%7$--/49PRT r<   )Trealimagr   )r-   itemsize)rx   r/   c              3   2   K   | ]  }t        |        y wrE   r   r   s     r;   r   z3NumpyNdarrayVariable.var_getattr.<locals>.<genexpr>  s     4GQSVQr   r.   )r%  flagsr*   zTODO: add support for ndarray.)__version__z delegate np.__version__ to NumPy)utilsrc  ri   r   rG   r7   r  tnpndarrayr`   r	  r  r   r    rf   r   rQ   r.   rO   r   r_   )r:   rl   rd   r   r   example_ndarrayre  r)   r   rc  r   s   ```      @@r;   r   z NumpyNdarrayVariable.var_getattrR  sh   
 	/*,,11/B++m4	 	 ((II**"$'	E *00U;F ))#**7?D+IJJ((#$)G$GAH'..u4GQ4G/GHH$&&V^#)=)=$=A>'..s1v66$&&//:4&AB_$<=>%''r<   c           	          ddl m} |dv rt        |   ||||      S |dk(  rt	        d        |j
                  j                  d ||      gt        | gt        |      z   |       }t        j                  ||      S )Nr   )numpy_method_wrapper)r   r.   r   tobytesz'tobytes is not modelled in torch._numpyr   )rm  rr  r@   r   r   r`   r	  r   r
  r  r   )r:   rl   rd   r.  rB   rr  r)   rC   s          r;   r   z NumpyNdarrayVariable.call_method  s     	1007&r4v>>9CD&		&& &
 vT
2F;

 $**2u55r<   c                 "    t         j                  S rE   )r  ro  r9   s    r;   rJ   z NumpyNdarrayVariable.python_type  s    zzr<   rC  )
r  rE  rF  rG  rK  r   r   r   rJ   rL  rM  s   @r;   r  r  A  sJ    
 
 
;z6 &	6
 -6 
6*r<   r  c                   j     e Zd ZdZddddej
                  j                  f fdZedd       Z	 xZ
S )	UnspecializedPythonVariablezO
    This is a 1-element tensor represents unspecialized python float/int.
    NT	raw_valueneed_unwrapr)   c                B    t        |   |fi | || _        || _        y rE   )r@   rA   rx  ry  )r:   r)   rx  ry  rB   rC   s        r;   rA   z$UnspecializedPythonVariable.__init__  s&     	)&)"&r<   c                 H    t        di t        |j                        ||dS )Nrw  r?   )rv  r  __dict__)rR  tensor_variablerx  ry  s       r;   from_tensor_variablez0UnspecializedPythonVariable.from_tensor_variable  s/     + 
?++,
#
 	
r<   )Tr  rE  rF  rG  rR   rI  rJ  rA   r_  r~  rL  rM  s   @r;   rv  rv    s8    
 37D'XX^^' 
 
r<   rv  c                   `     e Zd ZdZdej
                  j                  f fdZed        Z	 xZ
S )FakeItemVariablezAn unspecialized python variable which prevents access to the underlying raw value.
    This is needed if item is called on a FakeTensor.r)   c                 X    |j                  dd      }t        |   |fi | || _        y )Nry  F)r  r@   rA   ry  )r:   r)   rB   ry  rC   s       r;   rA   zFakeItemVariable.__init__  s-    jj6)&)&r<   c                 >    t        di t        |j                        S r>   )r  r  r|  )rR  r}  s     r;   r~  z%FakeItemVariable.from_tensor_variable  s    A$'?'?"@AAr<   r  rM  s   @r;   r  r    s2    9'ehhnn '
 B Br<   r  c                   F     e Zd Z fdZdee   deeef   def fdZ xZ	S )TensorSubclassVariablec                 2    || _         t        |   |i | y rE   )rK   r@   rA   )r:   rK   r.  rB   rC   s       r;   rA   zTensorSubclassVariable.__init__  s    
$)&)r<   r.  rB   rD  c                 0   t        |      dk(  rwt        |d   t              rdddlm} ddlm}   ||t        | j                  d            | j                  j                        }|j                  ||d   | j                  |      S t        | 5  |||      S )Nr   r   r\   r   r   )r  r   r(   ri   r]   r  r   r   r^   rK   r   r  r@   r   )r:   rl   r.  rB   r]   r   r8  rC   s          r;   r   z$TensorSubclassVariable.call_function  s     t9>ja.A0DJt{{,@Ajj++-H 0??DGTZZ  w$Rv66r<   )
r  rE  rF  rA   r   r   r   r[  r   rL  rM  s   @r;   r  r    s9    *7_-77;C<P7Q7	7 7r<   r  )Gr+  r   r  r   typingr   r   r   r  ModuleNotFoundErrorrP  torch._numpy_numpyrn  torch.fxrR   torch.randomtorch._dynamor   %torch.fx.experimental.symbolic_shapesr   r   r   r	   r
   r   r   r   _trace_wrapped_higher_order_opr   ro   r   r   r   rh   r   r   r^   r   rm  r   r   r   r   r   r   r   r   r   r%  r   constantr    listsr!   gtltgeler  nesupported_tensor_comparison_opsis_is_notsupported_const_comparison_opsr(   r   r  rv  r  r  r?   r<   r;   <module>r     s'       
     +  ! : 9 9 0 
 
 
 " &  
	
++
++
++
++#  ,,oo
++
++	" {
(_ {
(|<
o <
~d> dN
. 
,B~ B7_ 7C  	Bs   E	 	EE