o
    ei                    @   s  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ZddlZddlZddlmZmZ ddlmZ ddlmZmZmZmZmZmZmZ ddlZddl Z ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z& dd	l'm(Z(m)Z)m*Z*m+Z+ dd
l,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z: ddl;m<Z<m=Z=m>Z>m?Z? ddl@mAZAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZX ddlYmZZZ ddl[m\Z\ ddl]m^Z^m_Z_ ddl`maZa ddlbmcZc ddldmeZemfZfmgZgmhZhmiZi ddljmkZk ddllmmZmmnZnmoZo dd lpmqZqmrZrmsZs dd!ltmuZumvZvmwZwmxZxmyZy dd"lzm{Z{ dd#l|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd$lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d%d&lmZmZmZmZmZmZ d%d'lmZ d%d(lmZmZ d%d)lmZmZmZmZmZ d%d*lmZmZmZmZmZmZmZmZ d%d+lmZmZmZmZmZ d%d,lmZmZmZmZmZmZmZmZmZmZmZmZmZ d%d-lmZmZ d%d.lmZ d%d/lmZmZ d%d0lmZmZmZmZmZmZmZmZmZ d%d1lmZmZm Z mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ d%d2lmZmZmZ d%d3lmZ d%d4lmZmZ d%d5lmZ d%d6l m!Z!m"Z"m#Z# d%d7l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d%d8l m+Z+m,Z,m-Z-m.Z. d%d9l/m0Z0m1Z1m2Z2 d%d:l3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA zddlBZCW n eDy   dZCeeEd;< Y nw erdd<lFmGZG dd=lHmIZImJZJ e
KeLZMe jNOeLd>ZPdd?lmQZQ eQd@ZReQdAZSeTZUdBeVdCeWfdDdEZXG dFdG dGZYejZG dHdI dIZ[G dJdK dKe[Z\e]dLdM e^e	_ D Z`e]ea eEdN< eb Zcebea eEdO< e jdjejfZge jdjejhZiG dPdQ dQZjdRedCefdSdTZkdUedVe=dB dCefdWdXZl		ddYdZd[ed\edB d]emdB d^edCefd_d`ZndYdZd[ed\edCdfdadbZo		ddcemeR dYdZd[ed\edB d]emdB d^edCeRfdddeZp	ddcemeR dYdZd[e jqjrdfe jsd]emdB d^edCeRfdgdhZt		ddcemeR dYdZd[e jqjrd\edB d]emdB d^edCeRfdidjZud\edYdZd[e jqjrd^evewef d]emdB dcemeR dCefdkdlZxdUeSdCemeS dB fdmdnZydcedYdZd\ed]emdB dCevewef f
dodpZzdcemeR dYdZd[e jqjrd\ed]emdB d^evewef dCeRfdqdrZ{dCeOfdsdtZ|da}ebew dB eEdu< da~eadB eEdv< dCebew fdwdxZdyewdCeWfdzd{ZdYdZd|ewd}e jsdCewfd~dZdaebew dB eEd< daeadB eEd< dCebew fddZdyewdCeWfddZ	dd}edYdZdedeWdeWdCeSfddZddd}edYdZdedB deWdedB dCefddZddd}edYdZdedB deWdedB dCefddZG dd dZe e_G dd dZdS )aq  
This module contains classes and utilities for building variable trackers in Dynamo.
Variable trackers are used to convert Python values into symbolic representations
that can be traced and transformed during graph capture.

The key classes are:

- VariableBuilder: Handles source-tracked objects that need guards and proper
  reconstruction in the output graph. Used for inputs, module attributes, etc.

- SourcelessBuilder: Handles ephemeral objects created during tracing that don't
  need source tracking or guards. Used for temporary lists, intermediate values, etc.

Variable trackers enable Dynamo to track the flow of values through the program,
maintain guards for dynamic properties, and reconstruct values in the output graph.
The builders in this module handle converting Python values into appropriate
VariableTracker instances based on their type and usage context.
    N)CallableMutableMapping)
ModuleType)Any
NamedTupleNoReturnOptionaloverloadTYPE_CHECKINGUnion)SymInt)enable_python_dispatcher)get_external_object_by_indexregister_user_object)get_metrics_contextis_int_specialization_caseis_torch_symset_feature_use)TracingContext)
flat_apply)call_torchbind)is_opaque_reference_typeis_opaque_typeis_opaque_value_typeshould_hoist)HigherOrderOperator
OpOverloadOpOverloadPacket)
FakeTensorFakeTensorModeis_fakemaybe_get_fake_mode)is_sparse_any	safe_grad)justknobs_check)BackwardState)normalize_source_name)_DynamicScalar
DynamicInt)	_constrain_range_for_size_nested_int_aware_sort
DimDynamicRelaxedUnspecConstraintStatefulSymbolicContextSubclassSymbolicContextSymbolicContextSymIntSymbolicContextTrackedFake)immutable_dictimmutable_list)ExpandedWeight)
OrderedSet)is_traceable_wrapper_subclass"is_traceable_wrapper_subclass_type)ValueRanges)TensorWeakRef   )configgraph_break_hintsmutation_guardreplay_recordtrace_rules) get_registered_device_interfaces)InternalTorchDynamoErrorraise_observed_exceptionunimplemented)GuardBuilderinstall_guardmake_dupe_guard)auto_dynamic
auto_unsetFrameStateSizeEntryInferStrideprocess_automatic_dynamic)SideEffects)AttrProxySource
AttrSourceCallMethodItemSourceChainedSourceConstDictKeySourceConvertIntSourceDictGetItemSourceDictSubclassGetItemSourceDynamicScalarSourceFloatTensorSourceGetItemSource
GradSourceis_constant_sourceis_from_closure_sourceis_from_global_sourceis_from_nonlocal_sourceis_from_optimizer_source&is_from_unspecialized_nn_module_sourceListGetItemSourceLocalSourceNonSerializableSetGetItemSourceNumpyTensorSourceOptimizerSourceRandomValueSourceSkipGuardSourceSourceSubclassAttrListSourceTupleIteratorGetItemSource"UnspecializedBuiltinNNModuleSourceUnspecializedNNModuleSource) _extract_tensor_dictbuild_checkpoint_variablebuild_invoke_subgraph_variableclone_inputcommon_constant_types	dict_keysget_fake_valueget_items_from_dictget_locals_to_stealget_static_address_typeis_frozen_dataclassis_functionis_function_or_wrapperis_invoke_subgraphis_lru_cache_wrapped_functionis_namedtupleis_parameter_freezing	is_typingis_utils_checkpointis_wrapper_or_member_descriptoristypenamedtuple_fieldsodict_valuesproxy_args_kwargsrange_iteratorset_example_valuetensor_always_has_static_shapetuple_iteratortuple_iterator_getitemtuple_iterator_len unwrap_with_attr_name_if_wrapperwrap_fake_exception   )AttributeMutationNewtypestrValueMutationExistingValueMutationNewVariableTrackerVariableTrackerMeta)BuiltinVariable)ConstantVariableEnumVariable)AutocastModeVariableDynamoConfigPatchVariableErrorOnGraphBreakVariableNullContextVariablePreserveVersionContextVariable)ConstDictVariableDefaultDictVariableDictKeySetVariableFrozensetVariableMappingProxyVariableOrderedSetClassVariableOrderedSetVariableSetVariable)DeviceMeshVariablePlacementClassVariablePlacementVariableProcessGroupVariableWorldMetaClassVariable)BuiltinMethodVariableCollectionsNamedTupleFunction!CollectiveFunctionRewriteVariable'CreateTMADescriptorExperimentalVariable!CreateTMADescriptorStableVariableFunctoolsPartialVariableFunctoolsWrapsVariableSysFunctionVariableTritonKernelVariableTritonSetAllocatorSkipVariableUserFunctionVariableUserMethodVariableWrapperUserFunctionVariable)"LocalMapWrappedHigherOrderVariable TorchHigherOrderOperatorVariable)ItertoolsVariable)LazyConstantVariableLazyVariableTracker)	BaseListVariableListIteratorVariableListVariableNamedTupleVariableRangeVariableSizeVariableSliceVariableTupleIteratorVariableTupleVariable)AutogradEngineVariableAutogradFunctionContextVariableAutogradFunctionVariableComptimeVariableConstantLikeVariableDebuggingVariableDelayGraphBreakVariableGetAttrVariableGetSetDescriptorVariableIgnoredFunctionVariableLambdaVariableLoggingLoggerVariableMethodWrapperVariableNumpyDTypeVariableNumpyVariableObjectVariablePythonModuleVariableRandomClassVariableRandomVariableSavedTensorBoxTorchVersionVariableTypingVariableWeakRefVariable)FSDPManagedNNModuleVariable$UnspecializedBuiltinNNModuleVariableUnspecializedNNModuleVariable)OptimizerVariable)OpaqueObjectClassVariableTorchScriptObjectVariableSDPAParamsVariable)EventVariableStreamContextVariableStreamVariable)NumpyNdarrayVariable$supported_const_comparison_op_valuesSymNodeVariableTensorSubclassVariableTensorVariableUnspecializedPythonVariable)DispatchKeySetVariableFuncTorchInterpreterVariableTorchCtxManagerClassVariableTorchInGraphFunctionVariable)TensorWithTFOverrideVariable#torch_function_mode_stack_state_mgrTorchFunctionModeVariable)FrozenDataClassVariableInspectVariableIntWrapperVariableKeyedJaggedTensorVariableMutableMappingVariableSourcelessGraphModuleVariableUserDefinedClassVariableUserDefinedDictVariableUserDefinedEnumClassVariable!UserDefinedExceptionClassVariableUserDefinedListVariableUserDefinedObjectVariableUserDefinedSetVariableUserDefinedTupleVariablenp)	PyCodegen)InstructionTranslatorInstructionTranslatorBasecudagraph_static_inputs)TypeVarVTTypeAliasTtreturnc                 C   s@   t jt jjj t| dW  d    S 1 sw   Y  d S )Ngrad)torch_logginghide_warnings	_internalsafe_grad_filterhasattr)r   r  i/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_dynamo/variables/builder.pysafe_has_gradW  s   $r  c                   @      e Zd ZdS )_missingN__name__
__module____qualname__r  r  r  r  r  \      r  c                   @   s   e Zd ZU edB ed< eed< eed< ejj	j
dB ed< dZeed< dZejejB dB ed< d	ed
eddfddZedejejB eB dB fddZdddZdddZdddZdedefddZdS )GraphArgNsource_examplepass_arg_as_tensorfake_tensorT	is_tensorexample_strong_refnamevaluer  c                 C   s   t | || d S N)object__setattr__)selfr!  r"  r  r  r  r%    s   zGraphArg.__setattr__c                 C   s*   t | jtr|  }|d usJ |S | jS r#  )
isinstancer  r9   )r&  rr  r  r  example  s
   zGraphArg.examplec                 C   s0   t | jtjrt| j| _t| jsJ d S d S r#  )r'  r  r
  Tensorr9   r    r  r&  r  r  r  __post_init__  s
   zGraphArg.__post_init__codegenr   c                 C   s   || j  d S r#  r  r&  r-  r  r  r  reconstruct  s   zGraphArg.reconstructc                 C   s   d | _ d | _d S r#  )r  r   r+  r  r  r  erase  s   
zGraphArg.eraseotherc                 C   s@   t |tsdS | jd u r|jd u S |jd u rdS | jj|jjkS )NF)r'  r  r  r!  )r&  r2  r  r  r  __eq__  s   



zGraphArg.__eq__r  Nr-  r   r  N)r  r  r  rf   __annotations__r   boolr
  _subclassesr  r   r  r   r*  r   strr%  propertyr%   r)  r,  r0  r1  r$  r3  r  r  r  r  r  `  s   
  


r  c                       s(   e Zd Zd	 fddZd
ddZ  ZS )BackwardStateGraphArgr  Nc                    s   t  jd t dd dd d S )NF)r  r  r  r  r  )super__init__r%   r+  	__class__r  r  r=    s   
zBackwardStateGraphArg.__init__r-  r   c                    sH    j jjsJ   fdd  dd      j jj d S )Nc                      s     tjdS )Nr%   )load_import_fromr%   r  r  r-  r  r  <lambda>  s    z3BackwardStateGraphArg.reconstruct.<locals>.<lambda>r   F)txoutputbackward_state_varadd_push_nullcall_functiondup_topstorer/  r  rA  r  r0    s   
z!BackwardStateGraphArg.reconstructr4  r5  )r  r  r  r=  r0  __classcell__r  r  r>  r  r;    s    	r;  c                 c   s0    | ]\}}| d st|rt|V  qdS )_N)
startswithinspectisclassid).0r!  memberr  r  r  	<genexpr>  s    
rR  ITERTOOLS_TYPE_IDSITERTOOLS_POLYFILLED_TYPE_IDSc                
       s  e Zd ZdZ	dUdddededdf fd	d
ZdedefddZ	dedefddZ
dedefddZdefddZdedef deeef dB fddZedeeedef f fddZeejdedeeedef f fddZdeje defddZdeje defd d!Zdej j!j"de#fd"d#Z$dede%fd$d%Z&dedefd&d'Z'eejdee(ed egef f fd(d)Z)dedefd*d+Z*dedefd,d-Z+de,e-edf e.e e/e0f defd.d/Z1de2defd0d1Z3de4defd2d3Z5de6e7B de8e9B fd4d5Z:dej;d6eddfd7d8Z<dej=j>defd9d:Z?dedefd;d<Z@de(defd=d>ZAdeBdefd?d@ZCeDde(dAee(gef defdBdCZEeDdeBdAeeBgef defdDdCZEeD	dVde,e(eBeef dAddefdEdCZE	dVde,e(eBeef dAeFeegef  defdFdCZEdej;ddfdGdHZGdej;defdIdJZHdedefdKdLZI		dWde(dMeJdB dNeKdB defdOdPZLdeBdefdQdRZMdedefdSdTZN  ZOS )XVariableBuilderz3Wrap a python value in a VariableTracker() instanceTrC  r  r  allow_lazy_constantr  Nc                    sL   |d usJ dt  d usJ dt   || _|| _|j| _|| _d S )NzRConsider SourcelessBuilder for ephemeral objects, usually objects created locally.zExpected active TracingContext)r   try_getr<  r=  rC  r  r!  rV  )r&  rC  r  rV  r>  r  r  r=    s   


zVariableBuilder.__init__r"  c              
   C   sP   t  }z| |W | jjj jt  | 7  _S | jjj jt  | 7  _w r#  )timetime_ns
_call_implrC  rD  bytecode_tracing_timingsvariable_builder_call_ns)r&  r"  _t0r  r  r  __call__  s   


zVariableBuilder.__call__c                 C   s  || j jjv r0| j jj| }t| j|j}|r| | t|tjj	r.t|t
r.|| j |S | j jj| j}|rE| jsCt|tsE|S | |}|jd u rS| j|_dtdtdtfdd}| |sh|||r||| j jjvr|t|s|| j jj||}d| jjvr|| j jj| j< |S )Nr"  vtr  c                 S   s   t | pt| tot|tS r#  )r   r'  r'   r   )r"  r_  r  r  r  _is_deduplicable_sym_variable  s   zAVariableBuilder._call_impl.<locals>._is_deduplicable_sym_variableJVP_NESTING)rC  rD  side_effectsrF   r  install_guardsr'  r
  nnModuler   set_nn_module_stack_sourcevariable_tracker_cachegetrV  r   _wrapr   r   r7  _can_lift_attrs_to_inputsr~   track_object_existingr!  )r&  r"  side_effect_result	dup_guard	cached_vtr_  r`  r  r  r  rZ    s>   



zVariableBuilder._call_implr_  c                 C   s   t |ttttthv S r#  )typer   r   r   r   r   )r&  r_  r  r  r  rj  .  s   z)VariableBuilder._can_lift_attrs_to_inputsc                 C   s   | j S r#  r.  r+  r  r  r  
get_source7  s   zVariableBuilder.get_sourceguards.c                    sF   |    z fdd|D }W n
 ty   Y d S w t|ddi i S )Nc                    s   g | ]}  |qS r  )
make_guard)rP  guardr.  r  r  
<listcomp>=      z2VariableBuilder.install_guards.<locals>.<listcomp>skipr   )rp  NotImplementedErrorrE   )r&  rq  tmpr  r.  r  rc  :  s   zVariableBuilder.install_guardsc                 C   s   |  tjS r#  )_type_dispatch_implr;   trace_numpy)clsr  r  r  _type_dispatchC  s   zVariableBuilder._type_dispatchrz  c                 C   s   t jt jjt jjt jjjf| jft	t
ttjt jf| jft| jft| jfttf| jft	t| jftj| jftj| jft jj j!| j"ft j#j$| j%ft&j'| j(fg}|rZt)rZ|*t)j+| j,f i }|D ]\}}t-|t	ri|n|fD ]}||vstJ |||< qlq^|S r#  ).r
  r*  rd  	Parameterr8  r   functional_tensorFunctionalTensorwrap_tensortuplelistr   collectionsdequeSizewrap_listliker   wrap_tuple_iteratorr   wrap_range_iteratorslicerangewrap_slice_rangero   wrap_literalrePatternwrap_regex_patternweakrefReferenceTypewrap_weakrefutilshooksRemovableHandlewrap_removable_handlejitScriptFunctionwrap_jit_functiontypesMappingProxyTypewrap_mapping_proxyr   appendndarraywrap_numpy_ndarrayr'  )r{  rz  entriesresulttsfnr  r  r  r  ry  G  s:   




z#VariableBuilder._type_dispatch_implc                 C   s   |  tj t|S r#  )rc  rD   ID_MATCHr   r&  r"  r  r  r  r  q  s   z"VariableBuilder.wrap_regex_patternc                 C   s    |  tj tj| j|| jdS Nr.  )rc  rD   
TYPE_MATCHr   buildrC  r  r  r  r  r  r  v  s   zVariableBuilder.wrap_weakrefc                 C   s   t dddg d d S )Nz3Attempted to represent unregistered RemovableHandle zDynamo attempted to build a representation of a torch.utils.hooks.RemovableHandle, which is not supported. This happens because the RemovableHandle was created in another frame.gb_typecontextexplanationhints)rC   r  r  r  r  r  z  s   
z%VariableBuilder.wrap_removable_handlec                 C   s   |  tj t|d| jdS )N_torchdynamo_inliner.  )rc  rD   r  r   r  r  r  r  r  r    s   z!VariableBuilder.wrap_jit_functionc                    s    tj  tj tdd |D }|s*tdddd | D  ddgd	 d
tdtdtt	t	f ffdd t
 fdd| D }t|d d}t|jd}jjj||S )Nc                 s       | ]}t |V  qd S r#  r   
is_literalrP  kr  r  r  rR        z5VariableBuilder.wrap_mapping_proxy.<locals>.<genexpr>znon-const keys in mappingproxynon-const keys: c                 S      g | ]	}t |s|qS r  r  r  r  r  r  rt        z6VariableBuilder.wrap_mapping_proxy.<locals>.<listcomp>z1Dynamo expects mappingproxy keys to be constants.zFEnsure your mappingproxy keys are constants (e.g. int, float, strings)r  r  vr  c                    s0   t | }| }t  |}t||}||fS r#  )r   createrW   rp  r   )r  r  key
source_keysource_value	res_valuer+  r  r  build_key_value  s
   
z;VariableBuilder.wrap_mapping_proxy.<locals>.build_key_valuec                 3   s    | ]
\}} ||V  qd S r#  r  rP  r  r  r  r  r  rR    s    r.  )rc  rD   r  MAPPING_KEYS_CHECKallrC   keysr   r  r   dictitemsr   r   r  rC  rD  rb  track_mutable)r&  r"  	all_constr  dict_vtr  r  )r  r&  r  r    s    "		z"VariableBuilder.wrap_mapping_proxyc                 C   s~   ddl m } |dd ftjdd ftjdd fg}i }|D ]\}}t|ttfr*|n|fD ]}||vs5J ||t|< q-q|S )Nr:   )comptimec                 S      t  S r#  )r   r  r  r  r  rB        z.VariableBuilder._id_dispatch.<locals>.<lambda>c                 S   s   t tfd| ji| tjS )Nr  )r   _dataclasses_fields_lambdar  rc  rD   CLOSURE_MATCHr  r  r  r  rB    s    
c                 S   r  r#  )r   r  r  r  r  rB    r  )	r  dataclassesfieldsr
  __version__r'  r  r  rO  )r{  r  r  r  r  r  r  r  r  r  _id_dispatch  s   
zVariableBuilder._id_dispatchc           @   
      s>  ddl m}m}m} ddlm}m} | r"ddlm} ddl	m
} nG dd d}G d	d
 d
}d{dd}	d{dd}
G dd d}d{dd}| rQddlm}	m}
 | rZddlm} | ridd l}t|dri|j} t}|d ur{|S  t}|d ur|S ttjrttjjjtjjjtfvrtt j!vrtj"tjj"u st#r$S t%r&t'j( fddt)tD }t*|j+t, d}t-|tj+|d}j.j/j01|S t2t3t4j5t4j6frl&t'j7 t8dd D sj.j/j9:j+ dt;dt;dt;dt<t=t=f ffd d!t3fd"dt>t?D }t2t4j5rYt@j+d#}tA|ttBj.|jCj+d$}n
tD|tj+d%}j.j/j0E|S ttjjFryGS tHIrJS ttjKjLrtMj+d&}j.j/j01| |S t2tNtOfrtPd'd D rtQd(d)d*d+gtRjSd, &t'j7 &t'j( tT}t2tOrt@j+d-}tU|Vt'jW j.j/j9:| tX}tY fd.dt> D }||j+d&}j.j/j01|S t2tZr-t8d/d D r-fd0dD }&t'j[ t\|j+d&S tt]j^tj_tj`jajbfrH&t'jc tdj+d1S tefr[&t'jg tej+d&S thr|tPfd2dtjij jjD r|&t'jc tkj+d&S ttljmr&t'j7 tnj+d&S tortpj+d&S tqrtrj+d&S tstrtsjuj+d&S ttvjwrCt@x d3}tBj.|jy}g }t@x d4}t>jzD ]\}}|{tBj.t|||| qi }t@x d5}j}~ D ]&\} }!tHI| stQd6d7|  d8g tRjd, tBj.t|| |!|| < qtUx Vt'j7|Vt'jW|Vt'j( td9d }"t||||"d:S trU&t'jc tj+d&S td urittjritS trtstJ t2tjrtjrtUt@j+d;Vt'j n,tr&t'j ntr&t'j nthr&t'jc n&t'j7 tj+d&S trՈ&t'jc tj+d&S trttjr&t'j7 t@j+d<}#tU|#Vt'jc n&t'jc tj+d&S tr&t'j tjj.j+d&S t2tjjjr0&t'j tj+d&S ttjjjrd }$zj}$W n
 tyJ   Y nw g }%j+Vt'j7g}&t|$t<rt@j+d=}'|&{|'Vt'j( t>|$D ]\}}!|%{tBj.t||'||! qntU|&  j.j/j01tj+t|%d>S ttjrt2td?d tjjjrtd@dAdBkrڈtjdBd krtUt@x d;Vt'j ttjt@j+d?dCd&dBS ttj`jr&t'jc tj+d&S tjijjju r&t'j tfdDdES t|rtjS t|rtjS thr?td ur?tr4dFj.j/_tjj+d&S trNttjrNS ttrqtjju rctQdGdAdHg d, &t'j7 tjj+d&S ttjjr&t'jc t@j+dI}(tBj.|(j})tj.|)S ttjrˈ&t'j7 tj+}*j.j/dJt|*fi }+t|+jň t|+j+|*dK}j.j/j01|S ttj`jǃr&t'j7 tȠj.j+S ttjajjʃr&t'jc tˈS ttj̃r"&t'j7 tj+}*j.j/dJt|*fi },t|,jň t|,|*j+d&S t2tjσr?tЈdLd d u r?&t'j7 tшj+d&S tҠӈr[&t'j7 t҈j+d&}j.j/j01|S ttjjՃrv&t'jc tֈj+_+t׈j+d&S ttj؃r&t'j١ tڈS t۠܈rtۈj+d&S tݠވr&t'jc t݈j+d&S tߠr&t'j[ t߈j+d&S tr͈&t'jc tj+d&S tr&t'j[ tj+d&S tOu r&t'jc t S ttv r	ttvr	&t'j tj+d&S ttrtt}-tj+|-}.tj.j/jjv r0j.j/jjt }/nj.j/jjj|.tjdM}0j.j/jj|0j|.dN}/j.j/jjtdOdPjt|/|/|.d&}1t|.|/dQd dQ|/dR|1jjdS< |/jj}2t|2tjs}J |2 dTj.j/j{t|/|.d  tj.|1|/S t r;ttjrj+ntj+}.d }3jŐ rňj.j/jjtjŐj|.tjdU}3nttjrֈj.j/j }3ntQdVdAdWg tRjSd, |3d usJ j.j/jjtdOdPjt|3|3|.d&}1t|.|3dQd dQ|3dR|1jjdS< |3jj}2t|2tjsJ |2 dTj.j/j{t|3|.d  ttjr2|3n|3dXk}4t|1|4S t||frS&t'jc t	d d j+d&S |	u r^t
dXdYS |
u rit
ddYS |ju rtt S |u r~tS ttjjjr&t'jc tjjjjgj+dZS trtr&t'j ntrň&t'j tj+d&S tЈd[dQr&t'j7 td\j+d&S tr&t'j7 td]j+d&S tju 	stjd^k	rtju 	rtj+d&S t	r6tЈd_dQ	r6&t'j7 td_j+d&S tvj u 	rK&t'jc t!j+d&S t4j"u 	r`&t'jc t#j+d&S ttj$	r~t%&	r~&t'jc t%j+d&S t'	rt(j)t(j*fv 	r&t'jc tt+t(j+d&j,S t	rʐt-\}5|5d u	rt@j+|5_+t.jj+d&S t/j0u 	r߈&t'jc t1j+d&S t2t/j0
r	t23
r	&t'j7 t2j+d&}j.j/j0E| |S ttj4t5j6f
r0&t'j7 t8j+d&}j.j/j01| |S ttj
rmtjtjjFtj9j:j;f
rmtBj.t@j+d?d&j}6|6
r_t|6t=
scJ d`t<j|6j+d&S ttj=
rzt>S ttj?
rt@S tAtt
rtAtB
r&t'jc tCS tAttr?tj9jDjEtjjFtjjGfv 
rt.jj+d&S tjjHu 
r&t'j tIJj.S tAtjrtjurj"tjj"u rtKstLj+d&S tMj+s&t'j tNr!tOj+d&S ttr7tAt]j^r7tPj+d&S tQj+d&S tRtr5ddal+mS}7mT}8 tjUjVWrj.j/jjtdOdPjtj+d&}9tj+dQd dQ|9jjdS< tRj|9j+d&S tXtr&t'jY nKtZtr&t'j7 &t'j[ n5tdbs\S t]^tBj.|8j+_ `  t]^tBj.|7j+a  tjUjVbj.j/jc}:tXtrtdts}9n#j.j/jjtdOdPjt|:j+d&}9tj+dQd dQ|:|9jjdS< tRj|9|:j+d&S tt3t4j6frtjet3jeu r&t'j7 &t'j( j.j/j9:j+ dt;dt;dt;dt<t=t=f ffdcd!t3fdddt>t?D }tD|tt4j6rt4j6nt3t, j+de};dF|;_ftg|;j+df}j.j/j01|S tt<r&t'j7 &t'j( fdgdtht<iD }t*|j+t, d}tj|j+dh}j.j/j01|S ttYr'&t'j7 &t'j( fdidthtYiD }tk|j+t, d}<tl|<j+dj}j.j/j01|S ttNtZfr&t'j7 &t'j( tYt3m  fdkdthtYi D }ttNr]tT}=n
ttZseJ t\}=|=|j+t, d}>tn|>j+dl}j.j/j01|S tAttor&t'j7 tpj+d&}j.j/j01|S tqrÈ&t'j7 trjj.j+d&}j.j/j01|S ttsr	t8dmd D rfdndD }tUx Vt'j(x Vt'j[ tt|j+d&S tQdodpdqd D  drdsgd, d S tuӈrddtlvmw}? jxd u s)jxj|?jykr1zj{S jxj|?jkrZt|}duj+jtj jzj{tjt~tdQdvdwdxS jxj|?jkr{t|}duj+jtj jzj{tjdyS tdzjx t2tr&t'j7 tj+d&S \S )|Nr   )
has_triton has_triton_experimental_host_tma%has_triton_tensor_descriptor_host_tmar:   )DynamoConfigPatchProxy(ErrorOnGraphBreakDecoratorContextManager)	Autotuner)JITFunctionc                   @   r  )z*VariableBuilder._wrap.<locals>.JITFunctionNr  r  r  r  r  r    r  r  c                   @   r  )z(VariableBuilder._wrap.<locals>.AutotunerNr  r  r  r  r  r    r  r  r  c                   S      d S r#  r  r  r  r  r  create_1d_tma_descriptor     z7VariableBuilder._wrap.<locals>.create_1d_tma_descriptorc                   S   r  r#  r  r  r  r  r  create_2d_tma_descriptor  r  z7VariableBuilder._wrap.<locals>.create_2d_tma_descriptorc                   @   s   e Zd ZedddZdS )z/VariableBuilder._wrap.<locals>.TensorDescriptorr  Nc                   S   r  r#  r  r  r  r  r  from_tensor     z;VariableBuilder._wrap.<locals>.TensorDescriptor.from_tensorr4  )r  r  r  staticmethodr  r  r  r  r  TensorDescriptor  s    r  c                   S   r  r#  r  r  r  r  r  set_allocator  r  z,VariableBuilder._wrap.<locals>.set_allocator)r  r  )r  r  c                    s(   g | ]}t jt|t j|d qS r.  )r   r  getattrrN   r  rP  r!  r  r  r  rt  #  s    
z)VariableBuilder._wrap.<locals>.<listcomp>)r  mutation_type)	tuple_clsr  tuple_vtc                 s   r  r#  r  r  r  r  r  rR  9  r  z(VariableBuilder._wrap.<locals>.<genexpr>ir  r  c                    sP     } rt|}|}nt|| }t||}t||}t||}||fS r#  )rp  r   r  rQ   r   rS   )r  r  r  baser  r  r  r  )r  r&  r  r  r  T  s   


z.VariableBuilder._wrap.<locals>.build_key_valuec                 3   $    | ]\}\}} |||V  qd S r#  r  rP  r  r  r  r  r  r  rR  g  
    


default_factory)r  r  )user_clsr  r.  c                 s   s    | ]	}t |tjV  qd S r#  )r'  r
  r*  rP  xr  r  r  rR    s    z$Attempted to wrap a set with tensorsz+Python set containing torch.Tensor elementszDynamo cannot trace sets of tensors. To get a stable ordering, Dynamo needs to convert the set into a list and the order might not be stable if the set contains tensors.z,Use a dictionary where the keys are tensors.r  _dictc                    s&   g | ]\}}t j|t j|d qS r  )r   r  ra   r  )rP  r  r  r+  r  r  rt    s    c                 s   sD    | ]}t |tju r|jd kp|tjjjv pt|t	t
fV  qdS )r
  N)ro  r  BuiltinMethodTyper  r
  r  _pytreeBUILTIN_TYPESr'  r   r   r  r  r  r  rR    s    
c                       g | ]	}t  j|qS r  SourcelessBuilderr  rC  rP  r  r+  r  r  rt    r  r"  r  c                 3   s    | ]} |u V  qd S r#  r  )rP  r  r"  r  r  rR    s    
funcargskeywordsz,functools.partial() with non-literal keywordznon-literal keyword: z3functools.partial() expects literal/string keywords
cache_hash)original_cache_hash__func__dtypesaved_tensors)r  r  __self__r  r  apply)rQ  c                      s(   t tjjjj j jjj	
 fi S r#  )r   r
  _dynamoexternal_utilsFakeCompiledAutogradEngineexec_final_callbacksrG  rC  rD  rb  get_ca_final_callbacks_varr  r+  r  r  rB  s  s    
z'VariableBuilder._wrap.<locals>.<lambda>Tz9Attempted to wrap torch._higher_order_ops.invoke_subgraphzJDirectly using invoke_subgraph is not supported. Use nested_compile_regionstreamrG  )r  user_object_indexenter_resultr  dynamic_dim)hintr  [^a-zA-Z0-9]+rK  F)r  r   grapharg is not a basic Symbol.)r  z!Attempted to wrap unbacked SymIntz+Unbacked SymInt input is not supported yet.r   )rank)target_valuesr  __script_if_tracing_wrapper__original_fn__wrapped__)      r  z"Failed to produce a valid self obj)FlattenScriptObjectSourceScriptObjectQualifiedNameSource__obj_flatten__c                    s<      }t|| }t||}t||}t||}||fS r#  )rp  rQ   r   r  rT   )r  r  r  r  r  r  r  r  r+  r  r  r    s   

c                 3   r  r#  r  r  r  r  r  rR    r  )r  r  r  )r  r  c                    ,   g | ]}t jt|t  |d qS r  )r   r  r  __getitem__rW   rp  rP  r  r  r  r  rt        
)r  r  c                    r  r  )r   r  r  r  r_   rp  r   r  r  r  rt    r!  )list_vtr  c                    s,   g | ]}t jt |t |d qS r  )r   r  r  r  ra   rp  r   )Lr&  r  r  rt    r!  )set_vtr  c                 s   r  r#  r  r  r  r  r  rR    r  c                    r  r  r  r  r+  r  r  rt    r  znon-const keys in dict_keysr  c                 S   r  r  r  r  r  r  r  rt    r  z.Dynamo expects dict_keys keys to be constants.zCEnsure your dict_keys keys are constants (e.g. int, float, strings))_DimHintTypez%s marked %s via IntWrapper	warn_only)
constraint)dynamismr  r)  zUndefined dynamism r4  (  torch.utils._tritonr  r  r  
decoratorsr  r  triton.runtime.autotunerr  triton.runtime.jitr  $triton.tools.experimental_descriptorr  r  triton.tools.tensor_descriptorr  tritonr  r  r|  rh  ro  r  rO  r'  r
  r*  rd  	parameterUninitializedBufferUninitializedParameterr4   r;   nontraceable_tensor_subclasses__torch_dispatch__r6   r  rz   rc  rD   SEQUENCE_LENGTHr   r   r  r   r   rC  rD  rb  rk  r   r  r  defaultdictOrderedDictr  r  guard_on_key_orderaddr   r  r   	enumeraterr   rN   r   rU  r  r   r  re  wrap_moduler   r  r  	overridesTorchFunctionModer   setr5   anyrC   r<   SUPPORTABLEr   rE   rr  DICT_KEYS_MATCHr   r  	frozensetEQUALS_MATCHr   enumEnumDispatchKey_C
_functorchTransformTyper  r   r   is_reorderable_logging_functionBUILTIN_MATCHcallabler  ignore_logging_functionsr   loggingLoggerr   r}   rl   rx   rm   r   should_wrap_in_hopr  	functoolspartialrp  r  r  r  rW   r  r  
USER_ERRORrS   r  r   r|   r   r   genericr  asarrayr?   is_numpyr  
MethodTyperM  
isfunctionr  r  rN  CLASS_MATCHr   is_numpy_dtyper   is_numpy_type_infoiinfor   r   can_rewriter  autogradfunctionFunctionMetar   FunctionCtxr  RuntimeErrorr   r   r  r   _ImperativeEnginer   r  r  _exec_final_callbacks_stubr   r   changesr   error_on_graph_breaklookup_callableis_callable_allowed!has_user_defined_allowed_in_graphcreate_with_sourcenumberwrap_unspecialized_primitiver   _higher_order_opsinvoke_subgraphr   makecudaStreamContextr  r   Streamr   create_proxyr   r   noder   _SDPAParamsr   pyfunctorchFuncTorchInterpreterr   Eventr   
contextlibnullcontextgetattr_staticr   r   is_matching_objectoptim	Optimizerrc   r   DispatchKeySetDISPATCH_KEY_SET_MATCHr   r   is_group_member_typer   is_process_groupr   is_device_meshr   is_placement_typer   is_placementr   rS  rT  r   r'   r(   rU   root_tracerdynamic_scalar_nodes	shape_envcreate_unspecified_symbolrealr+   DYNAMICcreate_symintnodecreate_graph_inputr  subr!  r  metaexprsympySymboltracked_fakesr1   r   r   r   rR   has_hint$create_unspecified_symint_and_symbolintr  SymBoolcreate_unbacked_symintr   r   r  r   r   ampautocast_modeautocastr   device
fast_dtype_enabled_cache_enabledr   is_matching_clsr   ry   sysexc_infoversion_info	exceptionr   rw   wrapsr   
namedtupler   r  r   is_supported_builtin_methodrv   floatfromhexhexr   r  r   lookuprandomRandomr   r   is_supported_random_objr   r>   DummyModuleMODULE_MATCHr   r  r  TreeSpecr   GetSetDescriptorTyper   MethodWrapperTyper   
issubclassBaseExceptionr   r  BackwardHookr}  Buffer _unsafe_preserve_version_counterr   constructorr7   r   rZ   r   r   r   r   r   r  r  _libraryfake_class_registrytracing_with_realr   CONSTANT_MATCHr   OPAQUE_OBJ_GUARD_FN_MATCHwrap_user_definedr   realize_all_typequalified_namer  maybe_to_fake_obj	fake_moder   __new__should_reconstruct_allr   r  __len__r   r   r   fromkeysr   r   r   ru   r   rp   r   r   torch.export.dynamic_shapesr%  r)  STATICwrap_symintvallogdebugr0   r,   AUTOr$  r   )@r&  r"  r  r  r  r  r  r  r  r  r  r  r  
triton_modtype_dispatchid_dispatchrD  r  r  factory_sourcevarset_var_clsinternal_dict_sourcer  func_srcfunc_objr  args_sourcer  argr  keywords_sourcer  r  r   	dt_sourceactual_saved_tensorsr  rq  saved_tensors_sourcestream_source
stream_varindexstream_proxyevent_proxyis_intr  rv  symsym_node_proxysym_expr
new_syminttracing_symint	attr_nameself_objr  r  proxyfake_script_objr  r"  
set_vt_clsr$  r%  r  )r#  r  r  r&  r"  r  ri    s^  












	
















	

	















	




	 &


"


	 
		





"
zVariableBuilder._wrapc                 C   s\   |  tj t|rt|t| jd}nt|| jd}t	t
|s%|S | jjj||S r  )rc  rD   r  r   r~  re   r  r   rL   "cls_supports_mutation_side_effectsro  rC  rD  rb  rk  )r&  r"  r  r  r  r  r  *  s   
z!VariableBuilder.wrap_user_definedc                    s
  t jrt|tju r tj tj	|dS  tj
 t|tr?tdd |D r? jj r? tj tdd |D S  fddt|D } jjjd}t jtr jjt|v r j}t|tsjJ  jjjjtdd	 j t|||d
}d|j!j"d< t#t$ j||d |d}g }t|j%D ]1\}}	t&||dd}
|	 jjj'|
< t(|| |	j)j!j"d< t*j+tj,t-|| d}|.|
/| qt0|ddi t1||dd dd}||j!j"d< |D ]}|2  qt34|| jd
}t|tt5j6fr jjj78||S |S )Nr  c                 s   r  r#  r  rP  itemr  r  r  rR  I  r  z0VariableBuilder.wrap_listlike.<locals>.<genexpr>c                 S      g | ]}t |qS r  r   r  r  r  r  r  rt  M  ru  z1VariableBuilder.wrap_listlike.<locals>.<listcomp>c                    s(   g | ]\}}t j|t  |d qS r  )r   r  rW   rp  )rP  r  r  r+  r  r  rt  O  s    r&  r  rK  r.  T	steal_arg)
target_clsrC  r  example_valuesubclass_typer  Fr  r  index_is_slicetensor_dictrv  r   )r  r  r  r  )9r;   specialize_intro  r
  r  rc  rD   r  r   r  r7  r   r  r  r  guard_sourceis_unspecialized_nn_moduler   r<  rC  rD  local_scoperh  r'  r`   
local_namers   r  r  r  r  r  r!  rv  r  wrap_fx_proxy_clsr   r  rW   input_source_to_varrk   r  rS  rT  TENSOR_MATCHr9   r  rr  rE   r  realizer   cls_for_instancer  r  rb  r  )r&  r"  rD  maybe_gmr  tensor_list_proxylist_variablerq  r  tensor_variablesource_irs  r  r_  r  r  r+  r  r  9  s~   

	

zVariableBuilder.wrap_listlikec                    sH     tj  fddttD }t| jd} jjj	
|S )Nc                    ,   g | ]}t  jt  |t|qS r  )rU  rC  rh   rp  r   r   r  r  r  rt        z7VariableBuilder.wrap_tuple_iterator.<locals>.<listcomp>r.  )rc  rD   TUPLE_ITERATOR_LENr  r   r   r  rC  rD  rb  r  )r&  r"  rD  r  r  r  r  r    s   
z#VariableBuilder.wrap_tuple_iteratorc                 C   s@   |  tj dd t|D }t|| jd}| jjj	
||S )Nc                 S   r  r  r  r  r  r  r  rt    ru  z7VariableBuilder.wrap_range_iterator.<locals>.<listcomp>r.  )rc  rD   RANGE_ITERATOR_MATCHcopydeepcopyr   r  rC  rD  rb  r  )r&  r"  r  r  r  r  r  r    s   z#VariableBuilder.wrap_range_iteratorc                    sJ    fdddD }  tj ttrt| j jdS t| jdS )Nc                    r  r  )rU  rC  rN   rp  r  r  r  r  r  rt    r  z4VariableBuilder.wrap_slice_range.<locals>.<listcomp>)startstopstepr.  )	rc  rD   r  r'  r  r   rC  r  r   )r&  r"  r  r  r  r  r    s   
z VariableBuilder.wrap_slice_rangers  c                 C   sf   ddl m} td| jjt| |||d || jjj	v r1| jjj	| }|j
|jjjd d< d S d S )Nr:   )mark_static_addressz Marking static input %s, id: %s)rs  r  _dynamo_static_input_type)r,  r  static_inputs_logr  r  r!  rO  rC  rD  rb  r  r  rv  r  )r&  r"  rs  r  r  r  r  r  mark_static_input  s   z!VariableBuilder.mark_static_inputc              
   C   s  ddl m} t|jdkr"tdt|dt| dg tjdd t||rUt	
|jd	d
rBt	
|jdd }t| jd| ddS | tj t| jd| _| |jS t|tjjtjjtjjfrttjsttdt|ddgtjd t|dd
rt|dd
stdddg d | tj t||   d}t!"t#|s|S | j$j%j&'||S t()|| j$j*rt|tj+j,j-j.r|/ }t0| j| _tj1jj2rYt3 }t4|j5r|j5j6t7u rz|5 D ]\}}| j8||d qW n  t9y } zt:t#|| j$t;|j<d W Y d }~nd }~ww t4|j=rN|j=j6t>u rNz|= D ]\}}	| j8|	|d qW n  t9yM } zt:t#|| j$t;|j<d W Y d }~nd }~ww |rY|| j$j%j?| j@< |jABdrg|jABdrot|jCdd
r| j}
tj2r| j$j%j*rtjDrtE| j}
tF||
d}tG|
Htj n$| j}
tj2r| j$j%j*rtjDrtI| j}
tJ||
d}tG|
Htj | j$j%K|| j t!"t#|s|S | j$j%j&'||S tL|jCtjjMjNjOr| tj tJ||   dS | j$j%jP|| j@|   dS )Nr:   )OptimizedModuler   zUninitialized nn.Modulez6Attempted to trace an uninitialized nn.Module of type .z?Ensure your nn.Module instance has called `super().__init__()`.r  _torchdynamo_disableF_torchdynamo_disable_msgzHOptimized `nn.Module` is wrapped with `torch.compiler.disable` (reason: ))r  msg	_orig_modz#Attempted to wrap RNN, GRU, or LSTMz*Dynamo does not support RNN, GRU, or LSTM.zgSet torch._dynamo.config.allow_rnn=True to enable experimental support for RNN, GRU, and LSTM in Dynamo_is_fsdp_managed_module_fsdp_use_orig_paramszFSDP with use_orig_params=Falser  z3Dynamo only supports FSDP with use_orig_params=Truer.  r  )r  )ztorch.nn.modulesz	torch.ao.ztorch.nn.modules.container_dynamo_marked_static)Q
eval_framer  len__dict__rC   r   r<   rU  r   rM  r}  forwardr   r  rc  rD   r  rN   r=  r   r'  r
  rd  RNNGRULSTMr;   	allow_rnnr9  rB  r  r   rp  rL   r  ro  rC  rD  rb  rk  r=   is_dynamic_nn_moduleexportfxexperimentalproxy_tensor
_AttrProxyget_baserM   r  inline_inbuilt_nn_modulesr{   rN  named_parametersr  !og_module_named_parameters_fn_ptrr  	TypeErrorrB   r  r  named_buffersog_module_named_buffers_fn_ptr
nn_modulesr!  r  rL  r?  install_free_tensorsri   r   rE   rr  rj   r    add_fqn_info_for_inlined_modulesr  paralleldistributedDistributedDataParallelregister_attr_or_module)r&  r"  r  r  r  freezingrK  peb
new_sourcer  r  r  r=    s   
	

&&



zVariableBuilder.wrap_modulec                 C   s  t |tu rt|tsJ t| jjr#td| jj | j|t	j
dS t| jjr9td| jj | j|t	jdS tjs~t|| jrwd }| jj sP| jj rRd}t| j| jjt|| jj d | tjtj|d tj|| jdS | || jS | |S t |t u rt|t sJ tj!s| || j"S | |S t |t#t$fv rt|t#t$fsJ | |S | tj% tj|| jd}t|t&t'fr| jj(j)*||S |S )N&%s marked dynamic via source whitelistr*  '%s marked unbacked via source whitelista  torch.compile considers integer attributes of the nn.Module to be static. If you are observing recompilation, you might want to make this integer dynamic using torch._dynamo.config.allow_unspec_int_on_nn_module = True, or convert this integer into a tensor.r  )recompile_hintr  )+ro  r  r'  is_dynamic_sourcer  r!  r  r  r  r+   r  is_unbacked_sourceUNBACKEDr;   r  r   r  "is_unspecialized_builtin_nn_moduler  rK   rC  rI   make_scalarrc  rS  rT  rD   rE  r   r  _wrap_lazy_constant_wrap_symint_for_lazyr  specialize_float_wrap_symfloat_for_lazyr7  r9  r  r  r@  rD  rb  r  )r&  r"  rH  r  r  r  r  r    sX   






zVariableBuilder.wrap_literalc                 C   
   |  |S r#  )r  r  r  r  r  rO       
z%VariableBuilder._wrap_symint_for_lazyc                 C   rR  r#  )wrap_symfloatr  r  r  r  rQ    rS  z'VariableBuilder._wrap_symfloat_for_lazywrap_fnc                 C   r  r#  r  r&  r"  rU  r  r  r  rN       z#VariableBuilder._wrap_lazy_constantc                 C   r  r#  r  rV  r  r  r  rN    rW  c                 C   r  r#  r  rV  r  r  r  rN    rW  c                 C   sB   | j s|dur||S | tj tj|| jdS tj|| jdS )zCWrap a primitive constant, deferring guard installation if allowed.Nr  r.  )rV  rc  rD   r  r   r  r  r   rV  r  r  r  rN    s   c                 C   s*   t |rt|| jju rtddd S d S )Nz*Cannot wrap a Tensor that has already beenz"wrapped by this instance of Dynamo)r    r!   rC  r  rA   r  r  r  r   assert_not_wrapped_by_this_graph  s   z0VariableBuilder.assert_not_wrapped_by_this_graphc                 C   s  |   }|| jjjvsJ t|d u}tjr0|s0t|tj	j
s&|r0|j r0| j|t d d}tjo>t|p>t|p>t|}|oLtj pLt pLtjjj}|s[|j sV|rk|j sk| | | jjj|| j|dS t|dkr| tj | | | jjj|| j|dS t|r| | | jjj|tdd| j|dS || jjj v }|r| jjj | S i }t!|}|d ur| tj" t|dkr| tj | | t|tj#r|j$rt|tj%j&j'j(st)ddd	g d
 t|tj#r
t*|r
| jj+rtj,s
t)dddg t-j.d
 t/|rAt0|d urA|j1t0|j1krAt0|}	|	d ur-t2|	j1nd}
t)dd|j1 d|
 dg t-j3d
 t4|| jd|d}| jjj5j6tdd| jt7|||d}t8| j|| t9d$| j||||d|}|: rt4|j;| jt<|ddd tj=}t|t>rt?|rtj@}tjAB ot|tjAjCjD}|s| tEjF|t|tGr|ntH|d tI|rL|r| tj" |J d d }|dkrtKd|J d }tL|dkr|d |jMkr|d |jNkstKdtOt<| jPdQtjR tOt<| jPdQtjS n| tjT | tj" tOtU|QtjS |J \}}|D ]}tV||}t<| jP|}tWXtY| j|| q2|| jjj |< d|jZj[vs\J t\||jZj[d< |j]jZj[d  }t^|| jj_urxt`d!ta||d"|}||jZj[d#< |S )%Nr  Tr.  guardedr  rK  z&Attempted to wrap strided NestedTensorr  3torch.compile does not support strided NestedTensorr  zAttempted to wrap sparse Tensorz-torch.compile does not support sparse TensorsNonez.dtype mismatch between tensor and its gradientztensor dtype: z; grad dtype: zmInconsistent dtype between tensor and its gradient. This can happen in FSDP and crashes meta tensor creation.rC  r  r  )rC  r  r  r  r  _base)rC  r  r  r  r   _local_tensorz7Expecting Dtensor inner tensor name to be _local_tensorr   r:   z;Expecting Dtensor flattening ctx to be _spec, requires_grad_specrequires_gradr  r  z(Wrapped Tensor must be this graph's fakeFr  r  )brp  rC  rD  rb  rt   r;   r3  r'  r
  rd  r}  r  r  r  r{   r:  r[   r\   r^   r  prepare_freezingis_specialized_nn_moduleis_fsdp_modulerX  r?  r!  rc  rD   r  rY   r  r  r  infer_subclass_typer  r*  	is_nestednestedr  nested_tensorNestedTensorrC   r"   r-  capture_sparse_computer<   SPARSE_TENSORr  r#   r  r9  rB  wrap_to_fake_tensor_and_recordr  r  ro  cache_real_value_when_exportwrap_fx_proxy_is_viewr]  rN   r  rX   r]   NOT_NONE_MATCHr=  is_availabletensorDTensorrS  rT  rb   r9   r6   __tensor_flatten__rd  r%  r_  r`  rE   r  rr  DTENSOR_SPEC_MATCHrE  TENSOR_SUBCLASS_METADATA_MATCHrg   r  r   r  rU  rv  r  rk   r  r!   r  rA   r  )r&  r"  r  is_static_inputshould_install_free_tensormake_graph_attributeis_duplicate_tensoroptionsr  safe_grad_valgrad_strr  tensor_proxyr
  
guard_type
is_dtensorinner_tensor_nameflattening_ctxattrsrK  attrinner_valueinner_sourcefake_tensor_valuer  r  r  r  r    st  

	




	


	



zVariableBuilder.wrap_tensorc                 C   s  t d usJ t|t jsJ t|  }ddlm} |jj }|r:zd|j_W n t	y9   t|j
t js7J Y nw d }t 9 z||}|rSddlm} ||}W n tyq } ztdt|dg |d W Y d }~nd }~ww W d    n1 s|w   Y  |d usJ tt| j|| t|| jd|d	}| jjjjtd
d| jt|||d}	t | j|	| d|i}
t!dt"| j|	|d d|
}|| jjj#|< |j$j%j&d }t'||d|d|d}||	j%j&d< | j(|_(|S )Nr   )_utilT)clone_preserve_stridesz)failed to convert numpy.ndarray to TensorzHException encountered when attempting to convert numpy.ndarray to Tensor)r  r  r  r  from_excFr\  r  rK  r.  r  )r  rC  r  r  r  r  r  r  r  r   r  r  ))r   r'  r  rb   rp  torch._numpyr  flags	writeable
ValueErrorr  nditerr   temp_restore_stack_try_convert_to_tensortorch._prims_commonr  rw  rC   r9  r   r  rU  rC  rk  rD  r  r  r  r  r!  ro  rl  r  r   r  r  rv  r  r  r  )r&  r"  r  r  readonlytensor_valuer  rB  r  r  rz  numpy_ndarray_variabler  r  r  r  r  	  s   



	z"VariableBuilder.wrap_numpy_ndarrayr)  r  c                 C   s  t |tu sJ | j| jjjv r| jjj| j S | jjj}t j	r8|
 }t| | jjjt|| jd  nt|  s|d u rUtjjjrU| tj tj|| jdS | jj}t| j|t|| jj d}t | jj}| j}	t!|	t"r{|	# }	|d ur|}
nEtj$r|j%t&u rt'dd t( }
n4t!|	t)r|	j*d urt+|	j*|ddid stj,st-j.}
n|j%t&u rt'dd | tj tj|dS |j/|| j|
d}| jjjt|| j| nt|  sJ | tj tj|| jdS t!|  t0rJ t1|  2tj3 d	|  i}| jjj4j5t67d
d| jt |||  d}|j8j9}t!|t:j;s5J | d|| jjj4j<|< t=j| j||fi |}|| jjj| j< t|  sht>|  |dd d|d|j8j?d< |S )Nr  rG  dynamo.automatic_dynamic_shapesTr   Fr  r  r  r  rK  r.  r  r  r  )@ro  r  r!  rC  rD  unspec_variable_mapr  r   rh  #force_unspec_int_unbacked_size_liker  r)   r  r  r1   r  rY   rp  r
  r  r;   r  rc  rD   r  r   r  rK   rI   rM  r  r  r&   r'  rP   r2  automatic_dynamic_shapesscalarrG   r   $get_automatic_dynamic_shapes_mark_asr`   r)  r  assume_static_by_defaultr+   r  r  rd   rE   rr  r  r  r  r  r  rv  r  r  r  bound_symbolsr   r  r  )r&  r"  r)  r  r  wrapped_valuer!  frame_state_entrynormalized_source_namebase_sourcer  rz  r  r  
unspec_varr  r  r  r  S
  s   











	zVariableBuilder.wrap_symintc                 C   s  | j | jjjv r| jjj| j  S t| j| jj t|| jj	 d}t
jjjsJt|  sJt|sJt|sJt
jjjjsJtddsJtjrX|jturX| tj tj|| jdS t
j|t
j d}t
j!j"#|ru| tj tj|| jdS t$|  t%r~J t&|  'tj( t)|  }||d}t*|| jd|d}| jjj+j,t-.dd	| j t/|||d
}t0| j|| t1t2f| j||d d|}t$|t2sJ || jjj| j < | jj3rt$|  t4st5d| d|   d }	|j6j7j8d }t9|sJ |}	|	j:| jj:u sJ d|	j: dt;|  |d|	d|d|j7j8d< t<| j| jjj=ddgt>|gi R  }
| jjj?@tA|
jB| jd  tC jDdddd |
S )NrG  z.pytorch/compiler:unspecialize_float_killswitchFr  )r  )r  	raw_valuer\  r  rK  r.  rC  r  r  r  =Dynamo attempts to add additional input during export: value=	, source=r  fake mode (^) from fake tensor metadata doesn't match mode({self.tx.fake_mode}) from InstructionTranslatorTr  r  call_methodr  tensorify_float_attempt)	overwrite)Er!  rC  rD  r  rK   r  rI   rM  r  r  r
  r  r;   rP  rY   rp  mathisnanisinf	_inductorr1  
cudagraphsr$   r  r  rG   rc  rD   r  r   r  rq  float64rI  rJ  is_gradtrackingtensorr'  rd   rE   rr  r  rV   rk  r  r  r  r  ro  rl  r  r   r-  r`   AssertionErrorr  rv  r  r    r  r  rm  ru  r   r  r  r1   sym_numr   r@  )r&  r"  r  r  r  rz  r  r  r  r  r(  r  r  r  rT  
  s   








	zVariableBuilder.wrap_symfloatc                 C   s  | j | jjjv r| jjj| j  S t|}t|  ts&t	|  
tj d|  i}|d|i t|| jd|  d}| jjjjtdd| j t|||  d}t| j|| ttf| j||d d|}|| jjj| j < t|  s| jjrt|  tstd	| d
|   d }| r| }n|jjjd }t |sJ |}|j!| jj!u sJ d|j! dt"|  |d|d|d|jjd< |S )Nr  r  Fr\  r  rK  r.  r  r  r  r  r  r  Tr  r  )#r!  rC  rD  r  r
  rq  r'  rp  rd   rE   rr  rD   r  updaterk  r  r  r  r  ro  rl  r  r   rY   r-  r`   r  is_python_constantas_python_constantr  rv  r  r    r  r  )r&  r"  r  rz  r  r  r  r  r  r  r  rn  ]  sf   

	
	z,VariableBuilder.wrap_unspecialized_primitive)Tr#  NN)Pr  r  r  __doc__rf   r7  r=  r$  r   r^  rZ  rj  rp  r   r   r  r9  rc  classmethodr|  rS  cachery  r  r  r   r  r  r  r   r  r
  r  r  r  r   r  r   r  r  r  r  ri  r  r   r  r  r   r   r  r   r  r   r  r  r  r   r   r  r*  r  rd  re  r=  r  rO  r  rQ  r	   rN  r   rX  r  r  r+   r0   r  rT  rn  rJ  r  r  r>  r  rU    s    	?	&	 &(
"        d
r &A	
  X
y rU  objc                 C   s   d }t | tr| j}ntdd|  dt|  d|  dg d |d us%J g }t|D ]}d }| jr?t| jd}t	||j
}|t||d q,t|S )	Nzdataclass fields failurezobj: z; variable type: z$Dataclass fields handling fails for z*. Expected it to be a user-defined object.r  __dataclass_fields__r.  )r'  r   r"  rC   ro  r  r  r  rN   rS   r!  r  r   )r  r"  r  fieldr  base_srcr  r  r  r    s$   

r  r"  r  c                 C   s>   t | tjrt | tst| rt| |u s| jst| } | S r#  )r'  r
  r*  r   _is_functional_tensorr!   re  rn   )r"  r  r  r  r  _clone_input  s   r  rC  r  r  r  r  rz  c                 K   sL   | |||d|}|d u rt ddti|S t ddti|}||  |S )Nr  r  r  )r  r   r   install_global)rC  r  r  r  rz  kwargsr  r  r  r  rm    s   
rm  c                 C   sP   | j r&tj  t|| j|jj|j< W d    d S 1 sw   Y  d S d S r#  )	r-  r
  rI  DisableTorchFunctionSubclassr  r  tracerreal_value_cacherv  )rC  r  r  r  r  r  rl    s   "rl  r  c                 K   s   |d u rt | ||||fi |}nt|tjr$t| ||||fi |}n	t|||||| }t|tjjjtjjj	frG|j
jdkrG|jj| |S )Nplaceholder)_wrap_fx_proxyr'  r
  r*  _wrap_fx_preexisting_tensorhandle_traced_outputr  	variablesr   r   rv  oprD  current_tracerrecord_tensor_or_symint_vt)r  rC  r  r  r  rz  outr  r  r  r    s2   

r  rq  c              	   K   s  ddl m} t|tjsJ dt| t||sJ d|v r/|d d ur/|jj|d  |j	j
dkrDd|j	jv sCJ d| dnd|j	jvsSJ |j	jd  tjj q t||ju rbnMt||| |jrtj  t||j|jj|j	< W d    n1 sw   Y  d	| ttfv i}d
|v r|d
 d usJ |d
 |d
< t|fd|i|}|jjdkrt||jurtd| W d    n1 sw   Y  t| |||||S )Nr:   r  z1_wrap_fx_preexisting_tensor expected tensor, got rq  r  r  zplaceholder z* doesn't have 'example_value' in node.metar  r  rC  r  zN`tensor` needs to be a `FakeTensor`wrapped by this instance of Dynamo. Found: )symbolic_convertr  r'  r
  r*  ro  rD  rq  r  rv  r  r  r  r  +_disable_saved_tensors_hooks_during_tracingr!   r  rl  r-  rI  r  r  r  r  r   r   rk  r  rA   construct_tensor_variable)r  rC  r  rq  r  rz  r  r  r  r  r  r  B  sV   

$r  c                 K   s   ddl m} t||sJ d|v r |d d ur |jj|d  d|jjvs/J |jjd  tj	j
  t|j|dd}W d    n1 sHw   Y  t|||||| S )Nr:   r  rq  r  T)allow_non_graph_fake)r  r  r'  rD  rq  r  rv  r  r
  r  r  r  rq   r  )r  rC  r  r  r  rz  r  r  r  r  r    s    r  c                 C   sv  dd l }dd l}dd l}t| |jrEt| r)|jrtjs)t	dt
| dg tjd t|||| ||}t|ts9J |jjj||td |S t|jjdr]|jjjdkr]t|jjj|jjse|jj|jju rut|jjt
usoJ t|jjS |jj|jju s|jj|jj u rt!| S t"| |j#rt$dd	 | D rd
d | D }t%|fi |S t| t&t'fr^t(|j|  g }	t)| D ]O\}
}|d u r|	*t+j,d)i | q|j-j.dt/j0||
fi d}d|v rt| t'sJ |d }|1 }t2||
dd|d< n|}|	*t3d*||||d| qt| |j#rt%|	|fi |S t"| t&r)t4|	fi |S t"| t't5fr9t6|	fi |S | j7j8dksTt| dsTJ d| j7j8 dt|  t9|	| j7fi |S | d u sk|jj|j:u rst+j,d)i |S t| |j;|j<|j=fr|jj>?| | t(|j|  t@j,||| fi |S t| |jAr|jjtBu s|jjdd tC D v rt(|j|  d }|jjtBu r|jjDd }tE|| |fi |S t| |jFr|jjtBu s|jjdd tC D v rd }|jjtBu r|jjDd }t(|j|  tG|| |fi |S tHI|jjrtJ|jj|jFs*|jjdd tC D v r:t(|j|  tG|| d fi |S |jjdkrV|jjKdkrVt(|j|  t+| fi |S | d urt| |jFr|jjdkr|jjKdkrt(|j|  tG|| d fi |S t| tLr|jj|jMtNt/j0|jOjP|jQt/jR|jSjTjU|jSjVjW|jSjVjXtN|jYdtZtN|jYdtZ|j[fv s|jjKdkr|jjdkrt(|j|  t+j,| fi |S t| |j\jj]rdd l^m_} t(|j|  ||fi |S t| t`r2|jj|jja|jjSjb|j\jjc|j\jjd|j\jje|jjf|jjg|jjh|jji|jjjd!gt'tkl  v r2t(|j|  t+j,| fi |S t| tLtmt`frf|jjtnu sW|jjtou sW|jjKdkrf|jjd"krft(|j|  t+j,| fi |S t| tmss|jjd#v rt(|j|  t+j,| fi |S tpt| rtqt| r| }|jrjst|jju| }tv,||S t	d$d%tw|  d&|jjK d'|jj d(g d d S )+Nr   z4Attempted to wrap sparse Tensor with VariableTrackerzBtorch.compile does not support sparse Tensors with VariableTrackerr  )mutation_type_clsr  	set_statec                 s   s    | ]}t |tV  qd S r#  )r'  r  r  r  r  r  rR    s    

z'handle_traced_output.<locals>.<genexpr>c                 S   r  r  r  r  r  r  r  rt    ru  z(handle_traced_output.<locals>.<listcomp>rG  )kindtargetr  r  r  Fr  )r  rC  r  r  ztorch.return_types_fieldsz	expected z. == torch.return_types or named tuple but got c                 S      g | ]\}}|j qS r  current_streamrP  rK  device_interfacer  r  r  rt  0      c                 S   r  r  r  r  r  r  r  rt  =  r  c                 S   r  r  )rz  r  r  r  r  rt  J  r  queryr  record_eventget_rankget_world_size
bit_lengthr   r   
is_integerr  )r  	__round__ztorch.* op returned non-Tensorzexample_value type: z; op: z
; target: zUtorch.* ops that return a non-Tensor cannot be traced into the Dynamo FX graph outputr#  r  )xtorch._functorch.vmaptorch._subclasses.fake_tensortorch._utilsr'  r*  r"   r-  r;   ri  rC   r9  r<   rj  r  r   rD  rb  
_track_objr   r  rv  r  r  r  rI  	Generatorr  set_rng_statero  r   _DisableFuncTorchrr  _is_in_bad_forkr   r   r  r  r   r  r  r   r<  r  r   r  r  ru  operatorgetitemr  rW   r  r   r3   r   r?  r  r   manual_seedr   SymFloatr  r  track_produced_symintsr   rt  r   r@   r  r   rz  r   rM  rN  r  r  r  sym_intr  _utils_element_sizeseedmodrJ  vmap_validate_and_get_batch_sizepredispatch_vmap_increment_nesting_vmap_decrement_nestingr=  r  _constrain_as_sizebackends
SDPAParamssdpar   r7   _are_functorch_transforms_activeis_batchedtensoris_flash_attention_availablecan_use_flash_attentioncan_use_efficient_attention_get_cudnn_sdp_enabled_get_flash_sdp_enabled_get_mem_efficient_sdp_enabled_get_math_sdp_enabled_get_overrideable_sdp_enabledr   r  r  r   r   r   r   r  r  r  r  r   r   )r  rC  r  rz  r  r  r
  r  sizesunpackedr  r  proxy_ir  	options_ir  r   r  r  r  r  r    s  








 
r  c                 C   s:   t | tjtjjtjjjtjjj	fv st
| rd S t | S r#  )ro  r
  r*  rd  r}  r8  r  r   r~  r  r6   r  r  r  r  rd    s   rd  c                 C   sr   |  |}t|tjjjr7|j|ju r7|r|}nt|tjjr$tjj}nt|tjj	r0tjj	}ntj
}||d< |S )N
class_type)
specializer'  r
  r8  r  r   r  rd  r}  r  r*  )r  rC  r  r  specialized_propstensor_typer  r  r  get_specialized_props  s   


r  c                 C   sX   t ||j}t|j| |jjdkr|jj|| |t	| ||| | |fi |S )z
    Actually construct a tensor variable after all the pre-processing from
    wrapping a pre-existing or newly created tensor value.
    r  )
r  r  r   rv  r  rD  r  r  r  r  )r  rC  r  r  r  rz  r  r  r  r    s   r  c                   C   s0   t jdkrtjS t jdkrtjS tdt j )Ndynamicunbackedz+invalid automatic_dynamic_shapes_mark_as = )r;    automatic_dynamic_shapes_mark_asr+   r  rK  r  r  r  r  r  r    s   


r  _DYNAMIC_SOURCES_DYNAMIC_SOURCES_CONFIG_HASHc                  C   L   t tjjj} td urt| krtS dd tjjjdddD a| atS )Nc                 S      h | ]}|r|qS r  r  rP  sr  r  r  	<setcomp>      z&get_dynamic_sources.<locals>.<setcomp> r  ,)	hashr
  compilerr;   dynamic_sourcesr  r  replacesplitcurrent_hashr  r  r  get_dynamic_sources     r)  source_namec                 C   <   t  }|D ]}|| kst|| rtd| |  dS qdS )NzA%s was marked dynamic due to dynamic source allowlist pattern: %sTF)r)  r  matchr  r  )r+  r$  patternr  r  r  rI       rI  r!  rB  c                    s   |  }t|sG|  | }d g| } fddt|D }|jtd i }|D ]\}}	|	 }
|||||
< ||||
  t	|
 q*ng }t
| |tt|t|S )Nc                    s   g | ]	} | | fqS r  r  r   	ex_strider  r  rt  6  r  z,record_automatic_dynamic.<locals>.<listcomp>)r  )sizer"   stridedimr  sortr*   rh  
setdefaultrJ   rK   rI   make_tensorr  )rC  r!  rB  ex_sizer4  r3  pending
candidatesi_strideneg_ir  r  r0  r  record_automatic_dynamic,  s&   
r=  _UNBACKED_SOURCES_UNBACKED_SOURCES_CONFIG_HASHc                  C   r  )Nc                 S   r  r  r  r  r  r  r  r  Z  r  z'get_unbacked_sources.<locals>.<setcomp>r   r  r!  )	r"  r
  r#  r;   unbacked_sourcesr>  r?  r%  r&  r'  r  r  r  get_unbacked_sourcesP  r*  rA  c                 C   r,  )NzC%s was marked unbacked due to unbacked source allowlist pattern: %sTF)rA  r  r-  r  r  )r+  r@  r.  r  r  r  rJ  d  r/  rJ  Fr  static_shapes
outer_onlyc           -         s  | j rt| tjjjjstdddg d |j}|j	j
j| d }|r%|jni }d }|  r:t|d}	t| j||	|}t| r|st| |||dd}
t|
tsPJ i }t| | \}}|D ]}t| |}t||}t||||||< q]t|
j|
j|
j|
j||
j|
j|dS |rt|sttjg|    tj!g|    d g|    d g|    |||d	S d
dl"m# t$fdd| % D rtdd | % D tj!g|    d g|    d g|    |||d	S t&||| }t'| }i  dt(dddt)dd f fdd}d
dl*m+} |j	j,d ur(|j	j,D ]}t||rq|j-|kr&||j |j.|j qg }g }g }g }g }t/|   D ]t| dt0 v }t| dt0 v }t| dt0 v }t| dt0 v }t| dt0 v }|1t| di g  t2|j} |}	t|	t3r|	4 }	|st|	t5r|	j6d urt7|	j6| di rt89d| t:g|    }!t;|!< |t<j=|!d O }t>j?o|@}"t>j?o|A}#t|rt89d!| d}"tB|rt89d"| d}"|"p|#}$ }|d u rwd }%d }&|rAt>jCsAd }&tD| d#r;fd$d| jED F }'|'jGd u r(|'jHd u r(tIdd%}%ndd
d&l"mJ}( |(tK|'jG|'jHd'dd(}%nQtIdd%}%nK|rJtIdd%}%nB|sf|$rftLd)d |"r]tIdd%}%|#retIdd%}&n&|srt>j?srtLd)d d }%d }&n|\}%})d }&| d* d+}*|)|j	jMjN|*< |1|% |1|& |stB|rtjO}+n0|%d us|s|s| %  r|$rtP }+ntjQ}+n|st>jRs|rtj}+ntjS}+|&d urtjQ},ntj!},|1|+ |1|, q8t||||||||t| d,d d-	S ).NzGEncountered strided NestedTensor in automatic dynamic dim determinationr  rZ  r  r]  T)rC  )dynamic_sizesdynamic_stridesconstraint_sizesconstraint_stridesview_base_contexttensor_source#shape_env_to_source_to_symbol_cacheinner_contexts)rD  rE  rF  rG  rH  rI  rJ  r   is_nested_intc                 3   s$    | ]}t |to | V  qd S r#  )r'  r   r  rL  r  r  rR    s   " z%_automatic_dynamic.<locals>.<genexpr>c                 S   s"   g | ]}t |trtjntjqS r  )r'  r   r+   r  r  r  r  r  r  rt    s    z&_automatic_dynamic.<locals>.<listcomp>r4  constraint_rangeStrictMinMaxConstraintr!  r  c                    s\   |  v r&ddl m}  |  \}}||j|j@ dd}|p|}||f | < d S ||f | < d S )Nr   rO  Fvrr'  )%torch.fx.experimental.symbolic_shapesrO  rR  )r4  rN  r!  rO  old_constraint_rangeold_namenew_constraint_rangenew_name)dim2constraintr  r  update_dim2constraint  s   
z1_automatic_dynamic.<locals>.update_dim2constraint)_RelaxedConstraint_dynamo_strict_unbacked_indices_dynamo_unbacked_indices_dynamo_dynamic_indices_dynamo_weak_dynamic_indices_dynamo_static_indices_specialize_onFz#automatic dynamic %s marked dynamic)r2  rE  rF  _dynamo_dynamic_rangec                    s   g | ]	}|j  kr|qS r  )r4  )rP  dr)r  r  r  rt  ;  s    r&  rP  )lowerupperrQ  r  z.size()[]_dynamo_shape_ids)	rD  rE  rF  rG  specialize_onrH  rI  rJ  	shape_ids)Tre  r'  r
  rf  r  rg  rh  rC   r!  rD  tracing_contexttensor_to_contextrh  rJ  rn  rN   _automatic_dynamicr]  r6   r-   ro  rs  r  r.   rD  rE  rF  rG  rI  rI  r+   r  r4  INFER_STRIDErS  rM  rA  r2  r=  rO  r  r9  r  rZ  export_constraintst_idrN  r  r@  r  r&   rP   r2  r`   r)  r  r  r  rH   rG   rI   	make_sizer;   r  is_size_dynamicis_stride_dynamicrJ  allow_ignore_mark_dynamicr  ra  popminmaxr,   rO  r8   r   r  source_name_to_debug_namerK  r  r  r  DUCK)-rB  rC  r  rB  rC  r!  prior_policyrJ  rH  r  outer_contextrK  r  rK  r  inner_tensorr  r  rn  rY  rZ  r(  rD  rE  rF  rG  rg  marked_strict_unbackedmarked_unbackedmarked_dynamicmarked_weak_dynamicmarked_staticr  	mark_sizeautomatic_dynamic_sizeautomatic_dynamic_strideautomatic_dynamicconstraint_sizeconstraint_stride	dim_rangerO  name_dim_namedynamic_sizedynamic_strider  )rX  r  rM  r  rk  s  s  





















rk  )parent_contextr  r  c             
   C   sT   t  }zt| ||||dW |jj jt  | 7  _S |jj jt  | 7  _w )Nr  r  r  )rX  rY  $_wrap_to_fake_tensor_and_record_implrD  r[  !wrap_to_fake_tensor_and_record_ns)rB  rC  r  r  r  r]  r  r  r  rk    s   



rk  c                   s8  t  tjtjjtfv st tjst rd usJ t |d\}}|s0t	 |ntt
s7J j}|j| tdjt jt   t  jd usYJ t fdd}W d    n1 snw   Y  d urt|tr|j }	d urjjt|	t t|r| \}
}|
D ]}t||}t |}t
|}t||t|tjd qjjj < t |r|j!r|" n|# }|$ d|j% |$ |& djj'< n|$ |& djj'< |r|r( st)sjjt| jj*t+   |S  S )	N)rI  zwrap_to_fake %s %s %s %sc                      s   j j dS )N)r  symbolic_context)r  r  r  rB  r  r  rC  r  r  rB    s
    z6_wrap_to_fake_tensor_and_record_impl.<locals>.<lambda>r  )r   )r2  r3  values_sizevalues_stride)r2  r3  ),ro  r
  r*  rd  r}  r   r'  r6   r   rk  rN   rQ  rK  r  r  r!  r  shaper   r  r   	item_memorD  r  r  r1   rO   rs  r  rk  ri  rj  r"   	is_sparse_valuesvaluesr2  ndimr3  input_source_to_sizes_stridesrb  rY   tracked_fakes_id_to_sourcerO  )rB  rC  r  r  r  rB  _reasoninner_context_namefake_esym_valr  rK  r  
fake_innerinnerr  r  r  r  r  r    s   	

	







r  c                
   @   sR  e Zd ZdZdddZeedddeee	  ee
e	e	f  B eee	d	f  B eee	  B defd
dZeedddee	 defddZeedddee	d	f defddZeedddeeB eB eB defddZeeddde	defddZeddde	defddZededefddZede
eede	gef f fddZdS )r  a  
    Like builder, but stateless and does not require a source. Useful for simple type->VT objects, or objects
    that are being created/evaporated during inlining (ex: consider a locally made list of tensors we then iterate over
    .), such a list should not show up as an artifact from inputs, nor in reconstruction, nor in the graph. However,
    there may be reasons to represent it as a ListVariable internally.

    NOTE - Objects produced here are born UNGUARDED due to the nature of sources!

    NOTE - This class is very new! It will have some rough edges, but it was created to stem the bleeding of giant
    if/else type->VariableTracker trees that were cropping up all over dynamo.
    r  Nc                 C      t d)NzUse SourcelessBuilder.create()r  r+  r  r  r  r=       zSourcelessBuilder.__init__rC  r  r"  .c                 C   r  r#  r  rC  r"  r  r  r  r     s   zSourcelessBuilder.createc                 C   r  r#  r  r  r  r  r  r  *  r  c                 C   r  r#  r  r  r  r  r  r  .     c                 C   r  r#  r  r  r  r  r  r  4  r  c                 C   r  r#  r  r  r  r  r  r  :  r  c           	         sn  t }tj|}|r| S ttrS tt r.tjj	
 jj}t|S ttjr8tS trBtS tr]td ur]trVd j_tS trttrttjj}t|dS trtS ttj tj!tj"j#j$frt%S tt t&j'frtt rt(tj rt)S tS tt*j+rt,S tt*j-rtjt t&j'frt.jj/j0ksJ t j}z	|1 j/j0W S  t2y   Y nw ttj3j4j5rt6S ttj7j8j9rtS t:;rt:S t<=rt<S t>j?u r!t@S ttAjBr,tCS ttjDjEjFjGr=ttHS tt tjIjJrOtjDjEjKLS tt*jMt*jNfr]tOS tPrx fddtQt D }tR|t dS ttjSrjTjU jjVv r jjVjTjU }tW |S tXtYrtZS t[d|j\ d|j] d| g t^j_d	 d S )
NTr  c                    s   g | ]}t  t|qS r  )r  r  r  r  r  r  r  rt    s    z,SourcelessBuilder.create.<locals>.<listcomp>)r  z%Unexpected type in sourceless builderr  z3SourcelessBuilder.create does not know how to wrap r  )`ro  r  _type_handlersrh  r'  r   r   r
  r  r  r  rD  r  r   r  r  _HAS_DEFAULT_FACTORY_CLASSr   r   r  rN  r?   ri  rj  rk  r   is_supported_new_methodr  r   rw   r  rF  rG  rH  rI  rJ  rK  r   abcABCMetar  r   r  r  r   rY  r  r  r  var_getattrrw  r.  graph_moduleGraphModuler   r  r  r  r   r  r   r  rS  r  r   r  r  r   r  r  lazyLazySymNodeFormatStringr9  ro  flex_attention_backwardhigher_order_ops&FlexAttentionBackwardHighOrderVariableGenericAlias	UnionTyper   rz   r   r   r   rv  r  r  r   r   r$  r   rC   r  r  r<   
DYNAMO_BUG)	rC  r"  
value_typefast_handlerr  r  
cls_obj_vtrD  r  r  r  r  r  >  s   











c                 C   s   t | sJ t j| dS )Nr  )r   r  r  r  r  r  r  wrap_constant_literal  s   z'SourcelessBuilder.wrap_constant_literalr  c                     sv  t j i } tD ]}dd | |< q fdd| t<  fdd| t<  fdd| t<  fdd| t<  fdd| t<  fdd| tj	< | t | t
j< | t | t< | t | t<  fd	d| tj< d
d | tj< dd | tj< dd | tj< dd | tj< dd | tj< dd | tjjj< dd | tjjj< dd | tjjj< dd | tjjj< dddtdtfdd}t j!D ]}|| |< q| S )Nc                 S      t |S r#  )r   r  r  r  r  rB        z6SourcelessBuilder.make_type_handlers.<locals>.<lambda>c                       t  fdd|D t dS )Nc                       g | ]} |qS r  r  r  r  rC  r  r  rt    ru  JSourcelessBuilder.make_type_handlers.<locals>.<lambda>.<locals>.<listcomp>r  )r   r   r  r  rC  r  rB        c                    r  )Nc                    r  r  r  r  r  r  r  rt    ru  r  r  )r   r   r  r  r  r  rB    r  c                    s(   t  fdd| D t|t dS )Nc                    "   i | ]\}} | |qS r  r  r  r  r  r  
<dictcomp>     " JSourcelessBuilder.make_type_handlers.<locals>.<lambda>.<locals>.<dictcomp>r  )r   r  ro  r   r  r  r  r  rB    s
    c                    r  )Nc                    r  r  r  r  r  r  r  rt    ru  r  r  )r   r   r  r  r  r  rB    r  c                       t  fdd|D S )Nc                    r  r  r  r  r  r  r  rt    ru  r  )r   r  r  r  r  rB        c                    r  )Nc                    r  r  r  r  r  r  r  rt    ru  r  )r   r  r  r  r  rB    r  c                    s(   t t fdd| D tt dS )Nc                    r  r  r  r  r  r  r  r    r  r  r  )r   r   r  r  r   r  r  r  r  rB    s    c                 S   r  r#  )r   r  r  r  r  rB    r  c                 S      t |t dS Nr  r   r   r  r  r  r  rB        c                 S   r  r#  )r   r  r  r  r  rB    r  c                 S   r  r#  )r   r  r  r  r  rB    r  c                 S   r  r  )r   r   r  r  r  r  rB    r  c                 S   r  r  )r   r   r  r  r  r  rB    r  c                 S   r  r  r  r  r  r  r  rB    r  c                 S   r  r  r  r  r  r  r  rB    r  c                 S   r  r  r  r  r  r  r  rB    r  rC  r  r"  r  c                 S   s   |S r#  r  r  r  r  r  passthrough  r  z9SourcelessBuilder.make_type_handlers.<locals>.passthrough)"r  r  ro   r@  r5   r  r  r  r
  r  r  r9  r2   r3   r  r  r  rM  r}  r  r  r   r  rJ  rx  ry  distributionsconstraints_Real	_Interval
Constraintr  r   all_subclasses)handlersr  r  r{  r  r  r  make_type_handlers  sB   

z$SourcelessBuilder.make_type_handlersr4  )r  r  r  r  r=  r	   r  ro  r@  r   r  r  r  r   r  r   r   r7  r  r  r9  r   r   r$  r  r   r  r  r  r  r  r    sd    



hr  c                   @   s4   e Zd ZdZdddZedddedefd	d
ZdS )"SourcelessUserDefinedObjectBuilderz
    SourceLessBuilder does not return a UserDefinedObjectVariable, but in some
    cases it might be ok to return UserDefinedObjects. In such case, use this
    builder.
    r  Nc                 C   r  )Nz/Use SourcelessUserDefinedObjectBuilder.create()r  r+  r  r  r  r=  
  r  z+SourcelessUserDefinedObjectBuilder.__init__rC  r  r"  c                 C   sJ   t |}t|trt|t dS t|tjjrt	|t dS t
|t dS r  )ro  r  r   r   r   r'  r
  rd  re  r   r   )rC  r"  r  r  r  r  r    s   
z)SourcelessUserDefinedObjectBuilder.creater4  )	r  r  r  r  r=  r  r   r   r  r  r  r  r  r    s
    
r  r  r#  )F(  r  r  r  r{  r  r  rF  rS  rM  	itertoolsrP  r  r  r  r  r  rX  r  r  collections.abcr   r   r   typingr   r   r   r   r	   r
   r   r  r
  r   torch._dispatch.pythonr   #torch._dynamo.graph_bytecode_inputsr   r   torch._dynamo.utilsr   r   r   r   torch._guardsr   "torch._higher_order_ops.flat_applyr   !torch._higher_order_ops.torchbindr   torch._library.opaque_objectr   r   r   r   
torch._opsr   r   r   r  r   r   r    r!   torch._subclasses.meta_utilsr"   r#   torch._utils_internalr$   %torch.fx.experimental._backward_stater%   torch.fx.experimental._dynamismr&   torch.fx.experimental.sym_noder'   r(   rS  r)   r*   r+   r,   r-   r.   r/   r0   r1   torch.fx.immutable_collectionsr2   r3    torch.nn.utils._expanded_weightsr4   torch.utils._ordered_setr5   torch.utils._python_dispatchr6   r7   torch.utils._sympy.value_rangesr8   torch.utils.weakr9   r  r;   r<   r=   r>   r?   r  r@   excrA   rB   rC   rq  rD   rE   rF   pgorG   rH   rI   rJ   rK   rb  rL   r  rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r  rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   builtinr   constantr   r   ctx_managerr   r   r   r   r   dictsr   r   r   r   r   r   r   r   r=  r   r   r   r   r   	functionsr   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   iterr   r  r   r   listsr   r   r   r   r   r   r   r   r   miscr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	nn_moduler   r   r   	optimizerr   script_objectr   r   r  r   streamsr   r   r   rq  r   r   r   r   r   r   r   r   r   r   torch_functionr   r   r   user_definedr   r   r   r   r   r   r   r   r   r   r   r   r   r   numpyr   ModuleNotFoundErrorr6  torch._dynamo.codegenr   torch._dynamo.symbolic_convertr  r  	getLoggerr  r  r  getArtifactLoggerr  r  r  r  r  DimListr$  r7  r  r  	dataclassr  r;  rD  varsr  rS  r  r@  rT  rd  re  r7  r8  r4  r5  rU  r  r  ro  rm  rl  r  r.  Proxyr*  r  r  r  r9  r  rd  r  r  r  r  r  r)  rI  r=  r>  r?  rA  rJ  rk  rk  r  r  r  r  r  r  r  r  r  <module>   sf   $,  "(
<,"":("z
J
                   a=
-

L

$

 "~

   !q q