
    qi>w                       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mZ dd	lm Z  dd
l!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP ddlQmRZRmSZSmTZT ddlUmVZVmWZW ddlXmYZY 	 ddlZZ[	 ddl]m^Z^ erddlambZb ddlcmdZd ddlemfZf d Zgd Zhd Zid Zj G d deT      Zk G d dek      Zl G d  d!el      Zm G d" d#      Znd$ Zo G d% d&ek      Zp G d' d(ep      Zq G d) d*ep      Zr G d+ d,ep      Zs G d- d.ep      Zt G d/ d0ep      Zu G d1 d2      Zv G d3 d4eT      Zw G d5 d6ep      Zx G d7 d8ep      Zy G d9 d:ep      Zz G d; d<ep      Z{ G d= d>ep      Z| G d? d@ep      Z}y# e\$ r dZ[Y w xY w# e_$ r  e`d      Z^Y w xY w)Aam  
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
  - UserDefinedSetVariable: For set subclasses
  - UserDefinedTupleVariable: For tuple subclasses
  - UserDefinedExceptionObjectVariable: For exception 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   )graph_break_hints	polyfills	variables)create_call_function)$do_not_convert_to_tracable_parameter)handle_observed_exceptionObservedAttributeErrorObservedKeyErrorObservedTypeErrorObservedUserStopIterationraise_observed_exceptionunimplemented)get_external_object_by_index)GuardBuilderinstall_guard)

AttrSourceCallFunctionNoArgsSourceDataclassFieldsSourceDictGetItemSourceGetItemSourceRandomValueSourceTypeDictSourceTypeMROSource
TypeSourceUnspecializedParamBufferSource)check_constant_argscmp_name_to_op_mappingdict_methodsfrozenset_methodsget_custom_getattrhas_torch_functionis_frozen_dataclassis_lru_cache_wrapped_functionis_namedtuple_clsis_wrapper_or_member_descriptoristypelist_methodsnamedtuple_fieldsobject_has_getattributeproxy_args_kwargsraise_args_mismatchraise_on_overridden_hashset_methodstensortype_to_dtypetuple_methodsunpatched_nn_module_getattr   )raise_type_error_excValueMutationNewVariableTracker)ConstDictVariableDefaultDictVariable)SizeVariable)
PyTreeSpec)	PyCodegenInstructionTranslatorConstantVariablec                 F    | t         j                  t        j                  fv S N)object__setattr__BaseExceptionvals    j/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/torch/_dynamo/variables/user_defined.pyis_standard_setattrrK   y       6%%}'@'@AAA    c                 F    | t         j                  t        j                  fv S rD   )rE   __delattr__rG   rH   s    rJ   is_standard_delattrrP   }   rL   rM   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_apirR   _pytest.recwarnrS   appendImportErrorsysmodulesget&_AssertRaisesRegexWithHighlightContext)ctxf_ctxsrR   rS   ms        rJ   is_forbidden_context_managerr_      su    F43m$o& KKOO?@@q@a>>?&=  s   .A2 2	A>=A>c                 z    t        |       xr/ t        t        |       d      xr t        |       j                  dk(  S )N__name__cython_function_or_method)callablehasattrtypera   )objs    rJ   is_cython_functionrg      s9     	>DIz*	>I"==rM   c                       e Zd ZU eed<   y)UserDefinedVariablevalueN)ra   
__module____qualname__rE   __annotations__ rM   rJ   ri   ri      s    MrM   ri   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               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d Zd Zd Z xZS ) UserDefinedClassVariablerj   returnc                 @    t        |   di | || _        d| _        y )NFrn   )super__init__rj   ban_mutationselfrj   kwargs	__class__s      rJ   rt   z!UserDefinedClassVariable.__init__   s$    "6"
 "rM   c                     | j                   S rD   rj   rw   s    rJ   as_python_constantz+UserDefinedClassVariable.as_python_constant       zzrM   c                     | j                   S rD   r{   r|   s    rJ   as_proxyz!UserDefinedClassVariable.as_proxy   r~   rM   c                 N    | j                   j                   d| j                   dS N())ry   ra   rj   r|   s    rJ   __repr__z!UserDefinedClassVariable.__repr__   s$    ..))*!DJJ<q99rM   c                  ~    t         j                  t         j                  t         j                  t         j                  hS rD   )torchdevicefinfoiinfoSizern   rM   rJ   _constant_fold_classesz/UserDefinedClassVariable._constant_fold_classes   s*     LLKKKKJJ	
 	
rM   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)r   TensorcudaFloatTensorDoubleTensor
HalfTensorBFloat16Tensor
ByteTensor
CharTensor	IntTensorShortTensor
LongTensorStreamEventxpurd   updater   setr3   keys)_in_graph_class_lists    rJ   _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ErM   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                  t        j                  t        j                  hj                  |      S c c} w rD   )dirbuiltins
isinstancegetattrre   
issubclassrG   __new__rE   dictr   	frozensettuplelistunion)name
exceptionss     rJ   supported_c_new_functionsz2UserDefinedClassVariable.supported_c_new_functions   s    
 H
'(D14878T2MB Hd#++

 
 NNLLKKMMLL
 %

	
s   ACc                 .    | t         j                         v S rD   )rp   r   r{   s    rJ   is_supported_new_methodz0UserDefinedClassVariable.is_supported_new_method   s     0JJLLLrM   c                 :    | j                   | j                         v S rD   )rj   r   r|   s    rJ   can_constant_fold_throughz2UserDefinedClassVariable.can_constant_fold_through   s    zzT88:::rM   txr@   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
   DeletedVariablerj   __dict__rw   r   keymutated_attrs       rJ   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))))rM   r   r9   c           
      P	   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 |dk(  rN| j                  xr t        | j                        }t        j                  || j                  j                  |      S | j                  t        j                   t        j"                  hv r|dk(  rt$        | M  ||      S 	 t)        j*                  | j                  |      }|dk(  r%t2        j5                        rt$        | M  ||      S |t6        v r2t9        t:        j<                        st        j                  | ||      S t9        t>              r0t        j                  ||jA                  | j                        |      S t9        |tB              rzt9        |jD                  tF              r>t        j                  ||jD                  jH                        }	|	jK                  || gi       S t        jL                  |jD                  | |      S t9        |t:        jN                        r3|jA                  d | j                        }
t        j                  ||
|      S |rEt)        jP                  |      r0t        j                  ||jA                  | j                        |      S  |jR                  |      r |j
                  |      S t9        |tT        jV                        r ||      S | j                  t        j                   u rt        j                  | |      S |tY        | j                  di       v s>| j                  jZ                  j]                  d      s| j                  jZ                  dk(  r|rt        j                  |||      S |r7t)        j^                  |      s"ta        |      st        j                  |||      S t$        | M  ||      S # t,        $ rP t/        | j                        t.        u r/t1        t,        |d	| j                  j                   d
| dg       nd }Y Kw xY w)Nr6   )rB   EnumVariablera   rl   r   source__mro__fromkeysztype object 'z' has no attribute ''argsr   r   ztorch.r   )1 rB   r   r   r   createrj   ra   rl   r
   GetAttrVariabler   r9   buildr   collectionsOrderedDictdefaultdictrs   var_getattrinspectgetattr_staticAttributeErrorre   r   rp   r   r"   r   typesFunctionTypestaticmethod__get__classmethod__func__propertyfgetcall_functionUserMethodVariableClassMethodDescriptorTypeismemberdescriptor
is_literalenumEnumr   rk   
startswithismethoddescriptorr*   )rw   r   r   rB   r   r   optionsattr_sourcerf   fget_vtfuncry   s              rJ   r   z$UserDefinedClassVariable.var_getattr   s   426++2IDKK.t:*#**4::+>+>??^#*#**4::+B+BCCZ(G,,T4C7CCY++D-*DK"((TZZ-?-?MM 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)//CLL4E4EF,,R$<<//d6RRU<<= ;;tTZZ0D"((T6::))#.&,,RTZZ1H&QQ&&&s+*#**3//TYY'$$ZZ;222,,T488WTZZR88JJ!!,,X6zz$$/&,,Rf== ..s33C8"((S&99w"2t,,q  	DJJ4'("'

(;(;'<<PQUPVVWX 	s   9 Q AR%$R%c                 N  	
 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
        r6   rA   Nimeang        c                     | |||||fS rD   rn   )weightsize_averageignore_indexreduce	reductionlabel_smoothings         rJ   normalize_argszIUserDefinedClassVariable._call_cross_entropy_loss.<locals>.normalize_argsa  s       rM   c                     ddl m}  | j                  j                  dt        j
                  j                  j                  gt        | |	gi              S )Nr6   wrap_fx_proxyr   r   proxy)	builderr   r   create_proxyr   nn
functionalcross_entropyr/   )
inputtargetr   r   r   
reduce_argr   r   r   r   s
      rJ   fake_cross_entropy_losszRUserDefinedClassVariable._call_cross_entropy_loss.<locals>.fake_cross_entropy_loss{  sq    . ,bii,,#HH''55 '!""((&%+	  rM   )r   rB   r   r
   LambdaVariable)rw   r   r   rx   rB   r   r  r   r   r  r   r   r   s    `     @@@@@@rJ   _call_cross_entropy_lossz1UserDefinedClassVariable._call_cross_entropy_lossU  s     	' +#**400)0060)006*#**40-&--f53,33C8	0 D+F+	
	 	0 ''(?@@rM   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 r3|dk(  r.t        j                  j                  || j                  g|i |S | j                  t        j                  u r!|dk(  r|d   j                  ||g |dd  |      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 t%        | j                  t&              r0|d	k7  r+t        j                  t&              j                  ||||      S t%        | j                  t(        t*        f      r0|d	k7  r+t        j                  t(              j                  ||||      S |d	k(  r| j                  t        j                  u rt-        |d   t.              r|d   j                  t        j                  u rd|r4t        |      dk7  r&t1        ||d
t        |       dt        |       d       t        j2                  i t        j                  t5                     S |d	k(  rVt.        j7                  | j                  j8                        r-|j:                  j<                  j?                  | |d   |dd        S |dk(  r<| j@                  r0tC        dtE        | j                        dtF        jH                         tJ        | =  ||||      S )N__subclasses__r   r   move_to_endr6   __eq__rj   __ne__r   1 args and 0 kwargs
 args and  kwargsmutation_typerF   zCClass attribute mutation when the __dict__ was already materializedzVDyanmo does not support tracing mutations on a class when its __dict__ is materializedgb_typecontextexplanationhints)&lenrj   r   r   r   r   r9   r   r
  r   r   r   r
   BuiltinVariablecall_custom_dict_fromkeyscall_methodrd   rB   r   r   r   r   r   rp   r0   r:   r8   r   r   r   r   track_new_user_defined_objectru   r   strr   SUPPORTABLErs   )rw   r   r   r   rx   r   ry   s         rJ   r  z$UserDefinedClassVariable.call_method  sE    $$D	Q 

(;(;;[[F{{#DKK1AB1&9"((TZZ-F-F-H&QQJJ;22K4K4KLL
",,FFDJJ!%)/  ZZ;222t}7L7&&r448fEEX#d)q.WT!Wg5N--djjDGMM.IJJX#d)q.WT!Wg5N--djjDGMM.IJJ

D)di.?,,T2>>r4vVV

S)$45$):K,,S1==b$fUUI

k55547$<=Q!8!88#d)q.#)4ykCK=@	 ..K++;K;M  Y#;#S#SJJ$
 99))GGQQR 
 ]"t'8'8]DJJt'33	 w"2tT6::rM   c                 B!   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}
  |
|i |S | j                  t(        j*                  u r8|j-                  t/        j0                  |t2        j4                        | g||      S | j                  t(        j6                  u rt9        |      dk(  r t        j                  j                  d       }n|^}}t        j:                  j<                  |t>        g|i |}tA        |j                  t(        j6                  |tC                     S tE        | j                        rv| j                  jF                  r3tI        dtK        | j                        d	d
gtL        jN                          t        j:                  t>              jP                  |g|i |S | j                  t(        jR                  u rt        j                  j                  d       }d9d}	  tU        jV                  |      jX                  |i |}dj^                  v rc|j^                  d   ja                  |      s&tI        dd| d| ddgtL        j\                         |j^                  d   jc                  |      }ng }d|j^                  v r|j^                  d   }t        jd                  jg                  ||tC                     S | j                  th        jj                  u rLt9        |      dkD  r|d   }nt        j                  j                  d       }t        jl                  |d   |      S | j                  tn        jp                  u rN|s tI        ddddgtL        j\                         |d   }|dd  }t        jr                  ju                  |||      S | j                  tv        jx                  u r"|s t        jz                  j                  ||      S | j                  t        j|                  j~                  u r`|s^t9        |      dk(  rP|d   j                         st        |d       t        j                  j                  ||d   j                               S t        t        | j                        t              r\t        | j                  d      rEt        | j                  d       r.| j                         r|j                  | j                        r| j                  rt        | j                        sdd!lJmK} dd"l9mL}mM} | j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  fv r7tI        d#| j                   | j                   d$g tL        jN                         | j                  t         j                  u rt        |d   ||f      rt        j                  j                  j                  stI        d%d| d&d'g       t        |d   |      r:|d   }|d   j                  }|d   j                         }|j                  |||      S  ||d   |d   j                  (      g|dd  z   }|j                  j                   j                  t        j:                  t              | |      }|j                  |d)||       |S t        | j                        r~t        | j                        }| j                  j                  d*k(  rK|st9        |      dk7  r&t        |d*d+t9        |       d,t9        |       d-       |d   jc                  |      }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 dd/ljmk}$ t        j                  || j                   |$             S | j                  t        j                  u r?t        j:                  t              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        |&|(      d0      (      } nQ|)j                  t        j                  ur4t/        j0                  ||)j                        }*|*j                  |g i       } n| |'|)j                  <    |j                  |'       |j                  j                   j                  t        j:                  t              | |      }+|+j                  |d)||       |+S | j                  | j                         v st        | j                        rt         r| j                  t        v rt9        |      dk(  rt        |d   t        j                        r~t9        |d   j                        dkD  rct        d1 |d   j                  D              rD || |j                  j                  d2t        j                  gt        ||       3      },|,g}t        | j                  t        j                        rdd4lm}- dd5l2m}. t        |j                         D 	ci c]  \  }}	 |-|      |	 c}	}      }/ |.t        |            }0 | j                  |0j                         i |/j                         }1dd6lm}2 dd7lm}3  |2|1|3j                  |0|/            }( |||j                  j                  d2t        |(fi       3      }4|4S t        | j                  t        j                         rdd4lm}- dd5l2m}. t        |j                         D 	ci c]  \  }}	 |-|      |	 c}	}      }/ |.t        |            }0 | j                  |0j                         i |/j                         }5dd6lm}2 dd8lm}6  |2|5|6j%                  |0|/            }( |||j                  j                  d2t        |(fi       3      }4|4S  || |j                  j                  d2| j                  gt        ||       3      }4|4S | j                  t&        j(                  u rZt9        |      dk(  r'|d   j                         r|d   j                         }7nd }7t'        j(                  |7      }8t+        |8      S | j                  t,        j.                  u rEt9        |      dk(  r7t        |d   t        j                        rt        j0                  |d         S |j                  | j                        rZ| j                  rNt3               5  |j-                  t/        j0                  |t2        j4                        | g||      cd d d        S t6        9| m  |||      S c c}w c c}	}w # tZ        $ r2}tI        dd| d| ddgtL        j\                  |       Y d }~d }~ww xY wc c}	}w c c}	}w # 1 sw Y   qxY w):Nr   )SideEffectsr6   r   )NullContextVariabler   r  zTypedDict with optional keysz<Dyanmo does not support tracing TypedDict with optional keysz(Avoid using TypedDict with optional keysr  c                      y rD   rn   )iterablemaxlens     rJ   deque_signaturez?UserDefinedClassVariable.call_function.<locals>.deque_signature  s    rM   z&collections.deque() with bad argumentszargs=	, kwargs=z8Detected call to collections.deque() with bad arguments.z$Fix the call to collections.deque().)r  r  r  r  from_excr#  z.collections.deque() with bad iterable argumentzZCall to collections.deque() has an iterable argument that Dynamo cannot convert to a list.zeUse a simpler sequence type that Dynamo can convert to a list (e.g. list, tuple, list iterator, etc.)r$  )r$  r  z!missing args to functools.partialr   z0functools.partial requires at least one argumentzFix the functools.partial call.)r   keywordsz0torch.cuda.device() requires a constant argument	__enter____exit__)TorchCtxManagerClassVariable)BaseUserFunctionVariable3FunctionDecoratedByContextlibContextManagerVariablezunsupported contextlib.* APIz 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,attempted to trace contextlib.contextmanagerz.Tracing contextlib.contextmanager is disabled.z7Set torch._dynamo.config.enable_trace_contextlib = Truer   rt   ztorch.return_typesr  r  r  c              3   $   K   | ]  }|d u 
 y wrD   rn   .0xs     rJ   	<genexpr>z9UserDefinedClassVariable.call_function.<locals>.<genexpr>  s     8Q1D=8s   )AttributeMutationNewdefaultc              3   <   K   | ]  }|j                           y wrD   )	is_tensorr/  s     rJ   r2  z9UserDefinedClassVariable.call_function.<locals>.<genexpr>&  s     =!=   r   r   rA   )TupleVariable)register_graph_created_object)StreamVariable)EventVariableNN)r   r   r   r   r!   r   r
   rB   r   r}   itemsrj   r   r   CrossEntropyLossr  
contextlibnullcontextctx_managerr!  r   r   inline_user_function_returnr9   r   r	   construct_dictr   r  r  call_custom_dictr   r;   r8   r   __optional_keys__r   r  r   r  	call_dictdequer   	signaturebind	TypeError
USER_ERROR	argumentshas_force_unpack_var_sequenceforce_unpack_var_sequencelistsDequeVariableweakrefrefWeakRefVariable	functoolspartial	functionsFunctoolsPartialVariablewarningscatch_warningsCatchWarningsCtxManagerVariabler   r   is_python_constantr7   CUDADeviceVariabler   re   rd   is_standard_new"cls_supports_mutation_side_effectsr   r_   r   r+  r,  r-  _AsyncGeneratorContextManagerclosingredirect_stdoutredirect_stderrsuppress	ExitStackAsyncExitStack_GeneratorContextManagerr   _dynamoconfigenable_trace_contextlibkeys_as_python_constantr   r   r  rE   r  r)   r-   rk   r0   _field_defaultsr   extendzipindexallbaser3  NamedTupleVariabler   r   r<   r'   dataclassesfieldsr   	itertoolscountr   initr4  MISSINGr   r   default_factoryr   r   r   npr3   ListVariabler   stackr/   r   constantr8  r:   graph_bytecode_inputsr9  streamsr:  !make_construct_in_graph_stream_fnr   r   r;   make_construct_in_graph_event_fnrandomRandomRandomVariabler   MappingProxyTypeMappingProxyVariabler   %instantiate_user_defined_class_objectrs   ):rw   r   r   rx   r   r   constant_argsr1  kvr!  rx  dict_vtr$  r%  
bound_argser=  callbackfn	rest_argsr+  r,  r-  fn_var	args_listkwargs_dictcm_objrs  field_defaultsvar_tracker_kwargs
field_namevar_tracker	field_varr   rj   r3  tupfields_sourcedefault_kwargsindfield
factory_fnvarstackedrB   r8  
var_kwargsvar_argsstreamr9  r:  tensor_variableeventr;  seedrandom_objectry   s:                                                            rJ   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&777ZZ;22211%%b)*B*BC 
 ZZ;2224yA~"+"<"<"C"CD"I)-&$//@@D#)G '''.0	  $**%zz++:

O ^B*66	 =9,,T2<<RQ$Q&QQZZ;,,,//66t<FDW..?DDdUfU
 Z111!++J7UU " P"'vYvh ?%-F /99
 #,,Z8RRSUV:///#--h7??00f4D4F 1   ZZ7;;&4y1}7$55<<TB,,T!Wh??ZZ9,,,? R9*55	 aBQRI &&??V @   ZZ82224<<CCBOOZZ5::,,,VD	Q7--/$J //66r47;U;U;WXXtDJJ'.

K 

J $$&>>tzzJ0<6 zz88""****##$$))  :#zzl#'::, /; !;*66	 zzZ@@@ZQ24PQF }}++CC! N"'v$TU	2 d1g'CD!!WF $QI"&q'"A"A"CK!//I{KK HQQ H	 YY++II))&1F
 r:tV<Mtzz*&tzz2Fzz$$(<<SY!^',-t9+ZF}GD	 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 3//tzz1E1G  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&*=tAw}}== (0"))00' +48  y$**ell360 /8>G1%a(!+G
 )d4#113!446 R33"DD * #0))00')Evr#X #"M DJJ460 /8>G1%a(!+G
 )d4"

113!446 R23!BB * #0))00')Evr#  #" #00"))00'

 +48# #"ZZ6==(4yA~$q'"<"<">Aw113"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 <Ld  
D#D66(; Z>*55 	 	
x H8 Hb sJ   AA AA%AA 7AB	
0AB
*9ABA	ABA'ABBABBABc                     t        j                  | j                  dd      }t        |t              r|j
                  }|t        j                  u S )z"Check for __new__ being overriddenr   N)r   r   rj   r   r   r   rE   r   )rw   new_fns     rJ   r]  z(UserDefinedClassVariable.is_standard_new  s<    ''

ItDfl+__F''rM   rB   c                 
   | j                   rgt        | j                   |      }t        |j                  t        j
                               t        j                  t        | j                  |            S t        | -  ||      S rD   )r   r   r   
make_guardr   HASATTRr
   rB   rd   rj   rs   call_obj_hasattr)rw   r   r   r   ry   s       rJ   r  z)UserDefinedClassVariable.call_obj_hasattr  sc     ;;T2F&++L,@,@AB--gdjj$.GHHw'D11rM   c                 Z    |dk(  r| j                   j                  S t        |   ||      S )Nra   )rj   ra   rs   const_getattrrw   r   r   ry   s      rJ   r  z&UserDefinedClassVariable.const_getattr  s-    :::&&&w$R..rM   c                      yNTrn   r|   s    rJ   is_python_hashablez+UserDefinedClassVariable.is_python_hashable  s    rM   c                 ,    t        | j                        S rD   hashrj   r|   s    rJ   get_python_hashz(UserDefinedClassVariable.get_python_hash  s    DJJrM   c                 j    t        |t        j                        xr | j                  |j                  u S rD   )r   r
   rp   rj   rw   others     rJ   is_python_equalz(UserDefinedClassVariable.is_python_equal  s,    ui@@A *

ekk)	
rM   rq   Nr   r@   r   list[VariableTracker]rx   dict[str, VariableTracker]rq   r9   r   r@   r   r  rx   r  rq   r9   )ra   rk   rl   re   rE   rm   rt   r}   r   r  r   r   rT  cacher   r   r   r   r   r   r   r  r  r   r]  r  r  r  r  r  __classcell__ry   s   @rJ   rp   rp      sa   <":# : __
  
 __F  F: __    M M
;*U-5 U-S U-EV U-n>A@D; &	D;
 -D; 
D;Ls7#s7 &s7 -	s7
 
s7j(2)2142	2/
 
rM   rp   c                       e Zd Zed        Zy)!UserDefinedExceptionClassVariablec                     | j                   S rD   r{   r|   s    rJ   r  z$UserDefinedExceptionClassVariable.fn  s    zzrM   N)ra   rk   rl   r   r  rn   rM   rJ   r  r    s     rM   r  c                       e Zd Zy)NO_SUCH_SUBOBJNra   rk   rl   rn   rM   rJ   r  r        rM   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 )Nr6   )VariableBuilder)
r   r  r}   r=  r  r   random_callsr   rV   wrap_unspecialized_primitive)r   r  r   rx   r  r1  r  r  random_call_indexexample_valuer   s              rJ   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                       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	 d0	 d.dZd Z fdZdddefdZd Zd Zd Z	 	 	 	 	 	 	 	 d1 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(d* Z)d+ Z*d, Z+ xZ,S )2UserDefinedObjectVariablez_
    Mostly objects of defined type.  Catch-all for something where we only know the type.
    rj   
value_typeattrs_directly_modifed_on_dictN)r  
cls_sourcebase_cls_vt	init_argsrq   c                ,   t        |   di | || _        |xs t        |      | _        t        |      | j                  u sJ || _        |&| j                  t        | j                        | _        || _        || _	        t               | _        dd lmc m} |j                  | j                        | _        |j                  | j                        r@| j                  r3t#        | j                  j%                  t&        j(                               y y y )Nr   rn   )rs   rt   rj   re   r  r  r   r   r  r  r   r  torch.utils._pytreeutils_pytreeis_constant_classis_pytree_constant_classr   r  r   EQUALS_MATCH)	rw   rj   r  r  r  r  rx   pytreery   s	           rJ   rt   z"UserDefinedObjectVariable.__init__  s     	"6"
$3UE{doo---$$++"9(5DO '" /2e+,,(.(@(@(Q%##DOO4$++001J1JKL :E4rM   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methodra   r   r   )r  ra   r  r   rj   ry   )rw   inners     rJ   __str__z!UserDefinedObjectVariable.__str__  sU    (( 
 
 

J=>E..))*!E7!44rM   c                 b    | j                   j                   d| j                  j                   dS r   ry   ra   r  r|   s    rJ   r   z"UserDefinedObjectVariable.__repr__	  +    ..))*!DOO,D,D+EQGGrM   c                      yNFrn   rw   r   s     rJ   is_underlying_vt_modifiedz3UserDefinedObjectVariable.is_underlying_vt_modified  s    rM   c                     | j                   S rD   r  r|   s    rJ   python_typez%UserDefinedObjectVariable.python_type  s    rM   c                 h    | j                   r| j                  r| j                  S t        |          S rD   )r  r   rj   rs   r}   rw   ry   s    rJ   r}   z,UserDefinedObjectVariable.as_python_constant  s.    ((T[[ :: w)++rM   c                     | j                   r>t        | j                   j                  t        j                               | j
                  S t        |          S rD   )r   r   r  r   ID_MATCHrj   rs   guard_as_python_constantr  s    rJ   r  z2UserDefinedObjectVariable.guard_as_python_constant  s?    ;;$++001F1FGH::w/11rM   c                 .    t        |       s
J d|         y )Nz<calling torch function on object without __torch_function__ )r&   r|   s    rJ   torch_function_checkz.UserDefinedObjectVariable.torch_function_check!  s!    !$' 	
J4&Q	
'rM   c                 @    | j                          ddlm}  |||       S )Nr6   )get_torch_function_fn)r  torch_functionr  )rw   r   r  s      rJ   get_torch_fnz&UserDefinedObjectVariable.get_torch_fn&  s    !!#9$R..rM   r   r@   c                 f    | j                          ddlm}  ||| j                  |      ||||      S )Nr6   )call_torch_function)r  r  r  r  )rw   r   r  r   r   rx   r  s          rJ   r  z-UserDefinedObjectVariable.call_torch_function,  s;    !!#7"b!
 	
rM   c                      t         j                   t         j                  t         j                  t         j                  h} | S rD   )r  randint	randrangeuniform)fnss    rJ   _supported_random_functionsz5UserDefinedObjectVariable._supported_random_functions:  s0     MMNNNN	
 
rM   c                     |t        | j                  di       vr*	 t        j                  t	        | j                        |      S y # t
        $ r Y y w xY w)Nr   )r   rj   r   r   re   r   )rw   r   s     rJ   _maybe_get_baseclass_methodz5UserDefinedObjectVariable._maybe_get_baseclass_methodE  sT    wtzz:r::--d4::.>EE  " s   (A 	AAr9   c                 b   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        |      r(| j                  ||d   t        j                               S |t        j                   u rpt#        |      dk(  rb|s`|d   }t        |t$              s#t        j                  j                  t&              S  |j                  | j                  |j                  u       S t(        j*                  j,                  j.                  rJt        | j                  t0        j2                        r&t5        dd| j                   d| d| d| d	d
g       t        |t0        j6                        rl| j8                  }	d }
|	r| j;                  |      }
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 )Nr6   )rB   r   r   zcall_method on generatorobject=	, method=, args=r&  zWDetected a method call to a user-defined generator object. This is not fully supported.zSet `torch._dynamo.config.enable_faithful_generator_behavior = False`. Note that this may cause silent incorrectness, since we will eagerly unpack generators instead of lazily evaluating them.r  r   unpatched_nn_module_init	source_fnr   )+r   rB   r   r  rE   rt   r   rK   r   rj   	threadinglocalmethod_setattr_standardrP   r
   r   r  r  r  NotImplementedr   rg  rh  "enable_faithful_generator_behaviorr   GeneratorTyper   r   r   get_source_by_walking_mromutation_guardr  r   Moduler   r   __len__r   r  r   SEQUENCE_LENGTHrs   r  )rw   r   r   r   rx   rB   r   r  r  r   r  r  ry   s               rJ   r  z%UserDefinedObjectVariable.call_methodM  sF    	;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 6%djj\4&vYW]V^_!3+
 &%"4"45 	 $ > >t DIEUXX__5555F)DIf-D&12 %$++tvdkk44\5Q5QRS'DJJ88w"2tT6::rM   c           
         	 |j                         }|j                  j                  j                  |       sJ 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d|  d| d| ddg       Y ?w xY w)
Nz-non-const setattr name on user-defined objectr	  , name=z, value=zODetected a call to `setattr` of a user-defined object with a non-constant name.z!Ensure that the name is a string.r  z`Attempted setattr on a user-defined object that does not have an AttributeMutation mutation_type__set__)r}   NotImplementedErrorr   r   r   is_attribute_mutationr  add$try_get_descritor_and_setter_py_funcr  r  r   r   r9   r   r   
store_attrr
   rB   )rw   r   r   rj   directly_update_dicttmp
descriptorsetterdesc_sourcefunc_sourcedesc_varfunc_varr   s                rJ   r  z1UserDefinedObjectVariable.method_setattr_standard  sd   	**,D yy%%;;DA 	
1	
A
  //33D9;;DAC%("
F #"??"&"@"@"FK",Z-Di"PK*00ZM*00V[I $.--b$;;
 			))$e<))$//G # 	G!$wtfHUGDm:;	 	s   D, ,"EEc                     t        t        j                  | j                  dd              xr% t	        | j                  t
        j                         S )NrF   )rK   r   r   rj   r   r  r  r|   s    rJ   needs_slow_setattrz,UserDefinedObjectVariable.needs_slow_setattr  sD    &""4::}dC
 
 :TZZ99	:rM   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   r  r   r  ranger  rj   r
   LazyVariableTrackerr   r   rs   unpack_var_sequence)rw   r   r  ry   s      rJ   r2  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                     	 t        j                  t              j                  || gi        y# t        $ r t        |       Y yw xY w)NTF)r
   r  iterr   r   r   rw   r   s     rJ   rM  z7UserDefinedObjectVariable.has_force_unpack_var_sequence  sC    	%%d+99"tfbI  	%b)	s   +. AAc                     g }t        j                  t              j                  || gi       }	 	 |j	                  |      }|j                  |       $# t        $ r t        |       Y |S w xY wrD   )r
   r  r4  r   next_variablerV   r   r   )rw   r   resultiter_rs        rJ   rN  z3UserDefinedObjectVariable.force_unpack_var_sequence  sr    ))$/==b4&"M''+a   - )"-s   "A A+*A+c                 *    | j                  |dg i       S )N__next__)r  r5  s     rJ   r7  z'UserDefinedObjectVariable.next_variable  s    JB77rM   c                 Z    	 | j                   | j                         v S # t        $ r Y yw xY wr  )rj   r  rJ  r|   s    rJ   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                  4t5        dd| j                   d| d| d| dd	| j                   d
g       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rD   r[  )r0  r  s     rJ   r2  z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     9qA((*9r7  c              3   <   K   | ]  }|j                           y wrD   rA  )r0  r  s     rJ   r2  z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     DqA((*Dr7  z<attempted to call sourceless user-defined object as a methodr	  z, function=r  r&  zDynamo does not support this.zEnsure the user-defined object z, is constructed outside the compiled region.r  r   __self____call__)&r>  ro  valuesr  rj   r+   r   
MethodTyper   rC  r   r  _contextlib_DecoratorContextManagercloner
   r+  is_matching_clsry   r   autograd	grad_modeinference_moderB   moder   r   r   r9   r   rc   r  r   r  r   CLOSURE_MATCHr  rs   )rw   r   r   rx   r   rf   r  func_srcr*  obj_srcobj_varr   ry   s               rJ   r   z'UserDefinedObjectVariable.call_function  s}    $$&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 {{"Z%djj\TF'$yY_X`a ?9$**Eqr	 "$++z:H&,,Rx@H j9G%++BW=G))"wi$.>GGdjj!{{#DOOZ@f//0J0JKL##B
D&AAw$Rv66rM   c                 ,    t        | j                        S rD   )r%   rj   r|   s    rJ   _check_for_getattrz,UserDefinedObjectVariable._check_for_getattr)  s    !$**--rM   c                     t        |t              syt        |j                  t        j                        xs= t
        j                  j                  j                  j                  |j                        S r  )
r   r   r   r   BuiltinFunctionTyper   _Crg  r  is_instancemethod)rw   subobjs     rJ   _is_c_defined_propertyz0UserDefinedObjectVariable._is_c_defined_property,  sV    &(+ KK22
 CXX##55fkkB	CrM   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 rD   )r   r   rj   r  r.   r   isgetsetdescriptorrZ  re   __getattribute__r   )rw   r   rY  s      rJ   _getattr_staticz)UserDefinedObjectVariable._getattr_static8  s    ''

D.I 'tzz2n$))&1))&1**62 $**%66tzz4HF  %TZZ0V~5M ! rM   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   re   rj   
isfunctionr  rw   	attr_namer%  r&  s       rJ   should_skip_descriptor_setterz7UserDefinedObjectVariable.should_skip_descriptor_setterR  sb    ++D,<iN
''Z(8)TJ!!&) dAAArM   c                     t        j                  t        | j                        |d       }t        j                  t        |      dd       }t        j                  |      r||fS y )Nr  )r   r   re   rj   r`  ra  s       rJ   r!  z>UserDefinedObjectVariable.try_get_descritor_and_setter_py_func`  sT    ++D,<iN
''Z(8)TJf%''rM   c                    |j                   j                  j                  | |      rC|j                   j                  j                  | |d      }t	        |t
        j                         S || j                  j                  v S r   r   r   s       rJ   r   z1UserDefinedObjectVariable.has_key_in_generic_dictg  r   rM   c                 L   | j                   J t        t        | j                        j                        D ]]  \  }}||j
                  v s|dk7  r"t        | j                         }t        ||      }n| j                   }t        |      }t        ||      }t        d|      D ]l  }t        | j                         }t        ||      }t        |      }t        |j                  t        j                  t        j                   |d                   n | j"                  rut%        | j                  d      r_|| j                  j
                  vrGt        | j"                  j                  t        j                  t        j&                  |                   |c S  t)        dd| d	t        | j                         d
t        | j                        j                   d| dt        | j                        j                   d| d| j                   dgt*        j,                         y )Nr   r6   T)r   invertr   )attrz#could not find name in object's mrozname=z, object type=z, mro=zCould not find name `z	` in mro zEnsure the name `z` is defined somewhere in z's type hierarchy.r  )r  	enumeratere   rj   r   r   r   r   r   r   r0  r   r  rT  rU  r   DICT_CONTAINSr   rd   NOT_PRESENT_IN_GENERIC_DICTr   r   rK  )	rw   r   idxklass
mro_sourceklass_sourcedict_source
out_source
absent_idxs	            rJ   r  z3UserDefinedObjectVariable.get_source_by_walking_mron  s   ***#D$4$<$<= #	"JCu~~%!8!.t!?J#0S#AL#'??L,\:.{DA
"'3- J!.t!?J#0Z#HL"0">K!#..%-- , : :T KK

J7DJJ$7$77!..%-- , H Ht "!G#	"J 	9D6TZZ0@/ATZZHXH`H`Gab/vYtDJJ?O?W?W>XY#D6)CDJJ<Oab"--		
rM   c                 0   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#                  | |      r{|j                  j                   j%                  | |d      }t'        |t        j(                        r7t+        t,        |dt        | j
                        j.                   d| dg	       |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        j                  | j
                  jf                  |t8              }||
u xrP | j2                  d uxr@ | j                  d uxr0 ti        | j
                  d
      xr || j
                  jj                  v}t'        |
tl              r_| j                  r| jo                  |      }t        |d      }tq        jr                  ||
jt                  |      }|j                  || gi       S t'        |
tv        jx                        rA|
j{                         \  }\  }}t'        | t|              sJ | j~                  j                  |   S t'        |
t              rO|rt        | jo                  |      d      }|
j                  | j
                        }tq        jr                  |||      S t'        |
t              rRd }|rt        | jo                  |      d      }t        j                  |
j                  | j                  |d      ||      S t'        |
t<        j                        r3|
j                  | j
                  d       }tq        jr                  |||      S t        |
      rt        j                  |
d| |      S t        j                  t        |
      dt8              t8        urt        t        |
      j                        sd }d }| j2                  r>| jo                  |      }t        t        |      d      }tq        jr                  ||
|      }nt        |
      }t5        t        | j
                              }t        j                  |
j                  j                  ||      j                  || |gi       S t'        |
t<        j>                        sJt'        |
t<        j                        r#t'        | j
                  tP        jR                  jT                        rt        | j
                  |      }||
u r;ti        |
d      r/|
j                  }
|
}|rt        |d      nd }||
u rti        |
d      r/t'        |
t<        j                        r|j                  | j
                  urt'        |j                  t<        j>                        s^t_        d d| j
                   d| d!| d"|j                   d#|j                   
d$| d%| d&| j
                   d'|j                   d(	d)g       d }|t        |d*      }tq        jr                  ||j                  |      }t        j                  |j                  |      S |
j                  }nt'        |
t<        j>                        sJ |
}t        j                  |      r.d }|r| jo                  |      }t        j                  || ||      S t        j                  |      rtq        jr                  |||      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r$t        |
      s>tP        j                  j                  j                  j                  |
      st        |
      rd|i}t        j0                  | |fi |S |r3|r| jo                  |      }t        j                  j                  |
|      S | j2                  it        j                  | j
                  jf                  |t8              }||
u r6t        | j2                  |      }t        j                  j                  ||      S tq        jr                  ||
      S t+        t,        |dt        | j
                        j.                   d| dg	       y # t        $ r t        |       Y 	Kw 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 |7t_        dd| j
                   d| d| d| d| j
                   d| ddg       Y 
Cw xY w),Nr6   rA   r]  r   Tr   r   z' object has no attribute 'r   r   r   ry   __getattr__z1User-defined object with non-function __getattr__r	  r  z, getattr_fn=z!Found a non-function __getattr__ z from a user-defined object z  when attempting to getattr ``z3Ensure the object's __getattr__ is a function type.r  r   r  r   r   r  __wrapped__r   _torchdynamo_inlinez5User-defined object method with non-function __func__r
  z, method.__self__=z, method.__func__=zMethod z (name=z) of user-defined object z has a __func__ (z) that is not a function type.z5Ensure that the method's __func__ is a function type.rC  )_buffers_parameters)_r   rB   r   r   r.   rj   r   r   re   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   r   r  rp   r^  r  rT  r   r   r5   UnspecializedNNModuleVariabler+   ry  r   rx  _modules manually_trace_nn_module_getattrr   r   r  rt  NNModuleVariableset_nn_module_stack_sourceget_nn_module_stack_sourcer   r  r  rt   ry   rd   r   r   r  r9   r   r   _collections_tuplegetter
__reduce__UserDefinedTupleVariable	_tuple_vtr=  r   r   r   r   r   r   r(   WrapperUserMethodVariabler*   r   r  rF  r   rw  rC  ismethodr`  rg  rh  inline_inbuilt_nn_modulesFSDPManagedNNModuleVariableexportinstall_free_tensorsr    _wrap_sourcerW  r  rX  rg   r1  )rw   r   r   rB   r   getattribute_fn
new_sourcer8  r   r  rY  
getattr_fnoutr  subobj_from_classis_accessible_from_type_mror   _rl  r   r  descriptor_sourcedescriptor_get_sourcedescriptor_var	owner_vardynamic_subobjself_source	object_vtsrc_from_classs                                rJ   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&)";";<("D,5566QRVQWWXY M:(G,,T4C7CC
 ;J!!__
,G+D,<HHH3	))$/Fh 	>UXX__----F#22JJ  $
 ' 0t+04'0 

J/0 DJJ/// 	$ fh'{{77=#FF3%++BFKG((dVR88 9 9: !++-KAxQ d$<===>>'',,- + $D$B$B4$H*U>>$**-D"((T6::,I* 't'E'Ed'KZX	//  [1#	   ? ?@>>$**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%$[&-djj\iP^O_ `//=/F/F.GGYZhZqZqYr%t*1.1ANghlhrhrgs t))7)@)@(AA_)a !X#	 #'K)&0&D / 5 5N33[!I %77&//  !&%*<*<===/ 	. $ > >t DI 33$)F  ##N3&,,Rv>> $$>>dI$I$IJ4!H!HI YY%%)=)=)R)R 227TJ&&v.F'/788##));;FC%f-#V, 00tGwGG.!;;DAF 44;;FFKK ??.(/(>(>

,,dN)% )F2)3DOOT)J(<<CC-~   ',,R88 	!d4::&//00KD6QRST	
{ * .)"-.@  1	#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 
'O%djj\mJ<X"CJ<Oklplvlvkw x4486!< NS1	s+   9g:  h :hhGp9pp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   r  r   r  r   r
   rB   r   r   r   r   r   )rw   r   r   var_vts       rJ   r  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
c                 0    t        | j                  |        yr  r1   rj   r|   s    rJ   r  z,UserDefinedObjectVariable.is_python_hashable  s     T2rM   c                 ,    t        | j                        S rD   r  r|   s    rJ   r  z)UserDefinedObjectVariable.get_python_hash  s    DJJrM   c                 2    | j                   |j                   u S rD   r{   r  s     rJ   r  z)UserDefinedObjectVariable.is_python_equal  s    zzU[[((rM   r  r  r  )Fr  )-ra   rk   rl   __doc__ri   _nonvar_fieldsrt   r  r  r   r  r  r}   r  r  r  r  r   rT  r  r  r  r  r  r,  r2  boolrM  rN  r7  r>  r   rT  rZ  r^  rc  r!  r   r  r   r  r  r  r  r  r  s   @rJ   r  r    s   
 	( 
	+	+	N %M 
%MN	5 	5H# H,2

/
 __  A; &	A;
 -A; 
A;H NS(0)(0T:
/"0G D 887#87 &87 -	87
 
87t.
C4*0
dp
d	<)<14<	<" )rM   r  c                   p     e Zd Zed        Zdd fdZd Zd ZddZd fdZ	de
fdZd	 Zd
 Z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   rs  )rs  r   )
rr  rs  r'   rd   r   r9   r   r   r   r  )r   rj   r   rs  	field_mapr  s         rJ   r   zFrozenDataClassVariable.create  s    &"5)))	E] 	Euejj)(7(=(=E5::.=z&%**=)	%**%	 'uYvNNrM   rq   c                 <    t        |   |fi | |i }|| _        y rD   )rs   rt   rs  )rw   rj   rs  rx   ry   s       rJ   rt   z FrozenDataClassVariable.__init__  s&    )&)>FrM   c                 .   ddl m} dd lmc m} t        | j                  |j                  |j                  |j                  f      st        d      t        | j                  |j                        r|j                         S 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)rr  rs  r  r  r  r+   rj   TreeSpecLeafSpecConstantNoder  treespec_leafrv  r   r}   r   rV   r  )rw   rs  r  r   rx   r  datactors           rJ   r}   z*FrozenDataClassVariable.as_python_constant  s     	',,JJ&//6;N;NO
 &R 
 $**foo.''))DJJ' 	&Ezz{{5::.AAC5)U3)-F5::&KK%	& !T$V$$rM   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  )	rr  rs  rj   r   r   rd   r  rV   r  )rw   rs  r   rx   r  r   r  s          rJ   r   z FrozenDataClassVariable.as_proxy*  s    &DJJ' 	#EKK

+446Eui(U]]%*uzz"E"	# !T$V$$rM   c                 \   ddl m} dd lmc m} t        | j                  |j                        rJ| j                  j                         r0j                  fd       j                  t        dd             y | j                         t        d      r-t        ddj                   dd	gt         j"                  
       g }g } |      D ]  }|j$                  s| j                  j'                  |j(                        }|Gt        ddj                   d|j(                   d|j(                   dg t         j"                  
       t+        |dd      r|j-                  |j(                  |f       |j-                  |        j                  fd       |D ]
  } |        |D ]  \  }	} |        t/        |      t/        |      z   }
|r6t1        d |D              }j                  j3                  |
|d             y j                  t        |
d             y )Nr   r  c                  (     j                  dd      S )Nztorch.utils._pytreer  load_import_fromcodegens   rJ   <lambda>z5FrozenDataClassVariable.reconstruct.<locals>.<lambda>G  s    001F
S rM   F__post_init__z#Frozen dataclass with __post_init__z
dataclass=z~Cannot reconstruct frozen dataclass with __post_init__ method, as it may have side effects that would be incorrectly replayed.z:Remove the __post_init__ method from the frozen dataclass.r  z#Frozen dataclass with missing fieldz, field=z,Cannot reconstruct frozen dataclass: field 'z!' was not tracked during tracing.r  c                  D     j                   j                              S rD   )append_outputcreate_load_const_unchecked)r  dataclass_clss   rJ   r  z5FrozenDataClassVariable.reconstruct.<locals>.<lambda>r  s     G))33MB rM   c              3   &   K   | ]	  \  }}|  y wrD   rn   )r0  r   r  s      rJ   r2  z6FrozenDataClassVariable.reconstruct.<locals>.<genexpr>~  s     9gdAT9s   )	push_null)rr  rs  r  r  r  r   rj   r  is_leafadd_push_nullextend_outputr   r  rd   r   ra   r   r  rv  rZ   r   r   rV   r  r   create_call_function_kw)rw   r  rs  r  pos_argskw_argsr  field_vtarg_vtr  
total_argskw_namesr  s    `          @rJ   reconstructz#FrozenDataClassVariable.reconstruct>  s   & 	-,djj&//2tzz7I7I7K!!S !!"6q%"@A ((*=/2=$]%;%;$<=R Q&22	 M* 	*E::{{uzz2HA()?)?(@U"Nuzzl [6 !6:-99: ui/

H56)	*$ 		
  	FFO	  	IAvFO	 ]S\1
999H!!//
HPU/V !!"6z5"IJrM   c                 `    || j                   |j                         <   t        |   |||      S rD   )rs  r}   rs   r  )rw   r   r   rj   ry   s       rJ   r  z/FrozenDataClassVariable.method_setattr_standard  s.    16D++-.w.r4??rM   c                 b    | j                   j                   d| j                  j                   dS r   r  r|   s    rJ   r   z FrozenDataClassVariable.__repr__  r  rM   c                      yr  rn   r|   s    rJ   r  z*FrozenDataClassVariable.is_python_hashable  s    rM   c                 h    t        t        d | j                  j                         D                    S )Nc              3   <   K   | ]  }|j                           y wrD   )r  )r0  args     rJ   r2  z:FrozenDataClassVariable.get_python_hash.<locals>.<genexpr>  s     PC#--/Pr7  )r  r   rs  rE  r|   s    rJ   r  z'FrozenDataClassVariable.get_python_hash  s%    EP4;;;M;M;OPPQQrM   c                 X   | j                         |j                         u }| j                  j                         |j                  j                         k(  }t        d t	        | j                  j                         |j                  j                               D              }|xr |xr |S )Nc              3   D   K   | ]  \  }}|j                  |        y wrD   )r  )r0  value_avalue_bs      rJ   r2  z:FrozenDataClassVariable.is_python_equal.<locals>.<genexpr>  s'      "
  ##G,"
s    )r  rs  r   ro  rm  rE  )rw   r  is_class_sameis_field_name_sameis_field_value_sames        rJ   r  z'FrozenDataClassVariable.is_python_equal  s    ((*e.?.?.AA![[--/5<<3D3D3FF! "
$'(:(:(<ell>Q>Q>S$T"
 
 K!3K8KKrM   rD   r  )r  r>   rq   Nr  )ra   rk   rl   r   r   rt   r}   r   r  r  r  r   r  r  r  r  r  s   @rJ   r  r    sT    O O  %D%(EKR@H# HRLrM   r  c                   8     e Zd Z	 	 d fdZ	 	 	 	 	 	 ddZ xZS )SourcelessGraphModuleVariablec                 &    t        |   |fi | y rD   )rs   rt   rv   s      rJ   rt   z&SourcelessGraphModuleVariable.__init__  s    
 	)&)rM   c                     t        j                  || j                  j                  j                        }| g|z   }|j                  |||      S rD   )r9   r   rj   forwardr   rB  )rw   r   r   r   rx   fn_variables         rJ   r  z)SourcelessGraphModuleVariable.call_method  sM     &++B

0B0B0K0KLv}--
 	
rM   r  r  )ra   rk   rl   rt   r  r  r  s   @rJ   r  r    s5    * 
	*
 &	

 -
 

rM   r  c                   p     e Zd Z fdZed        Z fdZed        Zed        ZddZ	ed        Z
 xZS )	"UserDefinedExceptionObjectVariablec                 p    t        |   |fi | t        j                  | j                  d      | _        y Nrn   )rs   rt   r
   ExceptionVariabler  exc_vtrv   s      rJ   rt   z+UserDefinedExceptionObjectVariable.__init__  s-    )&)11$//2FrM   c                     | j                   S rD   r  r|   s    rJ   r  z%UserDefinedExceptionObjectVariable.fn  s    rM   c                    |dk(  rm| j                  |      x}rZt        j                  |      rEt        |      dk(  r7|| j                  _        || j                  _        t        j                  d       S |dk(  rIt        |      dk(  r;|d   j                  dddd      r$| j                  j                  ||d   |d	          n#|d
k(  r| j                  j                  ||||      S t        | -  ||||      S )Nrt   r   rF   r   	__cause____context____suppress_context____traceback__r6   with_traceback)r  r   r   r  r  r   rj   r
   rB   is_constant_matchcall_setattrr  rs   rw   r   r   r   rx   r  ry   s         rJ   r  z.UserDefinedExceptionObjectVariable.call_method  s    J;;DAAA**62Fq #DKK"DJJO--d33M!D	QQ))],BO KK$$Ra$q':%%;;**2tT6BBw"2tT6::rM   c                 .    | j                   j                  S rD   )r  r  r|   s    rJ   r  z.UserDefinedExceptionObjectVariable.__context__  s    {{&&&rM   c                 .    | j                   j                  S rD   )r  r   r|   s    rJ   r   z'UserDefinedExceptionObjectVariable.args  s    {{rM   c                 8    | j                   j                  |      S rD   )r  set_context)rw   r  s     rJ   r  z.UserDefinedExceptionObjectVariable.set_context  s    {{&&w//rM   c                 .    | j                   j                  S rD   )r  exc_typer|   s    rJ   r  z+UserDefinedExceptionObjectVariable.exc_type  s    {{###rM   )r  zvariables.ExceptionVariable)ra   rk   rl   rt   r   r  r  r  r   r  r  r  r  s   @rJ   r  r    sc    G  ;, ' '    0 $ $rM   r  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)rX   rY   rZ   re   KeyedJaggedTensorrf   mods     rJ   is_matching_objectz,KeyedJaggedTensorVariable.is_matching_object  s3    kkoo=>$E490E0E#EErM   c                 P    ddl m} t        |      |u sJ t        |   |fi | y )Nr   )r  )torchrec.sparse.jagged_tensorr  re   rs   rt   )rw   rj   rx   r  ry   s       rJ   rt   z"KeyedJaggedTensorVariable.__init__  s+    CE{////)&)rM   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)	r   rg  rh  3force_unspec_int_unbacked_size_like_on_torchrec_kjtr   r   patchrs   r   r  s      rJ   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  )ra   rk   rl   r   r  rt   r   r  r  s   @rJ   r  r    s&    F F*- -rM   r  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)rX   rY   rZ   re   _IntWrapperr  s     rJ   r  z%IntWrapperVariable.is_matching_object   s1    kkoo;<$?49#??rM   N)ra   rk   rl   r   r  rn   rM   rJ   r  r    s     @ @rM   r  c                       e Zd Zy)RemovableHandleClassNr  rn   rM   rJ   r	  r	    s     	rM   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  )rs   rt   r  rl  )rw   r  rl  rx   ry   s       rJ   rt   z RemovableHandleVariable.__init__  s$     	"6"*rM   c                 $   |dk(  rx| j                   | j                  k7  r@|j                  j                  j	                  | j                          | j                  | _         t
        j                  j                  d       S t        | %  ||||       y )Nremove)
rl  REMOVEDr   r   remove_hookr
   rB   r   rs   r  )rw   r   method_namer   rx   ry   s        rJ   r  z#RemovableHandleVariable.call_method  sl    ("xx4<<'		&&22488<<<--44T::BT6:rM   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_handler  r  s   rJ   r  z5RemovableHandleVariable.reconstruct.<locals>.<lambda>&  s    00)+F rM   r   F)rl  r  r  r  r   rs   r  )rw   r  ry   s    `rJ   r  z#RemovableHandleVariable.reconstruct"  sN    88t||#!!
 !!"6q%"@AG$rM   c                     t         S rD   )r	  r|   s    rJ   r  z#RemovableHandleVariable.python_type/  s    ##rM   r<  r  r  )r  r>   )	ra   rk   rl   r  rt   r  r  r  r  r  s   @rJ   r  r    s.    G 		 
	;%$rM   r  c                   z     e Zd ZdZd fd	Z	 	 	 	 	 	 d fdZd Zd Zed        Z	ed        Z
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                  A| j                  J d       t	        j
                  i t        |      t                     | _        t        | _	        y )Nz@dict_vt must be constructed by builder.py when source is presentr  )
rs   rt   _dict_vtr   r
   r:   re   r8   r#   _dict_methods)rw   rj   r  rx   ry   s       rJ   rt   z UserDefinedDictVariable.__init__<  sm    )&)== ;;& R& &77DK/?/ADM *rM   c                 T   | j                  |      }|| j                  v r	 | j                  j                  ||||      S t        |   ||||      S # t        $ rL |dk(  rEt        | j                         t              r'| j                  d      r| j                  |d||      cY S  w xY w)Nr/  __missing__)	r  r  r  r  r   r   r  r   rs   r  s         rJ   r  z#UserDefinedDictVariable.call_methodH  s     11$7T'''
}}00T4HH w"2tT6:: $ M)"4#3#3#5t<88G++BtVLLs   A AB'%B'c                     t        | j                        j                  t        j                  t        j
                  j                  fv r| j                  j                  |      S t        rD   )	re   rj   r.  r   r   r   r  r2  r  r5  s     rJ   r2  z+UserDefinedDictVariable.unpack_var_sequencea  sQ    

$$MM##,,)
 
 ==44R88!!rM   c                 8    |j                  | j                        S rD   )is_modifiedr  r  s     rJ   r  z1UserDefinedDictVariable.is_underlying_vt_modifiedi      ''66rM   c                 .    | j                   j                  S rD   )r  user_clsr|   s    rJ   r#  z UserDefinedDictVariable.user_clsl  s    }}%%%rM   c                 .    | j                   j                  S rD   )r  r=  r|   s    rJ   r=  zUserDefinedDictVariable.itemsp  s    }}"""rM   c                 6    | j                   j                         S rD   )r  install_dict_keys_match_guardr|   s    rJ   r&  z5UserDefinedDictVariable.install_dict_keys_match_guardt  s    }}::<<rM   c                 6    | j                   j                         S rD   )r  install_dict_contains_guardr|   s    rJ   r(  z3UserDefinedDictVariable.install_dict_contains_guardw  s    }}88::rM   c                 0    t        | j                  |        yr  r  r|   s    rJ   r  z*UserDefinedDictVariable.is_python_hashablez       T2rM   rD   r  )ra   rk   rl   r  rt   r  r2  r  r   r#  r=  r&  r(  r  r  r  s   @rJ   r  r  3  sq    
*; &	;
 -; 
;2"7 & & # #=;rM   r  c                        e Zd ZdZd fd	Z	 	 	 	 	 	 d fdZd Zd Zed        Z	ed        Z
d Zd	 Zd
 Zd Zd Zd Z xZS )UserDefinedSetVariablez
    Represents user defined objects that are subclasses of set.

    Internally, it uses a SetVariable to represent the set part of the
    variable tracker. For everything else, it falls back to
    UserDefinedObjectVariable.
    c                    t        |   |fi | || _        t        |t              rt        nt
        }|t        u rt        nt        | _        | j                  | j                  J d       |t        u r%t        j                  i t                     | _        y |j                  di       }t        j                  j                   j"                  j%                         }t        j&                  |      j)                  ||i       | _        y y )Nz?set_vt must be constructed by builder.py when source is presentr  r  )rs   rt   _set_vtr   r   r   r2   r$   _set_methodsr   r
   SetVariabler8   rZ   r   rg  symbolic_convertr@   
current_txr  r   )rw   rj   set_vtrx   r  r  r   ry   s          rJ   rt   zUserDefinedSetVariable.__init__  s    )&)'s3c+6#+=KCT<<;;& Q& c!(44&6&8  #JJ{B7	]]33IITTV(88ESS	2   rM   c                     | j                  |      }|| j                  v r| j                  j                  ||||      S t        |   ||||      S rD   )r  r/  r.  r  rs   r  s         rJ   r  z"UserDefinedSetVariable.call_method  sT     11$7T&&&<<++BdFCCw"2tT6::rM   c                 6    | j                   j                         S rD   )r.  r}   r|   s    rJ   r}   z)UserDefinedSetVariable.as_python_constant  s    ||..00rM   c                     t        j                  | j                  d      t        j                  t
        j                  fv r| j                  j                  |      S t        )Nr.  )	r   r   rj   r   r.  r   r.  r2  r  r5  s     rJ   r2  z*UserDefinedSetVariable.unpack_var_sequence  sM    !!$**j9LL>
 
 <<33B77!!rM   c                 .    | j                   j                  S rD   )r.  	set_itemsr|   s    rJ   r8  z UserDefinedSetVariable.set_items  s    ||%%%rM   c                 .    | j                   j                  S rD   )r.  r=  r|   s    rJ   r=  zUserDefinedSetVariable.items  s    ||!!!rM   c                 8    |j                  | j                        S rD   )r   r.  r  s     rJ   r  z0UserDefinedSetVariable.is_underlying_vt_modified  s    ''55rM   c                 6    | j                   j                         S rD   )r.  r&  r|   s    rJ   r&  z4UserDefinedSetVariable.install_dict_keys_match_guard  s    ||99;;rM   c                 6    | j                   j                         S rD   )r.  r(  r|   s    rJ   r(  z2UserDefinedSetVariable.install_dict_contains_guard  s    ||7799rM   c                 b    t        | j                  |        | j                  j                         S rD   )r1   rj   r.  r  r|   s    rJ   r  z)UserDefinedSetVariable.is_python_hashable  s#     T2||..00rM   c                 6    | j                   j                         S rD   )r.  r  r|   s    rJ   r  z&UserDefinedSetVariable.get_python_hash  s    ||++--rM   c                 p    t        |t              xr% | j                  j                  |j                        S rD   )r   r,  r.  r  r  s     rJ   r  z&UserDefinedSetVariable.is_python_equal  s0    )
 :ll**5==9	:rM   rD   r  )ra   rk   rl   r  rt   r  r}   r2  r   r8  r=  r  r&  r(  r  r  r  r  r  s   @rJ   r,  r,    s    .
; &	
;
 -
; 

;1" & & " "6<:1.:rM   r,  c                   N     e Zd ZdZd fd	Z	 	 	 	 	 	 d fdZ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  )rs   rt   _list_vtr   r
   rz  r8   )rw   rj   list_vtrx   ry   s       rJ   rt   z UserDefinedListVariable.__init__  s_    )&)== ;;& R& &222EUEWXDM	 !rM   c                     | j                   J | j                  |      }|t        v r| j                   j                  ||||      S t        |   ||||      S rD   )rC  r  r,   r  rs   r  s         rJ   r  z#UserDefinedListVariable.call_method  s^     }}(((11$7\!==,,RtVDDw"2tT6::rM   c                     | j                   J t        | j                        j                  t        j                  u r| j                   j                  |      S t        rD   )rC  re   rj   r.  r   r2  r  r5  s     rJ   r2  z+UserDefinedListVariable.unpack_var_sequence  sH    }}(((

$$5==44R88!!rM   c                 8    |j                  | j                        S rD   )r   rC  r  s     rJ   r  z1UserDefinedListVariable.is_underlying_vt_modified  r!  rM   c                 0    t        | j                  |        yr  r  r|   s    rJ   r  z*UserDefinedListVariable.is_python_hashable  r*  rM   rD   r  )
ra   rk   rl   r  rt   r  r2  r  r  r  r  s   @rJ   rA  rA    s@    Y; &	;
 -; 
;"7rM   rA  c                   T     e Zd ZdZd fd	Z	 	 	 	 	 	 d	 fdZd Zd Z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   r?   r  )rs   rt   r  r   torch._dynamo.symbolic_convertr@   r2  rN  r
   r8  r8   )	rw   rj   tuple_vtr  rx   r@   r   elemsry   s	           rJ   rt   z!UserDefinedTupleVariable.__init__
	  s    >)>v>!>>!;;& S& M1&113BaL::2>E&44%5%7DN "rM   c                     | j                   J | j                  |      }|t        v r| j                   j                  ||||      S t        |   ||||      S rD   )r  r  r4   r  rs   r  s         rJ   r  z$UserDefinedTupleVariable.call_method	  s^     ~~)))11$7]">>--b$fEEw"2tT6::rM   c                     | j                   J t        | j                        j                  t        j                  u r| j                   j                  |      S t        rD   )r  re   rj   r.  r   r2  r  r5  s     rJ   r2  z,UserDefinedTupleVariable.unpack_var_sequence*	  sH    ~~)))

$$6>>55b99!!rM   c                 b    t        | j                  |        | j                  j                         S rD   )r1   rj   r  r  r|   s    rJ   r  z+UserDefinedTupleVariable.is_python_hashable0	  s#     T2~~0022rM   c                 6    | j                   j                         S rD   )r  r  r|   s    rJ   r  z(UserDefinedTupleVariable.get_python_hash4	  s    ~~--//rM   c                 p    t        |t              xr% | j                  j                  |j                        S rD   )r   r  r  r  r  s     rJ   r  z(UserDefinedTupleVariable.is_python_equal7	  s0    +
 >nn,,U__=	>rM   r<  r  )ra   rk   rl   r  rt   r  r2  r  r  r  r  r  s   @rJ   r  r  	  sD    &; &	;
 -; 
;"30>rM   r  c                   6     e Zd Z fdZdddeddf fdZ xZS )MutableMappingVariablec                 Z    t        |   |fi | t        j                  i       | _        y rD   )rs   rt   r
   r:   generic_dict_vtrv   s      rJ   rt   zMutableMappingVariable.__init__>	  s(    )&)(::2>rM   r   r@   r   rq   r9   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 )NrZ   r   )re   rj   rZ   r   abcMappingr   r
   r   r	   mapping_getr   r1  r   r   r   rV  maybe_getitem_constrB   rs   r   )rw   r   r   r  ry   s       rJ   r   z"MutableMappingVariable.var_getattrB	  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0rM   )ra   rk   rl   rt   r  r   r  r  s   @rJ   rT  rT  =	  s)    ?15 1S 1EV 1 1rM   rT  c                       e Zd Zy)r  Nr  rn   rM   rJ   r  r  \	  r  rM   r  )~r  r  r   r   r?  rr  r   rT  r   rt  r  rX   r  r   rX  rQ  typingr   typing_extensionsr   torch._dynamo.configr   torch.nntorch._guardsr   torch.utils._python_dispatchr   r   r   r	   r
   bytecode_transformationr   create_parameter_opr   excr   r   r   r   r   r   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/   r0   r1   r2   r3   r4   r5   rp  r7   r8   r9   dictsr:   r;   rO  r<   numpyry  ModuleNotFoundErrortorch.utils._cxx_pytreer=   rW   re   torch._dynamo.codegenr>   rK  r@   r|  rB   rK   rP   r_   rg   ri   rp   r  r  r  r  r  r  r  r  r  r	  r  r  r,  rA  r  rT  r  rn   rM   rJ   <module>rl     s  .           
       *   ( K 6 6 : F   A 0       . J I 9 2
 /D*BB$/ P
2 P
f(@ 	 	Sb) 3 b)JlL7 lL^
$= 
0,$)B ,$^- 9 -.@2 @	 	$$o $$NI7 IXR:6 R:j*7 *Z9>8 9>x16 1>	. 	gG  	B
  dJs$   4G' 9G4 'G10G14HH