
    rh                       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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/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZGmHZHmIZI ddlJmKZK ddlLmMZM 	 ddlNZO	 ddlQmRZR erddlUmVZV ddlWmXZX d ZYd ZZd Z[ G d deI      Z\ G d de\      Z] G d de]      Z^ G d d       Z_d! Z` G d" d#e\      Za G d$ d%ea      Zb G d& d'ea      Zc G d( d)ea      Zd G d* d+ea      Ze G d, d-ea      Zf G d. d/      Zg G d0 d1eI      Zh G d2 d3ea      Zi G d4 d5ea      Zj G d6 d7ea      Zk G d8 d9ea      Zl G d: d;ea      Zmy# eP$ r dZOY w xY w# eS$ r  eTd      ZRY w xY w)<a  
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DataclassFieldsSource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_lru_cache_wrapped_function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)SizeVariable)
PyTreeSpec)	PyCodegenInstructionTranslatorc                 F    | t         j                  t        j                  fv S N)object__setattr__BaseExceptionvals    w/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_dynamo/variables/user_defined.pyis_standard_setattrr>   l       6%%}'@'@AAA    c                 F    | t         j                  t        j                  fv S r7   )r8   __delattr__r:   r;   s    r=   is_standard_delattrrC   p   r?   r@   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_apirE   _pytest.recwarnrF   appendImportErrorsysmodulesget&_AssertRaisesRegexWithHighlightContext)ctxf_ctxsrE   rF   ms        r=   is_forbidden_context_managerrR   t   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__r8   __annotations__ r@   r=   rT   rT      s    Mr@   rT   c                   p    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               Zeej                  d               Zeej                  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 )UserDefinedClassVariablerU   returnc                 2    t        |   di | || _        y NrZ   )super__init__rU   selfrU   kwargs	__class__s      r=   ra   z!UserDefinedClassVariable.__init__   s    "6"
r@   c                     | j                   S r7   rU   rc   s    r=   as_python_constantz+UserDefinedClassVariable.as_python_constant       zzr@   c                     | j                   S r7   rg   rh   s    r=   as_proxyz!UserDefinedClassVariable.as_proxy   rj   r@   c                 N    | j                   j                   d| j                   dS N())re   rV   rU   rh   s    r=   __repr__z!UserDefinedClassVariable.__repr__   s$    ..))*!DJJ<q99r@   c                  ~    t         j                  t         j                  t         j                  t         j                  hS r7   )torchdevicefinfoiinfoSizerZ   r@   r=   _constant_fold_classesz/UserDefinedClassVariable._constant_fold_classes   s*     LLKKKKJJ	
 	
r@   c                     t         j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  t         j                  t         j                  j                  t         j                  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)rs   TensorcudaFloatTensorDoubleTensor
HalfTensorBFloat16Tensor
ByteTensor
CharTensor	IntTensorShortTensor
LongTensorStreamEventxpuhasattrupdaterz   setr)   keys)_in_graph_class_lists    r=   _in_graph_classesz*UserDefinedClassVariable._in_graph_classes   s    LLJJ""JJ##JJ!!JJ%%JJ!!JJ!!JJ  JJ""JJ!!LLKKJJJJIIIIOO! 
$ 5%  ''II$$IIOO &++-.1EEEr@   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 r7   )dirbuiltins
isinstancegetattrtype
issubclassr:   __new__r8   dicttuplelistunion)name
exceptionss     r=   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 r7   )r\   r   rg   s    r=   is_supported_new_methodz0UserDefinedClassVariable.is_supported_new_method   s     0JJLLLr@   c                 :    | j                   | j                         v S r7   )rU   rx   rh   s    r=   can_constant_fold_throughz2UserDefinedClassVariable.can_constant_fold_through   s    zzT88:::r@   txr5   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	   DeletedVariablerU   __dict__rc   r   keymutated_attrs       r=   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))))r@   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EnumVariablerV   rX   r   sourcefromkeysr   r   )      __mro__ztorch.rs   )2 r   r   r   r   createrU   rV   rX   r	   GetAttrVariablecollectionsOrderedDictdefaultdictr`   var_getattrinspectgetattr_staticAttributeErrorr   r   r\   r   r   r   typesFunctionTypestaticmethodr/   build__get__classmethod__func__propertyUserFunctionVariablefgetcall_functionUserMethodVariableClassMethodDescriptorTypeismemberdescriptorrK   version_info
is_literalenumEnumr   rW   
startswithismethoddescriptorr#   )
rc   r   r   r   r   r   optionsobjfuncre   s
            r=   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 r7   rZ   )weightsize_averageignore_indexreduce	reductionlabel_smoothings         r=   normalize_argszIUserDefinedClassVariable._call_cross_entropy_loss.<locals>.normalize_args?  s       r@   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_proxyrs   nn
functionalcross_entropyr(   )
inputtargetr   r   r   
reduce_argr   r   r   r   s
      r=   fake_cross_entropy_losszRUserDefinedClassVariable._call_cross_entropy_loss.<locals>.fake_cross_entropy_lossY  sq    . ,bii,,#HH''55 '!""((&%+	  r@   )r   r   r   r	   LambdaVariable)rc   r   argsrd   r   r   r   r   r   r   r   r   r   s    `     @@@@@@r=   _call_cross_entropy_lossz1UserDefinedClassVariable._call_cross_entropy_loss3  s     	' $**40)006)006#**40&--f5,33C8	0 D+F+	
	 	0 ''(?@@r@   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__rU   __ne__r   mutation_type)lenrU   r   r   r   r   r/   r   r   r   r   r   builtinr   call_custom_dict_fromkeysr   r	   r   r   r\   ConstDictVariabler.   r   r   r   r   track_new_user_defined_objectr`   call_method)rc   r   r   r   rd   r   r   re   s          r=   r  z$UserDefinedClassVariable.call_methods  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::r@   c                    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 rLt9        |      dkD  r|d   }nt        j                  j                  d       }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 | j                  t        j                  u r?t        jF                  tR              j                  |||      }t        |j                        S t        | j                        r| j{                         rt        j                  | j                        }t        | j~                        }t        |      }|j                  d gt9        |      t9        |      z
  z         i }t        t        j                         ||      D ]  \  }}}|
|j                  |v r||j                     }n|j                  s5|j                  t        j                  ur7t/        j0                  ||j                  t        t        ||      d            }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        &| y  |||      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   ra   ztorch.return_typesc              3   $   K   | ]  }|d u 
 y wr7   rZ   .0xs     r=   	<genexpr>z9UserDefinedClassVariable.call_function.<locals>.<genexpr>^  s     8Q1D=8s   defaultc              3   P   K   | ]  }t        |t        j                           y wr7   )r   r	   TensorVariabler  s     r=   r  z9UserDefinedClassVariable.call_function.<locals>.<genexpr>  s     WA
1i&>&>?Ws   $&r   r   )r   r  r   r   r   r   r	   r   r   ri   itemsrU   rs   r   CrossEntropyLossr   
contextlibnullcontextctx_managerr  r   r   inline_user_function_returnr/   r   r   construct_dictr   r   r0   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CatchWarningsCtxManagerVariabler|   rt   is_python_constantCUDADeviceVariabler   r   r   is_standard_new"cls_supports_mutation_side_effectsr   rR   r  r  _AsyncGeneratorContextManagerclosingredirect_stdoutredirect_stderrsuppress	ExitStackAsyncExitStack_GeneratorContextManagerr   _dynamoconfigenable_trace_contextlibr   r  r8   r  r!   r&   rW   _field_defaultsr   extendzipindexallNamedTupleVariablerw   r   r1   r   dataclassesfieldsr   	itertoolscountr   initr  MISSINGr   r   default_factoryr   r   r   npr)   ListVariabler   stackr(   randomRandomRandomVariabler   MappingProxyTyper  MappingProxyVariabler   %instantiate_user_defined_class_objectr`   )'rc   r   r   rd   r  r   constant_argsr  kvr  r	  r  callbackfn	rest_argsr  r  cm_objrF  field_defaultsvar_tracker_kwargs
field_namevar_tracker	field_varr   rU   tupfields_sourcedefault_kwargsindfield
factory_fnvarstackedtensor_variableseedrandom_objectre   s'                                         r=   r   z&UserDefinedClassVariable.call_function  sb    	/*+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;;&4y1}7$55<<TB,,T!Wh??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ZZ5::%++E2@@T6RC		** ,1E1E1G ''

3F1$++>MJELL$3v;U#;<=N+.y/@&%+P ='UK&zzV+&,UZZ&8$zz$ ==0C0CC*9*?*? " %'1$1-$Ey("+K #22+:M:MM)8)>)> "E$9$9*J +5*B*B2r2*NK %1<N5::.5=6 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6g <LT s   uu#
8u))u2c                     t        j                  | j                  dd      }t        |t              r|j
                  }|t        j                  u S )z"Check for __new__ being overriddenr   N)r   r   rU   r   r   r   r8   r   )rc   new_fns     r=   r2  z(UserDefinedClassVariable.is_standard_new  s<    ''

ItDfl+__F''r@   c                 
   | j                   rgt        | j                   |      }t        |j                  t        j
                               t        j                  t        | j                  |            S t        | -  ||      S r7   )r   r   r   
make_guardr   HASATTRr	   r   r   rU   r`   call_obj_hasattr)rc   r   r   r   re   s       r=   rq  z)UserDefinedClassVariable.call_obj_hasattr  sc     ;;T2F&++L,@,@AB--gdjj$.GHHw'D11r@   c                 Z    |dk(  r| j                   j                  S t        |   ||      S )NrV   )rU   rV   r`   const_getattrrc   r   r   re   s      r=   rs  z&UserDefinedClassVariable.const_getattr  s-    :::&&&w$R..r@   r]   Nr   r5   r   list[VariableTracker]rd   dict[str, VariableTracker]r]   r/   r   r5   r   rx  rd   ry  r]   r/   )rV   rW   rX   r   r8   rY   ra   ri   rl   strrq   r   r)  cacherx   r   r   r   r   r   r   r   r  r   r2  rq  rs  __classcell__re   s   @r=   r\   r\      sS   <:# : __
  
 __F  F: __   M M
;*N-5 N-S N-EV N-`>A@2; &	2;
 -2; 
2;hb7#b7 &b7 -	b7
 
b7H	(2)2142	2/ /r@   r\   c                   "    e Zd Zed        Zd Zy)!UserDefinedExceptionClassVariablec                     | j                   S r7   rg   rh   s    r=   rY  z$UserDefinedExceptionClassVariable.fn  s    zzr@   c                     | j                   S r7   rg   rh   s    r=   python_typez-UserDefinedExceptionClassVariable.python_type  rj   r@   N)rV   rW   rX   r   rY  r  rZ   r@   r=   r  r    s     r@   r  c                       e Zd Zy)NO_SUCH_SUBOBJNrV   rW   rX   rZ   r@   r=   r  r        r@   r  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   r  ri   r  r   r   random_callsr   rI   wrap_unspecialized_primitive)r   rY  r   rd   r  r  rV  rW  random_call_indexexample_valuer   s              r=   call_random_fnr    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                   z    e Zd ZdZd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               Zd Z	 	 	 	 	 	 d* fdZ	 d+	 d)dZd Z fdZd Zd Z	 	 	 	 	 	 	 	 d, fdZd Z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.
    rU   
value_typeattrs_directly_modifed_on_dictN)r  
cls_sourcebase_cls_vt	init_argsr]   c                $   t        |   di | || _        |xs t        |      | _        t        |      | j                  u sJ || _        |&| j                  t        | j                        | _        || _        || _	        t               | _        y r_   )r`   ra   rU   r   r  r  r   r   r  r  r   r  )rc   rU   r  r  r  r  rd   re   s          r=   ra   z"UserDefinedObjectVariable.__init__	  s     	"6"
$3UE{doo---$$++"9(5DO '" /2e+r@   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methodrV   ro   rp   )r  rV   r{  r   rU   re   )rc   inners     r=   __str__z!UserDefinedObjectVariable.__str__*  sU    (( 
 
 

J=>E..))*!E7!44r@   c                 b    | j                   j                   d| j                  j                   dS rn   re   rV   r  rh   s    r=   rq   z"UserDefinedObjectVariable.__repr__5  +    ..))*!DOO,D,D+EQGGr@   c                      yNFrZ   rc   r   s     r=   is_underlying_vt_modifiedz3UserDefinedObjectVariable.is_underlying_vt_modified8  s    r@   c                     | j                   S r7   r  rh   s    r=   r  z%UserDefinedObjectVariable.python_type;  s    r@   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_classr  r   r   ro  r   EQUALS_MATCHrU   r`   ri   )rc   pytreere   s     r=   ri   z,UserDefinedObjectVariable.as_python_constant>  s\    ,,##DOO4{{&dkk44\5N5NOPzz! w)++r@   c                     | j                   r>t        | j                   j                  t        j                               | j
                  S t        |          S r7   )r   r   ro  r   ID_MATCHrU   r`   guard_as_python_constant)rc   re   s    r=   r  z2UserDefinedObjectVariable.guard_as_python_constantI  s?    ;;$++001F1FGH::w/11r@   c                 .    t        |       s
J d|         y )Nz<calling torch function on object without __torch_function__ )r   rh   s    r=   torch_function_checkz.UserDefinedObjectVariable.torch_function_checkO  s!    !$' 	
J4&Q	
'r@   c                 @    | j                          ddlm}  |||       S )Nr,   )get_torch_function_fn)r  torch_functionr  )rc   r   r  s      r=   get_torch_fnz&UserDefinedObjectVariable.get_torch_fnT  s    !!#9$R..r@   r   r5   c                 f    | j                          ddlm}  ||| j                  |      ||||      S )Nr,   )call_torch_function)r  r  r  r  )rc   r   rY  r   r   rd   r  s          r=   r  z-UserDefinedObjectVariable.call_torch_functionZ  s;    !!#7"b!
 	
r@   c                      t         j                   t         j                  t         j                  t         j                  h} | S r7   )rO  randint	randrangeuniform)fnss    r=   _supported_random_functionsz5UserDefinedObjectVariable._supported_random_functionsh  s0     MMNNNN	
 
r@   c                     |t        | j                  di       vr*	 t        j                  t	        | j                        |      S y # t
        $ r Y y w xY w)Nr   )r   rU   r   r   r   r   )rc   r   s     r=   _maybe_get_baseclass_methodz5UserDefinedObjectVariable._maybe_get_baseclass_methods  sT    wtzz:r::--d4::.>EE  " s   (A 	AAr/   c                 @   ddl m}m} | j                  |      }|p|t        j
                  u r|j                  d       S t        |      s$t        | j                  t        j                        r | j                  |g|i |S t        |      r(| j                  ||d   t        j                               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                  t0        j2                        rt5        d       t        |t0        j6                        rx| j8                  d nt;        t;        | j8                  d      |      }	ddlm}
 |t(        j@                  jB                  j
                  u r|
} ||| |	      jE                  |||      S |tF        jH                  u r]| j8                  rQ|sO|sMtK        | j8                  jM                  tN        jP                                |t#        | j                              S tR        |   ||||      S )	Nr,   )r   r   r   z,Generator as graph argument is not supportedre   r   unpatched_nn_module_initr   )+r   r   r   r  r8   ra   r   r>   r   rU   	threadinglocalmethod_setattr_standardrC   r	   r   r   r   r  NotImplementedrs   r<  r=  "enable_faithful_generator_behaviorr   GeneratorTyper   r   r   r   mutation_guardr  r   Moduler   r   __len__r   ro  r   SEQUENCE_LENGTHr`   r  )rc   r   r   r   rd   r   r   r  otherr   r  re   s              r=   r  z%UserDefinedObjectVariable.call_method{  s    	;11$7('..t44"6*jY__.U3t33BHHHH"6*33Q!:!:!<  &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::r@   c                    	 |j                         }|j                  j                  j                  |       st        d|  d| d       |r| j                  j                  |       n| j                  |      }|r|\  }}d }d }	| j                  r&| j                  |      }t        t        |      d      }	t        j                  |||      }
t        j                  |||	      }|
| |g}|j                  ||i       S |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, ...)__set__)ri   NotImplementedErrorr   r   r   is_attribute_mutationr  add$try_get_descritor_and_setter_py_funcr  get_source_by_walking_mror   r   r/   r   r   
store_attrr	   r   )rc   r   r   rU   directly_update_dicttmp
descriptorsetterdesc_sourcefunc_sourcedesc_varfunc_varr   s                r=   r  z1UserDefinedObjectVariable.method_setattr_standard  sG   	=**,D yy%%;;DAHTF"TF&9://33D9;;DAC%("
F #"??"&"@"@"FK",Z-Di"PK*00ZM*00V[I $.--b$;;
 			))$e<))$//9 # 	=4TF;<	=s   D7 7EEc                     t        t        j                  | j                  dd              xr% t	        | j                  t
        j                         S )Nr9   )r>   r   r   rU   r   r  r  rh   s    r=   needs_slow_setattrz,UserDefinedObjectVariable.needs_slow_setattr  sD    &""4::}dC
 
 :TZZ99	:r@   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   ro  r   r  ranger   rU   r	   LazyVariableTrackerr   r   r`   unpack_var_sequence)rc   r   rV  re   s      r=   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  rc   r   s     r=   next_variablez'UserDefinedObjectVariable.next_variable  s    JB77r@   c                 Z    	 | j                   | j                         v S # t        $ r Y yw xY wr  )rU   r  	TypeErrorrh   s    r=   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                        r^| j2                  r>t7        | j>                  d      }tA        |jC                  tD        jF                               | jI                  |d||      S tJ        | M  |||      S )Nc              3   <   K   | ]  }|j                           y wr7   r0  )r  rV  s     r=   r  z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>   s     9qA((*9   c              3   <   K   | ]  }|j                           y wr7   r  )r  rW  s     r=   r  z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     DqA((*Dr  z9Sourceless UserDefinedObjectVariable method not supportedr   __self____call__)&r  rC  valuesr  rU   r$   r   
MethodTyper   r  rs   r  _contextlib_DecoratorContextManagercloner	   TorchCtxManagerClassVariableis_matching_clsre   r   autograd	grad_modeinference_moder   moder   r   r   r/   r   callabler  r   ro  r   FUNCTION_MATCHr  r`   )rc   r   r   rd   r   r   rg  func_srcr  obj_srcobj_varr   re   s               r=   r   z'UserDefinedObjectVariable.call_function  sB    $$&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!{{#DOOZ@f//0K0KLM##B
D&AAw$Rv66r@   c                 ,    t        | j                        S r7   )r   rU   rh   s    r=   _check_for_getattrz,UserDefinedObjectVariable._check_for_getattr-  s    !$**--r@   c                     t        |t              syt        |j                  t        j                        xs= t
        j                  j                  j                  j                  |j                        S r  )
r   r   r   r   BuiltinFunctionTypers   _Cr<  r  is_instancemethod)rc   subobjs     r=   _is_c_defined_propertyz0UserDefinedObjectVariable._is_c_defined_property0  sV    &(+ KK22
 CXX##55fkkB	Cr@   c                    t        j                  | j                  |t              }t	        | j                        st|t        u s;t        j
                  |      s&t        j                  |      s| j                  |      r1t        | j                        j                  | j                  |      }|S t	        | j                        r|t        u rt        |S r7   )r   r   rU   r  r'   r   isgetsetdescriptorr  r   __getattribute__r   )rc   r   r  s      r=   _getattr_staticz)UserDefinedObjectVariable._getattr_static<  s    ''

D.I 'tzz2n$))&1))&1**62 $**%66tzz4HF  %TZZ0V~5M ! r@   c                     t        j                  t        | j                        |d       }t        j                  t        |      dd       }|r%t        j                  |      ry|| j
                  v ryy)Nr  TF)r   r   r   rU   
isfunctionr  rc   	attr_namer  r  s       r=   should_skip_descriptor_setterz7UserDefinedObjectVariable.should_skip_descriptor_setterV  sb    ++D,<iN
''Z(8)TJ!!&) dAAAr@   c                     t        j                  t        | j                        |d       }t        j                  t        |      dd       }t        j                  |      r||fS y )Nr  )r   r   r   rU   r  r  s       r=   r  z>UserDefinedObjectVariable.try_get_descritor_and_setter_py_funcd  sT    ++D,<iN
''Z(8)TJf%''r@   c                    |j                   j                  j                  | |      rC|j                   j                  j                  | |d      }t	        |t
        j                         S || j                  j                  v S r   r   r   s       r=   r   z1UserDefinedObjectVariable.has_key_in_generic_dictk  r   r@   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 )	r  	enumerater   rU   r   r   r   r   r   )rc   r   idxklass
mro_sourceklass_sourcedict_sources          r=   r  z3UserDefinedObjectVariable.get_source_by_walking_mror  s    ***#D$4$<$<= 	8JCu~~%'C
,Z=(zB %[$77	8 	vT$tzz2B2J2J1KLMr@   c                    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        jl                        rA|jo                         \  }\  }}t)        | tp              sJ | jr                  jt                  |   S t)        |tv              r2|jy                  | j                        }t{        j|                  |||      S t)        |t~              r2t        j                  |j                  | j                  |d      |      S t)        |t<        j                        r3|jy                  | j                  d       }t{        j|                  |||      S t        |      rt        j                  |d| |      S t        j                  t        |      dt8              t8        urt        t        |      jx                        sd }d }| j2                  r>| j                  |      }t	        t        |      d      }t{        j|                  |||      }nt        |      }t5        t        | j                              }t        j                  |jx                  j                  ||      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rt)        |j                  t<        j>                        st_        d|        d }|t	        |d      }t{        j|                  ||j                  |      }t        j                  |j                  |      S |j                  }nt)        |t<        j>                        sJ |}t        j                  |      rt        j                  || |      S t        j                  |      rRt        |      rt        |      S |"|j                  |      j                  ||      S  |j                  |      |      S tP        j                  j                  j                  st)        | t        j                        r|rt)        | t        jB                        re|j                   j                  r$tP        j                  j                  j                  r+|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   re   __getattr__z)UserDefined with non-function __getattr__r  r   __wrapped__r   _torchdynamo_inlinez7Found a method whose __func__ is not of FunctionType - r  )_buffers_parameters)^r   r   r   r   r   r'   rU   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+   UnspecializedNNModuleVariabler$   r%  r   r$  _modules manually_trace_nn_module_getattrrs   r   r  r!  NNModuleVariableset_nn_module_stack_sourceget_nn_module_stack_sourcer   r  r  ra   r   r   _collections_tuplegetter
__reduce__UserDefinedTupleVariable	_tuple_vtr  r   r   r/   r   r   r   r   r   r    WrapperUserMethodVariabler#   r  r   r  r  r   r   r#  r  ismethodr  r"   r   lookupcreate_with_sourcer<  r=  inline_inbuilt_nn_modulesFSDPManagedNNModuleVariableexportinstall_free_tensorsr   _wrap_sourcer  re   )rc   r   r   r   r   r   getattribute_fn
new_sourceresultr   r  r  
getattr_fnoutr  _r  r   descriptor_sourcedescriptor_get_sourcedescriptor_var	owner_vardynamic_subobjself_source	object_vtsubobj_from_classsrc_from_classs                              r=   r   z%UserDefinedObjectVariable.var_getattr  s   "&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'(  9 9: !++-KAxQ d$<===>>'',,- >>$**-D"((T6::,//!1!1"k!B6   ? ?@>>$**d3D"((T6::*62 66tF  ##L)^
 (GL  )
 !%$(! %)$B$B4$H!(2019)% "1!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 #'K)&0&D / 5 5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 YY%%)=)=)R)R 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 	!4U * .)"-.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+   8a> b >bbG i,i,+i,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   ro  r   rp  r   r	   r   r   r   r   r   r   )rc   r   r   var_vts       r=   rq  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
ru  rv  rw  )Frz  )'rV   rW   rX   __doc__rT   _nonvar_fieldsra   r{  r  rq   r  r  ri   r  r  r  r  r   r)  r|  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r   r  r   rq  r}  r~  s   @r=   r  r    sl   
 	( 
	+	+	N 4 
4B	5 	5H# H	,2

/
 __  8; &	8;
 -8; 
8;v NS!0)!0F:
/"837#37 &37 -	37
 
37j.
C4*Nz5x<)<14<	<r@   r  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   rF  )rF  r   )
rE  rF  r   r   r   r/   r   r   r   rN  )r   rU   r   rF  	field_mapre  s         r=   r   zFrozenDataClassVariable.create  s    &"5)))	E] 	Euejj)(7(=(=E5::.=z&%**=)	%**%	 'uYvNNr@   r]   c                 <    t        |   |fi | |i }|| _        y r7   )r`   ra   rF  )rc   rU   rF  rd   re   s       r=   ra   z FrozenDataClassVariable.__init__  s&    )&)>Fr@   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   rP  z@currently can't reconstruct arbitrary frozen dataclass instanceskw_onlyF)rE  rF  r  r  r  r$   rU   TreeSpecLeafSpecConstantNoder  rI  r   ri   r   rI   r  )rc   rF  r  r   rd   re  datactors           r=   ri   z*FrozenDataClassVariable.as_python_constant  s     	',,JJ&//6;N;NO
 &R  DJJ' 	&Ezz{{5::.AAC5)U3)-F5::&KK%	& !T$V$$r@   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   rP  rT  )	rE  rF  rU   r   rl   r   rT  rI   r  )rc   rF  r   rd   re  r   rY  s          r=   rl   z FrozenDataClassVariable.as_proxy  s    &DJJ' 	#EKK

+446Eui(U]]%*uzz"E"	# !T$V$$r@   c                 `    || j                   |j                         <   t        |   |||      S r7   )rF  ri   r`   r  )rc   r   r   rU   re   s       r=   r  z/FrozenDataClassVariable.method_setattr_standard  s.    16D++-.w.r4??r@   c                 b    | j                   j                   d| j                  j                   dS rn   r  rh   s    r=   rq   z FrozenDataClassVariable.__repr__  r  r@   r7   ru  rv  )rV   rW   rX   r   r   ra   ri   rl   r  r{  rq   r}  r~  s   @r=   rN  rN    s:    O O %<%,@H# Hr@   rN  c                   8     e Zd Z	 	 d fdZ	 	 	 	 	 	 ddZ xZS )SourcelessGraphModuleVariablec                 &    t        |   |fi | y r7   )r`   ra   rb   s      r=   ra   z&SourcelessGraphModuleVariable.__init__  s    
 	)&)r@   c                     t        j                  | j                  j                  j                        }| g|z   }|j                  |||      S r7   )r	   r   rU   forwardr   r  )rc   r   r   r   rd   fn_variables         r=   r  z)SourcelessGraphModuleVariable.call_method  sK      44TZZ5G5G5P5PQv}--
 	
r@   ru  rw  )rV   rW   rX   ra   r  r}  r~  s   @r=   r^  r^    s5    * 
	*
 &	

 -
 

r@   r^  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 r_   )r`   ra   r	   ExceptionVariabler  exc_vtrb   s      r=   ra   z+UserDefinedExceptionObjectVariable.__init__  s-    )&)11$//2Fr@   c                     | j                   S r7   r  rh   s    r=   rY  z%UserDefinedExceptionObjectVariable.fn  s    r@   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 )Nra   r   r9   r   )	__cause____context____suppress_context____traceback__r,   )r  r   r   r   rg  r   rU   r	   r   r   call_setattrr`   r  rc   r   r   r   rd   r  re   s         r=   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::r@   c                 .    | j                   j                  S r7   )rg  rk  rh   s    r=   rk  z.UserDefinedExceptionObjectVariable.__context__  s    {{&&&r@   c                 8    | j                   j                  |      S r7   )rg  set_context)rc   contexts     r=   rr  z.UserDefinedExceptionObjectVariable.set_context  s    {{&&w//r@   c                 .    | j                   j                  S r7   )rg  exc_typerh   s    r=   ru  z+UserDefinedExceptionObjectVariable.exc_type  s    {{###r@   )rs  zvariables.ExceptionVariable)rV   rW   rX   ra   r   rY  r  rk  rr  ru  r}  r~  s   @r=   rd  rd    sO    G  ;( ' '0 $ $r@   rd  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)rK   rL   rM   r   KeyedJaggedTensorr   mods     r=   is_matching_objectz,KeyedJaggedTensorVariable.is_matching_object$  s3    kkoo=>$E490E0E#EEr@   c                 P    ddl m} t        |      |u sJ t        |   |fi | y )Nr   )ry  )torchrec.sparse.jagged_tensorry  r   r`   ra   )rc   rU   rd   ry  re   s       r=   ra   z"KeyedJaggedTensorVariable.__init__)  s+    CE{////)&)r@   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)	rs   r<  r=  3force_unspec_int_unbacked_size_like_on_torchrec_kjtr   r   patchr`   r   rt  s      r=   r   z%KeyedJaggedTensorVariable.var_getattr/  sr    MM  TT'>>%%$O 5w*2t45 5w"2t,,5 5s   A66A?ru  rv  )rV   rW   rX   r   r|  ra   r   r}  r~  s   @r=   rw  rw  #  s&    F F*- -r@   rw  c                       e Zd Zed        Zy)IntWrapperVariablec                 z    t         j                  j                  d      }|d uxr t        |       |j                  u S )Nztorch.export.dynamic_shapes)rK   rL   rM   r   _IntWrapperrz  s     r=   r|  z%IntWrapperVariable.is_matching_object=  s1    kkoo;<$?49#??r@   N)rV   rW   rX   r   r|  rZ   r@   r=   r  r  :  s     @ @r@   r  c                       e Zd Zy)RemovableHandleClassNr  rZ   r@   r=   r  r  C  s     	r@   r  c                   J     e Zd ZdZ	 	 d	 d fdZd fdZd	 fdZd Z xZS )
RemovableHandleVariablec                 @    t        |   di | || _        || _        y r_   )r`   ra   r   r  )rc   r   r  rd   re   s       r=   ra   z RemovableHandleVariable.__init__L  s$     	"6"*r@   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   r`   r  )rc   r   method_namer   rd   re   s        r=   r  z#RemovableHandleVariable.call_methodW  sl    ("xx4<<'		&&22488<<<--44T::BT6:r@   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   r=   <lambda>z5RemovableHandleVariable.reconstruct.<locals>.<lambda>c  s    00)+F r@   r   F)r  r  add_push_nullextend_outputr
   r`   reconstruct)rc   r  re   s    `r=   r  z#RemovableHandleVariable.reconstruct_  sN    88t||#!!
 !!"6q%"@AG$r@   c                     t         S r7   )r  rh   s    r=   r  z#RemovableHandleVariable.python_typel  s    ##r@   NNru  rv  )r  r3   )	rV   rW   rX   r  ra   r  r  r  r}  r~  s   @r=   r  r  I  s.    G 		 
	;%$r@   r  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   )	r`   ra   _dict_vtr   r	   r  r.   r   _dict_methods)rc   rU   dict_vtrd   re   s       r=   ra   z UserDefinedDictVariable.__init__{  sg    )&)== ;;& R& &77"2"4DM *r@   c                     | j                  |      }|| j                  v r| j                  j                  ||||      S t        |   ||||      S r7   )r  r  r  r  r`   ro  s         r=   r  z#UserDefinedDictVariable.call_method  sT     11$7T'''==,,RtVDDw"2tT6::r@   c                     t        | j                        j                  t        j                  t        j
                  j                  fv r| j                  j                  |      S t        r7   )	r   rU   r  r   r   r   r  r  r  r  s     r=   r  z+UserDefinedDictVariable.unpack_var_sequence  sQ    

$$MM##,,)
 
 ==44R88!!r@   c                 8    |j                  | j                        S r7   )is_modifiedr  r  s     r=   r  z1UserDefinedDictVariable.is_underlying_vt_modified      ''66r@   r7   rw  rV   rW   rX   rK  r  rL  ra   r  r  r  r}  r~  s   @r=   r  r  p  sG     /==N
*
; &	
;
 -
; 

;"7r@   r  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   )r`   ra   _list_vtr   r	   rM  r.   )rc   rU   list_vtrd   re   s       r=   ra   z UserDefinedListVariable.__init__  s_    )&)== ;;& R& &222EUEWXDM	 !r@   c                     | j                   J | j                  |      }|t        v r| j                   j                  ||||      S t        |   ||||      S r7   )r  r  r%   r  r`   ro  s         r=   r  z#UserDefinedListVariable.call_method  s^     }}(((11$7\!==,,RtVDDw"2tT6::r@   c                     | j                   J t        | j                        j                  t        j                  u r| j                   j                  |      S t        r7   )r  r   rU   r  r   r  r  r  s     r=   r  z+UserDefinedListVariable.unpack_var_sequence  sH    }}(((

$$5==44R88!!r@   c                 8    |j                  | j                        S r7   )r  r  r  s     r=   r  z1UserDefinedListVariable.is_underlying_vt_modified  r  r@   r7   rw  r  r~  s   @r=   r  r    sH     /==NY; &	;
 -; 
;"7r@   r  c                   Z     e Zd ZdZej
                  Zd fd	Z	 	 	 	 	 	 d fdZd Z xZ	S )r/  z
    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                    t        |   |fd|i| || _        | j                  c| j                  J d       ddlm}  |j                         }|d   j                  |      }t        j                  |t                     | _        y y )Nr  zAtuple_vt must be constructed by builder.py when source is presentr   r4   r   )r`   ra   r0  r   torch._dynamo.symbolic_convertr5   
current_txr  r	   TupleVariabler.   )	rc   rU   tuple_vtr  rd   r5   r   elemsre   s	           r=   ra   z!UserDefinedTupleVariable.__init__  s    >)>v>!>>!;;& S& M1&113BaL44R8E&44%5%7DN "r@   c                     | j                   J | j                  |      }|t        v r| j                   j                  ||||      S t        |   ||||      S r7   )r0  r  r*   r  r`   ro  s         r=   r  z$UserDefinedTupleVariable.call_method  s^     ~~)))11$7]">>--b$fEEw"2tT6::r@   c                     | j                   J t        | j                        j                  t        j                  u r| j                   j                  |      S t        r7   )r0  r   rU   r  r   r  r  r  s     r=   r  z,UserDefinedTupleVariable.unpack_var_sequence  sH    ~~)))

$$6>>55b99!!r@   r  rw  )
rV   rW   rX   rK  r  rL  ra   r  r  r}  r~  s   @r=   r/  r/    sB     /==N&; &	;
 -; 
;"r@   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 r7   )r`   ra   r	   r  generic_dict_vtr-   r   rb   s      r=   ra   zMutableMappingVariable.__init__  s3    )&)(::2>68r@   r   r5   r   r]   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 )NrM   r   )r   rU   rM   r   abcMappingr   r	   r   r   mapping_getr   r  r   r   r   r  maybe_getitem_constr   r`   r   )rc   r   r   r>  re   s       r=   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0r@   )	rV   rW   rX   r  rL  ra   r{  r   r}  r~  s   @r=   r  r    s4    .==N9
15 1S 1EV 1 1r@   r  c                       e Zd Zy)rQ  Nr  rZ   r@   r=   rQ  rQ    r  r@   rQ  )nrK  r,  r   r   r  rE  r   r)  r   rG  rO  rK   r  r   r-  r&  typingr   typing_extensionsr   torch._dynamo.configrs   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)   r*   r+   baser-   r.   r/   dictsr0   r$  r1   numpyrL  ModuleNotFoundErrortorch.utils._cxx_pytreer2   rJ   r   torch._dynamo.codegenr3   r  r5   r>   rC   rR   rT   r\   r  r  r  r  rN  r^  rd  rw  r  r  r  r  r  r/  r  rQ  rZ   r@   r=   <module>r     s  *           
       *   ( K # : F  1       * O N & 2
 /DBB$/ T	/2 T	/n(@ 	 	SN
< 3 N
<bQH7 QHh
$= 
0&$)B &$R- 9 -.@2 @	 	$$o $$N,77 ,7^(77 (7V/"8 /"d16 1D	. 	A6  	B
  dJs$   F9 G 9GGGG