o
    ߗi                    @   s  U 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mZmZ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"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d d	l/m0Z0 d d
l1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC ddlDmEZEmFZFmGZGmHZH ddlImJZJ ddlKmLZLmMZM ddlNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZW ddlXmYZY ddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZm ddlHmnZnmoZompZpmqZq ddlrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZmZmZ dd lmZmZmZmZmZmZmZ dd!lmZ dd"lmZ dd#lmZ dd$lmZmZmZmZmZmZmZmZmZmZ dd%lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd&lmZmZmZ dd'lmZ dd(lmZ dd)lmZ dd*lmZmZmZmZmZmZ dd+lmZmZ dd,lmZmZmZmZ dd-lmZmZmZmZmZmZ zd dlZW n ey   dZY nw erd d.l mZ e	eZejed/ZeZd0d1 Z	G d2d3 d3Z
ejG d4d5 d5ZG d6d7 d7eZed8d9 ee D Zee ed:< e Zee ed;< G d<d= d=Zd>d? Zd@dA Z	d_dBefdCdDZdEdF Z	d_dGdHZ	d`dIdJZ	d_dKdLZdMdN ZdOdP ZejG dQdR dRZ 	SdadBe:fdTdUZ!ddVdWeek dXe"fdYdZZ#G d[d\ d\Z$e$% e$_&G d]d^ d^Z'dS )b    N)AnyCallableDict	FrozenSetListMutableMapping
NamedTupleOptionalSetTYPE_CHECKINGUnion)SymInt)GuardSourceTracingContext)call_torchbind)HigherOrderOperator)
FakeTensoris_fakemaybe_get_fake_mode)is_sparse_any	safe_grad)justknobs_check)BackwardState)_constrain_range_for_size_nested_int_aware_sort
DimDynamicRelaxedUnspecConstraintStatefulSymbolicContextSubclassSymbolicContextSymbolicContext)immutable_dictimmutable_list)is_traceable_wrapper_subclass)ValueRanges)TensorWeakRef   )configmutation_guardreplay_recordtrace_rules) get_registered_device_interfaces)InternalTorchDynamoErrorunimplemented)GuardBuilderinstall_guardmake_dupe_guard)auto_dynamic
auto_unsetFrameStateSizeEntryInferStrideprocess_automatic_dynamic)SideEffects)AttrProxySource
AttrSourceCallMethodItemSourceConstantSourceConstDictKeySourceConvertIntSourceFloatTensorSourceGetItemSource
GradSourceis_constant_sourceis_from_defaultsis_from_optimizer_sourceLocalSourceNumpyTensorSourceOptimizerSourceRandomValueSourceSourceSubclassAttrListSourceTupleIteratorGetItemSource)is_callable_allowedis_numpyis_numpy_dtypeis_numpy_type_info)_extract_tensor_dictbuild_checkpoint_variablebuild_invoke_subgraph_variableclone_inputcommon_constant_typesget_fake_valueget_locals_to_stealget_static_address_typeis_frozen_dataclass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   )typestrValueMutationNewVariableTrackerVariableTrackerMeta)ConstantVariableEnumVariable)AutocastModeVariableEventVariableNullContextVariablePreserveVersionContextVariableStreamContextVariableStreamVariable)ConstDictVariableCustomizedDictVariableDefaultDictVariableFrozensetVariableHFPretrainedConfigVariablePythonSysModulesVariableSetVariable)DeviceMeshVariablePlacementClassVariablePlacementVariableProcessGroupVariableWorldMetaClassVariable)!CollectiveFunctionRewriteVariableCreateTMADescriptorVariableFunctoolsPartialVariableTritonKernelVariableUserFunctionVariableUserMethodVariableWrapperUserFunctionVariable) TorchHigherOrderOperatorVariable)ItertoolsVariable)LazyVariableTracker)
BaseListVariableListIteratorVariableListVariableNamedTupleVariableRangeVariableRestrictedListSubclassVariableSizeVariableSliceVariableTupleIteratorVariableTupleVariable)AutogradEngineVariableAutogradFunctionContextVariableAutogradFunctionVariableComptimeVariableDebuggingVariableDelayGraphBreakVariableGetAttrVariableGetSetDescriptorVariableInspectSignatureVariableLambdaVariableLoggingLoggerVariableMethodWrapperVariableNumpyDTypeVariableNumpyTypeInfoVariableNumpyVariablePythonModuleVariableRandomClassVariableRandomVariableRegexPatternVariableSavedTensorBoxTorchVersionVariableTypingVariableWeakRefVariable)FSDPManagedNNModuleVariable$UnspecializedBuiltinNNModuleVariableUnspecializedNNModuleVariable)OptimizerVariable)TorchScriptObjectVariableSDPAParamsVariable)NumpyNdarrayVariable$supported_const_comparison_op_valuesSymNodeVariableTensorSubclassVariableTensorVariableUnspecializedPythonVariable)TorchCtxManagerClassVariableTorchInGraphFunctionVariable)build_torch_function_fnTensorWithTFOverrideVariable#torch_function_mode_stack_state_mgrTorchFunctionModeVariable)FrozenDataClassVariableKeyedJaggedTensorVariableMutableMappingVariableSourcelessGraphModuleVariableUserDefinedClassVariableUserDefinedObjectVariable)InstructionTranslatorcudagraph_static_inputsc                 C   sB   t   t dd t| dW  d    S 1 sw   Y  d S )NignorezThe .grad attribute of a Tensorgrad)warningscatch_warningsfilterwarningshasattr)t r   ]/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/_dynamo/variables/builder.pysafe_has_grad  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ed< eeejf ed< e	ed< e
ejjj ed< dZe	ed< dZe
ej ed< ed	d
 Zdd Zdd Zdd Zdd ZdS )GraphArgsource_examplepass_arg_as_tensorfake_tensorT	is_tensorNexample_strong_refc                 C   s*   t | jtr|  }|d usJ |S | jS N)
isinstancer   r$   )self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   torchTensorr$   r   r   r   r   r   r   __post_init__8  s
   zGraphArg.__post_init__c                 C   s   | j | d S r   )r   reconstructr   codegenr   r   r   r   =  s   zGraphArg.reconstructc                 C   s   d | _ d | _d S r   )r   r   r   r   r   r   erase@  s   
zGraphArg.erasec                 C   s   | j  |j  kS r   )r   namer   otherr   r   r   __eq__D     zGraphArg.__eq__)r   r   r   rF   __annotations__r   r$   r   r   boolr	   _subclassesr   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r     s   
 
r   c                       s&   e Zd Zd fddZdd Z  ZS )BackwardStateGraphArgreturnNc                    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   I  s   
zBackwardStateGraphArg.__init__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>U  s    z3BackwardStateGraphArg.reconstruct.<locals>.<lambda>r   F)txoutputbackward_state_varadd_push_nullcall_functiondup_topstorer   r   r   r   r   R  s   
z!BackwardStateGraphArg.reconstructr   N)r   r   r   r   r   __classcell__r   r   r   r   r   H  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    
r  ITERTOOLS_TYPE_IDSITERTOOLS_POLYFILLED_TYPE_IDSc                       s  e Zd ZdZdeddf fddZdd Zd	d
 Zee	
ddd Zdd Zdd Zedd Zee	
ddd ZdejfddZdejfddZdd Zdd Zee	
ddeeed egef f fddZd d! Zdefd"d#Z de!e"e#e$e%f fd$d%Z&de'fd&d'Z(de)fd(d)Z*de!e+e,f fd*d+Z-de.j/d,e0fd-d.Z1de.j2j3fd/d0Z4d1d2 Z5de.j/fd3d4Z6de.j/fd5d6Z7d7d8 Z8d9d: Z9d;d< Z:d=d> Z;  Z<S )?VariableBuilderz3Wrap a python value in a VariableTracker() instancer   r   Nc                    sH   |d usJ dt  d usJ dt   || _|| _| | _d S )NzRConsider SourcelessBuilder for ephemeral objects, usually objects created locally.zExpected active TracingContext)r   try_getr   r   r   r   r   )r   r   r   r   r   r   r   j  s   

zVariableBuilder.__init__c                 C   s   || j jjv r| j jj| }t| j|j}|r| | |S | j jj|| j}|r,|S | |}| j|_| 	|rN|| j jjvrNt
|sN| j jj||}| j jj|| j| |S r   )r   r  side_effectsr/   r   install_guardsvariable_tracker_cachelookup_wrap_can_lift_attrs_to_inputsr]   track_object_existingadd)r   valueside_effect_result	dup_guard	cached_vtvtr   r   r   __call__x  s&   

zVariableBuilder.__call__c                 C   s   t |tttthv S r   )typer   r   r   r   )r   r!  r   r   r   r    s   z)VariableBuilder._can_lift_attrs_to_inputsc                   C   s   ddhS )Nr   rj   r   r   r   r   r   _common_constants  s   z!VariableBuilder._common_constantsc                 C   s   | j S r   r   r   r   r   r   
get_source  s   zVariableBuilder.get_sourcec                    sD   |    t ts  tjkrd S t fdd|D ddi i S )Nc                    s   g | ]}  |qS r   )
make_guard)r  guardr%  r   r   
<listcomp>      z2VariableBuilder.install_guards.<locals>.<listcomp>skiprj   )r&  r   r9   guard_sourcer   CONSTANTr.   )r   guardsr   r%  r   r    s   zVariableBuilder.install_guardsc                 C   s   |  tjS r   )_type_dispatch_implr&   trace_numpy)clsr   r   r   _type_dispatch  s   zVariableBuilder._type_dispatchc                 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g
}|rUt&rU|'t&j(| j)f i }|D ]\}}t*|t	rd|n|fD ]}||vsoJ |||< qgqY|S r   )+r   r   nn	Parameterr   r   functional_tensorFunctionalTensorwrap_tensortuplelistr`   collectionsdequeSizewrap_listlikere   wrap_tuple_iteratorrb   wrap_range_iteratorslicerangewrap_slice_rangerQ   wrap_literalrePatternwrap_regex_patternweakrefReferenceTypewrap_weakrefutilshooksRemovableHandlewrap_removable_handlejitScriptFunctionwrap_jit_functionnpappendndarraywrap_numpy_ndarrayr   )r1  r0  entriesresulttsfnr   r   r   r   r/    s8   



z#VariableBuilder._type_dispatch_implr  c                 C   s   |  tj t|S r   )r  r-   ID_MATCHr   r   r  r   r   r   rF    s   z"VariableBuilder.wrap_regex_patternc                 C   s    |  tj tj| j|| jdS Nr%  )r  r-   
TYPE_MATCHr   buildr   r   rZ  r   r   r   rI    s   zVariableBuilder.wrap_weakrefc                 C   s   t d d S )Nz"unregistered hook removable handle)r,   rZ  r   r   r   rM    s   z%VariableBuilder.wrap_removable_handlec                 C   s   |  tj t|d| jdS )N_torchdynamo_inliner%  )r  r-   r\  r   r   rZ  r   r   r   rP    s   z!VariableBuilder.wrap_jit_functionc                 C   s   ddl m } tjdd f|dd ftjdd ftjdd fg}i }|D ]\}}t|tt	fr0|n|fD ]}||vs;J ||t
|< q3q#|S )Nr%   )comptimec                 S   s    t tjfd| ji| tjS Nr   )r   r   creater   r  r-   CLOSURE_MATCHrZ  r   r   r   r     s    
z.VariableBuilder._id_dispatch.<locals>.<lambda>c                 S      t  S r   )r   rZ  r   r   r   r         c                 S   s   t tfd| ji| tjS r`  )r   _dataclasses_fields_lambdar   r  r-   FUNCTION_MATCHrZ  r   r   r   r     s    
c                 S   rc  r   )r   rZ  r   r   r   r     rd  )r_  r  	signaturedataclassesfieldsr   __version__r   r8  r9  r  )r1  r_  rU  rV  rW  rX  r   r   r   r   _id_dispatch  s"   
zVariableBuilder._id_dispatchc           -   	      s  ddl m}m} | rddlm} ddlm} nG dd d}G dd d}| r2dd	lm}m	} nd
d }dd }
 t}|d urL|S  t}	|	d ur^|	S tshttjrmS trtj fddttD }
t|
tjd}|S tjjju rtj j j!j"#j$  fddt%& D }t'|tS t(j)u rΈtj* t+jdS t,-trtj. t,/}j j!j01|S tt2t3j4t3j5frdtj t6dd 7 D   rtj8 nj j!j"#j$   fddt2fddt%& D }tt3j4rQt9jd}t:|tt;j |j<jd}n
t'|tjd}j j!j0=|S t>tj?j@rqAS tBCr|DS t>tjEjFrtGjd}j j!j01| |S ttHrt6dd D rfddD }tjI tJ|jdS t>tKjLrЈtjI tMjdS tNOrtjP tNjdS t>tQjRrtj* tSjdS tTrtUjdS tVrtWjdS t>tXjYrt9Z d}t;j |j[}g }t9Z d }t%j\D ]\}}|]t;j t^||| q2i }t9Z d!}j_& D ]\}}tBC|sbt`d" t;j t^|||||< qTtaZ btj.|btjc|btj td|||S tertjI tfjdS tgd urt>tgjhritgjS tkrtgsJ tlrtj*ntj. tmjdS tnrtjI tojdS tprt>tgjqrtj. t9jd#}ta|btjI ntjI trjdS tstr&tj* tsjuj jdS ttjvjwjxr<tj* tyjdS t>tjvjwjzrd }zj{}W n
 t|yV   Y nw g }jbtj.g}t>|t}rt9jd$}|]|btj t%|D ]\}}|]t;j t^||| qzta|  j j!j01t~jt|d%S t>tjrttd&d tjvjwjxrtd'd(d)kr߈tjd)d kr߈tj* ttyjt9jd&d*dd)S t>tjjrtjI tjdS tjjjju rtj* tfd+d,S tlr-td ur-tr"d-j j!_tjjdS tgr<t>tgjr<S trLtj. tS t>trmtjju r]t`d. tj.tj tjjdS t>tjjrtjI t9jd/}t;j |j}tuj |S t>tjrtjI j j!d0td1jjjd2} t| j t| jjdS t>tjjr؈tj. tuj jS t>tjr
tjI tjj j j!d0tjjjtfi }!t|!j t|!jdS t>tjjrtjv rtjdS ttjr<td3d d u r<tj. tjdS trXtj. tjd}j j!j01|S t>tjjrstjI tj_tjdS trtjdS trtjI tjdS trtj tjdS t ÈrtjI tjdS tĠňr̈tj tĈjdS ttv rttvrtj* tȈjdS t>tjɃr[tʈj}"jˡ rj̡ }#j j!jjt|#|"tjd4}$nj j!j͠ҡ }$j j!jjtՠd5d6j$t|$|$|"d}%t|"|$d7d d7|$d8|%jjd9< |$jj}&t>|&tjۃsHJ |& d:j j!jܠ]t|$|"d  t|%|$d;kS t>||frrtjI t߈d d jdS |u r|td;d<S |u rtd=d<S t>tjjjrtjI tjjjjgjd>S trtj* tjdS td?d7r͈tj. td@jdS trtj. tdAjdS trtdBd7rtj. tdBjdS trt\}'|'d urt9j|'_tjjdS tju r/tjI tjdS ttjrTtrTtj. tjd}j j!j0=| |S t>tjtjfrvtj* tjd}j j!j01| |S t>tjrt>jtj?j@tjjjfrt;j t9jd&dj}(|(rt>|(tsJ dCtj* tj|(jdS t>tjrtS t>tjrtS t ttrtjjjtj?jtj?jfv rtjjdS tjvju rtj* tj S tjI tjdS t	trJtj j j!j0=t	fdDdt
tD tt9jdEjdFS tt	rd=dGlm})m}* tjjrj j!jjtՠd5d6j$tjd}+t׈jd7d d7|+jjd9< tju|+jdS tdHsS tt;j |*j   tt;j |)j  tjjj j!j},j j!jjtՠd5d6j$t|,jd}+t׈jd7d d7|,|+jjd9< tju|+|,jdS t tt	rtj. tjdS t	r?tj. tjuj jd}j j!j01|S S )INr   )
has_tritonhas_triton_tma)	Autotuner)JITFunctionc                   @   r   )z*VariableBuilder._wrap.<locals>.JITFunctionNr   r   r   r   r   ro  !  r   ro  c                   @   r   )z(VariableBuilder._wrap.<locals>.AutotunerNr   r   r   r   r   rn  $  r   rn  )create_1d_tma_descriptorcreate_2d_tma_descriptorc                   S      d S r   r   r   r   r   r   rp  .     z7VariableBuilder._wrap.<locals>.create_1d_tma_descriptorc                   S   rr  r   r   r   r   r   r   rq  1  rs  z7VariableBuilder._wrap.<locals>.create_2d_tma_descriptorc                    s(   g | ]}t jt|t j|d qS r%  )r   ra  getattrr7   r   )r  r   rZ  r   r   r)  E  s    
z)VariableBuilder._wrap.<locals>.<listcomp>)	tuple_clsr   c              
      s:   i | ]\}\}}t |t|t  t  |d qS rt  )r   r   r=   r&  r:   r  ikvr   r   r   
<dictcomp>X  s    
z)VariableBuilder._wrap.<locals>.<dictcomp>r%  c                 s       | ]}t |V  qd S r   ro   
is_literalr  ry  r   r   r   r  m      z(VariableBuilder._wrap.<locals>.<genexpr>c                    sP    r
t |}|}nt | }t||}t |}t||}||fS r   )ro   ra  r:   r&  r   r=   )rx  ry  rz  key
source_keysource_valuer  )	all_constr   r   r   build_key_value  s   
z.VariableBuilder._wrap.<locals>.build_key_valuec                 3   s$    | ]\}\}} |||V  qd S r   r   rw  )r  r   r   r    s    
default_factory)r  r   )user_clsr   c                 s   s6    | ]}t |tju r|jd kp|tjjjv V  qdS )r   N)r#  typesBuiltinMethodTyper   r   rJ  _pytreeBUILTIN_TYPESr  xr   r   r   r    s    
c                    s   g | ]	}t  j|qS r   )SourcelessBuilderra  r   r  rz  r   r   r   r)    s    r  r   funcargskeywordsz*functools.partial with non-literal keyworddtypesaved_tensors)r   r  __self__r    apply)r  c                      s(   t tjjjj j jjj	
 fi S r   )r   r   _dynamoexternal_utilsFakeCompiledAutogradEngineexec_final_callbacksr  r   r  r  get_ca_final_callbacks_varr   r   r   r   r   L  s    
z'VariableBuilder._wrap.<locals>.<lambda>TzHDirectly using invoke_subgraph is not supported. Use mark_compile_regionstreamr  r   )	stream_iddevice_indexdevice_typeenter_result)dynamic_dim[^a-zA-Z0-9]+r	  F)r   r   grapharg is not a basic Symbol.rj   )rankr%   )target_valuesr   __script_if_tracing_wrapper__original_fn__wrapped__r^  z"Failed to produce a valid self objc                    s&   g | ]}t j| t j|d qS )r  )r   ra  r=   r   r  rx  rZ  r   r   r)  z  s    r   )r  user_cls_sourcer   )FlattenScriptObjectSourceScriptObjectQualifiedNameSource__obj_flatten__(  torch.utils._tritonrl  rm  triton.runtime.autotunerrn  triton.runtime.jitro  $triton.tools.experimental_descriptorrp  rq  r2  getr#  rk  r  r"   r^   r&   traceable_tensor_subclassesr7  rY   r  r-   SEQUENCE_LENGTHr_   r   r   r   rJ  r  SUPPORTED_NODESDICT_VERSIONr   r  guard_on_key_orderr  r   	enumerateitemsrw   sysmodulesrf  r|   rx   is_matching_cls_hfr\  wrapr  r  dictr:  defaultdictOrderedDictallkeysDICT_CONST_KEYSr7   ry   r  r  track_mutabler   r3  Modulewrap_modulero   r~  rC  	overridesTorchFunctionModer   	frozensetrY  rz   enumEnumrp   r   is_reorderable_logging_functionBUILTIN_MATCHloggingLoggerr   r\   rN   rW   rO   	functoolspartialr&  r  r  rR  r=   r  r,   r.   r'  	DICT_KEYSr   r[   r   rQ  genericrT  asarrayrJ   callabler   rK   r   rL   iinfor   r   can_rewritera  autogradfunctionFunctionMetar   FunctionCtxr  RuntimeErrorr8  r   r   r  
MethodTyperu  r  r   _C_ImperativeEnginer   r  r  r  _exec_final_callbacks_stubr   r)   lookup_callablerI   !has_user_defined_allowed_in_graphcreate_with_sourcenumberwrap_unspecialized_primitiver{   is_matching_objectr   _higher_order_opsinvoke_subgraph
NAME_MATCHr   makecudaStreamContextr  ru   Streamcreate_proxyr  r  r  rc   noderv   device_SDPAParamsr   Eventstore_user_object_weakrefget_user_object_from_idrr   _TensorMetar   
contextlibnullcontextr  getattr_staticrs   r   optim	OptimizerrD   r   r   is_group_member_typer   is_process_groupr~   is_device_meshEQUALS_MATCHr   is_placement_typer   is_placementr  r  r   SymBoolr;   has_hintrequire_hint	shape_env$create_unspecified_symint_and_symbolintr   DYNAMICcreate_unbacked_symintroot_tracercreate_graph_inputrD  subr   metaexprsympySymboltracked_fakesTrackedFaker   r   r   ampautocast_modeautocastrq   
fast_dtype_enabled_cache_enabledr   is_matching_clsr   rX   rV   rh   r  randomRandomr   r   is_supported_random_obj
ModuleTyper(   DummyModuler   TreeSpecrm   r   __func__GetSetDescriptorTyper   MethodWrapperTyper   
issubclassrK  BackwardHookr4  Buffer _unsafe_preserve_version_counterrt   constructorr   r   rA  lenr   r  r  _libraryfake_class_registrytracing_with_realr   wrap_user_definedr   realize_all_typequalified_namer  maybe_to_fake_obj	fake_moder   r   rU   r   )-r   r  rl  rm  rn  ro  rp  rq  type_dispatchid_dispatchr  rV  factory_sourcevarr  func_srcfunc_objr  args_sourcerx  argr  keywords_sourcery  rz  	dt_sourceactual_saved_tensorsr  r.  saved_tensors_sourcestream_source
stream_varstream_proxyevent_proxy
new_source
value_hint
new_symintsym_node_proxysym_expr	attr_nameself_objr  r  proxyfake_script_objr   )r  r  r   r  r   r    s  






	


	
















	

	









	
	





	










zVariableBuilder._wrapc                 C   s>   |  tj t|| jd}tt|s|S | jj	j
||S r[  )r  r-   r\  r   r   r5   "cls_supports_mutation_side_effectsr#  r   r  r  r  r   r  rV  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  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skJ  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< t23|| jd
}t|tt4j5fr jjj67||S |S )Nr  c                 s   r|  r   r}  r  itemr   r   r   r    r  z0VariableBuilder.wrap_listlike.<locals>.<genexpr>c                 S      g | ]}t |qS r   ro   ra  rP  r   r   r   r)    r*  z1VariableBuilder.wrap_listlike.<locals>.<listcomp>c                    s(   g | ]\}}t j|t  |d qS rt  )r   ra  r=   r&  )r  rx  rQ  r   r   r   r)    s    r   r  r	  r%  T	steal_arg)
target_clsr   rK  example_valuesubclass_typer   Fbaseindexindex_is_slicetensor_dictr+  rj   )r   r   r   r  )8r&   specialize_intr#  r   r<  r  r-   CONSTANT_MATCHro   ra  r  r^   r8  r  r   r,  is_unspecialized_nn_moduler   r  r   r  local_scoper  r   rB   
local_namerS   r9  r  r  rD  r  r   r  r  wrap_fx_proxy_clsr   r  r=   input_source_to_varrM   rK  r  r  TENSOR_MATCHr$   rR  r'  r.   r   r   cls_for_instancer:  r;  r  r  )r   r  r  maybe_gmr   tensor_list_proxylist_variabler.  rx  tensor_variablesource_ir(  r  rV  r   r   r   r=    sz   
	
	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   )r  r   rH   r&  rf   r  rZ  r   r   r)  8      z7VariableBuilder.wrap_tuple_iterator.<locals>.<listcomp>r%  )r  r-   TUPLE_ITERATOR_LENrA  rg   r   r   r   r  r  r  )r   r  r  rV  r   rZ  r   r>  6  s   
z#VariableBuilder.wrap_tuple_iteratorc                 C   s@   |  tj dd t|D }t|| jd}| jjj	
||S )Nc                 S   rR  r   rS  r  r   r   r   r)  E  r*  z7VariableBuilder.wrap_range_iterator.<locals>.<listcomp>r%  )r  r-   RANGE_ITERATOR_MATCHcopydeepcopyr   r   r   r  r  r  )r   r  r  rV  r   r   r   r?  A  s   z#VariableBuilder.wrap_range_iteratorc                    sF    fdddD }  tj ttrt| jdS t| jdS )Nc                    rk  r   )r  r   r7   r&  ru  r  rZ  r   r   r)  J  rl  z4VariableBuilder.wrap_slice_range.<locals>.<listcomp>)startstopstepr%  )r  r-   r\  r   r@  r   r   r   )r   r  r  r   rZ  r   rB  I  s   
z VariableBuilder.wrap_slice_ranger(  c                 C   sh   ddl m} td| j t| |||d || jjj	v r2| jjj	| }|j
|jjjd d< d S d S )Nr%   )mark_static_addressz Marking static input %s, id: %s)r(  r\  _dynamo_static_input_type)
decoratorsrt  static_inputs_logdebugr   r   r  r   r  r  rv  rK  r  r  )r   r  r(  rt  r7  r   r   r   mark_static_inputV  s   z!VariableBuilder.mark_static_inputc                 C   sH  ddl m} t|jdkrtdt|  t||r<t|j	ddr)t
| jdS | tj t| jd| _| |jS t|tjjtjjtjjfrQtjsQtd	 t|d
drt|ddsaJ d| tj t||  d}tt|sx|S | j j!j"#||S t$%|| j j&rt|tj'j(j)j*r|+ }t,| j| _| tj tj-jj.rt/ }|0 D ]	}| j1||d q|2 D ]	}| j1||d q|r|| j j!j3| j4< |j56dst|j7ddrt8|| jd}nt9|| jd}tt|s|S | j j!j"#||S t:|j7tjj;j<j=r| tj t9||  dS | j j!j>|| j4|  dS )Nr%   )OptimizedModuler   zuninitialized nn.Module: _torchdynamo_disableFr%  	_orig_modz5TorchDynamo purposely graph breaks on RNN, GRU, LSTMs_is_fsdp_managed_module_fsdp_use_orig_paramsz3Dynamo only supports FSDP with use_orig_params=Trueru  )z	torch.nn.z	torch.ao._dynamo_marked_static)?
eval_framer{  r*  __dict__r,   rk   r^   r  r  forwardr   r   r  r-   r\  r7   r  r}  r   r   r3  RNNGRULSTMr&   	allow_rnnru  r   r&  r5   rM  r#  r   r  r  r  r'   is_dynamic_nn_moduleexportfxexperimentalproxy_tensor
_AttrProxyget_baser6   r  inline_inbuilt_nn_modulesrZ   
parametersrz  buffers
nn_modulesr   r   r
  r   r   r   r%  paralleldistributedDistributedDataParallelregister_attr_or_module)r   r  r{  rV  freezingpbr   r   r   r  f  sp   

zVariableBuilder.wrap_modulec                 C   s   t jsEt|tu rEt js@| j 	 r2| j 
 s2| j  s2t| js2tds@||  v r@| tj tj|| jdS | |S t jsSt|tu rS| |S | tj tj|| jd}t|ttfrq| jjj||S |S )Nz5pytorch/dynamo:enable_unspecialize_zero_one_plain_intr  )r&   r]  r#  r	  r   r  #force_unspec_int_unbacked_size_liker   r,  is_localis_specialized_nn_module"is_unspecialized_builtin_nn_moduler@   r   r$  r  r-   r^  ro   ra  wrap_symintspecialize_floatfloatwrap_symfloatr   r9  setr   r  r  r  rN  r   r   r   rC    s2   


zVariableBuilder.wrap_literalc                 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   r   r3  r+   rZ  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r1|s1t|tj	j
s'|r1|  r1| j|t d d}|o9tj p9t }|  sB|rX|  sX| | | jjj|| j|dS t|rq| | | jjj|tdd| j|dS t|tjv r}t|}nt|tjtj	j
tjjjtjjjfv st|sJ t|d }|| jjj v }|r| jjj | S t|dkr| !t"j# | | i }t|tjv rt$| j|| j%|d< | !t"j& t|tjr|j'rt|tj(j)j*j+st,d t|tjrt-|r| jj.rtj/st,d	 t0|rt1|d ur|j2t1|j2krt,d
 t3|| jd|d}| jjj4j5tdd| jt|||d}	t6| j|	| t7d| j|	|||d|}
|8 rbt3|j9| jt:|ddd t"j;}t|t<rst=|rst"j>}| !t?j@|t|tAr|ntB|d t|r| !t"jC | !t"j& tDtE|Ft"jG |H \}}|D ]}tI||}t:| j%|}tJKtL| j|| q|
| jjj |< d|	jMjNvsJ tO||	jMjNd< |
jPjMjNd }tQ|| jjRurtSdtT||d|}||	jMjNd< |
S )Nru  Tr%  r  r	  guardedtorch_function_fn3torch.compile does not support strided NestedTensorz-torch.compile does not support sparse TensorszInconsistent dtype between tensor and its gradient. This can happen in FSDP and crashes meta tensor creation. This is potentially a workaround. Fixing it correctly requires some design around FSDP + torch.compile.r   r   r   )r   rK  rV  rW  r   _base)r   r   r   rO  r\  rV  z(Wrapped Tensor must be this graph's fakeFr  r   )Ur&  r   r  r  rT   r&   r  r   r   r3  r4  r,  r_  rz  rZ   r  is_fsdp_moduler  r  r   r?   rD  r  r#  r  r   r   r   r   r5  r6  r"   rc  r  r-   rY  r   r   r\  	is_nestednested	_internalnested_tensorNestedTensorr,   r   r  capture_sparse_computer   r   r  wrap_to_fake_tensor_and_recordr  r  cache_real_value_when_exportwrap_fx_proxy_is_viewr  r7   rd  r>   rA   NOT_NONE_MATCHr  r  rC   r$   TENSOR_SUBCLASS_METADATA_MATCHr.   rG   r'  r  __tensor_flatten__ru  r   r/  r  r  r  rM   rK  r   r3  r+   r   )r   r  r   is_static_inputmake_graph_attributerW  is_duplicate_tensoroptionsrV  tensor_proxyri  
guard_typeattrsr	  attrinner_valueinner_sourcefake_tensor_valuer  r   r   r   r7    s  













	

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 t 4 z||}|rQddlm} ||}W n tyj } ztt| W Y d }~nd }~ww W d    n1 suw   Y  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|
}|| jjj#|< |j$j%j&d }t'||d|d|d}||	j%j&d< |S )Nr   )_utilT)clone_preserve_stridesFr  r  r	  r%  r   rU  r   rK  rV  rV  r   r   r   r   r  r   )(rQ  r   rS  rC   r&  torch._numpyr  flags	writeable
ValueErrorrY  nditerr   temp_restore_stack_try_convert_to_tensortorch._prims_commonr  NotImplementedErrorr,   strr   r/  r  r   r  r  r  r  rD  r  r   r#  r  rb  r   rc  rK  r  r  r   )r   r  r   r  readonlytensor_valuer  erV  rK  r  numpy_ndarray_variabler  r   r   r   rT    sv   



z"VariableBuilder.wrap_numpy_ndarrayc                 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  n{t|  stjjjrQ| tj tj|| jdS | j }t| j|t|| j  d}tj rs|j!t"u rst# }ntj$szt%j&}n| tj tj|dS |j'|| j|d}| jjjt|| jd  nt|  sJ | tj tj|| jdS t(|  t)rJ t*|  +tj, d|  i}| jjj-j.t/0dd| jt |||  d}|j1j2}	t(|	t3j4sJ |	 d	|| jjj-j5|	< t6||fi |}
|
| jjj| j< t|  sC| jj7r,t(|  t8s,t9d
| d|   |
j:j1j;d }t<|  |dd d|d|j1j;d< |
S )Nr  r_  rO  )r   r  r   r  r	  r%  r  =Dynamo attempts to add additional input during export: value=	, source=rV  Fr  r  )=r#  r	  r   r   r  unspec_variable_mapr  r   r  r  r  r   r  rR  r  r   r?   r&  r   r  r&   r]  r  r-   r^  ro   ra  r4   r2   make_scalarr,  r_  automatic_dynamic_shapesscalarr0   $get_automatic_dynamic_shapes_mark_asassume_static_by_defaultr   r
  r  r   rE   r.   r'  r\  r  r  rD  r  r  r  r  r  bound_symbolsr   r  rB   AssertionErrorrK  r  r   )r   r  r  wrapped_valuer   frame_state_entryr  r  rK  rH  
unspec_varrV  r   r   r   r    s   







	zVariableBuilder.wrap_symintc                 C   s  ddl m} | j| jjjv r| jjj| j S t| j| j t	|| j
  d}tjjjsUt|  sUt|sUt|sUtjjjjsUtddsU|jtusU|| jrc| tj tj || jdS tj!|tj"d}tj#j$%|r| tj tj || jdS t&|  t'rJ t(|  )tj* t+|  }||d}t,|| jd|d	}| jjj-j.t/0d
d| jt1|||d}t2| j|| t3t4f| j||d|}	t&|	t4sJ |	| jjj| j< | jj5rt&|  t6st7d| d|   d }
|	j8j9j:d }t;|sJ |}
|
j<| jj<u sJ d|
j< dt=|  |d|
d|d|j9j:d< t>| j| jjj?ddgt@|	gi R  }| jjjABtC|jD| jd  |S )Nr%   )TensorifyStater  z.pytorch/compiler:unspecialize_float_killswitchFr  )r  )r   	raw_valuer  r  r	  r%  r   rK  rV  r  r  rV  fake mode (^) from fake tensor metadata doesn't match mode({self.tx.fake_mode}) from InstructionTranslatorTr  r  call_methodrQ  )Esymbolic_convertr  r   r   r  r  r4   r   r2   r  r,  r_  r   r  r&   r  r?   r&  mathisnanisinf	_inductortriton
cudagraphsr   r  r0   should_specializer  r-   r^  ro   ra  tensorfloat64r  
_functorchis_gradtrackingtensorr   rE   r.   r'  r\  r<   r  r  r  rD  r  r#  r  rb  r   r  rB   r  rK  r  r  r   r3  r   r  r  ra   r  rR  r  sym_num)r   r  r  r  r  r   r  rV  rK  r  r  r   r   r   r   r  s  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|}|| jjj| j < t|  s| jjrt|  tstd	| d
|   d }t|tr|j}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  r	  r%  r  r  r  rV  r  r  Tr  r  )#r   r   r  r  r   r  r   r&  rE   r.   r'  r-   r\  updater  r  r  rD  r  r#  r  rb  r   r?   r  rB   r  ro   r  rK  r  r  r   r3  r   )r   r  r  r  rV  rK  r  r  r   r   r   r    sd   


z,VariableBuilder.wrap_unspecialized_primitive)=r   r   r   __doc__rF   r   r"  r  staticmethodr  	lru_cacher$  r&  r  classmethodr2  r/  rD  rE  rF  rG  rH  rI  rM  rP  r   r	  r   r   rm   rk  r  r.  r   r8  r9  r`   r   r=  re   r>  rb   r?  r@  rA  rB  r   r   r   rz  r3  r  r  rC  r  r7  rT  r  r  r  r  r   r   r   r   r  g  sd    

%"     BYb# RHh r  c                 C   s~   t | tr	| j}nt | tr| j}ntd|   g }t|D ]}d }| jr1t	t
| jd|j}|t||d q t|S )Nz)Dataclass fields handling fails for type __dataclass_fields__r%  )r   r   r  rx   r  r,   rh  ri  r   r=   r7   r   rR  r   )objr  r  fieldr   r   r   r   re  :  s   

re  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   r  rP   )r  r3  r   r   r   _clone_inputL  s   r  r   c                 K   sL   | |||d|}|d u rt ddti|S t ddti|}||  |S )N)r   rK  rV  rW  rU  r   )rb  r   r   install_global)r   rK  rV  rW  r  kwargsrV  r   r   r   r  ^  s   
r  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   r  DisableTorchFunctionSubclassr  r3  tracerreal_value_cacher  r  r   r   r   r  p  s   "r  c                 K   sV   |d u rt | ||||fi |S t|tjr"t| ||||fi |S t|||||| S r   )_wrap_fx_proxyr   r   r   _wrap_fx_preexisting_tensorhandle_traced_output)rU  r   rK  rV  rW  r  r   r   r   rb    s   

rb  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%   InstructionTranslatorBasez1_wrap_fx_preexisting_tensor expected tensor, got r.  placeholderrV  zplaceholder z* doesn't have 'example_value' in node.metar   r   r   r  zN`tensor` needs to be a `FakeTensor`wrapped by this instance of Dynamo. Found: )r  r  r   r   r   r#  r  r.  r  r  opr  r  rJ  +_disable_saved_tensors_hooks_during_tracingr   r3  r  r  r  r  r  r  r  r   r   r  r  r+   r  )rU  r   rK  r  rW  r  r  r   r   r   r   r    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  r.  rV  T)allow_non_graph_fake)r  r  r   r  r.  r  r  r  r   r  rJ  r  rR   r  )rU  r   rK  rV  rW  r  r  r   r   r   r    s   r  c                 C   s~  dd l }dd l}dd l}t| |jrkt| |jj}t| |jj}t| |j	} t
|j|  |jj| | || }	t| |jjjr^| j	|j	u r^|rK|n|j}
|rT|jjn|rZ|jjn|
|	d< ||	 ||fi |S t|jjdr|jjjdkrt|jjj|jjs|jj|jjkrt|jjS |jj|jjks|jj|jjk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 ]Q\}}|d u r|(t)j*d#i | q|j+j,d	t-j.||fi d
}d|v rt| t&sJ |d }|/ }t0||dd|d< n|}|(t1d$||||d| qt| |j"r9t$||fi |S t!| t%rGt2|fi |S t!| t&t3frWt4|fi |S | j5j6dksrt| dsrJ d| j5j6 dt7|  t8|| j5fi |S | d u s|jj|j9u rt)j*d#i |S t| |j:|j;|j<fr|jj| | t
|j|  t=|| fi |S t>?|jjrt@|jj|jAs|jjdd tB D v rt
|j|  tC|| | jDfi |S t>?|jjrt@|jj|jEs|jjdd tB D v rt
|j|  tF|| fi |S |jjdkr,|jjGdkr,t
|j|  t)| fi |S | d urUt| |jErU|jjdkrU|jjGdkrUt
|j|  tF|| fi |S t| tHr|jj|jItJt-j.|jKjL|jMt-jN|jOjPjQtJ|jRdtStJ|jRdtS|jTf
v s|jjGdkr|jjdv rt
|j|  t)j*| fi |S t| |jUjjVrddlWmX} t
|j|  ||fi |S t| tYr|jj|jjZ|jUjj[|jUjj\|jUjj]dgt&t^_  v rt
|j|  t)j*| fi |S t| tHt`tYfr|jjtau rt
|j|  t)j*| fi |S t| t`s|jjdv r't
|j|  t)j*| fi |S tbdtc|  d |jjG d |jj  d!d" d S )%Nr   
class_typer   	set_statec                 s   s    | ]}t |tV  qd S r   )r   r	  r  r   r   r   r  C	  s    

z'handle_traced_output.<locals>.<genexpr>c                 S   rR  r   rS  r  r   r   r   r)  F	  r*  z(handle_traced_output.<locals>.<listcomp>r  )kindtargetr  r   r   FrX  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r  r	  device_interfacer   r   r   r)  	      c                 S   r  r   )r  r  r   r   r   r)  	  r  queryr  record_eventget_rankget_world_size)
bit_lengthrj   r   
is_integer)hex	__round__ztorch.* op returned non-Tensor  unsupported_operator)	case_namer   r   )dtorch._functorch.vmaptorch._subclasses.fake_tensortorch._utilsr   r   r3  r4  r'  r  r3  rc   r  r  current_tracertrack_unbacked_symbols
specializer   r   r   r  r   r  r   r  r  	Generatorr  set_rng_stater   _DisableFuncTorchr  _is_in_bad_forkr   r^   r<  r  r   r8  r9  r  rR  ro   ra  r  r  operatorgetitemro  r=   rb  r   r!   r   r   r   r#  r   manual_seedr   SymFloatr  r   r  r  r%  r  r*   rv   r  r  rr   r
  r	  sym_intru  _utils_element_sizeseedmodr  vmap_validate_and_get_batch_sizer  r   _constrain_as_sizebackends
SDPAParamssdpar   r    _are_functorch_transforms_activeis_flash_attention_availablecan_use_flash_attentioncan_use_efficient_attentionr   r  r  r   r,   rk   )rV  r   rK  r  rW  rU  r   is_parameter	is_bufferspecialized_propstensor_typesizesunpackedrx  valproxy_ir   	options_ir   r   r   r   r  	  sH  




	






r  c                   C   s@   t jdkrtjS t jdkrtjS t jdkrtjS tdt j )Ndynamicunbacked	obliviousz+invalid automatic_dynamic_shapes_mark_as = )r&    automatic_dynamic_shapes_mark_asr   r
  SIZE_LIKE_UNBACKEDOBLIVIOUS_SIZEr  r   r   r   r   r  	  s   



r  c                   @   sR   e Zd ZU eeef ed< eed< ee	 ed< de
fddZdedefdd	Zd
S )r  faker   symbolic_contextr   c                 C   s   t | j| j fS r   )hashrN  r   r   r   r   r   r   __hash__	  r   zTrackedFake.__hash__r   c                 C   s.   t |tr| j|ju o| j |j kS dS )NF)r   r  rN  r   r   r   r   r   r   r   	  s   
 zTrackedFake.__eq__N)r   r   r   r   r   r   r   rF   r	   r   r	  rQ  objectr   r   r   r   r   r   r  	  s   
 r  Fc           .   
      s  | j rt| tjjjjstd | }|j	j
j| d }|r"|jnd }d }|  r7t|d}	t| j||	|}t| r{|s{t| |||dd}
i }t| | \}}|D ]}t| |}t||}t||||||< qSt|
j|
j|
j|
j||
j|
j|dS |rt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%| sd| & |  }d g| t#dd
 D rcfddt'|D }t(fddt'|D t)d}|D ]'\} d u r8 |v r8|  < t*|   < qt#dd
 D rZt+fddt'|D t)d\}|< t#dd
 D sng t,||t-.t/t/}t0| }i   fdd}ddl1m2} |j	j3r|j	j3D ]}t||rq|j4|kr||j|j5|j qg }g }g }g }t'|  D ]6t| dt6 v }t| dt6 v }t| dt6 v } t| dt6 v }!|rt78d| t9g|   }"t:|"< |t-j;|"dO }t<j=o|>}#t<j=o|?}$|#p|$}% }|d u rd }&d }'|rft<j@sfd }'tA| dr`fdd| jBD C }(|(j+d u rM|(jDd u rMtEdd }&nJdd!l!mF}) |)tG|(j+|(jDd"dd#}&n7tEdd }&n1|!s}|%r}|#rttEdd }&|$r|tEdd }'nd }&d }'n|\}&}*d }'| d$ d%}+|*|j	jHjI|+< |J|& |J|' |rtjK},n0|&d us|s| s| $  r|%rtL },ntjM},n|st<jNs|!rtj},ntjO},|'d urtjM}-ntj }-|J|, |J|- qt|||||||dS )&Nr  r  T)
outer_only)dynamic_sizesdynamic_stridesconstraint_sizesconstraint_stridesview_base_contexttensor_source#shape_env_to_source_to_symbol_cacheinner_contexts)rT  rU  rV  rW  rX  rY  rZ  r   is_nested_intc                 3   s$    | ]}t |to | V  qd S r   )r   r   r  sr\  r   r   r  <
  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
  STATICr^  r   r   r   r)  >
  s    z&_automatic_dynamic.<locals>.<listcomp>c                 s       | ]}|d u V  qd S r   r   r  r   r   r   r  S
      c                    s:   i | ]}| d ur| dkr | |  t |qS )Nr   )r3   r  )ex_size	ex_stridestrider   r   r{  T
  s
    z&_automatic_dynamic.<locals>.<dictcomp>c                    $   g | ]}| d u r | |fqS r   r   r  rd  re  r   r   r)  Z
     $ )r  c                 s   ra  r   r   r  r   r   r   r  b
  rb  c                    rf  r   r   r  rg  r   r   r)  e
  rh  c                    s\   |  v r&ddl m}  |  \}}||j|j@ dd}|p|}||f | < d S ||f | < d S )Nr   StrictMinMaxConstraintFvr	warn_only)%torch.fx.experimental.symbolic_shapesrj  rl  )dimconstraint_ranger   rj  old_constraint_rangeold_namenew_constraint_rangenew_name)dim2constraintr   r   update_dim2constraintu
  s   
z1_automatic_dynamic.<locals>.update_dim2constraint)_RelaxedConstraint_dynamo_unbacked_indices_dynamo_dynamic_indices_dynamo_weak_dynamic_indices_dynamo_static_indicesz#automatic dynamic %s marked dynamic)size_dynamo_dynamic_rangec                    s   g | ]	}|j  kr|qS r   )ro  )r  dr)rx  r   r   r)  
  s    F)rm  ri  )lowerupperrk  z.size()[])Pr  r   r   r  r  r  r  r,   r   r  tracing_contexttensor_to_contextr  rZ  r  r7   _automatic_dynamicr  r"   r#  r  ru  r   rT  rU  rV  rW  rY  r   r   r`  ro  INFER_STRIDErn  r]  anyr|  r   re  rA  sortedr   r3   minr4   r2   make_tensorr8  r  torch.export.dynamic_shapesrw  export_constraintst_idrp  r  logry  r1   r0   	make_sizer&   r  is_size_dynamicis_stride_dynamicallow_ignore_mark_dynamicr   r}  popmaxr   rj  r#   r  source_name_to_debug_namerR  rL  r  r
  r  DUCK).r  r   r   static_shapesrS  r   prior_policyrZ  rX  base_sourceouter_contextr[  r  r	  r  inner_tensorr  ro  
candidatesval_listrE  r  r  rv  rw  
constraintrT  rU  rV  rW  marked_unbackedmarked_dynamicmarked_weak_dynamicmarked_static	mark_sizeautomatic_dynamic_sizeautomatic_dynamic_strideautomatic_dynamicconstraint_sizeconstraint_stride	dim_rangerj  name_dim_namedynamic_sizedynamic_strider   )ru  rc  rd  rx  r]  re  r   r  	  sl  



















r  )parent_contextr   r   c                   s  t  tjtjjtfv st tjst rd usJ t |d\}}|s/t	 |ntt
s6J j}|j| td t jt   t fdd}d urvt|trv|j }	d urv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& st'sjjt| jj(t)   |S  S )	N)rY  zwrap_to_fake %s %s %s %sc                      s   j j dS )N)r   rO  )r3  from_tensorr   r  r   rO  r   r   r   r   -  s
    z0wrap_to_fake_tensor_and_record.<locals>.<lambda>)r   r   r  )rj   )r|  re  values_sizevalues_stride)r|  re  )*r#  r   r   r3  r4  r   r   r"   rd   r  r7   r  r[  r  ry  r   r8  shaperi   	item_memor  r  rR  r  r8   r  ru  r  r  r  r   	is_sparse_valuesvaluesr|  ndimre  input_source_to_sizes_stridesr  r?   tracked_fakes_id_to_sourcer  )r  r   r   r   r  r  reasoninner_context_namefake_esym_valr  r	  r  
fake_innerinnerr  r  r   r  r   r    s   

	






r  c                   @   sH   e Zd ZdZdddZedddefdd	Zed
d Ze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   y     zSourcelessBuilder.__init__r   r   c                 C   s  t |}tj|}|r|| |S t|tr|S t|tjr"t|S t	
|r,t	|S t|rFt|d urFt|r?d| j_t||S t|rQt||S t|tjr[t|S t|t tjfrgt|S t|tjrqt|S t|tjjj r}t!|S t|tj"j#j$tj"j#j%frt|S t&'|rt&|S t()|rt(|S t|t*j+rt,|S t|tj-j.j/j0rt	t1|S t2d|j3 d|j4  d S )NTz&Unexpected type in sourceless builder .)5r#  r  _type_handlersr  r   rm   rh  _HAS_DEFAULT_FACTORY_CLASSr   ro   r~  ra  r  r)   r  rI   r  r  rV   r  r  r  rp   abcABCMetar   r  r$  r   r   r  graph_moduleGraphModuler   rJ  r  r!  LeafSpecr   r  r~   r   rD  rE  r   r  	variableslazyLazySymNodeFormatStringr  r,   r   r   )r   r  
value_typefast_handlerr   r   r   ra  |  sN   





zSourcelessBuilder.createc                 C   s   t | sJ t j| dS )NrO  )ro   r~  ra  rO  r   r   r   wrap_constant_literal  s   z'SourcelessBuilder.wrap_constant_literalc                     s  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j< | t | t	j
< | t | t< | t | t< 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d}tjD ]}|| |< q}| S )Nc                 S      t |S r   )ro   r   r  r   r   r   r         z6SourcelessBuilder.make_type_handlers.<locals>.<lambda>c                       t  fdd|D t dS )Nc                       g | ]} |qS r   r   r  ra  r   r   r   r)    r*  JSourcelessBuilder.make_type_handlers.<locals>.<lambda>.<locals>.<listcomp>mutation_type)r}   rl   r  ra  r   r   r         c                    s(   t  fdd| D t|t dS )Nc                    s"   i | ]\}} | |qS r   r   )r  ry  rz  r  r   r   r{    s   " zJSourcelessBuilder.make_type_handlers.<locals>.<lambda>.<locals>.<dictcomp>r  )rw   r  r#  rl   r  r  r  r   r     s
    c                    r  )Nc                    r  r   r   r  r  r   r   r)    r*  r  r  )r   rl   r  r  r  r   r     r  c                       t  fdd|D S )Nc                    r  r   r   r  r  r   r   r)    r*  r  )r   r  r  r  r   r         c                    r  )Nc                    r  r   r   r  r  r   r   r)    r*  r  )r   r  r  r  r   r     r  c                 S   rc  r   )r   r  r   r   r   r     rd  c                 S   r  r   )r   r  r   r   r   r     r  c                 S      t |t dS Nr  r   rl   r  r   r   r   r         c                 S   r  r  r  r  r   r   r   r     r  c                 S   r  r  r  r  r   r   r   r     r  r   r   c                 S   s   |S r   r   r  r   r   r   passthrough  rs  z9SourcelessBuilder.make_type_handlers.<locals>.passthrough)r   r   )r  ra  rQ   r  r  r9  r8  r   r<  r:  r  r    r!   r  r  r  r  distributionsconstraints_Real	_Interval
Constraintrn   all_subclasses)handlersr   r  r1  r   r  r   make_type_handlers  s<   


z$SourcelessBuilder.make_type_handlersr  )
r   r   r   r  r   r  rm   ra  r  r  r   r   r   r   r  l  s    
+
r  c                   @   s0   e Zd ZdZd
ddZedd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__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  )r#  r%  r   r   rl   r   r   r3  r  r   r   )r   r  r  r   r   r   ra    s   
z)SourcelessUserDefinedObjectBuilder.creater  )r   r   r   r  r   r  rm   ra  r   r   r   r   r    s
    
r  )NNr   )F((  r  r:  r  ro  rh  r  r  r  	itertoolsr  r  r,  r  rD  r  r  r   rG  typingr   r   r   r   r   r   r   r	   r
   r   r   r  r   r   torch._guardsr   r   !torch._higher_order_ops.torchbindr   
torch._opsr   r#  r   r   r   torch._subclasses.meta_utilsr   r   torch._utils_internalr   %torch.fx.experimental._backward_stater   rn  r   r   r   r   r   r   r   torch.fx.immutable_collectionsr    r!   torch.utils._python_dispatchr"   torch.utils._sympy.value_rangesr#   torch.utils.weakr$   r  r&   r'   r(   r)   r  r*   excr+   r,   r.  r-   r.   r/   pgor0   r1   r2   r3   r4   r  r5   r   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rJ  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   rY  rk   rl   rm   rn   constantro   rp   ctx_managerrq   rr   rs   rt   ru   rv   dictsrw   rx   ry   rz   r{   r|   r}   r  r~   r   r   r   r   	functionsr   r   r   r   r   r   r   higher_order_opsr   iterr   r  r   listsr   r   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  r   r   r   r   r   r   r   r   torch_functionr   r   r   r   user_definedr   r   r   r   r   r   numpyrQ  ModuleNotFoundErrortorch._dynamo.symbolic_convertr   	getLoggerr   r  _logginggetArtifactLoggerrx  DimListr   r   	dataclassr   r   r  varsr  r  r	  r   r  r  r  re  r  r  r  rb  r  r  r  r  r  r  r   r  r  r  r  r  r   r   r   r   <module>   s  
4$	T| $	$	0d  


<
             
`

8@
 
J  dv