
    Vh                    f   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlmZ ddlZddlZddlmZ ddl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"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZE ddlFmGZG 	 ddlHZI	 ddlKmLZL erddlOmPZP d ZQd ZR G d deE      ZS G d deS      ZT G d deT      ZU G d d      ZVd ZW G d d eS      ZX G d! d"eX      ZY G d# d$eX      ZZ G d% d&eX      Z[ G d' d(eX      Z\ G d) d*      Z] G d+ d,eE      Z^ G d- d.eX      Z_ G d/ d0eX      Z` G d1 d2eX      Za G d3 d4eX      Zb G d5 d6eX      Zcy# eJ$ r dZIY w xY w# eM$ r  eNd      ZLY w xY w)7a  
This module contains variable classes for handling user-defined objects in Dynamo's tracing system.

The key classes are:
- UserDefinedVariable: Base class for representing custom Python objects
- UserDefinedClassVariable: Handles Python class objects/types
- UserDefinedObjectVariable: Fallback class for instance objects, with support for method calls,
  attribute access, and other Python object behaviors.
- Specialized subclasses for common patterns:
  - UserDefinedDictVariable: For dict subclasses
  - UserDefinedTupleVariable: For tuple subclasses
  - FrozenDataClassVariable: Special handling of frozen dataclasses
  - MutableMappingVariable: For collections.abc.MutableMapping subclasses

Dynamo specializes to VariableTracker subclasses like FrozenDataClassVariable if available; if no
subclass qualifies, it falls back to UserDefinedObjectVariable.

These classes help Dynamo track and handle arbitrary Python objects during tracing,
maintaining proper semantics while enabling optimizations where possible.
    N)TYPE_CHECKING)is_typeddict)TracingContext)"is_traceable_wrapper_subclass_type   )	polyfills	variables)create_call_function)$do_not_convert_to_tracable_parameter)handle_observed_exceptionObservedAttributeErrorraise_observed_exceptionunimplemented)GuardBuilderinstall_guard)
AttrSourceCallFunctionNoArgsSourceGetItemSourceRandomValueSource
TypeSourceUnspecializedParamBufferSource)build_checkpoint_variablecheck_constant_argscmp_name_to_op_mappingdict_methodsget_custom_getattrhas_torch_functionis_frozen_dataclassis_namedtuple_clsis_utils_checkpointis_wrapper_or_member_descriptoristypelist_methodsnamedtuple_fieldsobject_has_getattributeproxy_args_kwargstensortype_to_dtypetuple_methodsunpatched_nn_module_getattr   )AttributeMutationExistingValueMutationNewVariableTracker)DefaultDictVariable)
PyTreeSpec)InstructionTranslatorc                 F    | t         j                  t        j                  fv S N)object__setattr__BaseException)vals    T/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/variables/user_defined.pyis_standard_setattrr8   f   s    6%%}'@'@AAA    c                    g }	 ddl m} ddlm} |j	                  |       |j	                  |       t        j                  j                  d      x}r|j	                  |j                         | |v S # t
        $ r Y Kw xY w)Nr   )RaisesContext)WarningsCheckerz!torch.testing._internal.jit_utils)
_pytest.python_apir;   _pytest.recwarnr<   appendImportErrorsysmodulesget&_AssertRaisesRegexWithHighlightContext)ctxf_ctxsr;   r<   ms        r7   is_forbidden_context_managerrH   j   su    F43m$o& KKOO?@@q@a>>?&=  s   .A2 2	A>=A>c                       e Zd ZU eed<   y)UserDefinedVariablevalueN)__name__
__module____qualname__r3   __annotations__ r9   r7   rJ   rJ   |   s    Mr9   rJ   c                       e Zd ZU ee   ed<   d fdZd Zd Zde	fdZ
e ej                  d      d               Ze ej                  d      d	               Ze ej                  d      d
               Zed        Zd ZddZddde	ddf fdZddZ	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 d fdZd Zddde	ddf fdZd fdZ xZS )UserDefinedClassVariablerK   returnNc                 2    t        |   di | || _        y NrP   )super__init__rK   selfrK   kwargs	__class__s      r7   rW   z!UserDefinedClassVariable.__init__   s    "6"
r9   c                     | j                   S r2   rK   rY   s    r7   as_python_constantz+UserDefinedClassVariable.as_python_constant       zzr9   c                     | j                   S r2   r]   r^   s    r7   as_proxyz!UserDefinedClassVariable.as_proxy   r`   r9   c                 N    | j                   j                   d| j                   dS N())r[   rL   rK   r^   s    r7   __repr__z!UserDefinedClassVariable.__repr__   s$    ..))*!DJJ<q99r9   c                  ~    t         j                  t         j                  t         j                  t         j                  hS r2   )torchdevicefinfoiinfoSizerP   r9   r7   _constant_fold_classesz/UserDefinedClassVariable._constant_fold_classes   s*     LLKKKKJJ	
 	
r9   c                  n   t         j                  t         j                  j                  t         j                  j                  h} t        t         d      rC| j                  t         j                  j                  t         j                  j                  h       t        t        j                               | z  S )Nhpu)ri   TensorcudaStreamEventhasattrupdaterp   setr'   keys)_in_graph_class_lists    r7   _in_graph_classesz*UserDefinedClassVariable._in_graph_classes   s     LLJJJJ 

 5%  ''II$$IIOO &++-.1EEEr9   c            	         t        t              D  cg c]X  } t        t        t        |       t              r8t        t        t        |       t              rt        t        |       j                  Z }} t        j                  t        j                  t        j                  t        j                  hj                  |      S c c} w r2   )dirbuiltins
isinstancegetattrtype
issubclassr5   __new__r3   dicttuplelistunion)name
exceptionss     r7   supported_c_new_functionsz2UserDefinedClassVariable.supported_c_new_functions   s    
 H
'(D14878T2MB Hd#++

 
 NNLLMMLL	

 %

	
s   AB>c                 .    | t         j                         v S r2   )rR   r   r]   s    r7   is_supported_new_methodz0UserDefinedClassVariable.is_supported_new_method   s     0JJLLLr9   c                 :    | j                   | j                         v S r2   )rK   rn   r^   s    r7   can_constant_fold_throughz2UserDefinedClassVariable.can_constant_fold_through   s    zzT88:::r9   txr0   c                    |j                   j                  j                  | |      rC|j                   j                  j                  | |d      }t	        |t
        j                         S || j                  j                  v S NT
deleted_ok	outputside_effectshas_pending_mutation_of_attr	load_attrr~   r	   DeletedVariablerK   __dict__rY   r   keymutated_attrs       r7   has_key_in_generic_dictz0UserDefinedClassVariable.has_key_in_generic_dict   i    99!!>>tSI9911;;D#RV;WL!,	0I0IJJJdjj))))r9   r   r-   c                 ,   ddl m}m} | j                  t	        | j                  |      nd }|dk(  r%|j                  | j                  j                        S |dk(  r%|j                  | j                  j                        S |dk(  rd|i}t        j                  | |fi |S | j                  t        j                  t        j                  hv r|dk(  rt        	| =  ||      S 	 t!        j"                  | j                  |      }|dk(  r%t*        j-                        rt        	| =  ||      S |t.        v r2t1        t2        j4                        st        j                  | ||	      S t1        t6              r0t9        j:                  ||j=                  | j                        |      S t1        |t>              rwt1        |j@                  tB              r;t        jD                  |j@                  jF                        jI                  || gi       S t        jJ                  |j@                  | |	      S t1        |t2        jL                        r3|j=                  d | j                        }t9        j:                  |||      S |r]t!        jN                  |      stP        jR                  d
k\  r5|dk(  r0t9        j:                  ||j=                  | j                        |      S |jU                  |      r|j                  |      S t1        |tV        jX                        r ||      S |t[        | j                  di       v s>| j                  j\                  j_                  d      s| j                  j\                  dk(  r|rt9        j:                  |||      S |r7t!        j`                  |      s"tc        |      st9        j:                  |||      S t        	| =  ||      S # t$        $ r2 t'        | j                        t&        u rt)        t$        |       nd }Y w xY w)Nr*   )ConstantVariableEnumVariablerL   rN   r   sourcefromkeysr   r   )      __mro__ztorch.ri   )2 r   r   r   r   createrK   rL   rN   r	   GetAttrVariablecollectionsOrderedDictdefaultdictrV   var_getattrinspectgetattr_staticAttributeErrorr   r   rR   r   r   r~   typesFunctionTypestaticmethodr-   build__get__classmethod__func__propertyUserFunctionVariablefgetcall_functionUserMethodVariableClassMethodDescriptorTypeismemberdescriptorrA   version_info
is_literalenumEnumr   rM   
startswithismethoddescriptorr!   )
rY   r   r   r   r   r   optionsobjfuncr[   s
            r7   r   z$UserDefinedClassVariable.var_getattr   sV   426++2IDKK.t:#**4::+>+>??^##**4::+B+BCCZ(G,,T4C7CC JJ;22K4K4KLL
"7&r400	((T:C 9!9!Q!QRU!V7&r400))*S%BTBT2U,,T4GGc<("((S[[-DfMM[)#,,1 55cll6G6GHVV  //d6RRU<<= ;;tTZZ0D"((T6::))#.  G+	0A&,,RTZZ1H&QQ&&s+#**3//TYY'$$WTZZR88JJ!!,,X6zz$$/&,,Rf== ..s33C8"((S&99w"2t,,i  	DJJ4'(< 	s   $ O 7PPc                 B  	
 ddl m} |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      fd} ||i |\  	
	
fd}t        j                  |      S )	aj  
        functional: input, target, weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean',
        label_smoothing=0.0

        non functional ctor: weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean',
        label_smoothing=0.0

        non functional loss call: input, target, optional_output
        r*   r   Nimeang        c                     | |||||fS r2   rP   )weightsize_averageignore_indexreduce	reductionlabel_smoothings         r7   normalize_argszIUserDefinedClassVariable._call_cross_entropy_loss.<locals>.normalize_args(  s       r9   c                     ddl m}  | j                  j                  dt        j
                  j                  j                  gt        | |	gi              S )Nr*   wrap_fx_proxyr   r   proxy)	builderr   r   create_proxyri   nn
functionalcross_entropyr&   )
inputtargetr   r   r   
reduce_argr   r   r   r   s
      r7   fake_cross_entropy_losszRUserDefinedClassVariable._call_cross_entropy_loss.<locals>.fake_cross_entropy_lossB  sq    . ,bii,,#HH''55 '!""((&%+	  r9   )r   r   r   r	   LambdaVariable)rY   r   argsrZ   r   r   r   r   r   r   r   r   r   s    `     @@@@@@r7   _call_cross_entropy_lossz1UserDefinedClassVariable._call_cross_entropy_loss  s     	' $**40)006)006#**40&--f5,33C8	0 D+F+	
	 	0 ''(?@@r9   c                 >   |dk(  rt        |      dk(  r|sd| j                  j                  vrh| j                  }| j                  r!t	        | j                  d      }t        |      }t        j                  || j                  j                         |      S | j                  t        j                  t        j                  hv r,|dk(  r'ddlm}  |j                  || j                  g|i |S |dk(  rLt        |      dk(  r>t        |d   d      r/t!        j"                  | j                  |d   j                  k(        S |dk(  rLt        |      dk(  r>t        |d   d      r/t!        j"                  | j                  |d   j                  k7        S |d	k(  r| j                  t        j                  u rt%        |d   t&              rm|d   j                  t        j                  u rNt        |      dk(  sJ t        |      dk(  sJ t!        j(                  i t        j                  t+               
      S |d	k(  rVt&        j-                  | j                  j.                        r-|j0                  j2                  j5                  | |d   |dd        S t6        | q  ||||      S )N__subclasses__r   r   r*   )BuiltinVariable__eq__rK   __ne__r   mutation_type)lenrK   r   r   r   r   r-   r   r   r   r   r   builtinr   call_custom_dict_fromkeysru   r	   r   r~   rR   ConstDictVariabler,   r   r   r   r   track_new_user_defined_objectrV   call_method)rY   r   r   r   rZ   r   r   r[   s          r7   r   z$UserDefinedClassVariable.call_method\  sI    $$D	Q 

(;(;;[[F{{#DKK1AB1&9"((TZZ-F-F-H&QQJJ;22K4K4KLL
"0<?<<DJJ!%)/  X#d)q.WT!Wg5N--djjDGMM.IJJX#d)q.WT!Wg5N--djjDGMM.IJJI

k55547$<=Q!8!88t9>!>v;!###..K++;K;M  Y#;#S#SJJ$
 99))GGQQR 
 w"2tT6::r9   c                 N   ddl m} ddlm} t	        ||      }| j                         r|rt        j                  j                   | j                         |D cg c]  }|j                          c}i |j                         D 	ci c]  \  }}	||	j                          c}	}      S | j                  t        j                  j                  u r| j                  |||      S | j                  t         j"                  u rddlm}
  |
       S | j                  t(        j*                  u r8|j-                  t/        j0                  |t2        j4                        | g||      S | j                  t(        j6                  u rNt9        |      dk  r@t;        j<                  |d         r(t;        i t(        j6                  |d   t?                     S tA        | j                        rN| j                  jB                  rtE        d        t        jF                  tH              jJ                  |g|i |S | j                  t(        jL                  u rLt        j                  j                  d       }|st9        |      dk(  rg }nt9        |      dk(  r)|d   jO                  |      r|d   jQ                  |      }nt9        |      dk(  r.|d   jO                  |      r|d   jQ                  |      }|d   }n}tE        d	       nqtS        |      d
k(  rX|d   }t9        |      dk(  rg }t9        |      dk(  r)|d   jO                  |      r|d   jQ                  |      }ntE        d       ntE        d       t        jT                  jW                  |t?                     S | j                  tX        jZ                  u rt        j\                  |d         S | j                  t^        j`                  u r9|stE        d       |d   }|dd  }t        jb                  je                  |||      S | j                  tf        jh                  u r"|s t        jj                  j                  ||      S | j                  t        jl                  jn                  u rV|sTt9        |      dk(  rF|d   jq                         sJ t        jr                  j                  ||d   j                               S tu        tw        | j                        tv              rty        | j                  d      rty        | j                  d      r| j{                         r|j}                  | j                        r| j~                  r|t        | j                        sfddl1mA}mB} | j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  fv rtE        | j                   d       | j                  t         j                  u r_t        |d   |      rPt        j                  j                  j                  stE        d        ||d   |d   j~                        g|dd  z   }|j                  j                   j                  t        jF                  t              | |      }|j                  |d||       |S t        | j                        rOt        | j                        }| j                  j                  dk(  r)t9        |      dk(  sJ |rJ |d   jQ                  |      }n| j                  j                  }t        |      }|j                  d gt9        |      t9        |      z
  z         i }t        ||      D ]6  \  }}|	||v r||   }n||v sJ t/        j0                  |||         }|||<   8 |j                         D ]  \  }}||v sJ |||j                  |      <   ! t        d |D              sJ t        j                  || j                        S t        | j                        r| j{                         rt        j                  | j                        }t        |      }|j                  d gt9        |      t9        |      z
  z         i }t        ||      D ]  \  }}|	|j                  |v r||j                     }n|j                  s4|j                  t        j                  ur!t/        j0                  ||j                        }nQ|j                  t        j                  ur4t/        j0                  ||j                        }|j                  |g i       }n|||j                  <    |j                  |       |j                  j                   j                  t        jF                  t              | |      }|j                  |d||       |S | j                  | j                         v st        | j                        rt        r| j                  t        v rt9        |      dk(  rt        |d   t        j                        r{t9        |d   j                        dkD  r`t        d |d   j                  D              rA || |j                  j                  dt        j                  gt        ||             }|g} || |j                  j                  d| j                  gt        ||             }|S | j                  t        j                  u r]t9        |      dk(  r-t        |d   t        j                        r|d   j                  } nd } t        j                  |       }!t        |!      S | j                  t        j                  u rCt9        |      dk(  r5t        |d   t        j                        rt        j                  |d         S |j}                  | j                        rX| j~                  rLt               5  |j-                  t/        j0                  |t2        j                        | g||      cd d d        S t        "|   |||      S c c}w c c}	}w # 1 sw Y   &xY w)Nr   )SideEffectsr*   r   )NullContextVariabler   r   z*TypedDict with optional keys not supportedz*deque() with more than 2 arg not supported)maxlenr   z*deque() with more than 1 arg not supportedz)deque() with invalid kwargs not supported)r   r   zfunctools.partial malformed)r   keywords	__enter____exit__)BaseUserFunctionVariable3FunctionDecoratedByContextlibContextManagerVariablez not supported. This may be due to its use of context-specific operations that are not supported in Dynamo yet (i.e. Exception handling)zcontextlib.contextmanagerr   rW   ztorch.return_typesc              3   $   K   | ]  }|d u 
 y wr2   rP   .0xs     r7   	<genexpr>z9UserDefinedClassVariable.call_function.<locals>.<genexpr>C  s     8Q1D=8s   c              3   P   K   | ]  }t        |t        j                           y wr2   )r~   r	   TensorVariabler   s     r7   r   z9UserDefinedClassVariable.call_function.<locals>.<genexpr>t  s     WA
1i&>&>?Ws   $&r   r   )yr   r   r   r   r   r   r	   r   r   r_   itemsrK   ri   r   CrossEntropyLossr   
contextlibnullcontextctx_managerr   r   r   inline_user_function_returnr-   r   r   construct_dictr   r   r.   is_supported_argr,   r   __optional_keys__r   r   r   	call_dictdequehas_force_unpack_var_sequenceforce_unpack_var_sequencer   listsDequeVariableweakrefrefWeakRefVariable	functoolspartial	functionsFunctoolsPartialVariablewarningscatch_warningsCatchWarningsCtxManagerVariablerr   rj   is_python_constantCUDADeviceVariabler   r   ru   is_standard_new"cls_supports_mutation_side_effectsr   rH   r   r   _AsyncGeneratorContextManagerclosingredirect_stdoutredirect_stderrsuppress	ExitStackAsyncExitStack_GeneratorContextManagerr~   _dynamoconfigenable_trace_contextlibr   r   r3   r   r   r$   rM   _field_defaultsr   extendzipindexallNamedTupleVariabler   dataclassesfieldsr   initdefaultMISSINGdefault_factoryr   rv   rz   r   npr'   ListVariabler   stackr&   randomRandomRandomVariabler   MappingProxyTyper   MappingProxyVariabler   %instantiate_user_defined_class_objectrV   )#rY   r   r   rZ   r   r   constant_argsr   kvr   r   r  fn	rest_argsr   r   cm_objr1  field_defaultsvar_tracker_kwargs
field_namevar_tracker	field_varr   rK   default_kwargsfield
factory_fnvarstackedtensor_variableseedrandom_objectr[   s#                                     r7   r   z&UserDefinedClassVariable.call_function  s
    	/*+D&9))+--44)'')6:;a**,;=C\\^LTQq!..00L  ZZ58844400T6BBZZ:1118&((ZZ;22211%%b)*B*BC  JJ+111D	Q#44T!W=&''Q.0	  $**%zz++JK<9,,T2<<RQ$Q&QQZZ;,,,//66t<Ft9>EY!^Q(M(Mb(Q G==bAEY!^Q(M(Mb(Q G==bAE!!WF!"NOv+-)t9>Et9>d1g&K&KB&O G==bAE!"NOIJ??00f4D4F 1   ZZ7;;&,,T!W55ZZ9,,,;<aBQRI &&??V @   ZZ82224<<CCBOOZZ5::,,,VD	Q7--/////66r47;U;U;WXXtDJJ'.

K 

J $$&>>tzzJ0< zz88""****##$$))  zzl #; ; zzZ@@@ZQ1F }}++CC!"=> HQQ H	 YY++II))&1F
 r:tV<Mtzz*&tzz2Fzz$$(<<4yA~%~!!zQ99"=!%!;!;T
dVs6{SZ'?@A%'"/265/A 	C+J"*%/(.z(:I#-#??#?(7(=(= "N:$>)I :C*:6	C $6#;#;#= 6KD%6>)>05E&,,t,-6 8%8888//tzzBB ,1E1E1G ''

3FJELL$3v;U#;<=N&)&%&8 ="{&zzV+&,UZZ&8$zz$ ==0C0CC*9*?*?EMM*RK"22+:M:MM)8)>)> "E$9$9*J +5*B*B2r2*NK %1<N5::.)=* MM.)))((FF))&14C OOB
D&9JJJ$00221$**=
 JJ"55INtAw	(>(>?Q&*WaWW (0"))00' +48  y+,bii,,#JJ 'tV4O #"ZZ6==(4yA~*T!Wi6P6P"QAw}}"MM$/M!-00JJ%000D	Q47I$?$?@ 11$q'::;;DJJGDKK57 55#))IKK MDM  w$Rv66I <Lv s   rr<8rr$c                     t        j                  | j                  dd      }t        |t              r|j
                  }|t        j                  u S )z"Check for __new__ being overriddenr   N)r   r   rK   r~   r   r   r3   r   )rY   new_fns     r7   r  z(UserDefinedClassVariable.is_standard_new  s<    ''

ItDfl+__F''r9   c                 
   | j                   rgt        | j                   |      }t        |j                  t        j
                               t        j                  t        | j                  |            S t        | -  ||      S r2   )r   r   r   
make_guardr   HASATTRr	   r   ru   rK   rV   call_obj_hasattr)rY   r   r   r   r[   s       r7   rW  z)UserDefinedClassVariable.call_obj_hasattr  sc     ;;T2F&++L,@,@AB--gdjj$.GHHw'D11r9   c                 Z    |dk(  r| j                   j                  S t        |   ||      S )NrL   )rK   rL   rV   const_getattrrY   r   r   r[   s      r7   rY  z&UserDefinedClassVariable.const_getattr  s-    :::&&&w$R..r9   rS   Nr   r0   r   list[VariableTracker]rZ   dict[str, VariableTracker]rS   r-   r   r0   r   r^  rZ   r_  rS   r-   )rL   rM   rN   r   r3   rO   rW   r_   rb   strrg   r   r  	lru_cachern   rz   r   r   r   r   r   r   r   r   r  rW  rY  __classcell__r[   s   @r7   rR   rR      sn   <:# : Y
  
 YF  F  Y   M M
;*N-5 N-S N-EV N-`>A@2; &	2;
 -2; 
2;hS7#S7 &S7 -	S7
 
S7j(2)2142	2/ /r9   rR   c                   ,    e Zd Zed        Zed        Zy)!UserDefinedExceptionClassVariablec                     | j                   S r2   r]   r^   s    r7   rB  z$UserDefinedExceptionClassVariable.fn      zzr9   c                     | j                   S r2   r]   r^   s    r7   python_typez-UserDefinedExceptionClassVariable.python_type  rh  r9   N)rL   rM   rN   r   rB  rj  rP   r9   r7   rf  rf    s(       r9   rf  c                       e Zd Zy)NO_SUCH_SUBOBJNrL   rM   rN   rP   r9   r7   rl  rl        r9   rl  c                    ddl m} |D cg c]  }|j                          }}|j                         D ci c]  \  }}||j                          }}}t	        | j
                  j                        } ||i |}	t        |      }
| j
                  j                  j                  |||f        || |
      j                  |	      S c c}w c c}}w )Nr*   )VariableBuilder)
r   rp  r_   r  r   r   random_callsr   r?   wrap_unspecialized_primitive)r   rB  r   rZ   rp  r   r@  rA  random_call_indexexample_valuer   s              r7   call_random_fnru    s    (,01qA  "1D14:LLNCDAqa%%''CFCBII223''M01FII!!2tV"45 2v&CCMRR 2Cs
   CCc                   r    e Zd ZdZddhej
                  Zddddd	 d% fdZdefdZdefd	Z	d
 Z
d Z fdZ fdZd Zd Zd&dZe ej&                  d      d               Zd Z	 	 	 	 	 	 d' fdZd&dZd Z fdZd Zd Z	 	 	 	 	 	 	 	 d( fdZd Zd Zd Zd&d Z d! Z!d&d"Z"ddd#eddfd$Z# xZ$S ))UserDefinedObjectVariablez_
    Mostly objects of defined type.  Catch-all for something where we only know the type.
    rK   
value_typeN)rx  
cls_sourcebase_cls_vt	init_argsrS   c                   t        |   di | || _        |xs t        |      | _        t        |      | j                  u sJ || _        |&| j                  t        | j                        | _        || _        || _	        y rU   )
rV   rW   rK   r   rx  ry  r   r   rz  r{  )rY   rK   rx  ry  rz  r{  rZ   r[   s          r7   rW   z"UserDefinedObjectVariable.__init__  sy     	"6"
$3UE{doo---$$++"9(5DO '"r9   c                     | j                   j                  }|dv r t        t        | j                  dd             }| j
                  j                   d| dS )N)builtin_function_or_methodgetset_descriptormethod_descriptormethodrL   re   rf   )rx  rL   ra  r   rK   r[   )rY   inners     r7   __str__z!UserDefinedObjectVariable.__str__  sU    (( 
 
 

J=>E..))*!E7!44r9   c                 b    | j                   j                   d| j                  j                   dS rd   r[   rL   rx  r^   s    r7   rg   z"UserDefinedObjectVariable.__repr__  +    ..))*!DOO,D,D+EQGGr9   c                      yNFrP   rY   r   s     r7   is_underlying_vt_modifiedz3UserDefinedObjectVariable.is_underlying_vt_modified  s    r9   c                     | j                   S r2   rx  r^   s    r7   rj  z%UserDefinedObjectVariable.python_type
  s    r9   c                     dd l mc m} |j                  | j                        rJ| j
                  >t        | j
                  j                  t        j                               | j                  S t        | 1         S Nr   )torch.utils._pytreeutils_pytreeis_constant_classrx  r   r   rU  r   EQUALS_MATCHrK   rV   r_   )rY   pytreer[   s     r7   r_   z,UserDefinedObjectVariable.as_python_constant  s\    ,,##DOO4{{&dkk44\5N5NOPzz! w)++r9   c                     | j                   r>t        | j                   j                  t        j                               | j
                  S t        |          S r2   )r   r   rU  r   ID_MATCHrK   rV   guard_as_python_constant)rY   r[   s    r7   r  z2UserDefinedObjectVariable.guard_as_python_constant  s?    ;;$++001F1FGH::w/11r9   c                 .    t        |       s
J d|         y )Nz<calling torch function on object without __torch_function__ )r   r^   s    r7   torch_function_checkz.UserDefinedObjectVariable.torch_function_check  s!    !$' 	
J4&Q	
'r9   c                 j    | j                          ddlm}  ||| j                  | j                        S )Nr*   )build_torch_function_fn)r  torch_functionr  rK   r   )rY   r   r  s      r7   get_torch_fnz&UserDefinedObjectVariable.get_torch_fn#  s(    !!#;&r4::t{{CCr9   r   r0   c           	      z    | j                          ddlm}m}  || |||       | j	                  |      ||||      S )Nr*   )_get_subclass_type_varcall_torch_function)r  r  r  r  r  )rY   r   rB  r   r   rZ   r  r  s           r7   r  z-UserDefinedObjectVariable.call_torch_function)  sE    !!#O""2t,b!
 	
r9   c                      t         j                   t         j                  t         j                  t         j                  h} | S r2   )r9  randint	randrangeuniform)fnss    r7   _supported_random_functionsz5UserDefinedObjectVariable._supported_random_functions8  s0     MMNNNN	
 
r9   c                     |t        | j                  di       vr*	 t        j                  t	        | j                        |      S y # t
        $ r Y y w xY w)Nr   )r   rK   r   r   r   r   )rY   r   s     r7   _maybe_get_baseclass_methodz5UserDefinedObjectVariable._maybe_get_baseclass_methodC  sT    wtzz:r::--d4::.>EE  " s   (A 	AAr-   c                    ddl m}m} | j                  |      }|=|t        j
                  u r|j                  d       S t        |      s$t        | j                  t        j                        r | j                  |g|i |S |t        j                  u rot        |      dk(  ra|s_|d   }t        |t              s#t         j                  j                  t"              S |j                  | j                  |j                  u       S t$        j&                  j(                  j*                  r/t        | j                  t,        j.                        rt1        d       t        |t,        j2                        rx| j4                  d nt7        t7        | j4                  d      |      }	ddlm}
 |t$        j<                  j>                  j
                  u r|
} ||| |	      jA                  |||      S |tB        jD                  u r]| j4                  rQ|sO|sMtG        | j4                  jI                  tJ        jL                                |t        | j                              S tN        |   ||||      S )	Nr*   )r   r   r   z,Generator as graph argument is not supportedr[   r   unpatched_nn_module_initr   ))r   r   r   r  r3   rW   r   r8   r~   rK   	threadinglocalmethod_setattr_standardr   r   rw  r	   NotImplementedri   r'  r(  "enable_faithful_generator_behaviorr   GeneratorTyper   r   r   r   mutation_guardr  r   Moduler   r   __len__r   rU  r   SEQUENCE_LENGTHrV   r   )rY   r   r   r   rZ   r   r   r  otherr   r  r[   s              r7   r   z%UserDefinedObjectVariable.call_methodK  s    	;11$7('..t44"6*jY__.U3t33BHHHH&3t9>&Q!%)BC$55<<^LL (..tzzU[[/HII}}##FF:

E//L LM &%"4"45 {{* #Jt{{K$H$O  FUXX__5555F)&$vFTTf  %$++tvdkk44\5Q5QRS'DJJ88w"2tT6::r9   c                 D   	 |j                         }|j                  j                  j                  |       st        d|  d| d       |j                  j                  j                  | ||       t        j                  d       S # t        $ r t        d|        Y w xY w)Nznon-const setattr name: zsetattr(z, z, ...))	r_   NotImplementedErrorr   r   r   is_attribute_mutation
store_attrr	   r   )rY   r   r   rK   s       r7   r  z1UserDefinedObjectVariable.method_setattr_standard  s    	=**,D yy%%;;DAHTF"TF&9:
		))$e<))$// # 	=4TF;<	=s   B BBc                     t        t        j                  | j                  dd              xr% t	        | j                  t
        j                         S )Nr4   )r8   r   r   rK   r~   r  r  r^   s    r7   needs_slow_setattrz,UserDefinedObjectVariable.needs_slow_setattr  sD    &""4::}dC
 
 :TZZ99	:r9   c           
      H   | j                   r| j                  d      t        j                  u r| j                  d      t        j                  u r| j                  d      t        j
                  u rt        | j                   j                  t        j                               t        t        | j                              D cg c]D  }t        j                  j                  | j                  |   t!        | j                   |            F c}S t"        | I  |      S c c}w )N__iter__r  __getitem__r   )r   r  r   r  r  r  r   rU  r   r  ranger   rK   r	   LazyVariableTrackerr   r   rV   unpack_var_sequence)rY   r   r@  r[   s      r7   r  z-UserDefinedObjectVariable.unpack_var_sequence  s    KK00<M00;t||K00?4CSCSS$++001M1MNO s4::/
 	 --44JJqM(a8 5   w*2..s   A	Dc                 *    | j                  |dg i       S )N__next__)r   rY   r   s     r7   next_variablez'UserDefinedObjectVariable.next_variable  s    JB77r9   c                 Z    	 | j                   | j                         v S # t        $ r Y yw xY wr  )rK   r  	TypeErrorr^   s    r7   is_supported_randomz-UserDefinedObjectVariable.is_supported_random  s1    	::!A!A!CCC 		s    	**c                    | j                         rJt        d |D              r8t        d |j                         D              rt        || j                  ||      S t        | j                  t        j                        r| j                  j                  }| j                  j                  }|t        j                  j                  j                  j                  u r]t        j                   j#                  |j$                        r4|s2|s0t        j                   |j$                        j'                  |||      S |t        j(                  j*                  j,                  j                  u r|j$                  t        j(                  j*                  j,                  u rPt        j.                  |j0                        }t        j                   |j$                        j'                  ||g|      S | j2                  t5        d       t7        | j2                  d      }t9        j:                  |||      }t7        | j2                  d      }	t9        j:                  |||	      }
|j'                  ||
g|z   |      S t=        | j                        rR| j2                  r2t?        | j2                  jA                  tB        jD                               | jG                  |d||      S tH        | M  |||      S )Nc              3   <   K   | ]  }|j                           y wr2   r  )r   r@  s     r7   r   z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     9qA((*9   c              3   <   K   | ]  }|j                           y wr2   r  )r   rA  s     r7   r   z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     DqA((*Dr  z9Sourceless UserDefinedObjectVariable method not supportedr   __self____call__)%r  r.  valuesru  rK   r"   r   
MethodTyper   r  ri   r  _contextlib_DecoratorContextManagercloner	   TorchCtxManagerClassVariableis_matching_clsr[   r   autograd	grad_modeinference_moder   moder   r   r   r-   r   callabler   rU  r   FUNCTION_MATCHr   rV   )rY   r   r   rZ   r   r   rM  func_srcfunc_varobj_srcobj_varr[   s              r7   r   z'UserDefinedObjectVariable.call_function  s6    $$&9D99DFMMODD!"djj$??DJJ 0 01::&&D**%%C//HHNNN::JJMM  ==MM-D&12
 00??EEEMMU^^%=%=%L%LL  00: ==MM-SE623 {{"O "$++z:H&,,Rx@H j9G%++BW=G))"wi$.>GGdjj!{{dkk44\5P5PQR##B
D&AAw$Rv66r9   c                 ,    t        | j                        S r2   )r   rK   r^   s    r7   _check_for_getattrz,UserDefinedObjectVariable._check_for_getattr  s    !$**--r9   c                     t        |t              syt        |j                  t        j                        xs= t
        j                  j                  j                  j                  |j                        S r  )
r~   r   r   r   BuiltinFunctionTyperi   _Cr'  r  is_instancemethod)rY   subobjs     r7   _is_c_defined_propertyz0UserDefinedObjectVariable._is_c_defined_property  sV    &(+ KK22
 CXX##55fkkB	Cr9   c                    t        j                  | j                  |t              }dd l}t        | j                        s|t        u sit        ||j                        sSt        j                  |      r|| j                  j                  v s&| j                  |      st        j                  |      r| j                  j                  |      }|S t        | j                        r|t        u rt        |S r  )r   r   rK   rl  _collectionsr%   r~   _tuplegetterr   	__slots__r  isgetsetdescriptor__getattribute__r   )rY   r   r  r  s       r7   _getattr_staticz)UserDefinedObjectVariable._getattr_static  s    ''

D.I 'tzz2n$11 **62ttzz?S?S7S**62)) ZZ006F  %TZZ0V~5M ! r9   c                    |j                   j                  j                  | |      rC|j                   j                  j                  | |d      }t	        |t
        j                         S || j                  j                  v S r   r   r   s       r7   r   z1UserDefinedObjectVariable.has_key_in_generic_dict  r   r9   c                 p   | j                   J t        t        | j                        j                        D ]O  \  }}||j
                  v st        | j                   d      }t        ||      }t        |d      }t        ||      c S  t        d| dt        | j                        j                          y )Nr   r   zCould not find z in )	ry  	enumerater   rK   r   r   r   r   r   )rY   r   idxklass
mro_sourceklass_sourcedict_sources          r7   get_source_by_walking_mroz3UserDefinedObjectVariable.get_source_by_walking_mro  s    ***#D$4$<$<= 	8JCu~~%'C
,Z=(zB %[$77	8 	vT$tzz2B2J2J1KLMr9   c                 t   ddl m} ddl m} | j                  rt	        | j                  |      nd }t        | j                        rt        j                  t        | j                        d      }| j                  rt	        | j                  d      }	 t        j                  ||       j                  ||j                  |      gi       S |j                   j"                  j%                  | |      rT|j                   j"                  j'                  | |d      }t)        |t        j*                        rt-        t.        |       |S |d	k(  rd
|i}	t        j0                  | |fi |	S |dk(  r3|}
|
| j2                  }
d
|
i}	t5        t        | j                        fi |	S 	 | j7                  |      }ddl0m1} |tP        jR                  jT                  jd                  u r|}t)        |tf              rk| j                  r,t	        t	        | j                  d      |      }t	        |d      }t        j                  |jh                  | |      j                  |g i       S t)        |tj              rV|jm                  | j                        }|"|jo                  |      jq                  ||      S  |jo                  |      |      S t)        |tr              r2t        j                  |jt                  | jw                  |d      |      S t)        |t<        jx                        r3|jm                  | j                  d       }t{        j|                  |||      S t        j~                  |      rt        |jl                        sd }d }| j2                  r5| j                  |      }t	        |d      }t{        j|                  |||      }nt        |      }t5        t        | j                              }t        j                  |jl                  jt                  ||      j                  || |gi       S t)        |t<        j>                        sJt)        |t<        j                        rt)        | j                  tP        jR                  jT                        rt        | j                  |      }||u r;t        |d      r/|j                  }|}|rt	        |d      nd }||u rt        |d      r/t)        |t<        j                        r|j                  | j                  urtt)        |jt                  t<        j>                        st_        d|        ddlHmI} |j                  ||j                        }t        j                  |jt                  |      S |jt                  }nt)        |t<        j>                        sJ |}t        j                  |      rt        j                  || |      S t        j                  |      rRt        |      rt        |      S |"|jo                  |      jq                  ||      S  |jo                  |      |      S tP        j                  j                  j                  st)        | t        j                        r]|r[t)        | t        jB                        rA|j                   j                  s+|dv rt        | j                  |      }| j                  |      }|t8        urt        |      rd
|i}	t        j0                  | |fi |	S |r t        j                  j                  ||      S | j2                  it        j                  | j                  j                  |t8              }||u r6t	        | j2                  |      }t        j                  j                  ||      S t{        j|                  ||      S t-        t.        |       y # t        $ r t        |       Y w xY w# t.        $ r t8        }| j;                         }t)        |t<        j>                        r|t@        u rt)        | t        jB                        rtE        | j                  jF                  tH              r[tE        | j                  jJ                  tH              r7tE        | j                  jL                  tH              r| jO                  ||      }n]d }| j                  rt	        | j                  d      }t        j                  || |      j                  ||j                  |      gi       }| j                  ry|tP        jR                  jT                  jV                  u rSt)        |t        jB                  t        jX                  f      r)|j[                  t	        | j]                         |             |cY S |t_        d       Y w xY w)Nr   )trace_rulesr*   r   r  r   Tr   r   r   r[   __getattr__z)UserDefined with non-function __getattr__r  r   r   _torchdynamo_inlinez7Found a method whose __func__ is not of FunctionType - )"SourcelessUserDefinedObjectBuilder)_buffers_parameters)Wr   r  r   r   r   r%   rK   r   r   r   r	   r   r   r   r   r   r   r   r   r   r~   r   r   r   r   ry  rR   r  rl  r  r   r   r)   UnspecializedNNModuleVariabler"   r   r   r  _modules manually_trace_nn_module_getattrri   r   r  r  NNModuleVariableset_nn_module_stack_sourceget_nn_module_stack_sourcer   r  r  rW   r   r   r   r   lookupcreate_with_sourcer   r   r   r   r-   r   r   r!   r  rw  r  r   ru   r  r  r   r  ismethod
isfunctionr    r   r'  r(  inline_inbuilt_nn_modulesFSDPManagedNNModuleVariableexportr   _wrap_sourcer  r[   )rY   r   r   r  r   r   getattribute_fn
new_sourceresultr   ry  r  
getattr_fnoutr  r   descriptor_sourcedescriptor_get_sourcedescriptor_var	owner_vardynamic_subobjr  	object_vtsubobj_from_classsrc_from_classs                            r7   r   z%UserDefinedObjectVariable.var_getattr#  s5   "&26++DKK.4"4::.%44TZZ "4O {{'5GH
. 33#T*-%5%<%<T%B$CRHI 99!!>>tTJYY++55dDT5RF&)";";<(<M:(G,,T4C7CC
 ;J!!__
,G+D,<HHH+	K))$/FX 	>UXX__----Ffh'{{#Jt{{K$H$O#FF3//T&mBB'( ->>$**-D!"))$/BB4PVBWW/{))$/55,//!1!1"k!B6   ? ?@>>$**d3D"((T6::''/8WNN9

 !%$(! %)$B$B4$H!(23Di(P%!0!6!6r6CT!U ";6!B 1djj1ABI//''@UmBy 1267  2 23vu//04::uxx7
 %TZZ6N F*wv?T/U33!'FLF,ABRV !F*wv?T/U
 &%"2"23!**$**<%n&=&=u?Q?QR%UVdUef L !C I IN33!I %77&//  !&%*<*<===/ 33D$vNN##N3&t,4FCC'&--d3FFV G   4;--d3D99 $$>>dI$I$IJ4!H!HI II$$ 227TJ&&v.F'.v6#V, 00tGwGG 44;;FFKK ??.(/(>(>

,,dN)% )F2)3DOOT)J(<<CC-~   ',,R88 	!4e * .)"-.4  )	K#F002J*e&8&89 "=="4)P)PQtzz55t<tzz22D9tzz22D9 ??DIC!%J{{%/]%K
#66"D#mB)9)@)@)F(GL  ;;:1L1L#L!%CC%66 66&t'F'F'H$O 
'IJS)	Ks+   8_	 _$ 	_! _!$G f7&f76f7r   c                    | j                   r<t        t        | j                   |      j                  t        j
                               	 | j                  ||      }t        j                  j                  t        |t        j                               S # t        $ r- t        |       t        j                  j                  d      cY S w xY wr  )r   r   r   rU  r   rV  r   r	   r   r   r~   r   r   r   )rY   r   r   var_vts       r7   rW  z*UserDefinedObjectVariable.call_obj_hasattr  s     ;;4;;-889M9MN	<%%b$/F--44vy'@'@AA  & 	<%b)--44U;;	<s   
A	B 3C
	C
r[  r\  r]  r`  )%rL   rM   rN   __doc__rJ   _nonvar_fieldsrW   ra  r  rg   r  rj  r_   r  r  r  r  r   r  rb  r  r  r   r  r  r  r  r  r   r  r  r  r   r  r   rW  rc  rd  s   @r7   rw  rw    sR    |Q.A.P.PQN # 
#4	5 	5H# H	,2

D
 Y  3; &	3;
 -3; 
3;j	0:
/"827#27 &27 -	27
 
27h.
C@*Nb5H<)<14<	<r9   rw  c                   V     e Zd Zed        Zdd	 fdZd Zd Zd
 fdZde	fdZ
 xZS )FrozenDataClassVariablec           	      0   ddl m} t        |      sJ i } ||      D ]i  }t        ||j                        st        j                  | t        ||j                        |xr t        ||j                              ||j                  <   k t        |||      S )Nr   r1  )r1  r   )
r0  r1  r   ru   r   r-   r   r   r   r!  )r   rK   r   r1  	field_maprK  s         r7   r   zFrozenDataClassVariable.create  s    &"5)))	E] 	Euejj)(7(=(=E5::.=z&%**=)	%**%	 'uYvNNr9   rS   c                 <    t        |   |fi | |i }|| _        y r2   )rV   rW   r1  )rY   rK   r1  rZ   r[   s       r7   rW   z FrozenDataClassVariable.__init__+  s&    )&)>Fr9   c                    ddl m} dd lmc m} t        | j                  |j                  |j                  |j                  f      st        d      g }i } || j                        D ]d  }|j                  s| j                  |j                     j                         }t        |dd      r|||j                  <   T|j                  |       f | j!                         } ||i |S )Nr   r#  z@currently can't reconstruct arbitrary frozen dataclass instanceskw_onlyF)r0  r1  r  r  r  r"   rK   TreeSpecLeafSpecConstantNoder  r2  r   r_   r   r?   rj  )rY   r1  r  r   rZ   rK  datactors           r7   r_   z*FrozenDataClassVariable.as_python_constant1  s     	',,JJ&//6;N;NO
 &R  DJJ' 	&Ezz{{5::.AAC5)U3)-F5::&KK%	& !T$V$$r9   c                 4   ddl m} g }i } || j                        D ]b  }| j                  |j                     j	                         }t        |d      r|j                  r|||j                  <   R|j                  |       d | j                         } ||i |S )Nr   r#  r'  )	r0  r1  rK   r   rb   ru   r'  r?   rj  )rY   r1  r   rZ   rK  r   r,  s          r7   rb   z FrozenDataClassVariable.as_proxyO  s    &DJJ' 	#EKK

+446Eui(U]]%*uzz"E"	# !T$V$$r9   c                 `    || j                   |j                         <   t        |   |||      S r2   )r1  r_   rV   r  )rY   r   r   rK   r[   s       r7   r  z/FrozenDataClassVariable.method_setattr_standarde  s.    16D++-.w.r4??r9   c                 b    | j                   j                   d| j                  j                   dS rd   r  r^   s    r7   rg   z FrozenDataClassVariable.__repr__i  r  r9   r2   r[  r\  )rL   rM   rN   r   r   rW   r_   rb   r  ra  rg   rc  rd  s   @r7   r!  r!    s:    O O %<%,@H# Hr9   r!  c                   8     e Zd Z	 	 d fdZ	 	 	 	 	 	 ddZ xZS )SourcelessGraphModuleVariablec                 &    t        |   |fi | y r2   )rV   rW   rX   s      r7   rW   z&SourcelessGraphModuleVariable.__init__n  s    
 	)&)r9   c                     t        j                  | j                  j                  j                        }| g|z   }|j                  |||      S r2   )r	   r   rK   forwardr   r  )rY   r   r   r   rZ   fn_variables         r7   r   z)SourcelessGraphModuleVariable.call_methodu  sK      44TZZ5G5G5P5PQv}--
 	
r9   r[  r]  )rL   rM   rN   rW   r   rc  rd  s   @r7   r1  r1  m  s5    * 
	*
 &	

 -
 

r9   r1  c                   `     e Zd Z fdZed        Z fdZed        ZddZed        Z	 xZ
S )"UserDefinedExceptionObjectVariablec                 p    t        |   |fi | t        j                  | j                  d      | _        y rU   )rV   rW   r	   ExceptionVariablerx  exc_vtrX   s      r7   rW   z+UserDefinedExceptionObjectVariable.__init__  s-    )&)11$//2Fr9   c                     | j                   S r2   r  r^   s    r7   rB  z%UserDefinedExceptionObjectVariable.fn  s    r9   c                    |dk(  rm| j                  |      x}rZt        j                  |      rEt        |      dk(  r7|| j                  _        || j                  _        t        j                  d       S |dk(  r_t        |      dk(  rQt        |d   t        j                        r4|d   j                  dv r#| j                  j                  ||d   |d          t        | 1  ||||      S )NrW   r   r4   r   )	__cause____context____suppress_context____traceback__r*   )r  r   r   r   r:  r   rK   r	   r   r~   call_setattrrV   r   rY   r   r   r   rZ   r  r[   s         r7   r   z.UserDefinedExceptionObjectVariable.call_method  s    J;;DAAA**62Fq #DKK"DJJO--d33M!D	Q47I$>$>?QTU KK$$Ra$q':w"2tT6::r9   c                 .    | j                   j                  S r2   )r:  r>  r^   s    r7   r>  z.UserDefinedExceptionObjectVariable.__context__  s    {{&&&r9   c                 8    | j                   j                  |      S r2   )r:  set_context)rY   contexts     r7   rE  z.UserDefinedExceptionObjectVariable.set_context  s    {{&&w//r9   c                 .    | j                   j                  S r2   )r:  exc_typer^   s    r7   rH  z+UserDefinedExceptionObjectVariable.exc_type  s    {{###r9   )rF  zvariables.ExceptionVariable)rL   rM   rN   rW   r   rB  r   r>  rE  rH  rc  rd  s   @r7   r7  r7    sO    G  ;( ' '0 $ $r9   r7  c                   <     e Zd Zed        Zd fdZd fdZ xZS )KeyedJaggedTensorVariablec                 z    t         j                  j                  d      }|d uxr t        |       |j                  u S )Nztorchrec.sparse.jagged_tensor)rA   rB   rC   r   KeyedJaggedTensor)r   mods     r7   is_matching_objectz,KeyedJaggedTensorVariable.is_matching_object  s3    kkoo=>$E490E0E#EEr9   c                 P    ddl m} t        |      |u sJ t        |   |fi | y )Nr   )rL  )torchrec.sparse.jagged_tensorrL  r   rV   rW   )rY   rK   rZ   rL  r[   s       r7   rW   z"KeyedJaggedTensorVariable.__init__  s+    CE{////)&)r9   c                    t         j                  j                  j                  r@| j                  4|dv r0t        j                  d      5  t        | !  ||      cd d d        S t        | !  ||      S # 1 sw Y   xY w)N)_length_per_key_offset_per_keyT)#force_unspec_int_unbacked_size_like)	ri   r'  r(  3force_unspec_int_unbacked_size_like_on_torchrec_kjtr   r   patchrV   r   rZ  s      r7   r   z%KeyedJaggedTensorVariable.var_getattr  sr    MM  TT'>>%%$O 5w*2t45 5w"2t,,5 5s   A66A?r[  r\  )rL   rM   rN   r   rN  rW   r   rc  rd  s   @r7   rJ  rJ    s&    F F*- -r9   rJ  c                       e Zd Zy)RemovableHandleClassNrm  rP   r9   r7   rX  rX    s     	r9   rX  c                   H     e Zd ZdZ	 	 d	 d fdZd fdZ fdZd Z xZS )	RemovableHandleVariablec                 @    t        |   di | || _        || _        y rU   )rV   rW   r   r  )rY   r   r  rZ   r[   s       r7   rW   z RemovableHandleVariable.__init__  s$     	"6"*r9   c                 $   |dk(  rx| j                   | j                  k7  r@|j                  j                  j	                  | j                          | j                  | _         t
        j                  j                  d       S t        | %  ||||       y )Nremove)
r  REMOVEDr   r   remove_hookr	   r   r   rV   r   )rY   r   method_namer   rZ   r[   s        r7   r   z#RemovableHandleVariable.call_method  sl    ("xx4<<'		&&22488<<<--44T::BT6:r9   c                     | j                   | j                  k(  r0j                  fd       j                  t	        dd             y t
        |          y )Nc                  (     j                  dd      S )Nztorch._dynamo.utilsinvalid_removeable_handle)load_import_from)codegens   r7   <lambda>z5RemovableHandleVariable.reconstruct.<locals>.<lambda>  s    00)+F r9   r   F)r  r_  add_push_nullextend_outputr
   rV   reconstruct)rY   rf  r[   s    `r7   rj  z#RemovableHandleVariable.reconstruct  sN    88t||#!!
 !!"6q%"@AG$r9   c                     t         S r2   )rX  r^   s    r7   rj  z#RemovableHandleVariable.python_type  s    ##r9   )NNr[  r\  )	rL   rM   rN   r_  rW   r   rj  rj  rc  rd  s   @r7   rZ  rZ    s.    G 		 
	;%$r9   rZ  c                   `     e Zd ZdZej
                  Zd fd	Z	 	 	 	 	 	 d fdZd Zd Z	 xZ
S )UserDefinedDictVariablez
    Represents user defined objects that are subclasses of dict/OrderedDict.

    Internally, it uses a ConstDictVariable to represent the dict part of the
    variable tracker. For everything else, it falls back to
    UserDefinedObjectVariable.
    c                     t        |   |fi | || _        | j                  7| j                  J d       t	        j
                  i t                     | _        t        | _        y )Nz@dict_vt must be constructed by builder.py when source is presentr   )	rV   rW   _dict_vtr   r	   r   r,   r   _dict_methods)rY   rK   dict_vtrZ   r[   s       r7   rW   z UserDefinedDictVariable.__init__  sg    )&)== ;;& R& &77"2"4DM *r9   c                     | j                  |      }|| j                  v r| j                  j                  ||||      S t        |   ||||      S r2   )r  rp  ro  r   rV   rB  s         r7   r   z#UserDefinedDictVariable.call_method	  sT     11$7T'''==,,RtVDDw"2tT6::r9   c                     t        | j                        j                  t        j                  t        j
                  j                  fv r| j                  j                  |      S t        r2   )	r   rK   r  r   r   r   ro  r  r  r  s     r7   r  z+UserDefinedDictVariable.unpack_var_sequence  sQ    

$$MM##,,)
 
 ==44R88!!r9   c                 8    |j                  | j                        S r2   )is_modifiedro  r  s     r7   r  z1UserDefinedDictVariable.is_underlying_vt_modified      ''66r9   r2   r]  rL   rM   rN   r  rw  r  rW   r   r  r  rc  rd  s   @r7   rm  rm    sG     /==N
*
; &	
;
 -
; 

;"7r9   rm  c                   `     e Zd ZdZej
                  Zd fd	Z	 	 	 	 	 	 d fdZd Zd Z	 xZ
S )UserDefinedListVariablez
    Represents user defined objects that are subclasses of lists.

    Internally, it uses a ListVariable to represent the list part of the
    variable tracker. For everything else, it falls back to
    UserDefinedObjectVariable.
    c                     t        |   |fi | || _        | j                  8| j                  J d       t	        j
                  g t                     | _        y y )Nz@list_vt must be constructed by builder.py when source is presentr   )rV   rW   _list_vtr   r	   r7  r,   )rY   rK   list_vtrZ   r[   s       r7   rW   z UserDefinedListVariable.__init__,  s_    )&)== ;;& R& &222EUEWXDM	 !r9   c                     | j                   J | j                  |      }|t        v r| j                   j                  ||||      S t        |   ||||      S r2   )r{  r  r#   r   rV   rB  s         r7   r   z#UserDefinedListVariable.call_method5  s^     }}(((11$7\!==,,RtVDDw"2tT6::r9   c                     | j                   J t        | j                        j                  t        j                  u r| j                   j                  |      S t        r2   )r{  r   rK   r  r   r  r  r  s     r7   r  z+UserDefinedListVariable.unpack_var_sequenceB  sH    }}(((

$$5==44R88!!r9   c                 8    |j                  | j                        S r2   )ru  r{  r  s     r7   r  z1UserDefinedListVariable.is_underlying_vt_modifiedH  rv  r9   r2   r]  rw  rd  s   @r7   ry  ry  !  sH     /==NY; &	;
 -; 
;"7r9   ry  c                   n     e Zd ZdZej
                  Z fdZd Zed        Z		 	 	 	 	 	 d fdZ
d Z xZS )UserDefinedTupleVariablez
    Represents user defined objects that are subclasses of tuple.

    Internally, it uses a TupleVariable to represent the tuple part of the
    variable tracker. For everything else, it falls back to
    UserDefinedObjectVariable.
    c                 4    t        |   |fi | d | _        y r2   )rV   rW   	_tuple_vtrX   s      r7   rW   z!UserDefinedTupleVariable.__init__W  s    )&)r9   c                     || _         y r2   )r  )rY   tuple_vts     r7   set_underlying_tuple_vtz0UserDefinedTupleVariable.set_underlying_tuple_vt[  s	    !r9   c                 @    t        | fi |}|j                  |       |S r2   )r  r  )rK   r  rZ   r  s       r7   r   zUserDefinedTupleVariable.create^  s$    )%:6:&&x0r9   c                     | j                   J | j                  |      }|t        v r| j                   j                  ||||      S t        |   ||||      S r2   )r  r  r(   r   rV   rB  s         r7   r   z$UserDefinedTupleVariable.call_methodd  s^     ~~)))11$7]">>--b$fEEw"2tT6::r9   c                     | j                   J t        | j                        j                  t        j                  u r| j                   j                  |      S t        r2   )r  r   rK   r  r   r  r  r  s     r7   r  z,UserDefinedTupleVariable.unpack_var_sequenceq  sH    ~~)))

$$6>>55b99!!r9   r]  )rL   rM   rN   r  rw  r  rW   r  r   r   r   r  rc  rd  s   @r7   r  r  L  s[     /==N"  
; &	;
 -; 
;"r9   r  c                   N     e Zd Zej                  Z fdZdddeddf fdZ xZS )MutableMappingVariablec                 x    t        |   |fi | t        j                  i       | _        t               | _        y r2   )rV   rW   r	   r   generic_dict_vtr+   r   rX   s      r7   rW   zMutableMappingVariable.__init__{  s3    )&)(::2>68r9   r   r0   r   rS   r-   c                 T   |dk(  rwt        | j                        j                  t        j                  j
                  j                  t        j                  fv r$t        j                  t        j                  |       S |dk(  re| j                  rYt        j                  j                  | j                  j                  t        | j                  d            | _        | j                   S | j                   j#                  t        j$                  |            x}r|S t&        | Q  ||      S )NrC   r   )r   rK   rC   r   abcMappingr   r	   r   r   mapping_getr   r  r   r   r   r  maybe_getitem_constr   rV   r   )rY   r   r   r  r[   s       r7   r   z"MutableMappingVariable.var_getattr  s     5=T$**-11OO##''HH6
 
 //	0E0EtLLZDKK#,#@#@#G#G

##ZZ%H$D  '''((<<&&t,
 
S 
 J7&r400r9   )	rL   rM   rN   rw  r  rW   ra  r   rc  rd  s   @r7   r  r  x  s4    .==N9
15 1S 1EV 1 1r9   r  c                       e Zd Zy)r;  Nrm  rP   r9   r7   r;  r;    rn  r9   r;  )dr  r}   r   r  r0  r   r  r   r9  rA   r  r   r  r  typingr   typing_extensionsr   torch._dynamo.configri   torch.nntorch._guardsr   torch.utils._python_dispatchr   r   r   r	   bytecode_transformationr
   create_parameter_opr   excr   r   r   r   guardsr   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   baser+   r,   r-   dictsr.   numpyr6  ModuleNotFoundErrortorch.utils._cxx_pytreer/   r@   r   torch._dynamo.symbolic_convertr0   r8   rH   rJ   rR   rf  rl  ru  rw  r!  r1  r7  rJ  rX  rZ  rm  ry  r  r  r;  rP   r9   r7   <module>r     s  *         
       *   ( K # : F  1     ( O N &2
 DB$/ x/2 x/v(@ 	 	S~< 3 ~<BQH7 QHh
$= 
0&$)B &$R- 9 -.	 	$$o $$N,77 ,7^(77 (7V)"8 )"X16 1D	. 	C2  	B
  dJs$   F F  FF F0/F0