
    ^jc                    *   U 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mZmZ ddlmZmZmZmZ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"m#Z# ddl$m%Z% dd	l&m'Z' dd
l(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z? ddl@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ ddlKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZd ddlemfZfmgZgmhZhmiZimjZjmkZkmlZl ddlmmnZnmoZo ddlpmqZq ddlrmsZsmtZt ddlumvZv 	 ddlwZx	 ddlzm{Z{ da~e%e   dz  ed<   de%e   fdZde%e   fdZer&ddlmZ dd lmZ dd!lmZ dd"lmZ dd#lmmZ dd$lmZmZ d%edefd&Zd%edefd'Zd(edefd)Zd*edefd+Zd,edefd-Z eeej.                  ej0                  ej2                  h      Zee}   ed.<   d*edefd/Zd*edefd0Z G d1 d2el      Z G d3 d4e      Z G d5 d6e      Z G d7 d8      Zd9d:d;ed<ef   d=eel   d>eeelf   delf
d?Z G d@ dAe      Z G dB dCe      Z G dD dEe      Z G dF dGe      Z G dH dIe      Z G dJ dKe      ZeeefZeD  ci c]6  } | | j\                  j_                         D ch c]  } e|      s| c}8 c}} Zee}ee   f   edL<    G dM dNe      Z G dO dPe      Z G dQ dRel      Z G dS dTe      Z G dU dVe      Z G dW dXe      Z G dY dZe      Z G d[ d\e      Z G d] d^e      Z G d_ d`e      Z G da dbe      Z G dc dde      Z G de dfe      Zy# ey$ r dZxY 3w xY w# e|$ r  e}d      Z{Y @w xY wc c}w c c}} w )gam  
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)CallableIterableSequence)AnycastNoReturnTYPE_CHECKINGUnion)is_typeddict)PyNumberSlots)SourceTracingContext)
OrderedSet)"is_traceable_wrapper_subclass_type)
GetAttrKeyis_structseq_class   )configgraph_break_hints	polyfills	variables)create_call_function)$do_not_convert_to_tracable_parameter)handle_observed_exceptionObservedAttributeErrorObservedKeyErrorraise_observed_exceptionraise_type_errorunimplemented)get_external_object_by_index)GuardBuilderinstall_guard)

AttrSourceCallFunctionNoArgsSourceDictGetItemSourceEphemeralSourceGetItemSourceRandomValueSourceTypeDictSourceTypeMROSource
TypeSourceUnspecializedParamBufferSource)base_exception_methodscheck_constant_argscmp_name_to_op_mappingdict_methodsexception_methodsfrozenset_methodsget_custom_getattrhas_torch_functionis_lru_cache_wrapped_functionis_namedtuple_clsis_pybind11_enum_memberis_torch_classis_wrapper_or_member_descriptoristypelist_methodsnamedtuple_fieldsobject_has_getattributeproxy_args_kwargsraise_args_mismatchset_methodstensortype_to_dtypetracked_reprtuple_methodsunpack_iterableunpatched_nn_module_getattr   )_RICHCOMPARE_OPS#AsPythonConstantNotImplementedErrorAttrMutationKindMutationTypeNO_SUCH_SUBOBJValueMutationNewVariableTracker)ConstDictVariablepydict_checkHashableTracker)is_nb_not_implementedtype_implements_nb_slot)SetVariable)
PyTreeSpec_SAFE_C_SLOTSreturnc                     t         ddl} ddl}ddl}t	               a | j                  | j
                  | j                  | j                  | j                  |j                  |j                  fD ]T  }t         j                  |j                         dD ].  }t        ||      st         j                  t        ||             0 V t         S )zC slot wrappers known to be safe to call at trace time.

    Covers tp_hash and tp_richcompare slots for C extension types.
    Used by UDOV's hash_impl and richcompare_impl MRO walks.
    Nr   )__eq____ne____lt____le____gt____ge__)rV   datetimedecimalrer   datetime	timedeltatimezoneDecimalPatternadd__hash__hasattrgetattr)r_   r`   ra   tpdunders        o/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/_dynamo/variables/user_defined.py_safe_c_slotsro      s     "MMMMOOJJ
 	;B bkk*V ;2v&!%%gb&&9:;	;     c                      t               S )zCBackward compat: returns the unified set (hash funcs are a subset).)ro    rp   rn   _safe_c_tp_hash_funcsrs      s
    ?rp   )	PyCodegenSideEffects)InstructionTranslatorBaseConstantVariable)DunderDictVariable)ListVariableTupleVariablevalc                 F    | t         j                  t        j                  fv S N)object__setattr__BaseExceptionr}   s    rn   is_standard_setattrr          6%%}'@'@AAArp   c                 F    | t         j                  t        j                  fv S r   )r   __delattr__r   r   s    rn   is_standard_delattrr      r   rp   ctxc                    g }	 ddl m}m} |j                  |       |j                  |       	 ddlm} |j                  |       	 ddlm} |j                  |       t        j                  j                  d      x}r|j                  |j                         | |v S # t        $ r Y {w xY w# t        $ r Y rw xY w# t        $ r Y iw xY w)Nr   )	RaisesExcRaisesGroup)RaisesContext)WarningsCheckerz!torch.testing._internal.jit_utils)_pytest.raisesr   r   appendImportError_pytest.python_apir   _pytest.recwarnr   sysmodulesget&_AssertRaisesRegexWithHighlightContext)r   f_ctxsr   r   r   r   ms          rn   is_forbidden_context_managerr      s    F
9i k"4m$3o& KKOO?@@q@a>>?&=)      s4   *B B- B< 	B*)B*-	B98B9<	CCobjc                 z    t        |       xr/ t        t        |       d      xr t        |       j                  dk(  S )N__name__cython_function_or_method)callablerj   typer   r   s    rn   is_cython_functionr      s9     	>DIz*	>I"==rp   valuec                 |    t        j                  |       xr& t        j                  |       xr dt	        | di       v S )N__is_pydantic_dataclass____dict__)inspectisclassdataclassesis_dataclassrk   r   s    rn   is_pydantic_dataclass_clsr      s>     	J$$U+	J'75*b+IIrp   KNOWN_DATA_DESCRIPTOR_TYPESc                 z    t        |       }|t        v ryt        |d      xr t        |d      xs t        |d      S )zTReturn True if *obj* is a data descriptor (has __get__ and (__set__ or __delete__)).T__get____set__
__delete__)r   r   rj   )r   rl   s     rn   is_data_descriptorr      sA    	cB	((2y! I;'"l";rp   c                 :    	 t        |        y# t        $ r Y yw xY w)NTF)hash	TypeErrorr   s    rn   is_hashabler     s#    S	 s    	c                   (    e Zd ZU eed<   dedefdZy)UserDefinedVariabler   namerW   c                     |t        | j                  di       vr*	 t        j                  t	        | j                        |      S y# t
        $ r Y yw xY w)zEGet method from the base class if not overridden in value's __dict__.r   N)rk   r   r   getattr_staticr   AttributeError)selfr   s     rn   _maybe_get_baseclass_methodz/UserDefinedVariable._maybe_get_baseclass_method  sT    wtzz:r::--d4::.>EE  " s   (A 	AAN)r   
__module____qualname__r   __annotations__strr   r   rr   rp   rn   r   r   
  s    M  rp   r   c            
       X    e Zd ZU ee   ed<   dee   deddf fdZdedef   dz  fdZ	dd	de
eef   fd
Zdd	dededefdZdee   fdZdefdZdefdZeej,                  deee      fd              Zeej,                  deee      fd              Zeej,                  dee   fd              Zededefd       ZdefdZdedefdZdd	dedefdZdedefdZ 	 	 	 	 d?dZ!dd	defdZ"	 d@dd	dededefdZ#dd	dedefdZ$dd	ded ed!e%dz  def
d"Z&dd	ded#ed!e%dz  def
d$Z'dd	ded#ed!e%dz  def
 fd%Z(dd	ded&ed!e%dz  def
d'Z)dd	defd(Z*dd	defd)Z+dd	defd*Z,dd	d+edef fd,Z-dd	def fd-Z.dd	defd.Z/dd	defd/Z0dd	defd0Z1dd	d1ededz  def fd2Z2e2Z3dd	d3e4e   de5eef   defd4Z6dd	ded3e4e   de5eef   def
 fd5Z7dd	de4d   fd6Z8dd	d3e4e   de5eef   def fd7Z9defd8Z:dd	dedd9fd:Z;dd	dedef fd;Z<dedefd<Z=defd=Z>defd>Z? xZ@S )AUserDefinedClassVariabler   kwargsrW   Nc                 @    t        |   di | || _        d| _        y )NFrr   )super__init__r   ban_mutationr   r   r   	__class__s      rn   r   z!UserDefinedClassVariable.__init__  s$    "6"
 "rp   .c                 <    | j                   rt        j                  S y r   )sourcer!   CLASS_MATCHr   s    rn   get_id_guard_typez*UserDefinedClassVariable.get_id_guard_type#  s    ;;+++rp   txrw   c                     | j                   rJ	 t        | j                   j                  t        j                               t        | j                        dfS t        | j                        dfS # t        $ r Y "w xY w)NFT)r   r"   
make_guardr!   r   r   r   NotImplementedErrorr   r   s     rn   	hash_implz"UserDefinedClassVariable.hash_impl(  si    ;;dkk44\5M5MNODJJ'.. DJJ%% ' s   AA. .	A:9A:otheropc                 d   ddl m} t        |d      s |j                  t              S |dv rJ	 |dk(  r| j
                  |j
                  k(  n| j
                  |j
                  k7  } |j                  |      S  |j                  t              S # t        $ r  |j                  t              cY S w xY w)NrF   rx   r   )rY   rZ   rY   )constantry   rj   createNotImplementedr   	Exception)r   r   r   r   ry   results         rn   richcompare_implz)UserDefinedClassVariable.richcompare_impl1  s     	/ug&*#**>::%%? X~ ZZ5;;.**3 
 /'..v66 '&&~66  ?.'..~>>?s   AB B/.B/c                     | j                   S r   r   r   s    rn   as_python_constantz+UserDefinedClassVariable.as_python_constantD      zzrp   c                     | j                   S r   r   r   s    rn   as_proxyz!UserDefinedClassVariable.as_proxyG  r   rp   c                 N    | j                   j                   d| j                   dS N())r   r   r   r   s    rn   __repr__z!UserDefinedClassVariable.__repr__J  s$    ..))*!DJJ<q99rp   c                  ~    t         j                  t         j                  t         j                  t         j                  hS r   )torchdevicefinfoiinfoSizerr   rp   rn   _constant_fold_classesz/UserDefinedClassVariable._constant_fold_classesM  s*     LLKKKKJJ	
 	
rp   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xpurj   updater   setrA   keys)_in_graph_class_lists    rn   _in_graph_classesz*UserDefinedClassVariable._in_graph_classesW  s    LLJJ""JJ##JJ!!JJ%%JJ!!JJ!!JJ  JJ""JJ!!LLKKJJJJIIIIOO! 
$ 5%  ''II$$IIOO &++-.1EEErp   c            	          t        t              D  ch 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                  t        j                  t        j                  t         j                  h	}|j#                  |      S c c} w r   )dirbuiltins
isinstancerk   r   
issubclassr   __new__r   dictr  	frozensettuplelistintfloatr   union)r   
exceptions	c_new_fnss      rn   supported_c_new_functionsz2UserDefinedClassVariable.supported_c_new_functionsv  s    
 H 
'(D14878T2MB Hd#++ 

  
 NNLLKKMMLLKKMMKK

	 z**# 
s   ADc                     t        |       sy| t        j                         v ryt        | dd       }t	        |t
              xr t        |      S )NFT__self__)r   r   r  rk   r	  r   r   )r   owners     rn   is_supported_new_methodz0UserDefinedClassVariable.is_supported_new_method  sH    5!,FFHHz40%&D+=e+DDrp   c                     | j                   | j                         v ryt        | j                   t              xr$ t	        | j                   t
        j                        S )NT)r   r   r	  r   r
  enumEnumr   s    rn   can_constant_fold_throughz2UserDefinedClassVariable.can_constant_fold_through  sA    ::4466 $**d+Q
4::tyy0QQrp   r   c                     | j                   j                  D ]!  }||j                  v s|j                  |   c S  t        S )z?Walk cls.__mro__ only (not the metaclass chain) to find *name*.)r   __mro__r   rK   r   r   bases      rn   lookup_cls_mro_attrz,UserDefinedClassVariable.lookup_cls_mro_attr  s>    JJ&& 	+Dt}}$}}T**	+ rp   c           
      v   | j                   }|t        d      t        | j                  j                        D ]c  \  }}||j
                  v s|j
                  |   }t        d|      D ]  }| j                  j                  |   }t        |      |f}	|	|j                  j                  v rB|j                  j                  j                  |	       t        |      }
t        |
|      }t        |      }t        |j                  t!        j"                  t$        j&                  |                    t        |      |f}	|j                  j(                  }|	|v r||	   c S |dk7  rt        |      }
t        |
|      }n|}t        |      }t+        ||      }|||	<   |c S  t        d| d| j                         )Nz)get_source_by_walking_mro requires sourcerF   keyr   z
Attribute z not found in MRO of )r   RuntimeError	enumerater   r  r   rangeidoutputguarded_mro_absent_keysrh   r*   r'   r)   r"   r   	functoolspartialr!   DICT_NOT_CONTAINSmro_source_cacher%   )r   r   r   r   idxklass
descriptor
absent_idxabsent_klass	cache_key
mro_sourceklass_sourcedict_sourcecache
out_sources                  rn   get_source_by_walking_mroz2UserDefinedClassVariable.get_source_by_walking_mro  s    >JKK#DJJ$6$67  	"JCu~~%"^^D1
"'3- J#'::#5#5j#AL!#L!14 8I BII$E$EE II5599)D!.v!6J+8Z+PL"0">K!#..%--l.L.LRVW  
^T2			22% ++!8!.v!6J#0S#AL#)L,\:.{DA
#-i !!A 	"D Zv-B4::,OPPrp   c                     t        | j                        j                  D ]!  }||j                  v s|j                  |   c S  t        S )z<Walk type(cls).__mro__ (the metaclass chain) to find *name*.)r   r   r  r   rK   r   s      rn   lookup_metaclass_attrz.UserDefinedClassVariable.lookup_metaclass_attr  sC    $,, 	+Dt}}$}}T**	+ rp   rM   c                     ddl m} t        | j                        }t	        |d      r|t        ur| j                  |dg i       S  |j                  d      S )NrF   rx   __bool__T)r   ry   r   r   rj   call_methodr   )r   r   ry   	metaclasss       rn   	bool_implz"UserDefinedClassVariable.bool_impl  sS     	/ $	9j)it.C##B
B;;&&&t,,rp   c                 R   t        | j                        }|t         u s/t        | j                        j                  t         j                  u r)t        j                  |t        | j                              S | j                  d      }|t        |d       | j                  |dg i       S )Nr   !'NoneType' object is not callable)	r   r   r   rM   buildreprr=  r   r@  )r   r   rA  	type_attrs       rn   	repr_implz"UserDefinedClassVariable.repr_impl  s    $	TZZ 0 9 9T]] J"((T$**-=>>..z:	R!DEJB77rp   reversec                 D   	 |j                         }t        | j                        j                  | j                  |      }|t        u rt        j                  |t              S t        j                  ||      S # t        $ r t        j                  |t              cY S w xY wr   )r   r   rM   rE  r   r   r   __or__)r   r   r   rI  	other_valr   s         rn   
nb_or_implz#UserDefinedClassVariable.nb_or_impl  s    	=002I djj!((Y?^#"((^<<$$R00 # 	="((^<<	=s   A9 9#BBc           	         | j                   t        | j                   |      nd }t        | j                        }|t        ur;d|j                  v r-t        dd| j                   d| dt        j                         | j                  |      }|t        urt        |      r| j                  ||||      S |j                  j                  j                  | |      r&|j                  j                  j                  | |      S | j!                  |      }|t        ur=t#        t        |      d      r| j%                  ||||      S | j'                  ||||      S |t        ur=| j                   rt)        | j                         nd }t+        j,                  |t        | j                        |      }t/        |t0        j2                        r+t5        j6                  |||      }	|	j9                  || |      S t/        |t0        j:                        r+t5        j<                  |||      }
|
j9                  || |      S t/        |t0        j>                        r*t5        j@                  ||	      }|j9                  || |      S t5        jB                  | |t        |      |	      S t        | j                        }|t        urx| j                  d
      }|t        ur_t/        |t0        jD                        rEt5        jF                  ||       jI                  |t4        jJ                  jM                  |      gi       S tO        tP        |d| j                  jR                   d| dg       y )N__getattribute__z&Custom metaclass with __getattribute__ztype(z) = z\Dynamo does not trace attribute access on classes whose metaclass overrides __getattribute__gb_typecontextexplanationhintsr   r  r   r   __getattr__ztype object 'z' has no attribute ''args)*r   r#   r   r   r   r   r   SUPPORTABLEr=  rK   r   resolve_meta_data_descriptorr*  side_effectshas_pending_mutation_of_attr	load_attrr"  rj   resolve_cls_descriptorresolve_cls_plain_attrr+   rM   rE  r	  typesWrapperDescriptorTyper   WrapperDescriptorVariabletp_descr_get_implMethodDescriptorTypeMethodDescriptorVariableClassMethodDescriptorTypeClassMethodDescriptorVariableGetAttrVariableFunctionTypeUserMethodVariablecall_functionry   r   r   r   r   )r   r   r   r   metacls	meta_attrcls_attrmetacls_source
metacls_vtwd_vtmd_vtcmd_vtmeta_getattrs                rn   var_getattrz$UserDefinedClassVariable.var_getattr  s    37++2IDKK.t tzz"$#59I9I#I@

|4y97'33* ..t4	N*/A)/L44Ry&QQ 99!!>>tTJ99))33D$?? ++D1>)tH~y1222tXvNN..r46JJ N*8<Z4N(..r4

3C^TJ)U%@%@A!;;Z ..r4DD)U%?%?@!::Z ..r4DD)U%D%DE"@@f //D*EE,,T4iQWXX tzz"$55mDL>1je007 !33L$GUU33::4@A2 
 	!!$**"5"5!66J4&PQRS	
rp   ro  r   c                    |dk(  rNt        j                  || j                  j                  | j                  xr t        | j                  d            S |dk(  rf|t        j                  d   u r$| j                  xr t        | j                        }n|}t        j                  || j                  j                  |      S t        j                  | j                  |      }|rt        j                  |||      S ddl
m}  |j                  |      rt        j                  ||      S t        j                  | |t        |      |      S )zEHandle data descriptors from the metaclass MRO (type.__dict__ slots).r   rV  r  rF   rx   )rM   rE  r   r   r   r#   r   r*   r  rO   ry   
is_literalr   rj  )r   r   r   ro  r   attr_sourceresolvedry   s           rn   r\  z5UserDefinedClassVariable.resolve_meta_data_descriptor]  s    :"((

##{{Jz$++z'J 
 9DMM)44"kkHmDKK.H$"((TZZ-?-?MM ((T:"((Xv>>&&&&x0"((X66((tT(^FSSrp   rp  c                 ~	   t        |t              rJ| j                  | j                  ||      nd}t	        j
                  ||      }|j                  || |       S t        |t              rt        |j                  t              r>t        j                  ||j                  j                        }|j                  || gi       S | j                  | j                  ||      nd}t	        j                  ||      }|j                  || |       S t        |t        j                         r*t	        j"                  ||      }	|	j                  || |       S t        |t              r7| j                  | j                  ||      nd}t	        j$                  ||      S t        |t        j&                        r7| j                  | j                  ||      nd}t	        j(                  ||      S t        |t*        j,                        rJ| j                  | j                  ||      nd}t	        j.                  ||      }
|
j                  |d|       S |t0        v r<t        |t        j2                        s"t	        j4                  | |t7        |      |      S t        |t        j8                        r1t;        | j<                        s|dvrt	        j>                  || |      S t        |t        j@                        r1t;        | j<                        s|dvrt	        jB                  || |      S tE        jF                  t7        |      dd      }t        |t        j2                        r|rn|tI        | j<                  di       v s>| j<                  jJ                  jM                  d      s| j<                  jJ                  d	k(  rt        j                  |||      S | jO                  ||||      S tE        jP                  |      r|r| j<                  tR        jT                  urn|tI        | j<                  di       v s>| j<                  jJ                  jM                  d      s| j<                  jJ                  d	k(  rt        j                  |||      S t	        j4                  | |t7        |      |      S t        j                  |||      S )
z(Handle descriptors found in cls.__mro__.NrV  )py_typer   )r   r   r   rU  r   r   ztorch.r   )+r	  staticmethodr   r;  r   StaticMethodVariablere  classmethod__func__propertyrM   rE  fgetrm  ClassMethodVariablerb  rh  ri  PropertyVariableMemberDescriptorTypeMemberDescriptorVariable_collections_tuplegetterTupleGetterVariabler/   rk  rj  r   rc  r8   r   rd  rf  rg  r   r   rk   r   
startswithinvoke_cls_descriptor_getismethoddescriptorcollectionsOrderedDict)r   r   r   rp  r   descriptor_sourcesm_vtfget_vtcm_vtru  tg_vtget_fns               rn   r`  z/UserDefinedClassVariable.resolve_cls_descriptor|  s8    h- ;;* ..r48 
 228DUVE**2tT::h,(++X6)//H4E4E4J4JK,,R$<< ;;* ..r48 
 11(CTUE**2tT::h ? ?@<<XfUF++Bd;; h) ;;* ..r48 
 --h?PQQ h : :; ;;* ..r48 
 55!2  h 9 9: ;;* ..r48 
 11(CTUE**2tT::
 ))*e((3
 ,,dDN6  x!<!<="4::.@@66V  x!;!;<"4::.@@55V  ''X	4Hfe001

J;;::((33H=::((G3&,,R6BB11"dHfMM %%h/JJk&=&==GDJJ
B??zz,,77Azz,,7 ',,R6BB,,T4hPVWW $$R6::rp   c                     |dk(  r%t         j                  |      rt        |   ||      S | j                  t
        j                  u r!t        j                  | |t        |            S t        j                  |||      S )z2Handle non-descriptor attributes from cls.__mro__.r  )r~  )r   r  r   rw  r   r  r  r   rj  r   rM   rE  )r   r   r   rp  r   r   s        rn   ra  z/UserDefinedClassVariable.resolve_cls_plain_attr  sr     9!9!Q!Q"
 7&r400::000,,T4hPP$$R6::rp   r2  c                 l   ddl m} d}d}| j                  rCt        | j                  |      }t        t	        |      d      }t        j                  |||      }nt        |      } |j                  d      }	t        j                  |j                  j                  ||      j                  ||	| gi       S )z7Trace a class-MRO descriptor's __get__(None, cls) call.rF   rx   Nr   rV  )r   ry   r   r#   r+   rM   rE  UserDefinedObjectVariabler   r   rl  r   r  rm  )
r   r   r   r2  r   ry   r  descriptor_get_sourcedescriptor_varnone_vars
             rn   r  z2UserDefinedClassVariable.invoke_cls_descriptor_get  s     	/  $;; *4;; =$.z:K/Li$X!,222zCTUN6zBN*#**40++''(
 -Xt,b
1		2rp   c                     | j                  d      }|rM| j                  xr t        | j                  d      }t        j                  || |      j                  |g i       S t        |d| j                          d       y )N__len__	source_fnzobject of type z has no lengthr   r   r#   r   rl  rm  r   python_type_namer   r   r   r   s       rn   len_implz!UserDefinedClassVariable.len_impl/  su    ,,Y7[[GZY%GF//46mBB'( 	t/D/D/F.G~VWrp   c                 $    | j                  |      S r   r  r   s     rn   	sq_lengthz"UserDefinedClassVariable.sq_length8      }}R  rp   c                 $    | j                  |      S r   r  r   s     rn   	mp_lengthz"UserDefinedClassVariable.mp_length;  r  rp   itemc                 t    | j                  d      }|r| j                  |d|gi       S t        |   ||      S N__contains__)r   r@  r   sq_contains)r   r   r  r   r   s       rn   r  z$UserDefinedClassVariable.sq_contains>  sC     ,,^<##BCCw"2t,,rp   c                     | j                  d      }|rM| j                  xr t        | j                  d      }t        j                  || |      j                  |g i       S t        |   |      S )N__iter__r  )r   r   r#   r   rl  rm  r   tp_iter_impl)r   r   r   r   r   s       rn   r  z%UserDefinedClassVariable.tp_iter_implF  si    ,,Z8[[HZZ%HF//46mBB'( w#B''rp   c                     | j                  d      }|rM| j                  xr t        | j                  d      }t        j                  || |      j                  |g i       S t        |d| j                          d       y )N__neg__r  bad operand type for unary -: 'rX  r  r  s       rn   nb_negative_implz)UserDefinedClassVariable.nb_negative_implO  y    ,,Y7[[GZY%GF//46mBB'( 	1$2G2G2I1J!L	
rp   c                     | j                  d      }|rM| j                  xr t        | j                  d      }t        j                  || |      j                  |g i       S t        |d| j                          d       y )N__pos__r  bad operand type for unary +: 'rX  r  r  s       rn   nb_positive_implz)UserDefinedClassVariable.nb_positive_implZ  r  rp   c                     | j                  d      }|rM| j                  xr t        | j                  d      }t        j                  || |      j                  |g i       S t        |d| j                          d       y )N__abs__r  bad operand type for abs(): 'rX  r  r  s       rn   nb_absolute_implz)UserDefinedClassVariable.nb_absolute_imple  sy    ,,Y7[[GZY%GF//46mBB'( 	+D,A,A,C+DAF	
rp   r%  c                 z   |d u }|rdnd}| j                  |      }t        |t        j                        ru| j                  xr t        | j                  |      }|r|gn||g}t        j                  || |      j                  ||i        t        j                  j                  d       S t        	| 1  |||      S )N__delitem____setitem__r  )r   r	  rb  rk  r   r#   r   rl  rm  ry   r   r   mp_ass_subscript_impl)
r   r   r%  r   	is_deleteattrr   r   rZ  r   s
            rn   r  z.UserDefinedClassVariable.mp_ass_subscript_implq  s     TM	 )}},,T2a++,[[BZT%BF%C5C<D((DFCQQD" --44T::w,Re<<rp   rZ  c                   	
 ddl m}  |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d      fdt        dt        d	t        d
t        dt        dt        dt        t        df   fd} ||i |\  	
dt        dt        dt        f	
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
        rF   rx   Nimeang        weightsize_averageignore_indexreduce	reductionlabel_smoothingrW   .c                     | |||||fS r   rr   )r  r  r  r  r  r  s         rn   normalize_argszIUserDefinedClassVariable._call_cross_entropy_loss.<locals>.normalize_args  s       rp   inputtargetc                     ddl m}  | j                  j                  dt        j
                  j                  j                  gt        | |	gi              S )NrF   )wrap_fx_proxyrm  r   proxy)	builderr  r*  create_proxyr   nn
functionalcross_entropyr>   )
r  r  r  r  r  
reduce_argr  r  r   r  s
      rn   fake_cross_entropy_losszRUserDefinedClassVariable._call_cross_entropy_loss.<locals>.fake_cross_entropy_loss  ss     / ,bii,,#HH''55 '!""((&%+	  rp   )ry  ry   r   rM   r  r   LambdaVariable)r   r   rZ  r   ry   r  r  r  r  r  r  r  r  s    `     @@@@@@rn   _call_cross_entropy_lossz1UserDefinedClassVariable._call_cross_entropy_loss  s    	' '>&6&=&=d&C,C,<,C,CD,I,C,<,C,CD,I&=&6&=&=d&C)@)9)@)@)H/F/?/F/Fs/K	#	)	 *	 $		
 '	 -	 ?C'(	0 D+F+	
	"	,;		 	4 ''(?@@rp   c                    ddl m} |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(  r"t        |      dk(  r|sddlm}  |||d         S t)        | j                  t*              r-|d	k7  r(|j-                  |t*              j#                  ||||      S t)        | j                  t.        t0        f      r-|d	k7  r(|j-                  |t.              j#                  ||||      S t        |      dk(  r6t3        |d   t        j4                        r|d
k(  r|d   j7                  |      S |d	k(  rt8        j;                  | j                  j<                        ru| j                  j<                  }|t*        j<                  t.        j<                  fv rg }	nt?        |dd        }	|j@                  jB                  jE                  | |d   |	|      S |dk(  r<| jF                  r0tI        dtK        | j                        dtL        jN                         tQ        | j                        }
|
tP        ur|
jR                  D ]  }||j                  v s|j                  |   }t3        |tT        jV                        rO| j
                  xr t        | j
                  |      }t        jX                  || |      j[                  |||      c S  n t\        | E  ||||      S )NrF   SourcelessBuilder__subclasses__r   fromkeysmove_to_endr  )generic_lenr  	__enter__r   r   zCClass attribute mutation when the __dict__ was already materializedzVDynamo does not support tracing mutations on a class when its __dict__ is materializedrP  rV  )/r  r  lenr   r   r   r#   r$   rM   rE  r  r  r  defaultdictr   DictBuiltinVariablecall_custom_dict_fromkeysr@  object_protocolr  r
  r  r   r  r  r	  GenericContextWrappingVariableenterr   r  r  r  r*  r]  track_new_user_defined_objectr   r   r   r   r[  r   r  rb  rk  rl  rm  r   )r   r   r   rZ  r   r  r   r  new_fn	init_argsrA  r1  methodr   s                rn   r@  z$UserDefinedClassVariable.call_method  sq    	/ $$D	Q 

(;(;;[[F{{#DKK1AB1&9"((TZZ-F-F-H&QQJJ;22K4K4KLL
"00JJDJJ!%)/  ZZ;222t}7L7&&r448fEEY3t9>&4r47++

D)di.?$++B5AAD$  

S)$45$):K$++B4@@T4QWXXIN47I$L$LM#7==$$Y#;#S#SJJ$
 ZZ''F$,,4435	 abN	99))GGQ	 H   ]"t'8'8]DJJt'33	 $	D "** 5>>)"^^D1F!&%*<*<=!%!NDKK1N(;;"D '-D&9:  w"2tT6::rp   c                     t        | j                  t              rRt        | j                  t        j
                        r.| j                  D cg c]  }t        j                  ||       c}S t        c c}w r   )	r	  r   r   r
  r  r  rM   rE  r   )r   r   r  s      rn   unpack_var_sequencez,UserDefinedClassVariable.unpack_var_sequence*  sQ     djj$'Jtzz499,M@D

KO))"d3KK!! Ls   A3c                 J   ddl m} ddlm}m} ddlm}m} t        ||      }	t        j                  j                         r| j                  t        j                  j                  u r|t        j                  st!        dddd	g
       |j"                  j                   j%                  |j'                  |t(              | g |      }
|
j+                  |dt-        |      |       |
S | j/                         rx|	rvt1        j2                  | | j5                         |D cg c]  }|j5                          c}i |j7                         D ci c]  \  }}||j5                          c}}      S | j                  t        j8                  j:                  u r| j=                  |||      S | j                  t>        j@                  u rddlm!}  ||i |S | j                  tD        jF                  u rbddlm} |j"                  j                   j%                  |j'                  |tH              | g |      }|j+                  |dt-        |      |       |S tK        | j                        rq| j                  jL                  r3t!        dtO        | j                        ddgtP        jR                  
       tU        jV                  jX                  |tH        g|i |S | j                  tD        jZ                  u rtT        j\                  j'                  d       }	 dDdt^        t`           d z  dtb        d z  dt`        fd}d }	  te        jf                  |      jh                  |i |}|to        d      d|jp                  v rts        ||jp                  d         }ng }d|jp                  v r|jp                  d   }tT        jt                  jw                  ||ty                     S | j                  tz        j|                  u rt        |      dk(  rt        |d   tT        j                        rt        |d   |      rp|d   j                         dv r[|d   j                  }t        ||d   j                               j                  }tU        j                  ||d   | j                         S | j                  t        j                  u rLt        |      dkD  r|d   }ntT        j\                  j'                  d       }tU        j                  |d   |      S | j                  t        j                  u rN|s t!        d!d"d#d$gtP        jl                  
       |d   }|dd  }tT        j                  j                  |||%      S | j                  t        j                  u r"|s tT        j                  j'                  ||      S |st        |      dk(  r || j                        x}p|d   j                         s:t        || j                  j                   d&| j                  j                   d'       |j'                  ||d   j5                               S t        t        | j                        t              r%t        | j                  d(      rt        | j                  d)      r| j                         r |j                  | j                        r| j                  rt        | j                        sdd*l\m]} dd+lMm^}m_} | j                  t>        j                  t>        j                  t>        j                  t>        j                  t>        j                  fv r7t!        d,| j                   | j                   d-g tP        jR                  
       |}| j                  t>        j                  u rt        |d   ||f      rt        j                  j                  j                  st!        d.d| d/d0g
       t        |d   |      r:|d   }|d   j6                  }|d   j                         } |j                  |||       S  ||d   |d   j                         g|dd  z   }|j                  t1        j2                  |t        j                        | g||      S t        | j                        rt        | j                        rh|st        |      dk7  r&t        |d1d2t        |       d3t        |       d4       |j"                  j                   j%                  | | t-        |      |      S |j                  t1        j2                  |t        j                        | g||      S | j                  t        j                  u r?dd5l:mq}! |j'                  |t              j                  |||      }" |!|"j6                        S t        | j                        r*t!        d6| j                   d7tP        jR                  
       n| j                  | j                         v st        | j                        rdd8l:mv}# t        r| j                  t        v rt        |      dk(  rt        |d   |#      r{t        |d   j6                        dkD  r`t        d9 |d   j6                  D              rA || |j"                  j                  d:t        j                  gt        ||       ;      }$|$g}t        | j                  t        j                        rdd<l:m~}% t        |j7                         D ci c]  \  }}t1        j2                  ||      | c}}      }& |%t-        |            }' | j                  |'j5                         i |&j5                         }(dd=lm}) dd>lm}*  |)|(|*j	                  |'|&            }+ |||j"                  j                  d:t
        |+fi       ;      },|,S t        | j                  t        j                        rdd<l:m~}% t        |j7                         D ci c]  \  }}t1        j2                  ||      | c}}      }& |%t-        |            }' | j                  |'j5                         i |&j5                         }-dd=lm}) dd?lm}.  |)|-|.j                  |'|&            }+ |||j"                  j                  d:t
        |+fi       ;      },|,S  || |j"                  j                  d:| j                  gt        ||       ;      },|,S | j                  t        j                  u rZt        |      dk(  r'|d   j                         r|d   j5                         }/nd }/t        j                  |/      }0t        |0      S | j                  tz        j                  u rat        |      dk(  rS|d   }1t        |1tT        j                        r|1j                  }1t        |1t              rtU        j                  |1      S  |j                  | j                        r| j                  s%t        j                  j                  j                   r| j                  j"                  t(        j"                  u r!	 t(        j#                  | j                         t%               5  |j                  t1        j2                  |t        j                        | g||      }|cd d d        S t&        3|   |||      S c c}w c c}}w # tj        $ r2}t!        dd| d| ddgtP        jl                  |       Y d }~d }~ww xY wc c}}w c c}}w # tj        $ r9}2t!        d@dA| j                   dB|2 dCg tP        jR                  
       Y d }2~2d }2~2ww xY w# 1 sw Y   xY w)ENr   ru   rF   )r  r  )r  get_device_context_managerz/P2P compilation disabled for P2POp constructionztorch.distributed.P2POpzP2P compilation is disabled.z3Set TORCHDYNAMO_ENABLE_P2P_COMPILATION=1 to enable.rP  r  r   )NullContextVariabler  zTypedDict with optional keysz<Dynamo does not support tracing TypedDict with optional keysz(Avoid using TypedDict with optional keysiterablemaxlenrW   c                      y r   rr   )r  r  s     rn   deque_signaturez?UserDefinedClassVariable.call_function.<locals>.deque_signature  s     rp   z&collections.deque() with bad argumentszargs=	, kwargs=z8Detected call to collections.deque() with bad arguments.z$Fix the call to collections.deque().)rQ  rR  rS  rT  from_excz*bound_args is None after signature binding)r  mutation_typer   )r  __exit__rV  z!missing args to functools.partialry  z0functools.partial requires at least one argumentzFix the functools.partial call.)rZ  keywords.z requires a constant argumentr  r  )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 = Trueztorch.return_types1 args and 0 kwargs
 args and  kwargs)SizeVariablezPydantic dataclass constructorzwDynamo graph breaks on pydantic dataclass constructors because validation mutates the instance outside traced bytecode.r{   c              3   <   K   | ]  }|j                           y wr   )	is_tensor).0xs     rn   	<genexpr>z9UserDefinedClassVariable.call_function.<locals>.<genexpr>o  s     =!=   rm  r  r|   )register_graph_created_object)StreamVariable)EventVariablez:Unsupported object.__new__ user-defined class constructionzclass=z, error=zYDynamo could not construct an example object for side-effect replay using object.__new__.NN)r]  rv   r  r  r  ctx_managerr  r  r.   r   distributedis_availabler   P2POpr   enable_p2p_compilationr   r*  r  r   r   r@  r  r  rM   rE  r   itemsr  CrossEntropyLossr  
contextlibnullcontextr  r  r  r  r   __optional_keys__r   r   r[  r   r  call_custom_dictdequery   r   r   r  r   	signaturebindr   
USER_ERRORAssertionError	argumentsrD   listsDequeVariablerL   rb  
MethodTyper  r	  UserFunctionVariableget_namecm_objrk   r  rl  r   weakrefrefWeakRefVariabler,  r-  	functionsFunctoolsPartialVariablewarningscatch_warningsCatchWarningsCtxManagerVariableis_python_constantr   r   r   r
  r   rj   is_standard_new"cls_supports_mutation_side_effectsr   ry  r  r  r  _AsyncGeneratorContextManagerclosingredirect_stdoutredirect_stderrAsyncExitStack_GeneratorContextManager_dynamoenable_trace_contextlibkeys_as_python_constantrm  inline_user_function_returnr   %instantiate_user_defined_class_objectr6   r   r?   r   r  r  r   r  r   r{   nprA   allr  stackr>   r   r|   rN   graph_bytecode_inputsr  streamsr  !make_construct_in_graph_stream_fnr    r   r   make_construct_in_graph_event_fnrandomRandomRandomVariableMappingProxyTypeUserDefinedDictVariable_base_vtMappingProxyVariableenable_trace_load_build_classr  r   r   )4r   r   rZ  r   rv   r  r  r  r  constant_argsvarr  kvr  r   r  r  
bound_argser  r+  fncallback	rest_argsvariable_clsr  r  r  arg_newfn_var	args_listkwargs_dictr  tupr{   stackedr|   
var_kwargsvar_argsstreamr  r  indtensor_variableeventr  seedrandom_objectdict_argexcr   s4                                                      rn   rm  z&UserDefinedClassVariable.call_function1  s    	/=	

 ,D&9))+

e>O>O>U>U0U00M5 >M	 ))((FF!((V4	 G C OOB
DJ?J))+"(()'')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 3YY++II!((T2	 J F r:tDz6BM$**%zz++:

O ^B*66	 00AAD#)  ZZ;,,,//66t<F MQ"3-$.?BTz
 JDW..?DDdUfU
 !$%QRRZ111'J,@,@,LM :///#--h7??00f4D4F 1  
 JJ%***D	Q47I$B$BC47$BCQ  "&??!W^^Fa!1!1!34==B//DGDKKPP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D	Q!;DJJ!GGT7--/ zz,,-Qtzz/F/F.GGde  &&r47+E+E+GHHtDJJ'.

K 

J $$&>>>tzzJ0<6 zz88""****))  :#zzl#'::, /; !;*66	 G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	 11%%	GG     tzz*!$**-SY!^',-t9+ZF}GD	 yy--KKJ	 L   55#))IKK MDM  ZZ5::%+#**2u5CCBfUC		**&tzz2 8::,S'33 JJ$00221$**= , JJ"55INtAw5Q&*=tAw}}== (0"))00' +48  y$**ell30.AGPA_**2q114P
 )d4#113!446 R33"DD * #0))00')Evr#V #"K DJJ40 /AGPA_**2q114P
 )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ZZ5111c$i1n AwH(I$E$EF#,,($56 55h??;[;;DJJGKK5==//MMzz!!V^^3NN4::. 67 77#))IKK MDM   w$Rv66e <Lb  
D#D66(; Z>*55 	 	
l Q6 Qv ! 	! \"(HSE BG ? 1 = => 	 sT   {?|6%|
 !}
!}
= } (:~
	}'}  }	~/~~~"c                     t        j                  | j                  dd      }t        |t              r|j
                  }|t        j                  u S )z"Check for __new__ being overriddenr  N)r   r   r   r	  r  r  r   r  )r   r  s     rn   r5  z(UserDefinedClassVariable.is_standard_new  s<    ''

ItDfl+__F''rp   ry   c                     | j                   rGt        | j                   j                  t        j                  t
        j                  |                   t        j                  |t        | j                  |            S )Nr  )r   r"   r   r,  r-  r!   HASATTRrM   rE  rj   r   )r   r   r   s      rn   call_obj_hasattrz)UserDefinedClassVariable.call_obj_hasattr  s[     ;;&&%%l&:&:F
 $$RT)BCCrp   c                 Z    |dk(  r| j                   j                  S t        |   ||      S )Nr   )r   r   r   const_getattrr   r   r   r   s      rn   rq  z&UserDefinedClassVariable.const_getattr  s-    :::&&&w$R..rp   c                 j    t        |t        j                        xr | j                  |j                  u S r   )r	  r   r   r   r   r   s     rn   is_python_equalz(UserDefinedClassVariable.is_python_equal  s,    ui@@A *

ekk)	
rp   c                 f    | j                   r| j                   j                  |      S t        d      )NzKPython codegen not implemented yet for sourceless UserDefinedClassVariable.r   reconstruct_pycoder   r   codegens     rn   rx  z+UserDefinedClassVariable.reconstruct_pycode	  .    ;;;;11'::!Y
 	
rp   c                     | j                   S r   r   r   s    rn   get_real_python_backed_valuez5UserDefinedClassVariable.get_real_python_backed_value  r   rp   r   rw   rW   rM   F)Ar   r   r   r   r   r   r   r   r   r   r  r  boolr   rM   r   r   r   r   r   r  r,  r9  r  r   r  r  r  r  r"  r%   r;  r=  rB  rH  rM  rw  r   r\  r`  ra  r  r  r  r  r  r  r  r  r  r  sq_ass_item_implr  r  r  r@  r  rm  r5  ro  rq  ru  rx  r}  __classcell__r   s   @rn   r   r     si   <"d6l "c "d "8CH#5#< 
&7 &E#t)<L &7-76E7KN7	7&DL & :# : __
CV$5 
  
 __Fs4<0 F  F: __+s3x +  +( Ev E$ E ER4 R  )Q-)Q58)Q	)QV# & -'- 
-	87 	8O 	8 	1'1 1 	1
 
1"\
-\
58\
	\
|T'T T 	T
 T 
T>G;'G; G; 	G;
 G; 
G;R;'; ; 	;
 ; 
; 2'2 2 	2
 2 
24X6 X? X!7 !O !!7 !O !---5D-	-(: ( (	
#> 	
? 	
	
#> 	
? 	


#> 

? 

='= = %	=
 
=* -EA'EA ?#EA S/)*	EA
 
EANY;'Y; Y; ?#	Y;
 S/)*Y; 
Y;v"-"		 "y7'y7 ?#y7 S/)*	y7
 
y7v( (	D-	D58	D		D/ ; /3 /3 /

V 
 

S 
f rp   r   c                   \     e Zd Zedee   fd       Zdddee   de	e
ef   def fdZ xZS )!UserDefinedExceptionClassVariablerW   c                     | j                   S r   r   r   s    rn   rW  z$UserDefinedExceptionClassVariable.fn  s    zzrp   r   rw   rZ  r   c                 &   ddl m} | j                  n|j                  j                  j                  |j                  |t              | t        |      |      }|j                  |dt        |      t        |             |S t        | 1  |||      S )NrF   r  r  r   )r  r  r   r*  r]  r  r   r   r  r@  r  r   rm  )r   r   rZ  r   r  rR  r   s         rn   rm  z/UserDefinedExceptionClassVariable.call_function  s     	/;; ))((FF!((];T
	 G C OOB
DJVEJw$Rv66rp   )r   r   r   r  r   r   rW  r  rM   r  r   rm  r  r  s   @rn   r  r    s_    DL  7'7 ?#7 S/)*	7
 
7 7rp   r  c                       e Zd Zy)RemovableHandleClassNr   r   r   rr   rp   rn   r  r  /  s     	rp   r  r   rw   rW  .rZ  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 )NrF   )VariableBuilder)
r  r  r   r  r  r*  random_callsr(   r   wrap_unspecialized_primitive)r   rW  rZ  r   r  r  rS  rT  random_call_indexexample_valuer   s              rn   call_random_fnr  6  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                   J    e Zd ZU dZdZedz  ed<   dZee	   dz  ed<   ddhe
j                  Zddddddededz  dedz  d	edz  d
ee   dz  de	ddf fdZdefdZdefdZd}dZdddefdZd ZdefdZdefdZdef fdZdef fdZdef fdZdddddededeeedz  f   fd Z	 	 	 	 d~d!Z dddef fd"Z!dddef fd#Z"dddef fd$Z#dddef fd%Z$dddefd&Z%dddefd'Z&dddefd(Z'dd)Z(dddefd*Z)ddd+ed,d-d.e*e	   de+ee	f   defd/Z,ddd0edef fd1Z-dddef fd2Z.dddef fd3Z/e0e1jd                  dee	   fd4              Z3ddd5edef fd6Z4ddd7edef fd8Z5ddd7edef fd9Z6ddd5ededz  def fd:Z7e7Z8ddded.ee   defd;Z9ddd<ed=ed>ed?e:d@edefdAZ;	 dddd<ed@edefdBZ<	 dddd<ed@edefdCZ=ddd<edefdDZ>	 dddd<ed@edefdEZ?ddd<edefdFZ@	 dddd<ed@edefdGZAddd<edefdHZB	 dddd<ed@edefdIZCddd<edefdJZD	 dddd<ed@edefdKZEddd<edefdLZF	 dddd<ed@edefdMZGddd<edefdNZH	 dddd<ed@edefdOZIddd<edefdPZJddd<edefdQZK	 dddd<ed@edefdRZLddd<edefdSZM	 dddd<ed@edefdTZNddd<edefdUZO	 dddd<ed@edefdVZPddd<edefdWZQ	 dddd<ed@edefdXZRddded.ee	   de+ee	f   def
 fdYZSddd<edefdZZTddd<edefd[ZUdddefd\ZVdddefd]ZWdddefd^ZXdddededefd_ZYdefd`ZZdddee   fdaZ[defdbZ\ddd.ee   de+eef   def fdcZ]defddZ^deedefdfZ_dedefdgZ`dedefdhZaddd5edefdiZbdddedecfdjZddddedefdkZedddedefdlZfdddedmednedz  def
doZgdddedmednedz  def
dpZhdddedqednedz  def
drZidddednedz  dedz  fdsZjdddeddtfduZkdefdvZldddee:ef   fdwZmddd<edxedefdyZnd<edefdzZo	 	 	 	 	 	 	 	 	 	 	 	 dd{Zp	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd|Zq xZrS )r  z_
    Mostly objects of defined type.  Catch-all for something where we only know the type.
    NrN  _base_methodsr   
value_type)r  
cls_sourcebase_cls_vtr  r  r  r  r   rW   c                   |j                  dd        t        |   di | || _        |xs t	        |      | _        t	        |      | j
                  ur$t        d| j
                   dt	        |             || _        |&| j                  t        | j                        | _        || _
        || _        d | _        i | _        i | _        dd lmc m} |j%                  | j
                        | _        |j%                  | j
                        r>| j                  r2t)        | j                  j+                  t,        j.                               t1        | j                        | _        y )Nr   zExpected type z, got r   rr   )popr   r   r   r   r  r$  r  r   r+   r  r  dict_vt_looked_up_attrs_subobj_from_classtorch.utils._pytreeutils_pytreeis_constant_classis_pytree_constant_classr"   r   r!   EQUALS_MATCHr=   _object_has_getattribute)	r   r   r  r  r  r  r   pytreer   s	           rn   r   z"UserDefinedObjectVariable.__init__`  s"    	

4"6"
$3U;doo- >$//1B&e!VWW$$++"9(5DO '" 37
 46 68,,(.(@(@(Q%##DOO4$++001J1JKL(?

(K%rp   c                     | j                   j                  }|dv r t        t        | j                  dd             }| j
                  j                   d| dS )N)builtin_function_or_methodgetset_descriptormethod_descriptorr  r   r   r   )r  r   r   rk   r   r   )r   inners     rn   __str__z!UserDefinedObjectVariable.__str__  sU    (( 
 
 

J=>E..))*!E7!44rp   c                 b    | j                   j                   d| j                  j                   dS r   r   r   r  r   s    rn   r   z"UserDefinedObjectVariable.__repr__  +    ..))*!DOO,D,D+EQGGrp   r   rw   c                 |    | j                   %t        j                  j                  ||       | _         | j                   S r   )r  r   rz   r   r   s     rn   get_dict_vtz%UserDefinedObjectVariable.get_dict_vt  s0    <<$77>>r4HDL||rp   r]  rv   c                 R    | j                   |j                  | j                         S yNF)rN  is_modified)r   r]  s     rn   is_base_vt_modifiedz-UserDefinedObjectVariable.is_base_vt_modified  s$    ==$++DMM::rp   c                 f    | j                   r| j                   j                  |      S t        d      )NzKPython codegen not implemented yet for sourceless UserDefinedObjectVariablerw  ry  s     rn   rx  z,UserDefinedObjectVariable.reconstruct_pycode  r{  rp   c                     | j                   S r   r  r   s    rn   python_typez%UserDefinedObjectVariable.python_type  s    rp   c                     | j                   S r   r   r   s    rn   r}  z6UserDefinedObjectVariable.get_real_python_backed_value  r   rp   c                    ddl m} t        | j                  t        j
                  t        j                  t        j                  j                  j                  f      s || j                        r| j                  S ddlm}  |       r<dd lm} t        | j                  |j                        r| j                  j                  S | j                   r| j"                  r| j                  S ddlm} t        | j                  |      rfddlm} |j-                         }|N|j.                  rB|j0                  j2                  j5                  | dd	      }||j7                         } ||      S t8        	| m         S )
Nr   )r7   r   )has_triton_package)_MaskModWrapperInstructionTranslatorrW  T
deleted_ok)r  r7   r	  r   r  r  r   DispatchKey_C
_functorchTransformTypetorch.utils._tritonr  triton.languagelanguage	constexprr  r   !torch.nn.attention.flex_attentionr  torch._dynamo.symbolic_convertr  
current_txexportr*  r]  r_  r   r   )
r   r7   r  tlr  r  r   fn_vtrW  r   s
            rn   r   z,UserDefinedObjectVariable.as_python_constant  s   3JJYY))588+>+>+L+LM
 %TZZ0:::($**bll3zz'''((T[[ :: 	Fdjj/2L&113B~"))		..88tPT8U$ 113B*2..w)++rp   c                     t        | j                  t        j                        r;t        | j                  t              rt	        | j                        S | j                  S t
        |          S r   )r	  r   r  r  r  r   r   r   r   s    rn   r   z"UserDefinedObjectVariable.as_proxy  sI    djj$)),$**c*4::&::w!!rp   c                     | j                   r>t        | j                   j                  t        j                               | j
                  S t        |          S r   )r   r"   r   r!   ID_MATCHr   r   guard_as_python_constantr  s    rn   r  z2UserDefinedObjectVariable.guard_as_python_constant  s?    ;;$++001F1FGH::w/11rp   rD  
none_errorr   r  c                    | j                  |      }|t        ||       d}|t        ur| j                  r| j	                  ||      }||fS )zKWalk class MRO for *name*, raising TypeError when slot is blocked (= None).N)lookup_class_mro_attrr   rK   r   r;  )r   r   r   r  rG  r   s         rn   _lookup_slot_type_attrz0UserDefinedObjectVariable._lookup_slot_type_attr  sT     ..t4	R,N*t{{33B=F&  rp   c                 :   d}t         j                  dk\  rd| j                          d}| j                  |d|      \  }}|t        u ry | j                  |dg i       }|j                         t        ur't        |d|j                         j                          |S )NrD  )      rX  z$' cannot be interpreted as a booleanr?  r  z&__bool__ should return bool, returned )
r   version_infor  r  rK   r@  r  r  r   r   )r   r   r  rG  _r   s         rn   rB  z#UserDefinedObjectVariable.bool_impl  s     9
w&D))+,,PQ  22
z 3 
	1 &!!"j"b9t+89K9K9M9V9V8WX rp   c                 H   | j                  d      }|t        u rt        |   |      S |t	        |d       | j                  d      }| j                  5| j                  )|| j                  v r| j                  j                  |      S t        | j                        j                  t        j                  u r)t        j                  |t        | j                              S t        |      s>t         j"                  j$                  j&                  j)                  |      st+        |      r	  t-        j.                  t        |      d      || j                  t        | j                               t1        ddt        | j                        j2                   dg t4        j6                  d       | jB                  xr | jE                  |d      }| jG                  |d||      }tI        |tJ        jL                        s|jO                  |g i       S 	  t-        j.                  t        |      d      || j                  t        | j                               t1        ddt        | j                        j2                   dg t4        j6                  d       y # t8        t:        f$ r5}t=        t        |      |t?        |j@                        	       Y d }~&d }~ww xY w# t8        t:        f$ r4}t=        t        |      |t?        |j@                        	       Y d }~y d }~ww xY w)
Nr   rD  r   z!untraceable user-defined __repr__z&Could not trace __repr__ override for zBDynamo could not safely trace this user-defined __repr__ override.T)rQ  rR  rS  rT  
skip_framerY  )(r  rK   r   rH  r   r   rN  r  r   r   r   r   rM   rE  rF  r9   r   r  r=  r  is_instancemethodr   r   r   r   r   r   r[  r   r   r   r  rZ  r   r;  resolve_type_attrr	  r   rj  rm  )r   r   rG  r  rV  r   
method_varr   s          rn   rH  z#UserDefinedObjectVariable.repr_impl  s   
 ..z:	&7$R((R!DE11*=MM%"".$,,,==**2..

$$7"((T$**-=>> ,I6xx%%77	B!),B&&tI	Btzz4

+; ?DT$**EUE^E^D_` d:-99:# O!?!?J!O++B
IvN
*i&?&?@++BB77	>G""4	?I>4::tDJJ'7 ;@djjAQAZAZ@[\`6)556/ #I. I(a"4<HHI( 	* 	E$T!WbtAFF|DD	Es2   ,AJ AK K&*KKL!-*LL!c           	      z   | j                  |d      \  }}|t        u rt        |   |      S | j	                  |d||      }|j                  |g i       }|j                         rVt        |j                         t              s8t        t        |dt        |j                               j                   dg       |S )N	__index__z!__index__ returned non-int (type r   rY  )r  rK   r   nb_index_implr  rm  r4  r	  r   r  r   r   r   r   r   r   rG  r   r  r   r   s         rn   r  z'UserDefinedObjectVariable.nb_index_implU  s    
 !77KH	6&7(,,++BYO
))"b"5 $$&z%%'0
 %7V=V=V=X8Y8b8b7ccde rp   c                 H   | j                  |d      \  }}|t        u rt        |   |      S | j	                  |d||      }|j                  |g i       }t        |j                         t              s/t        t        |d|j                         j                   dg       |S )N__int__z__int__ returned non-int (type r   rY  )r  rK   r   nb_int_implr  rm  r
  r  r  r   r   r   r  s         rn   r  z%UserDefinedObjectVariable.nb_int_implm  s     !77IF	6&7&r**++B	9fM
))"b"5&,,.4$5f6H6H6J6S6S5TTUV rp   c                 H   | j                  |d      \  }}|t        u rt        |   |      S | j	                  |d||      }|j                  |g i       }t        |j                         t              s/t        t        |d|j                         j                   dg       |S )N	__float__z#__float__ returned non-float (type r   rY  )r  rK   r   nb_float_implr  rm  r
  r  r  r   r   r   r  s         rn   r  z'UserDefinedObjectVariable.nb_float_impl  s     !77KH	6&7(,,++BYO
))"b"5&,,.6$9&:L:L:N:W:W9XXYZ rp   c                    | j                  d      }|t        u rt        |d| j                          d       |t        |d       | j	                  d      }|t        |d| j                          d       | j                  |dg i       S )Nr  r  rX  rD  r  rK   r   r  r   r@  r   r   rG  r  s       rn   r  z*UserDefinedObjectVariable.nb_negative_impl  s     ..y9	&5d6K6K6M5NaP R!DE11)<>5d6K6K6M5NaP Ir266rp   c                    | j                  d      }|t        u rt        |d| j                          d       |t        |d       | j	                  d      }|t        |d| j                          d       | j                  |dg i       S )Nr  r  rX  rD  r  r  s       rn   r  z*UserDefinedObjectVariable.nb_positive_impl  s     ..y9	&5d6K6K6M5NaP R!DE11)<>1$2G2G2I1J!L
 Ir266rp   c                    | j                  d      }|t        u rt        |d| j                          d       |t        |d       | j	                  d      }|t        |d| j                          d       | j                  |dg i       S )Nr  r  rX  rD  r  r  s       rn   r  z*UserDefinedObjectVariable.nb_absolute_impl  s     ..y9	&/0E0E0G/HJ R!DE11)<>/0E0E0G/HJ
 Ir266rp   c                 6    t        |       st        d|        y )Nz<calling torch function on object without __torch_function__ )r4   r$  r   s    rn   torch_function_checkz.UserDefinedObjectVariable.torch_function_check  s&    !$' NtfU  (rp   c                 @    | j                          ddlm}  |||       S )NrF   )get_torch_function_fn)r  torch_functionr  )r   r   r  s      rn   get_torch_fnz&UserDefinedObjectVariable.get_torch_fn  s    !!#9$R..rp   rW  rb  r|   rZ  c                 f    | j                          ddlm}  ||| j                  |      ||||      S )NrF   )call_torch_function)r  r  r  r  )r   r   rW  rb  rZ  r   r  s          rn   r  z-UserDefinedObjectVariable.call_torch_function  s=     	!!#7"b!
 	
rp   r  c                 b   | j                  d      }| j                  6| j                  *|| j                  v r| j                  j                  ||      S t	        |t
        j                        r2| j                  |d|| j                        }|j                  ||gi       S t        |   ||      S r  )r   rN  r  r  r	  rb  rk  r  r   rm  r   )r   r   r  r  r  r   s        rn   r  z%UserDefinedObjectVariable.sq_contains  s     11.AMM%"".$,,,==,,R66fe001//NFDKKXJ++B;;w"2t,,rp   c                 \   | j                  d      }| j                  5| j                  )|| j                  v r| j                  j                  |      S t	        |t
        j                        r1| j                  |d|| j                        }|j                  |g i       S t        |   |      S )N__next__)r   rN  r  tp_iternext_implr	  rb  rk  r  r   rm  r   )r   r   r  r  r   s       rn   r  z*UserDefinedObjectVariable.tp_iternext_impl  s    11*=MM%"".$,,,==11"55fe001//JTJ++BB77w'++rp   c                    | j                  |dd| j                          d      \  }}| j                  5| j                  )|| j                  v r| j                  j	                  |      S t        |t        j                        r1| j                  |d|| j                        }|j                  |g i       S t        |   |      S )Nr  rX  z' object is not iterabler  )r  r  rN  r  r  r	  rb  rk  r  r   rm  r   )r   r   r  r  r  r   s        rn   r  z&UserDefinedObjectVariable.tp_iter_impl  s     77400233KL 8 
	 MM%"".$,,,==--b11fe001//JTJ++BB77w#B''rp   c                      t         j                   t         j                  t         j                  t         j                  h} | S r   )rI  randint	randrangeuniform)fnss    rn   _supported_random_functionsz5UserDefinedObjectVariable._supported_random_functions-  s0     MMNNNN	
 
rp   r%  c                 p   | j                  |d      \  }}| j                  6| j                  *|| j                  v r| j                  j                  ||      S t	        |t
        j                        r5t        j                  || || j                        j                  ||gi       S t        |   ||      S )N__getitem__r  r   )r  rN  r  mp_subscript_implr	  rb  rk  r   rl  r   rm  r   )r   r   r%  r  r  r   s        rn   r  z+UserDefinedObjectVariable.mp_subscript_impl8  s     !77MJ	MM%"".$,,,==222s;;fe001//	$++mBr*+ w(S11rp   countc                 t    | j                   | j                   j                  ||      S t        |   ||      S r   )rN  sq_repeat_implr   r   r   r  r   s      rn   r	  z(UserDefinedObjectVariable.sq_repeat_implK  s8     ==$==//E::w%b%00rp   c                 t    | j                   | j                   j                  ||      S t        |   ||      S r   )rN  sq_inplace_repeat_implr   r
  s      rn   r  z0UserDefinedObjectVariable.sq_inplace_repeat_implX  s8    
 ==$==77EBBw-b%88rp   c                    |d u }|rdnd}| j                  ||      \  }}| j                  7| j                  +|| j                  v r| j                  j                  |||      S t	        |t
        j                        r\|r|gn||g}t        j                  || || j                        j                  ||i        t        j                  j                  d       S t        	|   |||      S )Nr  r  r  )r  rN  r  r  r	  rb  rk  r   rl  r   rm  ry   r   r   )
r   r   r%  r   r  r  r  r  rZ  r   s
            rn   r  z/UserDefinedObjectVariable.mp_ass_subscript_impla  s     TM	 )}} 77DA	MM%"".$,,,==66r3FFfe001%C5C<D((	$++mBb)--44T::w,Re<<rp   c           	      F   | j                  |      }|#t        j                  j                  t              S | j
                  A| j                  5|| j                  v r'| j
                  j                  ||t        |      i       S t        |t        j                        sKt        dd| d| j                          d| d| d| j                          dg t        j                         | j!                  |||| j"                        }|j%                  |t        |      i       S )	Nz'vectorcall_maybe on C method descriptorname=z, type=	, method=zCannot trace special method 'z)' implemented in C on user-defined type 'z'.rP  )r   r   ry   r   r   rN  r  r@  r  r	  rb  rk  r   r  r   r[  r  r   rm  )r   r   r   rZ  r  r  s         rn   _vectorcall_maybez+UserDefinedObjectVariable._vectorcall_maybe|  s     11$7>--44^DD
 MM%"".$,,,==,,RtDz2FF&%"4"45 AvWT-B-B-D,EYvhW3D6 :--1-B-B-D,ERI 7)556 ++BfdkkJ
 ''DJ;;rp   r   rm   rdundernb_slotrI  c                 6   dt         dt         dt        fd}dt         dt         dt        fd}|r|| fn| |f\  }	}
|	j                         }|
j                         } |||       xr t        ||      xr t	        |
t
              }t	        |	t
              rt        ||      r}|rQ |||      rH|	j                  |      |
j                  |      k7  }|r#|
j                  |||	g      }t        |      s|S d}|	j                  |||
g      }t        |      r	 |||      r|S |rYt	        |
t
              st        dt        |
             |
j                  |      r!|
j                  |||	g      }t        |      s|S t        j                  j                  t              S )Nw_typev_typerW   c                 
    | |u S r   rr   r  r  s     rn   
py_is_typez6UserDefinedObjectVariable.SLOT1BIN.<locals>.py_is_type  s    V##rp   c                     t        | |      S r   )r
  r  s     rn   py_is_subtypez9UserDefinedObjectVariable.SLOT1BIN.<locals>.py_is_subtype  s    ff--rp   Fz(Expected UserDefinedObjectVariable, got )r   r  r  rS   r	  r  r   r  rR   r$  r   ry   r   r   )r   r   r   rm   r  r  rI  r  r  self_other_s_typeo_typedo_othermethod_is_overloadedrs                   rn   SLOT1BINz"UserDefinedObjectVariable.SLOT1BIN  s   ~	$t 	$T 	$d 	$	.$ 	. 	. 	. *1tUmv""$##% 66** >'8>6#<= 	 e67<SG=
 M&&9','H'H(77@(A$ (00WugFA03 $H''FVH=A(+z&&/If&?@$>tF|nM  11':,,R5'B,Q/H))00@@rp   c                 L    | j                  ||ddt        j                  |      S )N__mul____rmul__r  rI  )r#  r   NB_MULTIPLYr   r   r   rI  s       rn   nb_multiply_implz*UserDefinedObjectVariable.nb_multiply_impl	  s2     }}!--  
 	
rp   c                 L    | j                  ||ddt        j                  |      S )N
__lshift____rlshift__r'  )r#  r   	NB_LSHIFTr)  s       rn   nb_lshift_implz(UserDefinedObjectVariable.nb_lshift_impl*	  2     }}!++  
 	
rp   c                 ,    | j                  |d|gi       S )N__ilshift__r@  r   r   r   s      rn   nb_inplace_lshift_implz0UserDefinedObjectVariable.nb_inplace_lshift_impl:	      
 ME7B??rp   c                 L    | j                  ||ddt        j                  |      S )N
__rshift____rrshift__r'  )r#  r   	NB_RSHIFTr)  s       rn   nb_rshift_implz(UserDefinedObjectVariable.nb_rshift_implA	  r0  rp   c                 ,    | j                  |d|gi       S )N__irshift__r3  r4  s      rn   nb_inplace_rshift_implz0UserDefinedObjectVariable.nb_inplace_rshift_implQ	  r6  rp   c                 L    | j                  ||ddt        j                  |      S )NrK  __ror__r'  )r#  r   NB_ORr)  s       rn   rM  z$UserDefinedObjectVariable.nb_or_implX	  s2     }}!''  
 	
rp   c                 ,    | j                  |d|gi       S )N__ior__r3  r4  s      rn   nb_inplace_or_implz,UserDefinedObjectVariable.nb_inplace_or_implh	  s     Iw;;rp   c                 L    | j                  ||ddt        j                  |      S )N__and____rand__r'  )r#  r   NB_ANDr)  s       rn   nb_and_implz%UserDefinedObjectVariable.nb_and_implp	  2     }}!((  
 	
rp   c                 ,    | j                  |d|gi       S )N__iand__r3  r4  s      rn   nb_inplace_and_implz-UserDefinedObjectVariable.nb_inplace_and_impl	      
 J<<rp   c                 L    | j                  ||ddt        j                  |      S )N__xor____rxor__r'  )r#  r   NB_XORr)  s       rn   nb_xor_implz%UserDefinedObjectVariable.nb_xor_impl	  rJ  rp   c                 ,    | j                  |d|gi       S )N__ixor__r3  r4  s      rn   nb_inplace_xor_implz-UserDefinedObjectVariable.nb_inplace_xor_impl	  rN  rp   c                 L    | j                  ||ddt        j                  |      S )N__add____radd__r'  )r#  r   NB_ADDr)  s       rn   nb_add_implz%UserDefinedObjectVariable.nb_add_impl	  rJ  rp   c                 ,    | j                  |d|gi       S N__iadd__r3  r4  s      rn   nb_inplace_add_implz-UserDefinedObjectVariable.nb_inplace_add_impl	       J<<rp   c                 L    | j                  ||ddt        j                  |      S )N__sub____rsub__r'  )r#  r   NB_SUBTRACTr)  s       rn   nb_subtract_implz*UserDefinedObjectVariable.nb_subtract_impl	  s2     }}!--  
 	
rp   c                 ,    | j                  |d|gi       S )N__isub__r3  r4  s      rn   nb_inplace_subtract_implz2UserDefinedObjectVariable.nb_inplace_subtract_impl	  r`  rp   c                 ,    | j                  |d|gi       S )N__imul__r3  r4  s      rn   nb_inplace_multiply_implz2UserDefinedObjectVariable.nb_inplace_multiply_impl	  rN  rp   c                 L    | j                  ||ddt        j                  |      S )N__floordiv____rfloordiv__r'  )r#  r   NB_FLOOR_DIVIDEr)  s       rn   nb_floor_divide_implz.UserDefinedObjectVariable.nb_floor_divide_impl	  s2     }}!11  
 	
rp   c                 ,    | j                  |d|gi       S )N__ifloordiv__r3  r4  s      rn   nb_inplace_floor_divide_implz6UserDefinedObjectVariable.nb_inplace_floor_divide_impl	  s    
 OeWbAArp   c                 L    | j                  ||ddt        j                  |      S )N__truediv____rtruediv__r'  )r#  r   NB_TRUE_DIVIDEr)  s       rn   nb_true_divide_implz-UserDefinedObjectVariable.nb_true_divide_impl	  s2     }}!00  
 	
rp   c                 ,    | j                  |d|gi       S )N__itruediv__r3  r4  s      rn   nb_inplace_true_divide_implz5UserDefinedObjectVariable.nb_inplace_true_divide_impl	  s    
 NUGR@@rp   c                 L    | j                  ||ddt        j                  |      S )N__mod____rmod__r'  )r#  r   NB_REMAINDERr)  s       rn   nb_remainder_implz+UserDefinedObjectVariable.nb_remainder_impl
  s2     }}!..  
 	
rp   c                 ,    | j                  |d|gi       S )N__imod__r3  r4  s      rn   nb_inplace_remainder_implz3UserDefinedObjectVariable.nb_inplace_remainder_impl
  rN  rp   c                 L    | j                  ||ddt        j                  |      S )N
__divmod____rdivmod__r'  )r#  r   	NB_DIVMODr)  s       rn   nb_divmod_implz(UserDefinedObjectVariable.nb_divmod_impl
  r0  rp   c                    ddl m} ddl m} ddl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&                  j(                  j*                  rJt        | j                  t,        j.                        r&t1        dd| j                   d	| d
| d| ddg       t        | j                  t$        j2                  j4                        r4||j6                  v r&t1        dd| d| dg t8        j:                         | j<                  @| j>                  4|| j>                  v r&|t@        vr| j<                  jC                  ||||      S t        |t,        jD                        rm| jF                  }	d }
|	r| jI                  ||      }
ddl%m&} |t$        jN                  jP                  j                  u r|} ||| |
|	      jS                  |||      S |tT        jV                  u rk| jF                  r_|s]|s[tY        | jF                  j[                  t\        j^                               ta        jb                  |te        | j                              S |jg                  |      r\ddl4m5} |jm                         }|jo                  |      }|3|jp                  }t!        j                  ||       jS                  |||      S tr        |   ||||      S )Nr   )trace_rulesrF   )rl  rx   r   zcall_method on generatorobject=r  , 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.rP  ztorch.Generator methodztorch.Generator.zM() is a stateful RNG operation that cannot be soundly traced in the FX graph.unpatched_nn_module_initr  )PolyfilledFunctionVariable):ry  r  rl  r   ry   r   r   r   r   r   r	  r   	threadinglocalmethod_setattr_standardr   r   DeletedVariabler   r=  r   "enable_faithful_generator_behaviorrb  GeneratorTyper   r  	Generator#_GENERATOR_METHODS_THAT_GRAPH_BREAKr   FUNDAMENTALrN  r  rG   r@  rk  r   r;  mutation_guardr  r  Modulerm  r  r  r"   r   r!   SEQUENCE_LENGTHrM   rE  r  is_polyfilled_callabler/  r  _get_polyfill_handlersr   __torch_dynamo_polyfill__r   )r   r   r   rZ  r   r  rl  ry   r  r   r  r  r  polyfill_handlerswrappedtraceable_fnr   s                   rn   r@  z%UserDefinedObjectVariable.call_method*
  s    	#(.11$7(.'..t44"6*jY__.U3t33BHHHH"6*33Q!:!:!<  }}##FF:

E//L 6%djj\4&vYW]V^_!3+
 4::uxx'9'9:KKKK4.tf5"24& 9O !O:-99: )&&2d000 00}}00T4HH &%"4"45 	 $ > >r4 HIEUXX__5555F)DIf-D&12 %$++tvdkk44\5Q5QRS&,,RTZZAA11&9A$>$U$U$W!044V<&#*#D#DL$77$d#mBf56 w"2tT6::rp   c                     | j                  d      }| j                  6| j                  *|| j                  v r| j                  j                  ||      S | j	                  ||d      S )NrX  F)rI  )r   rN  r  sq_concat_implr[  r   r   r   r  s       rn   r  z(UserDefinedObjectVariable.sq_concat_impl
  sg    
 11)<MM%"".$,,,==//E::E599rp   c                     | j                  d      }| j                  6| j                  *|| j                  v r| j                  j                  ||      S | j	                  ||      S r]  )r   rN  r  sq_inplace_concat_implr_  r  s       rn   r  z0UserDefinedObjectVariable.sq_inplace_concat_impl
  sb     11*=MM%"".$,,,==77EBB''E22rp   c                 d   | j                  |d      \  }}|t        urQ| j                  |d||      }t        |t        j
                  t        j                  f      s|j                  |g i       S t        d| j                          dd| j                          dg t        j                         y )Nr  z!Cannot trace user-defined __len__z
.__len__()zDynamo cannot trace len() on zu because the __len__ method is either not traceable (e.g., defined in C or built-in) or returns a non-constant value.rP  )r  rK   r  r	  r   rj  MethodWrapperVariablerm  r   r  r   r[  )r   r   rG  r   r  s        rn   r  z"UserDefinedObjectVariable.len_impl
  s     77IF	6N*//Iy&QJ**I,K,KL "//B;;7,,./z:/0E0E0G/H I& &"..	
rp   c                     | j                   D| j                  8| j                  d      | j                  v r| j                   j                  |      S | j	                  |      S Nr  )rN  r  r  r  r  r   s     rn   r  z#UserDefinedObjectVariable.sq_length
  U    MM%"".**959K9KK==**2..}}R  rp   c                     | j                   D| j                  8| j                  d      | j                  v r| j                   j                  |      S | j	                  |      S r  )rN  r  r  r  r  r   s     rn   r  z#UserDefinedObjectVariable.mp_length
  r  rp   c           
          d	 |j                         j                  j                  j                         st        d	      t        j                  j                         rt         j                        t        j                  j                  u rWj                  j                  j                         s j                  j                  v rt        d
d  d| d| ddg       dk(  rt        dd  d| ddg       dt        f fd}dt        f fd}dt         dt        f fd} j#                        }|t$        urt'        t        |      d      st'        t        |      d      rd } j(                  r j+                        }t-        |t.              rt-        |t0        j2                        rZ|j4                   |d       |rt7        |d      nd }	t9        j:                  |j4                  |	      }
|
j=                   gi       S |j>                   |d       |rt7        |d      nd }t9        j:                  |j>                  |      }|j=                   |gi       S t-        |t@        jB                        rFj                  j                  jE                   |       t0        jF                  jI                  d       S t-        |t@        jJ                        rRdk(  rd  _&        j                  j                  jE                   |       t0        jF                  jI                  d       S tO        jP                  t        |      dd       }tO        jP                  t        |      dd       }tS        tT        dd       }|t        |      |u r |        t9        j:                  ||      }t-        |t0        j2                        rt-        |t@        jV                        rG|rt7        tY        |      d      nd }t9        j:                  ||d       }|j=                  | gi       S |(t        d!d  d d"| d#g tZ        j\                          |        t-        |t@        jV                        rH|rt7        tY        |      d      nd }t9        j:                  ||d       }|j=                  | |gi       S t        d$d  d d"| d%g tZ        j\                         t'         j                  d      r j_                        }t-        |t0        j2                        r*|ja                        s |        |jc                         n|je                  |       t0        jF                  jI                  d       S  |        y # t        $ r t        dd  d| d| ddg       Y w xY w)&Nry  z-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.rP  z`Attempted setattr on a user-defined object that does not have an AttributeMutation mutation_typezP2POp mutationzCDynamo does not support mutating torch.distributed.P2POp instances.zaConstruct a new torch.distributed.P2POp instead of mutating an existing one inside torch.compile.r   z+__class__ assignment on user-defined objectzFDynamo does not support reassigning __class__ on user-defined objects.zBMove the __class__ assignment outside of the torch.compile region.rW   c            	      t    t        t        dt        j                        j                   d  dg       y )NrX  ' object has no attribute 'rY  r   r   r   r   r   name_strr   r   s   rn   raise_cannot_set_attrzPUserDefinedObjectVariable.method_setattr_standard.<locals>.raise_cannot_set_attr  s:    $TZZ(1122MhZWXYrp   c            	      t    t        t        dt        j                        j                   d  dg       y )NrX  z' object attribute 'z' is read-onlyrY  r  r  s   rn   raise_readonly_attrzNUserDefinedObjectVariable.method_setattr_standard.<locals>.raise_readonly_attr  s:    $TZZ(1122FxjP^_rp   actionc           
      x    t        t        d dt        j                        j                   d|  g       y )Nz
property 'z' of 'z' object has no rY  r  )r  r  r   r   s    rn   raise_property_errorzOUserDefinedObjectVariable.method_setattr_standard.<locals>.raise_property_error  sD    $ 
 +TZZ(1122B6(Lrp   r   r   deleterfdelrV  setterfsetr   r  Trealizez0C-level descriptor delete on user-defined objectz, descriptor=zSDynamo does not yet model this C-level descriptor deleter for user-defined objects.z1C-level descriptor setattr on user-defined objectzRDynamo does not yet model this C-level descriptor setter for user-defined objects.)3r   r   r   r*  r]  is_attribute_mutationr$  r   r  r  r   r   r  r^  r   r   r   r  rK   rj   r  r;  r	  r  r   r  r  r#   rM   rE  rm  r  rb  r  
store_attrry   r   GetSetDescriptorTyper  r   r   rk   r  rk  r+   r   r[  r  containsdelitemsetitem)r   r   r   r   r  r  r  r2  desc_sourcefdel_sourcefdel_varfset_sourcefset_varr  r  r  desc_var
del_sourcedel_var
set_sourceset_varr  r  s   ``                    @rn   r  z1UserDefinedObjectVariable.method_setattr_standard
  sh    	..0H yy%%;;DA 5  **,TZZ E$5$5$;$;;		&&CCD(Stzz222 (!$wtfHUGDaw	 {"E!$xw7dX		x 		X 		 	 	 //9
^+D$i0tJ'6K"<<RJ*h/eY%>%>?!.,Y7;F
;7D    /44JOOK H $11"tfbAA??*(2ALjf=RV*00
  --b4-DD*e&@&@A		&&11$%H 1188>>*e&@&@Az)#'DL 		&&11$%H 1188>>++D,<iNF,,T*-=|TRG #;EL'D,<,L#%&,,R[IH%!:!:;gu'9'9: ' #:k#:LI! 
 .33GZG #00h5ErJJ&! R")$wxjj\ Z8 ? 1 = => $%&%"4"45 # z+6	B 
 *//FJPTU,,R(D%1H"MMK!$wxjj\R0 7)556 4::z*&&r*G%!:!:;''1)+)%0--44T::S # 	G!$wtfHUGDm:;	 	s   V "WWc                     t        t        j                  | j                  dd              xr% t	        | j                  t
        j                         S )Nr   )r   r   r   r   r	  r  r  r   s    rn   needs_slow_setattrz,UserDefinedObjectVariable.needs_slow_setattr  sD    &""4::}dC
 
 :TZZ99	:rp   c                     t        ||       S r   )rD   r   s     rn   r  z-UserDefinedObjectVariable.unpack_var_sequence  s     r4((rp   c                 f    	 | j                   | j                         v S # t        t        f$ r Y yw xY wr  )r   r  r   r   r   s    rn   is_supported_randomz-UserDefinedObjectVariable.is_supported_random  s8    	::!A!A!CCC>* 	 	s    00c                    | j                         rJt        d |D              r8t        d |j                         D              rt        || j                  ||      S t        | j                  t        j                        r4| 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 rQt/        j0                  ||j2                        }t        j                   |j$                        j'                  ||g|      S | j4                  4t7        dd| j                   d| d| d| dd	| j                   d
g       | j4                  t9        d      t;        | j4                  d      }t/        j0                  |||d      }t;        | j4                  d      }	t/        j0                  |||	      }
|j'                  ||
g|z   |      S t=        | j                        ru| j4                  rU| j>                  t9        d      t;        | j>                  d      }tA        |jC                  tD        jF                               | jI                  |d||      S tJ        | M  |||      S )Nc              3   <   K   | ]  }|j                           y wr   r4  )r  rS  s     rn   r  z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     9qA((*9r  c              3   <   K   | ]  }|j                           y wr   r  )r  rT  s     rn   r  z:UserDefinedObjectVariable.call_function.<locals>.<genexpr>  s     DqA((*Dr  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.rP  z-source must not be None for bound method callr  Tr  r  z4cls_source must not be None for callable with source__call__)&r  rC  valuesr  r   r:   rb  r(  r  r  r   r  _contextlib_DecoratorContextManagercloner   r  is_matching_clsr   rm  autograd	grad_modeinference_moderM   rE  moder   r   r$  r#   r   r  r"   r   r!   CLOSURE_MATCHr@  r   )r   r   rZ  r   funcr   rR  func_srcfunc_varobj_srcobj_varsource_attrr   s               rn   rm  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 &++B9 ==MM-SE623 {{"Z%djj\TF'$yY_X`a ?9$**Eqr	 {{"$%TUU!$++z:H&,,RxNH j9G%++BW=G))"wi$.>GGdjj!{{??*(N  )*Ek44\5O5OPQ##B
D&AAw$Rv66rp   c                 ,    t        | j                        S r   )r3   r   r   s    rn   _check_for_getattrz,UserDefinedObjectVariable._check_for_getattr  s    !$**--rp   subobjc                     t        |t              syt        |j                  t        j                        xs= t
        j                  j                  j                  j                  |j                        S r  )
r	  r  r  rb  BuiltinFunctionTyper   r  r=  r  r  )r   r  s     rn   _is_c_defined_propertyz0UserDefinedObjectVariable._is_c_defined_property  sV    &(+ KK22
 CXX##55fkkB	Crp   c                 :   || j                   v r| j                   |   S t        j                  | j                  |t              }t        j
                  |      st        j                  |      r0t        | j                        j                  | j                  |      }no| j                  sI|t        u s| j                  |      r0t        | j                        j                  | j                  |      }n| j                  r|t        u rt        || j                   |<   |S r   )r  r   r   r   rK   ismemberdescriptorisgetsetdescriptorr   rO  r  r  r   )r   r   r  s      rn   _getattr_staticz)UserDefinedObjectVariable._getattr_static  s    4(((((..''

D.I %%f-1K1KF1S$**%66tzz4HF..n$**62 $**%66tzz4HF**v/G ! &,d#rp   c                     || j                   v r| j                   |   S t        }| j                  j                  j                  D ]!  }||j
                  v s|j
                  |   } n || j                   |<   |S )u  Walk type(obj).__mro__ to find *name* in the class hierarchy.

        This only searches the class chain (type(obj).__mro__), NOT the
        metaclass chain (type(type(obj)).__mro__).  The distinction matters
        because inspect.getattr_static conflates both chains — it can return
        metaclass descriptors (e.g. type.__dict__['__annotations__'], a
        getset_descriptor) when the attribute doesn't exist on the class MRO.
        Walking cls.__mro__ directly avoids that leak.
        )r  rK   r   r   r  r   )r   r   r   r!  s       rn   r  z/UserDefinedObjectVariable.lookup_class_mro_attr  s{     4*****400JJ((00 	Dt}}$t,	 )/%rp   c                 "   |j                   j                  j                  | |t        j                        rC|j                   j                  j                  | |d      }t        |t        j                         S || j                  j                  v S )NTr  )r*  r]  r^  rI   INSTANCE_DICTr_  r	  r   r  r   r   )r   r   r%  mutated_attrs       rn   has_key_in_generic_dictz1UserDefinedObjectVariable.has_key_in_generic_dict   s{     99!!>>#'55
 9911;;D#RV;WL!,	0I0IJJJ djj))))rp   c                    | j                   t        d      t        t        | j                        j
                        D ]  \  }}||j                  v s|j                  |   }t        d|      D ]  }t        | j                        j
                  |   }t        |      |f}||j                  j                  v rK|j                  j                  j                  |       t        | j                         }	t        |	|      }
t        |
      }t        |j!                  t#        j$                  t&        j(                  |                    | j*                  rt-        | j                  d      rk|| j                  j                  vrSt-        |d      sGt        | j*                  j!                  t#        j$                  t&        j.                  |                   t        |      |f}|j                  j0                  }||v r||   c S |dk7  r"t        | j                         }	t        |	|      }
n| j                   }
t        |
      }t3        ||      }|||<   |c S  t5        dd	| d
t        | j                         dt        | j                        j
                   d| dt        | j                        j
                   d| d| j                   dgt6        j8                         y )Nz(cls_source must not be None for MRO walkrF   r$  r   r   rm  r   z#could not find name in object's mror  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.rP  )r  r$  r'  r   r   r  r   r(  r)  r*  r+  rh   r*   r'   r)   r"   r   r,  r-  r!   r.  r   rj   NOT_PRESENT_IN_GENERIC_DICTr/  r%   r   r   r#  )r   r   r   r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  s                 rn   r;  z3UserDefinedObjectVariable.get_source_by_walking_mro,  s    ??" !KLL#D$4$<$<= ?	"JCu~~%"^^D1
 #(3- J#'

#3#;#;J#GL!#L!14 8I BII$E$EE II5599)D!.t!?J+8Z+PL"0">K!#..%--l.L.LRVW, KK

J7DJJ$7$77#J	:!..%-- , H Ht  
^T2			22% ++!8!.t!?J#0S#AL#'??L,\:.{DA
#-i !!?	"B 	9D6TZZ0@/ATZZHXH`H`Gab/vYtDJJ?O?W?W>XY#D6)CDJJ<Oab"--		
rp   c                 n
   | j                   rt        | j                   |      nd}|dk(  r7t        | j                  d      st	        t
        |       | j                  |      S |dk(  r=|}|| j                  }n|}t        j                  |t        | j                        |      S ddlm} | j                  |      }|t        j                  j                   j"                  u r|}|t$        urt'        |      r| j)                  ||||      S d}|j*                  j,                  j/                  | |t0        j2                  t0        j4                  f      rG|j*                  j,                  j7                  | |d      }t9        |t:        j<                        s|S d}nj|j*                  j,                  j/                  | dt0        j4                        r5| j                  |      }	|	j?                  |      r|	jA                  |      S d}|sqt        | j                  d      r[|| j                  jB                  v rC| j                  jB                  |   }
| jE                  |||      }t        j                  ||
|      S |t$        ur| jG                  ||||      S | jH                  s\|sZ	 t        | j                        jK                  | j                  |      }| jE                  |||      }t        j                  |||      S | jM                         }t9        |tN        jP                        r|tR        u rt9        | t:        jT                        rtW        | j                  jX                  tZ              r[tW        | j                  j\                  tZ              r7tW        | j                  j^                  tZ              r| ja                  ||      }nkd}| j                   rt        | j                   d	      }t;        jb                  || |
      je                  |t:        jf                  ji                  |      gi       }| j                   ry|t        j                  j                   jj                  u rSt9        |t:        jT                  t:        jl                  f      r)|jo                  t        | jq                         |             |S |7ts        dd| j                   d| d| d| d| j                   d| ddg       t	        t
        |dt        | j                        jt                   d| dg       y# t
        $ r Y ;w xY w)u  Dynamo implementation of CPython's PyObject_GenericGetAttr.

        This mirrors object.__getattribute__ and is called from:
        - var_getattr (for objects without a custom __getattribute__)
        - SuperVariable.call_method (when super().__getattribute__() resolves
          to object.__getattribute__)

        The algorithm: MRO walk → data descriptor → instance __dict__ →
        non-data descriptor / plain class attr → dynamic fallback →
        __getattr__ → AttributeError.
        Nr   r   r   r  FTr  rW  rV  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.rP  rX  r  rY  );r   r#   rj   r   r   r   r  r  rM   rE  r   r  r  r  r   r  r  r   rK   r   resolve_data_descriptorr*  r]  r^  rI   r  GENERIC_SETATTRr_  r	  r   r  r  getitemr   (maybe_wrap_nn_module_source_for_instancer  r  rO  r  rb  rk  rE   UnspecializedNNModuleVariabler:   _parametersr  _buffers_modules manually_trace_nn_module_getattrrl  rm  ry   r   rW  NNModuleVariableset_nn_module_stack_sourceget_nn_module_stack_sourcer   r   )r   r   r   r   r  r  rG  skip_instance_dictr   r  r  r|  
getattr_fnout
new_sources                  rn   generic_getattrz)UserDefinedObjectVariable.generic_getattr}  s    BF
4;; =RV:4::z2(<##B''
 ;(.J~!__
#
"((T$**-=zJJ=  ..t4	 0000I N*/A)/L//D)VLL #99!!>>++-=-M-MN

 YY++55dDT5RFfi&?&?@ "&YY##@@*.>>

 &&r*G%t,,!%"

J/

+++ZZ((.FBB2tVTF"((VV<< N*))"dIvFF  ,,5G

+<<TZZNFFr4QWX&,,R6BB
 ,,.
j%"4"4599tY%L%LM4::11484::..54::..5;;BE!
;;!+DKK!GJ22Z-Y%?%?%F%Ft%L$MrR  {{zUXX__-H-HH!??!22 22"4#B#B#DdK J#K!$**WTF-
|T?
|Kghlhrhrgs t004vQ8 J 	!d4::&//00KD6QRST	
_ " s   AT' '	T43T4c                    | j                   rt        j                  t        | j                        d      }| j
                  rt        | j
                  d      nd }	 t        j                  || |      j                  |t        j                  ||      gi       S | j                  ||      S # t        $ r t        |       Y (w xY w)NrO  rV  )r  r   r   r   r   r   r#   r   rl  rm  rM   rE  r   r   r  )r   r   r   getattribute_fnr  s        rn   rw  z%UserDefinedObjectVariable.var_getattr#  s     ((%44TZZ "4O @D{{
4;;(:;PT . 33#%  -_%:%:2t%D$ErJ	K ##B--	 * .)"-.s   =B+ +CCrG  r   c           
      b   t        |t              ri| j                  |      sX| j                  r| j	                  ||      }t        j                  ||      }|j                  || | j                  |d            S t        |t        j                        r|j                  j                  j                  | |t        j                        r{|j                  j                  j!                  | |d      }t        |t
        j"                        r7t%        t&        |dt)        | j*                        j,                   d| dg       |S t        j.                  ||      }|j                  || | j                  |d            S t        |t        j0                        r|j                  j                  j                  | |t        j                        r{|j                  j                  j!                  | |d      }t        |t
        j"                        r7t%        t&        |dt)        | j*                        j,                   d| dg       |S t        j2                  ||      }|j                  || | j                  |d            S t        |t4        j6                        r:t        j8                  ||      }	|	j                  || | j                  |d            S t;        j<                  t)        |      dd	      }
t        |
t        j>                        r| jA                  ||||      S 	 t)        | j*                        jC                  | j*                  |      }tE        jF                  ||      S # t&        $ r: t%        t&        |dt)        | j*                        j,                   d| dg       Y Yw xY w)
zMHandle data descriptors found on the type MRO (property, _tuplegetter, etc.).rV  r   Tr  rX  r  rY  r   N)$r	  r  r  r   r;  r   r  re  rw  rb  r  r*  r]  r^  rI   r  r_  r  r   r   r   r   r   r  r  GetSetDescriptorVariabler  r  r  r   r   rk  invoke_descriptor_getrO  rM   rE  )r   r   r   rG  r   prop_vtr   rt  gs_vtr  r  r|  s               rn   r  z1UserDefinedObjectVariable.resolve_data_descriptor:  s6    i*43N3N4
 {{77DA006JG,,D$**2{;  i!;!;<yy%%BBd,<< //99$QU9Vfi&?&?@,&TZZ 0 9 9::UVZU[[\] 66yPE**2tT5E5Eb+5VWWi!;!;<yy%%BBd,<< //99$QU9Vfi&?&?@,&TZZ 0 9 9::UVZU[[\] 66yPE**2tT5E5Eb+5VWWi!:!:;11)FKE**2tT5E5Eb+5VWW''YDIfe001--b$	6JJ
		DJJ'88TJH $$R6::  	$TZZ(1122MdVSTU	s   %/M+ +A N.-N.c                 ^   ddl m} ||u s&|t        j                  j                  j
                  u r|}| j                  duxr | j                  du}t        |t              rN|r| j                  ||      }t        j                  ||      }|j                  || | j                  |d            S t        |t              rN|r| j                  ||      }t        j                   ||      }|j                  || | j                  |d            S t        |t"        j$                        r:t        j&                  ||      }	|	j                  || | j                  |d            S t        |t"        j(                        r=| j                  |d      }
t        j*                  ||
|      }|j                  || |
      S t        |t"        j,                        r=| j                  |d      }
t        j.                  ||
|      }|j                  || |
      S t1        |      rt        j2                  |d| |      S t        |t"        j4                        rdt7        |d      r)|j8                  }|rt;        |d      nd}t7        |d      r)d}|r| j                  ||      }t        j<                  || ||	      S t?        j@                  tC        |      d
d      }t        |t"        j4                        r| jE                  ||||      S t        jF                  jH                  jJ                  jM                  |      stO        |      r"t        jP                  | |tC        |      |      S |r| j                  ||      }n$|s"| j                  t;        | j                  |      }tS        jT                  |||      S )zIHandle non-data descriptors and plain class attributes from the type MRO.r   r  NrV  r   rU  __wrapped___torchdynamo_inliner  r   )+r  r  r   r  r  r   r  r   r	  r  r;  r   r  re  rw  r  r  rb  rh  ri  rc  rd  rf  rg  r5   WrapperUserMethodVariablerk  rj   r  r#   rl  r   r   r   r  r  r=  r  r  r   rj  rM   rE  )r   r   r   rG  r   r  can_use_mro_sourcer  r  ru  class_vtrs  rt  
var_sourcer  s                  rn   r  z+UserDefinedObjectVariable.resolve_type_attr  sI    	> 11EHHOO4440I!__D8TT[[PT=Ti. "77DA229VLE**2tT5E5Eb+5VWW	;/ "77DA11)FKE**2tT5E5Eb+5VWW	5#B#BC<<YvVF++Bd6F6Fr;6WXX	5#>#>?''K8H77&E **2tX>>	5#=#=>''K8H66&E **2tX>>*9566=$v  	5#5#56)%:;%99	FLF,ABRV )%:; J!!;;BE
//4:f  ''YDIfe001--b$	6JJ
 HH""44Y?!),,,T4iQWXX 33B=FDOO76F$$RF;;rp   r2  c                 p   d}d}| j                   r?| j                  ||      }t        t        |      d      }t	        j
                  |||      }nt        |      }t        t        | j                              }t        j                  |j                  j                  ||      j                  || |gi       S )z3Trace a descriptor's __get__(instance, owner) call.Nr   rV  )r  r;  r#   r+   rM   rE  r  r   r   r   r   rl  r   r  rm  )	r   r   r   r2  r   r  r  r  	owner_vars	            rn   r  z/UserDefinedObjectVariable.invoke_descriptor_get  s     ! $?? $ > >r4 H$.z:K/Li$X!,222zCTUN6zBN,T$**-=>	++''(
 -T9-r
2		3rp   c                 6   |rt        | t        j                        r||j                  j                  r$t
        j                  j                  j                  rB|dv r-| j                  t        d      t        | j                  |      }| j                  |      }|S )zCWrap source for nn.Module instance dict attribute access if needed.)r  r  z7source must not be None for _buffers/_parameters access)r	  r   r  r*  r  r   r=  r   install_free_tensorsr   r$  r,   _wrap_source)r   r   r   r   s       rn   r   zBUserDefinedObjectVariable.maybe_wrap_nn_module_source_for_instance  s     4!H!HIYY%%)=)=)R)R22;;&(Q  8TJ&&v.Frp   ry   c                    | j                   rGt        | j                   j                  t        j                  t
        j                  |                   	 | j                  ||      }t        j                  |t        |t        j                               S # t        $ r- t        |       t        j                  j!                  d      cY S w xY w)Nrm  F)r   r"   r   r,  r-  r!   rn  rw  rM   rE  r	  r   r  r   r   ry   r   )r   r   r   var_vts       rn   ro  z*UserDefinedObjectVariable.call_obj_hasattr  s     ;;&&%%l&:&:F	<%%b$/F"((
69+D+DEE  & 	<%b)--44U;;	<s   A B 3CCc                 D    t        | j                        j                  d uS r   )r   r   ri   r   s    rn   r   z%UserDefinedObjectVariable.is_hashable  s     DJJ((44rp   c           	         ddl m} t        | j                        }|j                  D ]  }d|j
                  vr|j
                  d   }| ||d|j                   d       |t        u r nt        |t        j                        r'| j                  |d|d       }|j                  |g i       }ddlm} t        ||      r|j                         d	fc S t        |t         j"                        rt%        |j'                               d
fc S 	 |j)                         }	|	1t-        |	t$              s!t/        t0        |d|	j                   dg       |j3                         s:t5        dd|  dt        |      j                   ddgt6        j8                         |j                         d
fc S 	 |t;               v }
|j<                  dk(  s|
st?        | j                        r nAt5        dd|  |j                   dd|j                   dgt6        j@                          | jB                  | jB                  jE                  |      S tG        | j                        d
fS # t*        $ r d }	Y Sw xY w# t0        $ r d
}
Y w xY w)Nr   )r   ri   zunhashable type: 'rX  rV  rF   )FakeIdVariableTFz/__hash__ method should return an integer, not 'rY  zNon-constant __hash__ returnz
hash_impl z!__hash__ returned a non-constant r  z=Ensure that your custom __hash__ function returns an integer.rP  r  zUntraceable C tp_hashz4 defines a C __hash__ that Dynamo cannot trace into.Use torch._dynamo.allow_c_slot(zA) to register it as safe if its slots are pure and deterministic.)$rj  r   r   r   r  r   r   r   r	  rb  rk  r  rm  r   r%  r   r   SymNodeVariabler  evaluate_exprr  r   r
  r   r   r4  r   r   r#  rs   r   r7   r[  rN  r   r   )r   r   r   obj_typecls	type_hashr  r   r%  result_typein_allowlists              rn   r   z#UserDefinedObjectVariable.hash_impl$  s   
 	+

# ## F	C-Z0I  '9(:K:K9LA%NOf})U%7%78!33
Id 4 
 $11"b"=4fn5!446<<fi&?&?@v3356=='"("4"4"6K *:k33O,!$$/$8$8#9< 002! >",TF 3&G<001%4 \.99	 002E99%(,A,CC *,*4::6 /$TF+"||n -, - 6cll^ D% & '22	wF	P ==$==**2.. DJJ&&i + '"&K'2  %$%s$   I$1I6$I32I36JJr   c           	         ddl m} ddlm} t	        | j
                        }|j                  D ]u  }||j                  vr|t        u r n[|j                  |   }t        |t        j                        rS| j                  |||d      }	|	:ddlm}
 |
j                  |	dd	       5  |	j                  ||gi       cddd       c S  n| j                    nd
}	 |t#               v }|j&                  dk(  s|st)        | j
                        rX|j+                         }|t,        ur(	  || j
                  |      } |j.                  |      c S  |j.                  t2              c S t5        dd|  d| |j6                   dd|j6                   dgt8        j:                         x | j                   | j                   j=                  |||      S  || |||      S # 1 sw Y   xY w# t$        $ r Y w xY w# t0        $ r Y w xY w)zMRO walk for tp_richcompare, analogous to slot_tp_richcompare.

        https://github.com/python/cpython/blob/3.13/Objects/typeobject.c#L9421-L9468
        rF   rx   )object_richcompareNrV  r   )patch should_allow_nested_graph_breaksc                       yr  rr   rr   rp   rn   <lambda>z<UserDefinedObjectVariable.richcompare_impl.<locals>.<lambda>  s    rp   Fr  zUntraceable C tp_richcomparezrichcompare_impl  z= defines a C comparison method that Dynamo cannot trace into.r&  zN) to register it as safe if its comparison methods are pure and deterministic.rP  )r   ry   r  r/  r   r   r  r   r   r	  rb  rk  r  unittest.mockr0  rm  rN  ro   r   r   r7   r}  rK   r   r   r   r   r   r   r[  r   )r   r   r   r   ry   r/  r)  r*  r  r|  r0  r-  rL  r   s                 rn   r   z*UserDefinedObjectVariable.richcompare_impl}  s'    	/7

### ?	C%f}\\"%F&%"4"4511"b&1N' 4 "Dm G  (55b5'2FG G  }}( L%8 *,*4::6!>>@	N2!'

I!>6/66v>> /'..~>>6+D62$7"||n -1 2 6cll^ D) * '22	i?	B ==$==11"eR@@!$E266_G G    % s0   &GG($$G8G%	(	G54G58	HHc                     t        |t              rA| j                         r1|j                         r!| j                         |j                         k(  S t        |t              sy| j
                  |j
                  u S r  )r	  rM   r4  r   r   r   rt  s     rn   ru  z)UserDefinedObjectVariable.is_python_equal  sb    uo.'')((***,0H0H0JJJ%!45zzU[[((rp   c                 `   t        t        |dd      dd      }|j                  d      }|r	 ddl}ddlm}	 | j
                  |	v xs8 |j                  | j
                        xs |j                  | j
                        }
|
s4|j                  d      }|!	 |j                         }|| j
                  f|	v }
n[ddlmc m} | j
                  |j(                  v xs8 |j                  | j
                        xs |j                  | j
                        }
|
s|j+                  || g|i       S | j                  |||||      S # t        $ r | j                  |||||      cY S w xY w# t        $ rB ddl}|j                  t              }|j!                  d	       | j                  |||||      cY S w xY w)
aE  Emulate tree_map behavior for user-defined objects.

        In pytree, a type is a leaf if it is NOT in SUPPORTED_NODES.
        User-defined objects (that are not registered with register_pytree_node)
        are always treated as leaves. This works for both torch.utils._pytree
        and optree implementations.
        rW  Nr   ry  optreer   _NODETYPE_REGISTRY	namespacezYFailed to import optree.registry._NODETYPE_REGISTRY, falling back to tracing for tree_map)rk   r  r8  optree.registryr:  r  is_namedtuple_classr   r   r   r   _tree_map_fallbackr   logging	getLoggerr   warningr  r  r  SUPPORTED_NODESrm  )r   r   tree_map_fnmap_fnresttree_map_kwargstree_map_module	is_optreer8  r:  is_registerednamespace_varr;  r?  logr  s                   rn   call_tree_map_branchz.UserDefinedObjectVariable.call_tree_map_branch  s     "'+tT"BLRTU#..x8	/>
 OO'99 B11$//BB00A  %$3$7$7$DM$0(5(H(H(JI !* $- "4-4M> 10 6#9#99 >--doo>>,,T__=  ''TMDM2>>
 &&
 	
W  3 #'#:#: " + & $ /$   ''1; ..# s1   A'E"  D> >EE" EE" "AF-,F-c           	      |   |j                         }|j                  d      }|r	 ddl}	ddlm}
 | j
                  |
v xs8 |	j                  | j
                        xs |	j                  | j
                        }|s4|j                  d      }|!	 |j                         }|| j
                  f|
v }n[ddlmc m} | j
                  |j                   v xs8 |j                  | j
                        xs |j                  | j
                        }|sNt#        j$                  |D cg c]  }t'        j(                  ||       c}      }|j+                  ||| g|i       S | j                  ||||||      S # t        $ r | j                  ||||||      cY S w xY w# t        $ r | j                  ||||||      cY S w xY wc c}w )zEmulate tree_map_with_path behavior for user-defined objects.

        Same logic as call_tree_map_branch but passes keypath to the map function.
        r8  r   Nr9  r;  )
get_moduler  r8  r<  r:  r  r=  r   r   r   r   _tree_map_with_path_fallbackr   r  r  r  rB  r   r|   rM   rE  rm  )r   r   rC  rD  rE  rF  keypathrG  rH  r8  r:  rI  rJ  r;  r  rS  keypath_vars                    rn   call_tree_map_with_path_branchz8UserDefinedObjectVariable.call_tree_map_with_path_branch<  s    &002#..x8	$> OO'99 B11$//BB00A  %$3$7$7$DM$0(5(H(H(JI ) $- "4-4M. 10 6#9#99 >--doo>>,,T__=  #117>?!&&r1-?K ''[$,F,FKK00
 	
C  3 #'#D#D " + & $ / '$   88# ( @s6   A'F  E/ F9/FF FF F65F6)r   rw   rW   rz   )r   rw   rW   zVariableTracker | None)rW   Nr  r   rw   rC  (variables.functions.UserFunctionVariablerD  rM   rE  list[VariableTracker]rF  dict[str, VariableTracker]rW   rM   r   rw   rC  rT  rD  rM   rE  rU  rF  rV  rP  ztuple[Any, ...]rW   rM   )sr   r   r   __doc__rN  rM   r   r  r  r   r   _nonvar_fieldsr   r   r+   r  r   r   r  r   r  r  r  rx  r  r}  r   r   r  r  r   r  rB  rH  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r,  r9  r  r  r	  r  r  r  r  r  r#  r*  r/  r5  r;  r>  rM  rD  rI  rM  rS  rV  r[  r_  re  rh  rk  rp  rs  rx  r{  r  r  r  r@  r  r  r  r  r  r  r  r  r  rm  r  r  r  r  r  r%   r;  r  rw  r  r  r  r   ro  r   r   r   ru  rL  rR  r  r  s   @rn   r  r  L  s    (,Ho$+ &*M3s8d?) 	 
	+	+N #'(,.226.L.L 4K	.L
 %.L %t+.L (4/.L .L 
.L`	5 	5H# H
 $ 

T f ),F ),V"& "2& 2 >!'! !
 ! 
vv}$	%!"' 
"2<'< 
<|' 
0' 
*' 
*7'7 
7,7'7 
7.7'7 
70/: / /
'
 
 	

 sm
 S#X
 

*---5D-	- ,#> ,? ,(: ( ($ __S   2'2 2 
	2&1'1 1 
	19'9 9 
	9='= = %	=
 
=2 -.<'.< .< ?#	.<
 
.<`mA'mA mA 	mA
 mA mA mA 
mAf 	
'
 
 	

 

& 	
'
 
 	

 

 @'@ @ 
	@ 	
'
 
 	

 

 @'@ @ 
	@ 	
'
 
 	

 

 <'< < 
	< 	
'
 
 	

 

 ='= = 
	= 	
'
 
 	

 

 ='= = 
	= 	
'
 
 	

 

 ='= = 
	= 	
'
 
 	

 

 ='= = 
	=='= = 
	= 	
'
 
 	

 

 B'B B 
	B 	
'
 
 	

 

 A'A A 
	A 	
'
 
 	

 

 ='= = 
	= 	
'
 
 	

 

 _;'_; _; 3i	_;
 S#X_; 
_;B:-:6E:	:3-36E3	3
6 
? 
.!7 !O !!7 !O !r 'r  r  	r 
 
r h:D :
)-)	o	)
T >7'>7 ?#>7 S/)*	>7
 
>7@.F .
CV 
C 
C$C $F $L# & (
*-
*47
*	
*O
-O
58O
	O
bd
-d
58d
	d
L.-.58.	..M;'M; M; 	M;
 M; 
M;^S<'S< S< 	S<
 S< 
S<j3'3 3 	3
 3 
30'  	
 
$*<-<58<	<&5T 5W'7 W'E#t)<L W'rP7-P76EP7KNP7	P7d
)V 
) 
)_
'_
 @_
 "	_

 &_
 6_
 
_
BL
'L
 @L
 "	L

 &L
 6L
 #L
 
L
rp   r  c                   v    e Zd ZdZdedefdZdefdZdefdZ	ddZ
defd	Zd
ddeeef   fdZdedefdZy)FrozenDataClassVariablea  Frozen dataclass variable for as_proxy/as_python_constant/hashability.

    Construction is handled by the generic polyfill path (tracing through
    the auto-generated __init__). Field values are retrieved dynamically
    via var_getattr using InstructionTranslator.current_tx().
    
field_namerW   c                 R    ddl m} |j                         }| j                  ||      S )Nr   r  )r  r  r  rw  )r   r\  r  r   s       rn   _get_field_vtz%FrozenDataClassVariable._get_field_vt  s&    H"--/J//rp   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 ]f  }|j                  s| j                  |j                        j                         }t!        |dd      r|||j                  <   V|j#                  |       h  | j%                         |i |S )Nr   fieldsz@currently can't reconstruct arbitrary frozen dataclass instanceskw_onlyF)r   ra  r  r  r  r:   r   TreeSpecLeafSpecConstantNoder   treespec_leafinitr^  r   r   rk   r   r  )r   ra  r  rZ  r   fielddatas          rn   r   z*FrozenDataClassVariable.as_python_constant  s    &,,JJ&//6;N;NO
 &R  $**foo.''))$&DJJ' 	&Ezz))%**5HHJ5)U3)-F5::&KK%	& "t!42622rp   c                 4   ddl m} g }i } || j                        D ]d  }| j                  |j                        j                         }t        |d      r|j                  r|||j                  <   T|j                  |       f  | j                         |i |S )Nr   r`  rb  )
r   ra  r   r^  r   r   rj   rb  r   r  )r   ra  rZ  r   rh  r  s         rn   r   z FrozenDataClassVariable.as_proxy  s    &$&DJJ' 	#E&&uzz2;;=Eui(U]]%*uzz"E"	# "t!42622rp   Nc                     | j                    || j                          y |j                  |j                  | j                                      y r   )r   append_outputcreate_load_const_uncheckedr   ry  s     rn   reconstructz#FrozenDataClassVariable.reconstruct  s@    ;;"DKK //0G0G0IJ	
rp   c                 b    | j                   j                   d| j                  j                   dS r   r  r   s    rn   r   z FrozenDataClassVariable.__repr__  r  rp   r   rw   c                    ddl m} ddlm} ddlm} d}g } || j                        D ]D  } ||| j                  |j                              \  }}	|xs |	}|j                   ||             F t        t        |            |fS )Nr   r`  rF   )RawHash)generic_hash_implF)r   ra  hashablerq  r  rr  r   r^  r   r   r   r  )
r   r   	dc_fieldsrq  rr  is_fake
raw_hashesfhfakes
             rn   r   z!FrozenDataClassVariable.hash_impl  s    
 	4%6
4::& 	*A'D,>,>qvv,FGGAtoGgaj)	* E*%&//rp   r   c                      t        t              sy j                         j                         uryddlm} t         fd | j                        D              S )NFr   r`  c              3      K   | ]G  }j                  |j                        j                  j                  |j                               I y wr   )r^  r   ru  )r  rw  r   r   s     rn   r  z:FrozenDataClassVariable.is_python_equal.<locals>.<genexpr>  sB      
 qvv&66u7J7J1667RS
s   AA)r	  r[  r  r   ra  rC  r   )r   r   rt  s   `` rn   ru  z'FrozenDataClassVariable.is_python_equal  sT    %!89U%6%6%883 
tzz*
 
 	
rp   rz  rt   rW   N)r   r   r   rX  r   rM   r^  r   r   r   rn  r   r  r  r  r   ru  rr   rp   rn   r[  r[    su    0 0 03F 363& 3
H# H07 0E#t)<L 0$

V 

 

rp   r[  c            
       X     e Zd Zdededdf fdZddded	ee   de	eef   def
d
Z
 xZS )SourcelessGraphModuleVariabler   r   rW   Nc                 &    t        |   |fi | y r   r   r   r   s      rn   r   z&SourcelessGraphModuleVariable.__init__  s    
 	)&)rp   r   rw   r   rZ  c                     t        j                  || j                  j                  j                        }| g|z   }|j                  |||      S r   )rM   rE  r   forwardr  r@  )r   r   r   rZ  r   fn_variables         rn   r@  z)SourcelessGraphModuleVariable.call_method  sM     &++B

0B0B0K0KLv}--
 	
rp   )r   r   r   r   r   r   r   r  rM   r  r@  r  r  s   @rn   r~  r~    sh    ** * 
	*
'
 
 ?#	

 S/)*
 

rp   r~  c            
       ~    e Zd Zdededdf fdZededef   fd       Zedd       Z	d	d
de
dee   dee
ef   def
 fdZd	d
de
f fdZedd       Zedee   fd       ZddZedee   fd       Zedej.                  dz  fd       Zde
fdZd fdZej6                  dej.                  ddfd       Z xZS )"UserDefinedExceptionObjectVariabler   r   rW   Nc                     t        |   |fi | |j                  dg       }t        j                  | j
                  |      | _        t        |t              rt        | _        y t        | _        y )Nr  )r   r   r   r   ExceptionVariabler  rN  r	  r   r-   r1   r  )r   r   r   r  r   s       rn   r   z+UserDefinedExceptionObjectVariable.__init__  sc    )&)JJ{B/	!33DOOYO %/ # 	 # 	rp   .c                     | j                   S r   r  r   s    rn   rW  z%UserDefinedExceptionObjectVariable.fn  s    rp   c                 x    | j                   t        d      t        t        j                  | j                         S )Nz,_base_vt must not be None for exception repr)rN  r$  r   r   r  r   s    rn   exc_vtz)UserDefinedExceptionObjectVariable.exc_vt  s/    ==  !OPPI//??rp   r   rw   r   rZ  c                    |dk(  rU| j                  |      x}rBt        j                  |      r-t        |      dk(  rt        j
                  j                  d       S |dk(  rCt        |      dk(  r5|d   j                  dddd      r| j                  j                  ||||      S |d	k(  r| j                  j                  ||||      S t        | %  ||||      S )
Nr   r   r   r   	__cause____context____suppress_context____traceback__with_traceback)r   r   r  r  r   ry   r   is_constant_matchrN  r@  r   )r   r   r   rZ  r   r  r   s         rn   r@  z.UserDefinedExceptionObjectVariable.call_method  s     J;;DAAA**62Fq --44T::M!D	QQ))],BO ==,,RtVDD%%==,,RtVDDw"2tT6::rp   c                 d    |dv r| j                   j                  ||      S t        |   ||      S )N)rZ  r  r  r  r  )rN  rw  r   rr  s      rn   rw  z.UserDefinedExceptionObjectVariable.var_getattr3  s;     
 
 ==,,R66w"2t,,rp   c                 .    | j                   j                  S r   )rN  r  r   s    rn   r  z.UserDefinedExceptionObjectVariable.__context__>  s    }}(((rp   c                 .    | j                   j                  S r   )rN  rZ  r   s    rn   rZ  z'UserDefinedExceptionObjectVariable.argsB  s    }}!!!rp   c                 8    | j                   j                  |      S r   )rN  set_context)r   rR  s     rn   r  z.UserDefinedExceptionObjectVariable.set_contextF  s    }}((11rp   c                 .    | j                   j                  S r   )rN  exc_typer   s    rn   r  z+UserDefinedExceptionObjectVariable.exc_typeI  s    }}%%%rp   c                 .    | j                   j                  S r   rN  python_stackr   s    rn   r  z/UserDefinedExceptionObjectVariable.python_stackM  s    }})))rp   c                 6    | j                   j                         S r   )r  
debug_reprr   s    rn   r  z-UserDefinedExceptionObjectVariable.debug_reprQ  s    {{%%''rp   c                     t        | j                        j                  t        j                  urt        |   |      S | j                  j                  |      S r   )r   r   r   r   r   rH  r  r   r   r   s     rn   rH  z,UserDefinedExceptionObjectVariable.repr_implT  sE    

$$M,B,BB7$R(({{$$R((rp   c                 &    || j                   _        y r   r  )r   r   s     rn   r  z/UserDefinedExceptionObjectVariable.python_stackZ  s    %*"rp   )rW   variables.ExceptionVariable)rW   ry   )rR  r  rW   Nr~  )r   r   r   r   r   r   r  r   rW  r  r   r  rM   r  r@  rw  r  rZ  r  r   r   r  	tracebackStackSummaryr  r  rH  r  r  r  s   @rn   r  r    sm   
f 
 
 
 HS&[)   @ @
;'; ; ?#	;
 S/)*; 
;4	-9 	- 	- ) ) "d?+ " "2 &$}- & & *i44t; * *(C () +)"8"8 +T + +rp   r  c                        e Zd ZU dZej
                  ddiej                  dddiZee	ee
e
f   f   ed<   eded	efd
       Zeded	efd       Zddde
d	ef fdZ xZS )InspectVariablezHandles inspect.Signature and inspect.Parameter objects.

    Short-circuits property accesses to avoid tracing property getters,
    redirecting them to the underlying private attributes directly.
    
parametersr  _kind_name)kindr   _PROPERTY_REDIRECTSr   rW   c                 8    t        |       t        j                  v S r   )r   r  r  r   s    rn   is_matching_objectz"InspectVariable.is_matching_objectk  s    CyO????rp   c                 &    | t         j                  v S r   )r  r  r   s    rn   is_matching_classz!InspectVariable.is_matching_classo  s    o9999rp   r   rw   r   c                     | j                   j                  t        | j                        i       }||v rt        |   |||         S t        |   ||      S r   )r  r   r   r   r   rw  )r   r   r   	redirectsr   s       rn   rw  zInspectVariable.var_getattrs  sV     ,,00djj1A2F	97&r9T?;;w"2t,,rp   )r   r   r   rX  r   	Signature	Parameterr  r  r   r   r   r  r   r  r  r  rM   rw  r  r  s   @rn   r  r  _  s     	L-8GW=7dDcN23 
 @ @4 @ @ :v :$ : :---58-	- -rp   r  c                   ^     e Zd Zededefd       Zdededdf fdZdd	d
e	de
f fdZ xZS )KeyedJaggedTensorVariabler   rW   c                 z    t         j                  j                  d      }|d uxr t        |       |j                  u S )Nztorchrec.sparse.jagged_tensor)r   r   r   r   KeyedJaggedTensorr   mods     rn   r  z,KeyedJaggedTensorVariable.is_matching_object}  s3    kkoo=>$E490E0E#EErp   r   r   Nc                 z    ddl m} t        |      |urt        dt        |             t	        |   |fi | y )Nr   )r  z Expected KeyedJaggedTensor, got )torchrec.sparse.jagged_tensorr  r   r$  r   r   )r   r   r   r  r   s       rn   r   z"KeyedJaggedTensorVariable.__init__  s@    	
 ;// #CDK=!QRR)&)rp   r   rw   r   c                    t         j                  j                  j                  r@| j                  4|dv r0t        j                  d      5  t        | !  ||      cd d d        S t        | !  ||      S # 1 sw Y   xY w)N)_length_per_key_offset_per_keyT)#force_unspec_int_unbacked_size_like)	r   r=  r   3force_unspec_int_unbacked_size_like_on_torchrec_kjtr   r   r0  r   rw  rr  s      rn   rw  z%KeyedJaggedTensorVariable.var_getattr  st     MM  TT'>>%%$O 5w*2t45 5w"2t,,5 5s   A66A?)r   r   r   r  r   r  r  r   r   r   rM   rw  r  r  s   @rn   r  r  |  sc    F F4 F F*f * * *
--
-58
-	
- 
-rp   r  _constant_base_methodsc                   H     e Zd ZdZdededdf fdZdefdZdefdZ xZ	S )	UserDefinedConstantVariablez
    Represents user-defined objects that subclass immutable constant types
    (int, float, str).

    Uses a ConstantVariable as _base_vt for the underlying constant value.
    r   r   rW   Nc                    ddl m} t        |   |fi | t	        |      j
                  D ]7  }|t        v s |j                   ||            | _        t        |   | _
         n | j                  t        dt	        |             y )NrF   rx   z&No constant base type found in MRO of )r   ry   r   r   r   r  _CONSTANT_BASE_TYPESr   rN  r  r  r$  )r   r   r   ry   r!  r   s        rn   r   z$UserDefinedConstantVariable.__init__  s    .)&)K'' 	D++ 7 0 7 7U D%;D%A"		
 ==  #I$u+!WXX !rp   c                     | j                   S r   r   r   s    rn   r   z.UserDefinedConstantVariable.as_python_constant  r   rp   c                 d    | j                   t        d      | j                   j                         S )Nz%_base_vt must not be None in as_proxy)rN  r$  r   r   s    rn   r   z$UserDefinedConstantVariable.as_proxy  s+    ==  !HII}}%%''rp   )
r   r   r   rX  r   r   r   r   r   r  r  s   @rn   r  r    s>    
Yc 
YS 
YT 
YC (& (rp   r  c                   &    e Zd Zededefd       Zy)IntWrapperVariabler   rW   c                 z    t         j                  j                  d      }|d uxr t        |       |j                  u S )Nztorch.export.dynamic_shapes)r   r   r   r   _IntWrapperr  s     rn   r  z%IntWrapperVariable.is_matching_object  s1    kkoo;<$?49#??rp   N)r   r   r   r  r   r  r  rr   rp   rn   r  r    s(     @ @4 @ @rp   r  c            
            e Zd ZdZ	 	 ddedz  dedz  deddf fdZdd	d
ede	e
   deee
f   de
f
 fdZd fdZdee   fdZ xZS )RemovableHandleVariableNr  r0  r   rW   c                 @    t        |   di | || _        || _        y )Nrr   )r   r   r  r0  )r   r  r0  r   r   s       rn   r   z RemovableHandleVariable.__init__  s$     	"6"*rp   r   rw   r   rZ  c                 P   |dk(  r| j                   | j                  k7  rW| j                   t        d      |j                  j                  j                  | j                          | j                  | _         t        j                  j                  d       S t        | )  ||||      S )Nremovez%idx must not be None for hook removal)r0  REMOVEDr$  r*  r]  remove_hookr   ry   r   r   r@  r   r   r   rZ  r   r   s        rn   r@  z#RemovableHandleVariable.call_method  s     8xx4<<'88#()PQQ		&&22488<<<--44T::w"2tT6::rp   c                     | j                   | j                  k(  r0j                  fd       j                  t	        dd             y t
        |          y )Nc                  (     j                  dd      S )Nztorch._dynamo.utilsinvalid_removeable_handle)load_import_from)rz  s   rn   r3  z5RemovableHandleVariable.reconstruct.<locals>.<lambda>  s    00)+F rp   r   F)r0  r  add_push_nullextend_outputr   r   rn  )r   rz  r   s    `rn   rn  z#RemovableHandleVariable.reconstruct  sN    88t||#!!
 !!"6q%"@AG$rp   c                     t         S r   )r  r   s    rn   r  z#RemovableHandleVariable.python_type  s    ##rp   r  r|  )r   r   r   r  rJ   r  r   r   r   r  rM   r  r@  rn  r   r   r  r  r  s   @rn   r  r    s    G .2		#d*	 4Z		
 	 
	;'; ; ?#	;
 S/)*; 
; %$T&\ $rp   r  c            
            e Zd ZdZ	 ddededz  deddf fdZdefdZ	d	d
de
fdZd	d
de
de
f fdZd	d
dedee
   deee
f   de
f
 fdZdefdZd	d
de
f fdZ xZS )rM  z
    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.
    Nr   r  r   rW   c                     t        |   |fi | |2| j                  t        d      t	        i t                     | _        n|| _        t        | _        | j                  t        d      y )Nz@dict_vt must be constructed by builder.py when source is presentr  ._base_vt must not be None after initialization)	r   r   r   r$  rN   rL   rN  r0   r  )r   r   r  r   r   s       rn   r   z UserDefinedDictVariable.__init__  sy     	)&)?{{&$V  ..0DM
 $DM)==  !QRR !rp   c                 d    | j                   t        d      | j                   j                         S )Nz _base_vt must not be None in len)rN  r$  r  r   s    rn   r  zUserDefinedDictVariable.len  s-     ==  !CDD}}  ""rp   r   rw   c                 $    | j                  |      S r   )r  r   s     rn   r  z!UserDefinedDictVariable.sq_length  s     ~~b!!rp   r%  c                 r   | j                  d      }|| j                  v r4| j                  t        d      	 | j                  j	                  ||      S t        |   ||      S # t
        $ rH t        | j                         t              r(| j                  d      r| j                  |d|gi       cY S  w xY w)Nr  ._base_vt must not be None in mp_subscript_impl__missing__)r   r  rN  r$  r  r   r
  r  r  r@  r   )r   r   r%  r  r   s       rn   r  z)UserDefinedDictVariable.mp_subscript_impl   s     11-@T'''}}$$%UVV}}66r3?? w(S11 $ $$&66}E++BubIIs   A% %AB64B6r   rZ  c                 V   |dk(  rd| j                  d      | j                  v rG| j                  d      r6| j                  t        d      	 | j                  j	                  ||||      S t        |   ||||      S # t
        $ r" t        |       | j	                  |d||      cY S w xY w)Nr  r  z(_base_vt must not be None in call_method)r   r  rN  r$  r@  r   r   r   r  s        rn   r@  z#UserDefinedDictVariable.call_method6  s     M!00?4CUCUU00?}}$$%OPPI}}00T4HH w"2tT6:: $ I)"-''M4HHIs   A= =(B('B(c                 H   | j                   t        d      t        t        | j                         }t	        | j
                        j                  t        j                  j                  u rt        |j                  j                               }	 t        |d d      }|s"t	        | j
                        j                   dS dj                  d |D              }t	        | j
                        j                   d| d	S |j!                         S # t        t        f$ r Y w xY w)
N'_base_vt must not be None for dict reprc                 (    | d   j                         S NrF   r   r  s    rn   r3  z4UserDefinedDictVariable.debug_repr.<locals>.<lambda>W      T!W%?%?%A rp   Tr%  rI  (), c              3   |   K   | ]4  \  }}|j                   j                          d |j                           6 yw: N)vtr  r  r%  r   s      rn   r  z5UserDefinedDictVariable.debug_repr.<locals>.<genexpr>^  s<      !CM3366$$&'r%*:*:*<)=>!s   :<({}))rN  r$  r   rN   r   r   r   r  Counterr  r  sortedr   r   r   joinr  )r   base_vtr  contentss       rn   r  z"UserDefinedDictVariable.debug_reprN  s   ==  !JKK($--8

$$(;(;(D(DD,,./EA  tzz*334B77yy !QV! H 4::&//0H:SAA!!## (3 s   D D! D!c                 @   | j                  d      }t        | j                        j                  t        j
                  j                  u r| j                  t        d      t        t        | j                        }t        |j                  j                               }	 t        |d d      }|s6t        j                   t        | j                        j"                   d      S dj%                  fd|D              }t        j                   t        | j                        j"                   d	| d
      S || j&                  v r2| j                  t        d      | j                  j)                        S t*        | Q        S # t        t        f$ r Y w xY w)Nr   z*_base_vt must not be None for Counter reprc                 (    | d   j                         S r  r  r  s    rn   r3  z3UserDefinedDictVariable.repr_impl.<locals>.<lambda>o  r  rp   Tr  r  r  c              3   n   K   | ],  \  }}t        |j                         d t        |        . ywr  )rB   r  )r  r%  r   r   s      rn   r  z4UserDefinedDictVariable.repr_impl.<locals>.<genexpr>v  s<      !C  CFF+,B|B/F.GH!s   25r  r  r  )r   r   r   r   r  r  rN  r$  r   rN   r  r  r  r   r   rM   rE  r   r  r  rH  r   )r   r   r  r  r  r  r   s    `    rn   rH  z!UserDefinedDictVariable.repr_impld  sq   11*=

$$(;(;(D(DD}}$$%QRR,dmm<G,,./EA  &,,RD4D4M4M3Nb1QRRyy !"'! H #((tDJJ'001XJcB  T'''}}$$%NOO==**2..w $$ (3 s   "F FFr   )r   r   r   rX  r   rN   r   r   r  r  rM   r  r  r   r  r  r@  r  rH  r  r  s   @rn   rM  rM    s     -1SS #T)S 	S
 
S,#S #"7 "O "
2'2 2 
	2,;'; ; ?#	;
 S/)*; 
;0$C $,%7 %O % %rp   rM  c            
           e Zd ZdZ	 ddedddeddf fdZdefd	Zdefd
Z	e
deeeef      defd       ZdefdZdddefdZ	 ddddededefdZdddedefdZdddededz  def fdZdddedee   deeef   def
 fdZ xZS )OrderedDictVariablea.  
    Represents collections.OrderedDict instances.

    CPython has both a pure-Python implementation:
    https://github.com/python/cpython/blob/v3.13.0/Lib/collections/__init__.py#L86-L339
    and a C accelerator that replaces it at runtime:
    https://github.com/python/cpython/blob/v3.13.0/Objects/odictobject.c

    The C accelerator is always active, so methods like move_to_end and
    popitem are C-level method_descriptors, not Python functions.

    Dict storage is delegated to _base_vt (a ConstDictVariable) via
    UserDefinedDictVariable.
    Nr   r  zConstDictVariable | Noner   rW   c                 |    |'ddl m}  |i t        j                  t	                     }t        |   |fd|i| y )NrF   rN   )user_clsr  r  )dictsrN   r  r  rL   r   r   )r   r   r  r   rN   r   s        rn   r   zOrderedDictVariable.__init__  sB     ?0'$00.0G
 	::6:rp   c                 d    | j                   t        d      | j                   j                         S )Nz/_base_vt must not be None in is_python_constant)rN  r$  r4  r   s    rn   r4  z&OrderedDictVariable.is_python_constant  +    ==  !RSS}}//11rp   c                     | j                   t        d      t        j                  | j                   j	                               S Nz/_base_vt must not be None in as_python_constant)rN  r$  r  r  r   r   s    rn   r   z&OrderedDictVariable.as_python_constant  s6    ==  !RSS&&t}}'G'G'IJJrp   r  c                     | syt         j                  dk\  rddj                  d | D              z   dz   S ddj                  d | D              z   d	z   S )
NzOrderedDict())r     zOrderedDict({r  c              3   0   K   | ]  \  }}| d |   ywr  rr   r  s      rn   r  z9OrderedDictVariable._ordered_dict_repr.<locals>.<genexpr>  s     F*#use2eW-Fs   r  zOrderedDict([c              3   4   K   | ]  \  }}d | d| d  yw)r   r  r   Nrr   r  s      rn   r  z9OrderedDictVariable._ordered_dict_repr.<locals>.<genexpr>  s#     D
U!C55'+Ds   z]))r   r  r  )r  s    rn   _ordered_dict_reprz&OrderedDictVariable._ordered_dict_repr  sh    "w&))FFFG iiDeDDE	
rp   c                 :   | j                   t        d      t        t        | j                         }|j                  j	                         D cg c]/  \  }}|j
                  j                         |j                         f1 }}}| j                  |      S c c}}w Nz._base_vt must not be None for OrderedDict repr)rN  r$  r   rN   r  r  r  r  )r   r  r%  r   r  s        rn   r  zOrderedDictVariable.debug_repr  s    ==  !QRR($--8 &mm113
U VV %"2"2"45
 
 &&u--	
s   4Br   rw   c           	      R   | j                   t        d      t        t        | j                         }|j                  j	                         D cg c]'  \  }}t        ||j                        t        ||      f) }}}t        j                  || j                  |            S c c}}w r  )
rN  r$  r   rN   r  rB   r  rM   rE  r  )r   r   r  r%  r   r  s         rn   rH  zOrderedDictVariable.repr_impl  s     ==  !QRR($--8 &mm113
U "cff%|B'>?
 
 $$R)@)@)GHH	
s   ,B#r   rI  c                    t        |j                         t              s#t        j                  j                  t              S |r]t        j                  || j                  j                  t                     j                  ||gi       }|j                  |d| gi        |S | j                  |dg i       }|j                  |d|gi        |S )NrV  r  copy)r
  r  r  r   ry   r   r   rM   rE  r   r   r&   rm  r@  )r   r   r   rI  news        rn   rM  zOrderedDictVariable.nb_or_impl  s     %++-t4--44^DD!''DJJ((1BmB,  OOB4&"5 
 ""2vr26COOB5'26
rp   c                 0    | j                  |d|gi        | S Nr  r3  r4  s      rn   rD  z&OrderedDictVariable.nb_inplace_or_impl  s     	Xw3rp   r%  c                     |dnd}| j                  |      }|| j                  v r4| j                  t        d      | j                  j	                  |||      S t
        |   |||      S )Nr  r  z2_base_vt must not be None in mp_ass_subscript_impl)r   r  rN  r$  r  r   )r   r   r%  r   r  r  r   s         rn   r  z)OrderedDictVariable.mp_ass_subscript_impl  sw     !&}=11$7T'''}}$$H  ==66r3FFw,Re<<rp   r   rZ  c                    ddl m} ddlm} |dk(  r'| j                  t        d      | j                  j                          |j                  j                  j                  | j                         |d   | j                  vrt        t        |       d}t        |      dk(  r&|d   j                         r|d   j                         }|r*d	|v r&|d	   j                         r|d	   j                         } ||d         }| j                  j                  j!                  ||
        |j"                  d       S |dk(  r,| j                  t        d      | j                  j                  st        t        |dg       d}t        |      dk(  r&|d   j                         r|d   j                         }|r*d	|v r&|d	   j                         r|d	   j                         }| j                  j                  j%                  |
      \  }	}
d| j                  _        |j                  j                  j                  | j                         t)        j*                  |	j,                  |
g      S t.        | a  ||||      S )NrF   rx   rP   r  z(_base_vt must not be None in move_to_endr   Tr   last)r  popitemz$_base_vt must not be None in popitemzpopitem(): dictionary is emptyrY  )r   ry   r  rQ   rN  r$  install_dict_keys_match_guardr*  r]  mutationr   KeyErrorr  r4  r   r  r  r   r  should_reconstruct_allr   r|   r  r   r@  )r   r   r   rZ  r   ry   rQ   r  r%  rS  rT  r   s              rn   r@  zOrderedDictVariable.call_method  s     	/* = }}$$%OPPMM779II""++DMM:Awdmm+(26D4yA~$q'"<"<">Aw113&F*vf~/P/P/Rf~88:!$q'*CMM++Cd+;*#**400Y}}$$%KLL==&&(b(H'I D4yA~$q'"<"<">Aw113&F*vf~/P/P/Rf~88:==&&..D.9DAq37DMM0II""++DMM:**ADD!955w"2tT6::rp   r   r  )r   r   r   rX  r   r   r   r  r4  r   r  r   r  r   r  r  rM   rH  rM  rD  r  r  r  r@  r  r  s   @rn   r  r    sj   $ /3;; ,; 	;
 
; 2D 2
KC K
 
(5c?"; 
 
 
.C .
I7 
IO 
I  	'  	
 
(-6E	='= = %	=
 
="/;'/; /; ?#	/;
 S/)*/; 
/; /;rp   r  c                   P    e Zd ZdZej
                  Z	 	 ddededz  de	dz  de
ddf
 fdZed	edefd
       ZdefdZde
fdZdefdZdddefdZdddedef fdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 ddddededefdZdddedefdZdddedee   deeef   def
 fdZ xZS )DefaultDictVariablea  
    Represents collections.defaultdict instances.

    CPython's defaultdict is implemented in C:
    https://github.com/python/cpython/blob/v3.13.3/Modules/_collectionsmodule.c#L2177-L2180

    default_factory is a field on the C struct (defdictobject.default_factory),
    not a Python instance attribute, so we model it as a field on the VT.

    Dict storage is delegated to _base_vt (a ConstDictVariable) via
    UserDefinedDictVariable.
    Nr   default_factoryr  r   rW   c                     |ddl m}  |i t                     }t        |   |fd|i| |ddlm}  |j                  d       }|| _        y )NrF   r  r  r  rx   )	r  rN   rL   r   r   r   ry   r   r  )r   r   r  r  r   rN   ry   r   s          rn   r   zDefaultDictVariable.__init__F  s]     ?0'.0G 	::6:"25.55d;O.rp   argc                    | j                         }|t        ur|du xs t        |      S t        | t        j
                  t        j                  j                  t        j                  j                  t        j                  f      S )zCheck if arg is a valid default_factory (callable or None).

        CPython's defaultdict.__init__ checks ``callable(factory)`` and
        raises TypeError if not.  We mirror this by checking the
        underlying Python value when possible.
        N)
r}  rK   r   r	  r   BaseBuiltinVariabler/  r  r  r   )r!  r}   s     rn   is_supported_factoryz(DefaultDictVariable.is_supported_factory[  sr     ..0n$$;/(3-/--##<<##>>22	
 	
rp   c                     | j                   t        d      | j                  j                         sy| j                   j                         S )N/_base_vt must not be None for defaultdict constF)rN  r$  r  r4  r   s    rn   r4  z&DefaultDictVariable.is_python_constantq  s@    ==  !RSS##668}}//11rp   c                    | j                   t        d      | j                  j                         st	        | d      | j                  j                         }t        j                  || j                   j                               S )Nr&  z4defaultdict default_factory is not a Python constant)rN  r$  r  r4  rH   r   r  r  )r   factorys     rn   r   z&DefaultDictVariable.as_python_constantx  ss    ==  !RSS##6685F  &&99;&&w0P0P0RSSrp   c                     | j                   t        d      | j                  t        d      d| j                   j                          d| j                  j                          dS )Nz.default_factory must not be None in debug_reprz'_base_vt must not be None in debug_reprdefaultdict(r  r   )r  r$  rN  r  r   s    rn   r  zDefaultDictVariable.debug_repr  sh    ' !QRR==  !JKK4//::<=R}}'')*!-	
rp   r   rw   c           
          | j                   t        d      t        j                  |dt	        || j
                         dt	        || j                          d      S )Nz._base_vt must not be None for defaultdict reprr*  r  r   )rN  r$  rM   rE  rB   r  r   s     rn   rH  zDefaultDictVariable.repr_impl  s]    ==  !QRR$$<D,@,@AB"B./q2
 	
rp   r   c                 F    |dk(  r| j                   S t        | 	  ||      S )Nr  )r  r   rw  rr  s      rn   rw  zDefaultDictVariable.var_getattr  s,    
 $$'''w"2t,,rp   c                 8   ddl m} t        | j                  |      r)| j                  j                  t        t        ||g       | j                  j                  |g i       }| j                  t        d      | j                  j                  |d||gi        |S )zdefaultdict.__missing__: auto-vivification via default_factory.

        https://github.com/python/cpython/blob/v3.13.3/Modules/_collectionsmodule.c#L2233-L2254
        rF   rx   rY  z*_base_vt must not be None in _missing_implr  )r   ry   r:   r  r   r   r  rm  rN  r$  r@  )r   r   r%  ry   default_vars        rn   _missing_implz!DefaultDictVariable._missing_impl  s     	/ 4'')9:$$**2$Xr>**88RD==  !MNN!!"mc;5GLrp   c                     | j                   t        d      || j                   v r| j                   j                  ||      S | j                  ||      S )z?defaultdict.__getitem__: dict lookup with __missing__ fallback.r  )rN  r$  getitem_constr/  )r   r   r%  s      rn   r  z%DefaultDictVariable.mp_subscript_impl  sP     ==  !QRR$--==..r377!!"c**rp   r   rI  c                    |r|| fn| |f\  }}t        |j                         t        j                        }|r||fn||f\  }}t	        |t
              st        dt        |             t        |      s#t        j                  j                  t              S t	        |t              r|j                  }	n@t	        |t              st        dt        |       d|       |j                   j                  }	|j"                  j$                  j'                  t)        j*                  |t,              t)        j*                  |t        j                        g |      }
| j.                  |
_        t        |	j1                         t3                     |
_        |
j.                  }|j"                  j$                  j5                  |
d|       |
j7                  |d|gi        |
S )N"Expected DefaultDictVariable, got z&Expected UserDefinedDictVariable, got r  r  r  r  r  )r
  r  r  r  r	  r  r$  r   rO   r   ry   r   r   rN   r  rM  rN  r*  r]  r  rM   rE  r  r  r  rL   r  r@  )r   r   r   rI  leftrightretr  r  r  r  r  s               rn   rM  zDefaultDictVariable.nb_or_impl  s    (/udmT5Me))+[-D-DE),u5$-v%!45 #Ed5k]!STTF#--44^DDd-.JJEd$;<$<T$ZL4&Q  MM''Eii$$BB!!"d+!!"k&=&=>	 C 
 #22(EUEWX--
		))#/@/RHugr2
rp   c                 0    | j                  |d|gi        | S r  r3  r4  s      rn   rD  z&DefaultDictVariable.nb_inplace_or_impl  s    
 	Xw3rp   rZ  c           
         ddl m} |dk(  rt        |      dk\  rq| j                  |d         rJ|d   | _        |j
                  j                  j                  | d| j                         t        |dd        }nt        t        |dg       | j                  t        d      | j                  j                  |d||      S |d	k(  r=t        |      dk7  rt        ||d
t        |       d       | j                  ||d         S |dk(  r=t        |      dk7  rt        ||d
t        |       d       | j!                  ||d         S |dk(  rK|st        |      dk7  r&t        ||dt        |       dt        |       d       | j#                  ||d         S |dk(  rddlm} | j                  t        d      |j
                  j                  j)                  |j+                  |t,              |j+                  |t.        j0                        g |      }t3        |t4              st        dt7        |             | j                  |_        | j                  j9                  t;               d       |_        |j
                  j                  j                  |d|j                         |S |dk(  rt        |      dk7  rt        ||dt        |       d       t=        |d   |      rs|d   j>                  dk(  ra| j                  |d         rM|d   | _        |j
                  j                  j                  | d| j                          |j*                  d       S t@        | 5  ||||      S t@        | 5  ||||      S )NrF   rx   r   r   r  z'first argument must be callable or NonerY  z%_base_vt must not be None in __init__r  z1 argsz argsr  rC  r  r  r  r  r  z!_base_vt must not be None in copyr  r3  )r  r   r   r   z2 args)!r   ry   r  r$  r  r*  r]  r  r  r   r   rN  r$  r@  r?   r  r/  rD  r  r  r  r   r  r  r  r	  r  r   r  rL   r:   r   r   )	r   r   r   rZ  r   ry   r  new_ddr   s	           rn   r@  zDefaultDictVariable.call_method  sc    	/: 4yA~,,T!W5+/7D(II**55),,
  QR>D -!GH
 }}$$%LMM==,,RT6JJ]"4yA~#Bh3t9+U8KL))"d1g66]"4yA~#Bh3t9+U8KL%%b$q'22YTa#)4ykCK=@	 **2tAw77V^ 3}}$$%HIIYY++II!((T2!(([-D-DE	 J F f&9:$8fG  &*%9%9F""mm11.0 2 FO II""--)6+A+A M]"4yA~#Bh3t9+U8KLtAw 01d1gmmGX6X++DG4'+Aw$		&&11+T-A-A /'..t447&r4v>>w"2tT6::rp   r  )r   rw   r%  rM   rW   rM   r  )r   r   r   rX  r  r  _cpython_typer   rM   rN   r   r   r  r  r$  r4  r   r   r  rH  rw  r/  r  rM  rD  r  r  r@  r  r  s   @rn   r  r  6  s     ++M
 37,0	// )4// #T)	/
 / 
/* 
/ 
d 
 
*2D 2	TC 	T
C 

7 
O 
-'- - 
	-'  
	,
+'
+ 
+ 
	
+  	*'* * 	*
 
*X'  
	W;'W; W; ?#	W;
 S/)*W; 
W; W;rp   r  c            	            e Zd ZdZ	 ddededz  deddf fdZdefdZe	de
e   fd	       Ze	deeef   fd
       Zdedef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.
    Nr   set_vtr   rW   c                    ddl m} |j                  dd       }t        |   |fi | t        |t              rt        nt        }|t        u rt        nt        | _
        || j                  t        d      |t        u r-t        j                  t               t                     | _        nB|j#                  di       }|j%                  ||      j'                  ||i       | _        n|| _        | j                   t        d      y )NrF   r  r   z?set_vt must be constructed by builder.py when source is presentr  r  r  )r  r  r  r   r   r	  r  r  r@   r2   r  r   r$  r   rT   rL   rN  r   r   rm  )	r   r   r=  r   r  r   r  r  r   s	           rn   r   zUserDefinedSetVariable.__init__Y  s     	/ZZd#)&)'s3c,73,>[DU>{{&$U  c! ) 5 5E"2"4!
 #JJ{B7	 1 8 8[ I W W	2! #DM==  !QRR !rp   c                 d    | j                   t        d      | j                   j                         S r  )rN  r$  r   r   s    rn   r   z)UserDefinedSetVariable.as_python_constanty  r  rp   c                 \    | j                   t        d      | j                   j                  S )Nz&_base_vt must not be None in set_items)rN  r$  	set_itemsr   s    rn   rA  z UserDefinedSetVariable.set_items~  s(    ==  !IJJ}}&&&rp   c                 \    | j                   t        d      | j                   j                  S Nz"_base_vt must not be None in itemsrN  r$  r  r   s    rn   r  zUserDefinedSetVariable.items  (    ==  !EFF}}"""rp   r   c                     | j                   t        d      t        |t              r|j                   }| j	                         |j	                         k(  S Nz,_base_vt must not be None in is_python_equal)rN  r$  r	  r<  r   rt  s     rn   ru  z&UserDefinedSetVariable.is_python_equal  sI    ==  !OPPe34NNE&&(E,D,D,FFFrp   r   )r   r   r   rX  r   rT   r   r   r   r  r  rA  r  rQ   rM   r  r  ru  r  r  s   @rn   r<  r<  P  s     ;?SS%04%7SJMS	S@2F 2
 '3s8 ' '
 #tO_<= # #
GV G Grp   r<  c            	       >     e Zd ZdZ	 d	deded   deddf f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.
    Nr   list_vt)r{   Nr   rW   c                     ddl m} t        |   |fi | |/| j                  t        d       |g t                     | _        n|| _        t        | _	        | j                  t        d      y )NrF   r	  z@list_vt must be constructed by builder.py when source is presentr  r  )
r&  r{   r   r   r   r$  rL   rN  r;   r  )r   r   rJ  r   r{   r   s        rn   r   z UserDefinedListVariable.__init__  sw     	()&)?{{&$V  );K;MNDM#DM)==  !QRR !rp   r   )	r   r   r   rX  r   r
   r   r   r  r  s   @rn   rI  rI    sE     EISS&+,@&ASTWS	S Srp   rI  c            
       \    e Zd ZdZdhej
                  Zededed    fd       Zd fd	Z	e
dee   fd       Zd	d
dedededz  def
 fdZddZdedef   fdZddded    dz  fdZdee   dd fdZdefdZ	 	 	 	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZdedefdZ xZS ) UserDefinedTupleVariablea  
    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.

    NamedTupleVariable and StructSequenceVariable are subclasses that handle
    namedtuples and structseqs (torch.return_types.*) respectively.
    	tuple_clsr*  rW   c                 0    t        |       rt        S t        S r   )r   StructSequenceVariableNamedTupleVariable)r*  s    rn   
get_vt_clsz#UserDefinedTupleVariable.get_vt_cls  s    c"))!!rp   Nc                 f   ddl m} |j                  dd       }t        |   |fd|i| |K| j
                  t        d      |st        d      t        ||d         } ||t                     | _	        n|| _	        t        |      | _        t        | _        | j                  t        d	      y )
NrF   r  r   r  zAtuple_vt must be constructed by builder.py when source is presentz0init_args must be provided when tuple_vt is Noner   r  r  )r&  r|   r  r   r   r   r$  rD   rL   rN  r   rN  rC   r  )	r   r   tuple_vtr  r   r|   r   elemsr   s	           rn   r   z!UserDefinedTupleVariable.__init__  s    (ZZd#>)>v>{{&$W  $%WXX
 $B	!5E)%?O?QRDM$DMe*==  !QRR !rp   c                 \    | j                   t        d      | j                   j                  S rC  rD  r   s    rn   r  zUserDefinedTupleVariable.items  rE  rp   r   rw   r   rG  r   c                     t        |t        j                        r%|j                         \  }\  }}| j                  |   S t
        |   ||||      S r   r	  r  r  
__reduce__r  r   r  r   r   r   rG  r   r  r0  r   s          rn   r  z0UserDefinedTupleVariable.resolve_data_descriptor  sQ     i!:!:; $..0KAxQ::c?"w.r4FKKrp   c                     | j                   t        d      | j                         j                  fd        | j                         j                  t        dd             y )Nz6reconstruct should only be called on sourceless tuplesc                  D     j                   j                              S r   )rl  rm  )rz  	create_fns   rn   r3  z6UserDefinedTupleVariable.reconstruct.<locals>.<lambda>  s     G))33I> rp   rF   F)r   r$  get_construct_fnr  rN  r  r   )r   rz  r]  s    `@rn   rn  z$UserDefinedTupleVariable.reconstruct  sf     ;;" H  ))+		

 	21e<=rp   .c                     t         r   )r   r   s    rn   r^  z)UserDefinedTupleVariable.get_construct_fn  s    !!rp   rE  rU  c                     g }t        | j                        }|D ]U  }t        |t              r0t        |j                        |k7  s|j                  | j                  ur y|j                  |       W |S )z>Validate that rest args are compatible for tree_map fast-path.N)r  r  r	  rM  rN  r   )r   rE  othersn	candidates        rn   _validate_rest_for_tree_mapz4UserDefinedTupleVariable._validate_rest_for_tree_map  si     24

O 	%Iy*BCy'1,&&dnn<MM)$	% rp   	new_itemsc                 ~    ddl m}  ||t                     } t        |       | j                  |t                     S )NrF   r  r  )rT  r  )r&  r|   rL   r   r   )r   re  r|   rT  s       rn   _make_tree_map_resultz.UserDefinedTupleVariable._make_tree_map_result   s:     	) :J:LMtDzJJ*,
 	
rp   c                 `    ddl m}  || j                        xs t        | j                        S )Nr   )r=  )r  r=  rN  r   )r   r=  s     rn   _is_pytree_nodez(UserDefinedTupleVariable._is_pytree_node,  s#    ;"4>>2X6H6XXrp   c           
         | j                         st        | 	  |||||      S | j                  |      }|| j	                  |||||      S g }t        | j                        D ]E  \  }}	|D 
cg c]  }
|
j                  |    }}
|j                  |	j                  |||||             G | j                  |      S c c}
w r   )
ri  r   rL  rd  r>  r'  r  r   call_tree_maprg  )r   r   rC  rD  rE  rF  ra  re  r0  r  osibling_leavesr   s               rn   rL  z-UserDefinedTupleVariable.call_tree_map_branch1  s     ##%7/K  11$7>**K  ,.	"4::. 	IC4:;qaggcl;N;""V^_	 )))44 <s   .B=c                    | j                         st        | 	  ||||||      S | j                  |      }|| j	                  ||||||      S t        | j                        }g }	t        | j                        D ]X  \  }
}|D cg c]  }|j                  |
    }}|t        ||
         fz   }|	j                  |j                  ||||||             Z | j                  |	      S c c}w r   )ri  r   rR  rd  rO  r<   rN  r'  r  r   r   call_tree_map_with_pathrg  )r   r   rC  rD  rE  rF  rP  ra  ra  re  r0  r  rl  rm  child_keypathr   s                  rn   rR  z7UserDefinedTupleVariable.call_tree_map_with_path_branchN  s    ##%79K  11$7>44K  #4>>2+-	"4::. 	IC4:;qaggcl;N;#z&+'>&@@M,,"#!		 )))44 <s   C'r   c                     | j                   t        d      t        |t              r|j                   n|}| j                   j	                  |      S rG  )rN  r$  r	  rM  ru  rt  s     rn   ru  z(UserDefinedTupleVariable.is_python_equals  sC    ==  !OPP",U4L"MSX}},,U33rp   r  r|  rS  rW  )r   r   r   rX  r  rY  r  r   rR  r   r  r  rM   r  r   r   r   r  rn  r   r   r^  rd  rg  r  ri  rL  rR  ru  r  r  s   @rn   rM  rM    s   	 		"	1	1N
 " "&@!A " "
S2 #tO, # #
L'L L 	L
 L 
L&>,"(38"4 "+	(	)D	0 

o.

	#

Y Y
5'5 @5 "	5
 &5 65 
5:#5'#5 @#5 "	#5
 &#5 6#5 ##5 
#5J4V 4 4rp   rM  c            
       |     e Zd ZdZdddedededz  def
 fd	Zde	d
e
f   fdZde
fdZde
fdZdddefdZ xZS )rQ  zRepresents Python namedtuples (created via collections.namedtuple).

    Namedtuples use _tuplegetter descriptors for field access and
    Type(*args) / Type._make(iterable) for construction.
    r   rw   r   rG  r   NrW   c                     t        |t        j                        r%|j                         \  }\  }}| j                  |   S t
        |   ||||      S r   rX  rZ  s          rn   r  z*NamedTupleVariable.resolve_data_descriptor  sQ     i!:!:; $..0KAxQ::c?"w.r4FKKrp   .c                 .    | j                   j                  S r   )rN  _maker   s    rn   r^  z#NamedTupleVariable.get_construct_fn  s    ~~###rp   c                 x    | j                   D cg c]  }|j                          }} | j                  | S c c}w r   r  r   rN  r   r  r  s      rn   r   z%NamedTupleVariable.as_python_constant  s8    15<A%%'<<t~~u%% =   7c                 x    | j                   D cg c]  }|j                          }} | j                  | S c c}w r   r  r   rN  rx  s      rn   r   zNamedTupleVariable.as_proxy  s5    '+zz2!22t~~u%% 3ry  c                     t        | j                        }dj                  fdt        || j                        D              }t        j                  | j                  j                   d| d      S )Nr  c              3   F   K   | ]  \  }}| d t        |         yw=NrB   r  r   r  r   s      rn   r  z/NamedTupleVariable.repr_impl.<locals>.<genexpr>  -      
3=4tfAl2t,-.
   !r   r   )r<   rN  r  zipr  rM   rE  r   r   r   ra  r  s    `  rn   rH  zNamedTupleVariable.repr_impl  sd    "4>>2		 
ADVTZZAX
 
 $$RDNN,C,C+DAeWA)NOOrp   )r   r   r   rX  r   r   r   rM   r  r   r   r^  r   r   rH  r  r  s   @rn   rQ  rQ  z  s    L'L L 	L
 L 
L$(38"4 $&C &&# &P7 PO Prp   rQ  c            
            e Zd ZdZdddedededz  def
 fd	Zde	d
e
f   fdZde
fdZde
fdZdefdZdddefdZ xZS )rP  zRepresents C-implemented PyStructSequence types (torch.return_types.*).

    Structseqs use Type(iterable) calling convention and reject tuple.__new__.
    r   rw   r   rG  r   NrW   c                     t        |t        j                        r7t        | j                        }||v r| j
                  |j                  |         S t        | !  ||||      S r   )	r	  rb  r  r<   rN  r  indexr   r  )r   r   r   rG  r   ra  r   s         rn   r  z.StructSequenceVariable.resolve_data_descriptor  sZ     i!;!;< 't~~6Fv~zz&,,t"455w.r4FKKrp   .c                     | j                   S r   )rN  r   s    rn   r^  z'StructSequenceVariable.get_construct_fn  s    ~~rp   c                 |    | j                   D cg c]  }|j                          }}| j                  |      S c c}w r   rw  rx  s      rn   r   z)StructSequenceVariable.as_python_constant  s6    15<A%%'<<~~e$$ =   9c                 |    | j                   D cg c]  }|j                          }}| j                  |      S c c}w r   r{  rx  s      rn   r   zStructSequenceVariable.as_proxy  s3    '+zz2!22~~e$$ 3r  c                     t        | j                        }dj                  d t        || j                        D              }| j                  j
                   d| j                  j                   d| dS )Nr  c              3   L   K   | ]  \  }}| d |j                            ywr~  )r  )r  r   r  s      rn   r  z4StructSequenceVariable.debug_repr.<locals>.<genexpr>  s,      
.8dDtfAdoo'()
s   "$r  r   r   )r<   rN  r  r  r  r   r   )r   ra  r  s      rn   r  z!StructSequenceVariable.debug_repr  sh    "4>>2		 
<?

<S
 
 ..++,Adnn.I.I-J!E7RSTTrp   c           	         t        | j                        }dj                  fdt        || j                        D              }t        j                  | j                  j                   d| j                  j                   d| d      S )Nr  c              3   F   K   | ]  \  }}| d t        |         ywr~  r  r  s      rn   r  z3StructSequenceVariable.repr_impl.<locals>.<genexpr>  r  r  r  r   r   )	r<   rN  r  r  r  rM   rE  r   r   r  s    `  rn   rH  z StructSequenceVariable.repr_impl  s{    "4>>2		 
ADVTZZAX
 
 $$~~(()4>>+F+F*GqqQ
 	
rp   )r   r   r   rX  r   r   r   rM   r  r   r   r^  r   r   r  rH  r  r  s   @rn   rP  rP    s    
L'L L 	L
 L 
L (38"4 %C %%# %UC U
7 
O 
rp   rP  c                   t     e Zd Zdededdf fdZdddededef fd	Zdddedef fd
Z	dddef fdZ
 xZS )MutableMappingVariabler   r   rW   Nc                 &    t        |   |fi | y r   r  r   s      rn   r   zMutableMappingVariable.__init__  s    )&)rp   r   rw   r   c                    t        |t        j                        rt        |j                  t              r|j                  }t        j                  t        | j                        |d      }t        |t              rn|j                  bd}| j                  r| j                  ||      }t        |d      }t        j                  ||j                  |      }|j                  || |gi       S t         	| E  |||      S )a  Override to handle property setters on MutableMapping subclasses.

        This is needed because property.__set__ is a slot wrapper (C function),
        but property.fset is a Python function we can trace.

        Without this, property setters on newly created MutableMapping objects fail
        when accessing nested objects (which haven't been initialized yet on the
        example value). By tracing the fset, we capture the setter logic in the graph
        instead of running it on uninitialized example objects.

        TODO(compiler): This fix is scoped to MutableMapping only because tracing
        property setters on ALL UserDefinedObjectVariable can cause failures when
        the fset calls untraceable C++ functions (e.g., pybind functions). Ideally,
        this should be extended to all user-defined classes with a graceful fallback
        when tracing the fset hits an untraceable function.
        See: https://github.com/pytorch/pytorch/issues/172000
        Nr  )r	  r   ry   r   r   r   r   r   r  r  r  r;  r#   rM   rE  rm  r   r  )
r   r   r   r   r  r2  r  r  fset_vtr   s
            rn   r  z.MutableMappingVariable.method_setattr_standard  s    . dI667JtzzSV<WzzH //TZZ0@(DQJ*h/JOO4O"??"&"@"@X"NK",[&"AK)//JOO[Q,,R$CCw.r4??rp   c                    |dk(  rwt        | j                        j                  t        j                  j
                  j                  t        j                  fv r$t        j                  t        j                  |       S t        | 1  ||      S )Nr   )r   r   r   r  abcMappingr  r   rl  r   mapping_getr   rw  rr  s      rn   rw  z"MutableMappingVariable.var_getattr  sn     5=T$**-11OO##''HH6
 
 //	0E0EtLL7&r400rp   c                     | j                  d      t        v r)t        j                  |t	        | j
                              S t        |   |      S r  )r   r0   rM   rE  r  r   r   r  r  s     rn   r  z MutableMappingVariable.mp_length  sA    ++I6,F"((S_==w $$rp   )r   r   r   r   r   r   rM   r  r   rw  r  r  r  s   @rn   r  r    s    *f * * *"@'"@ "@ 	"@
 
"@H1-1581	1%7 %O % %rp   r  c                       e Zd Zy)rK  Nr  rr   rp   rn   rK  rK    s    rp   rK  )rX  r  r  r  r  r   r  r,  r   rI  r   r  r  rb  r1  r,  collections.abcr   r   r   typingr   r   r   r	   r
   typing_extensionsr   torch._dynamo.configr   torch.nntorch._C._dynamor   torch._guardsr   r   torch.utils._ordered_setr   torch.utils._python_dispatchr   r  r   r   ry  r   r   r   r   bytecode_transformationr   create_parameter_opr   rj  r   r   r   r   r   r   rE  r    guardsr!   r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r  r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   r!  rG   rH   rI   rJ   rK   rL   rM   r  rN   rO   rs  rQ   r  rR   rS   setsrT   numpyrB  ModuleNotFoundErrortorch.utils._cxx_pytreerU   r   r   rV   r   r   ro   rs   torch._dynamo.codegenrt   torch._dynamo.side_effectsrv   r  rw    torch._dynamo.variables.constantry   rz   r&  r{   r|   r  r   r   r   r   r   r  r  r  r  r  r   r   r   r   r   r  r  r  r  r   r  r  r[  r~  r  r  r  r  r  r  r   r  r   r  r  r  r  r  rM  r  r  r<  rI  rM  rQ  rP  r  rK  )tr   s   00rn   <module>r     s*  .          
      8 8 < < *   * 0 / K > > > : F  A 0        6   3 % K 2
 ,0z&!D( /z&) :z&1 
 /6HA)2BV B BBV B Bf  DF t V   09!!""""	0 Yt_ F t V  
/ 
z2 zz'7(@ 76	 	S#ScS 
S o%&	S
 S,|$
 3 |$
~I^
7 ^
B
$= 
0X+)B X+v-/ -:- 9 -8 UC(  AU0;<A1::$$&6a(1+660 T3s8^, 
("; (:@2 @,$o ,$^M%7 M%dk;1 k;`W;1 W;t?G6 ?GDS7 S8I48 I4X&P1 &PR0
5 0
f:%6 :%z	. 	wd  	B
  dJ|@ 70sB   ;M(  M6 $N0N
>N
N(M32M36NN
N