o
    "i                    @   s>  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 d dlmZ zd dlZW n ey]   dZY nw d dlZd dlmZ d dlmZmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$ d d	l%m&Z&m'Z'm(Z( d d
l)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZD ddlEmFZFmGZGmHZH ddlImJZJ ddlKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z] ddl?m^Z^m_Z_m`Z`maZa ddlbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZv ddlwmxZxmyZymzZzm{Z{ ddl|m}Z}m~Z~ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZ dd lmZ dd!lmZ dd"lmZ dd#lmZmZmZmZmZmZmZmZmZ dd$lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd%lmZmZ dd&lmZ dd'lmZ dd(lmZ dd)lmZmZmZmZmZ dd*lmZmZ dd+lmZmZ dd,lmZmZmZmZ ee֡ZeZG d-d. d.ZejG d/d0 d0ZG d1d2 d2eۃZejG d3d4 d4ZG d5d6 d6Zd7d8 Z	dJd9ezfd:d;Z	dJd<d=ZejG d>d? d?Z	@dKd9e3fdAdBZddCdDee\ dEefdFdGZG dHdI dIZe e_dS )L    N)AnyList
NamedTupleOptionalUnion)ValueRanges)SymInt)GuardSourceTracingContext)call_torchbind)HigherOrderOperator)
_EventBase_StreamBase)
FakeTensoris_fakemaybe_get_fake_mode)is_sparse_any)BackwardState)_constrain_range_for_size
DimDynamicRelaxedUnspecConstraintStatefulSymbolicContextSubclassSymbolicContextSymbolicContext)immutable_dictimmutable_list)is_traceable_wrapper_subclass)TensorWeakRef   )configmutation_guardreplay_recordtrace_rules) get_registered_device_interfaces)InternalTorchDynamoErrorunimplemented)GuardBuilderinstall_guardmake_dupe_guard)SideEffects)
AttrSourceCallMethodItemSourceConstantSourceConstDictKeySourceConvertIntSourceFloatTensorSourceGetItemSource
GradSourceis_cell_contentsis_constant_sourceis_from_defaultsis_from_optimizer_sourceLocalSourceNumpyTensorSourceOptimizerSourceRandomValueSourceSourceTupleIteratorGetItemSource)is_callable_allowedis_numpyis_numpy_dtypeis_numpy_type_info)build_checkpoint_variableclone_inputcommon_constant_typesget_fake_valueget_locals_to_stealget_static_address_typeis_function_or_wrapperis_namedtuple	is_typingis_utils_checkpointistypeodict_valuesproxy_args_kwargs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   )MutableLocaltypestrVariableTrackerVariableTrackerMeta)ConstantVariableEnumVariable)AutocastModeVariableEventVariableNullContextVariablePreserveVersionContextVariableStreamContextVariableStreamVariable)ConstDictVariableDataClassVariableDefaultDictVariableHFPretrainedConfigVariablePythonSysModulesVariableSetVariable)DeviceMeshVariablePlacementClassVariablePlacementVariableProcessGroupVariableWorldMetaClassVariable)!CollectiveFunctionRewriteVariableFunctoolsPartialVariableTritonKernelVariableUserMethodVariable) TorchHigherOrderOperatorVariable)ItertoolsVariable)LazyVariableTracker)	BaseListVariableListVariableNamedTupleVariableRangeVariableRestrictedListSubclassVariableSizeVariableSliceVariableTupleIteratorVariableTupleVariable)AutogradFunctionContextVariableAutogradFunctionVariableComptimeVariableDebuggingVariableDelayGraphBreakVariableGetAttrVariableGetSetDescriptorVariableInspectSignatureVariableLambdaVariableLoggingLoggerVariableMethodWrapperVariableNumpyDTypeVariableNumpyTypeInfoVariableNumpyVariablePythonModuleVariableRegexPatternVariableSavedTensorBoxTorchVersionVariableTypingVariable)FSDPManagedNNModuleVariableUnspecializedNNModuleVariable)OptimizerVariable)TorchScriptObjectVariableSDPAParamsVariable)NumpyNdarrayVariableSymNodeVariableTensorSubclassVariableTensorVariableUnspecializedPythonVariable)TorchCtxManagerClassVariableTorchInGraphFunctionVariable)build_torch_function_fnTensorWithTFOverrideVariable)KeyedJaggedTensorVariableSourcelessGraphModuleVariableUserDefinedClassVariableUserDefinedObjectVariablec                   @      e Zd ZdS )_missingN__name__
__module____qualname__ r   r   ]/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/_dynamo/variables/builder.pyr          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__   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__     zGraphArg.__eq__)r   r   r   r:   __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 fddZdd Z  ZS )BackwardStateGraphArgc                    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__c                 C   sD   |j jjsJ |tjd |dd |  ||j jj d S )Nr   r   T)	txoutputbackward_state_varload_import_fromr   r   call_functiondup_topstorer   r   r   r   r     s
   z!BackwardStateGraphArg.reconstruct)r   r   r   r   r   __classcell__r   r   r   r   r     s    	r   c                   @   s*   e Zd ZU ee ed< eee  ed< dS )FrameStateSizeEntryscalarsizeN)r   r   r   r   intr   r   r   r   r   r   r     s   
 r   c                       sN  e Zd ZdZdef fddZdd Zdd Zee	
d	d
d Zdd Zdd Zdd Zee	
d	dd ZdejfddZee	
d	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e e!f fd!d"Z"de#j$j%fd#d$Z&d%d& Z'de#j(fd'd(Z)de#j(fd)d*Z*d+d, Z+d-d. Z,d/d0 Z-d1d2 Z.  Z/S )3VariableBuilderz3Wrap a python value in a VariableTracker() instancer   c                    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      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|_| 	|rC| 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_inputstrack_object_existingadd)r   valueside_effect_result	dup_guard	cached_vtvtr   r   r   __call__.  s   


zVariableBuilder.__call__c                 C   s   t |ttttfv rdS dS )NTF)typer   r   r   r   )r   r   r   r   r   r   B  s   z)VariableBuilder._can_lift_attrs_to_inputsNc                   C   s   ddhS )Nr   rT   r   r   r   r   r   _common_constantsL  s   z!VariableBuilder._common_constantsc                 C   s   | j S r   r   r   r   r   r   
get_sourceZ  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).0guardr   r   r   
<listcomp>d      z2VariableBuilder.install_guards.<locals>.<listcomp>skiprT   )r   r   r,   guard_sourcer	   CONSTANTr'   )r   guardsr   r   r   r   ]  s   zVariableBuilder.install_guardsc                 C   s(   t |tsJ | j|_| jjj||S r   )r   rW   r   r   r   r   track_mutable)r   r   varr   r   r   set_source_and_track_mutableg  s   z,VariableBuilder.set_source_and_track_mutablec                 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tf| jft	t| jftj| jfg}tjr@tr@|tj| jf i }|D ]\}}t |t	rO|n|fD ]}||vsZJ |||< qRqD|S r   )!r   r   nn	Parameterr   r   functional_tensorFunctionalTensorwrap_tensortuplelistrK   collectionsdequeSizewrap_listlikerO   wrap_tuple_iteratorslicerangewrap_slice_rangerB   wrap_literalrePatternwrap_regex_patternr   trace_numpynpappendndarraywrap_numpy_ndarrayr   )clsentriesresulttsfntr   r   r   _type_dispatchl  s0   



zVariableBuilder._type_dispatchr   c                 C   s   |  tj t|S r   )r   r&   ID_MATCHr   r   r   r   r   r   r    s   z"VariableBuilder.wrap_regex_patternc                 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_MATCHr  r   r   r   <lambda>  s    
z.VariableBuilder._id_dispatch.<locals>.<lambda>c                 S      t  S r   )r~   r  r   r   r   r        c                 S   s   t tfd| ji| tjS r  )r   _dataclasses_fields_lambdar   r   r&   FUNCTION_MATCHr  r   r   r   r    s    
c                 S   r  r   )r   r  r   r   r   r    r   )r  inspect	signaturedataclassesfieldsr   __version__r   r   r   id)r  r  r  r  r  r  r  r   r   r   _id_dispatch  s"   
zVariableBuilder._id_dispatchc           %   	      s  ddl m} | rddlm} ddlm} nG dd d}G dd d} t}|d ur6|S 	 t
}|d urH|S td	tsYttjr^S trg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(t)j*t)j+fr)s, - rtj. ntj/ t0dd 1 D   r؈tj2 njjjj    fddt(fddt!" D }tt)j*rt3jd}t4|tt5j|j6jd}n
t#|tjd}7|S t8tj9j:r6;S t<=rA>S tt?r]dd D r]tj@ t<jAjdS t8tBjCrqtj@ tDjdS tEFrtjG tEjdS t8tHjIrtj& tJjdS tKrtLjdS t8tMjNr!t3, d}	t5j|	jO}
g }t3, d}t!jPD ]\}}|Qt5jtR||| qi }t3, d}jS" D ]\}}t<=|stTd t5jtR|||||< qtU, VtjW|VtjX|Vtj/ tY|
||S tZr3tj@ t[jdS t\d urGt8t\j]rG^t\_S t`rft\sQJ tar[tj&ntjW tbjdS tcrxtj@ tdjdS tert8t\jfrtjW t3jd}tU|Vtj@ ntj@ tgjdS thirtj& thjAjjdS ttjjjkjlr҈tj& tmjdS t8tjjjkjnr9d }zjo}W n
 tpy   Y nw g }jVtjWg}t8|tqr$t3jd}|Q|Vtj/ t!|D ]\}}|Qt5jtR||| qtU|  jjjrsttjtu|dS t8tvjwruttxdd tjjjkjlrutxddd krutxjyd d krutj& tztmjyt3jdd!dd S tart{|d urt}rd"jj_~t{|jjdS t\rt8t\jrS trtjW tS trȈtjW tS t8trވtjWtj tjjdS t8tjjrtj@ t3jd#}t5j|j}tAj|S t8tr1tj@ jjd$tjjd%jjjd&}t|j t|jjdS t8tjjrHtjW tAjjS t8tr\tj@ td jdS t8tjjrqtjv rqtjdS ttjrtd'd d u rtjW tjdS trtjW tjd}jjjrs|S t8tjjrňtj@ tj_tjdS trtjdS trtj@ tjdS trtj@ tjdS trtj@ tjdS trtj@ tjdS ttr9tj v r9tj& tjdS t8tjrj }tj}jjjjt||tjd(}jjjjtd)d*j t||d}t||d+d d+|d,|jjd-< jjjà|jjġ jjjŠQt||d  t||d.kS t8||frtj@ tȈd d jdS t8tjjj˃rˈtj@ ẗjj͈jΈjgjd/S tРшrވtj& tЈjdS t҈r tӈ\}|d urt3j|_t{ԈjjdS t8tvjtjfrtj& t؈jdS t8tvjwrVt8jytj9j:tjjjfrVt5jt3jddjy} | rCt8| tڃsGJ d0tj& tۈj| jdS t8tvj݃rgtj& tވS t8tvj߃rxtj& tS tttrtjjjtj9jfv rt{ԈjjdS tjjju rtj& tjS tj@ tjdS ttrtj/ 7tfd1d2ttD tt3jd3d4S ttrUd5d6lm}!m}" td7sS tt5j|"j   tt5j|!j  tjjjjj}#jjjjtd)d*j tjd}$tjd+d d+|#|$jjd-< tjA|$|#jdS S )8Nr   )
has_triton)	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+  _torchdynamo_inlinec              
      s<   i | ]\}\}}t |t|t  t  |d qS r   )rY   r  r   r0   r   r-   r   ikvr   r   r   
<dictcomp>  s    

z)VariableBuilder._wrap.<locals>.<dictcomp>r   c                 s       | ]}t |V  qd S r   rY   
is_literalr   r1  r   r   r   	<genexpr>  s    z(VariableBuilder._wrap.<locals>.<genexpr>c                    sP    r
t |}|}nt | }t||}t |}t||}||fS r   )rY   r  r-   r   rr   r0   )r0  r1  r2  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   r/  )r=  r   r   r8  %  s    
default_factory)r>  r   c                 s   r4  r   r5  r   xr   r   r   r8  ;      

r   r   funcargskeywordsz*functools.partial with non-literal keyworddtypesaved_tensors)r   rG  __self__r    apply)memberTstreamr   r   )	stream_iddevice_indexdevice_typeenter_result)dynamic_dim[^a-zA-Z0-9]+_F)r   r   graphargrT   )target_valuesr   z"Failed to produce a valid self objc                    s&   g | ]}t j| t j|d qS )rB  )rr   r  r0   r   r   r0  r  r   r   r     s    z)VariableBuilder._wrap.<locals>.<listcomp>r   )user_clsuser_cls_sourcer   )FlattenScriptObjectSourceScriptObjectQualifiedNameSource__obj_flatten__)torch.utils._tritonr*  triton.runtime.autotunerr+  triton.runtime.jitr,  r  getr   r)  r(  r#  getattr_staticr   rJ   r   traceable_tensor_subclassesr   rG   r  r   utils_pytreeSUPPORTED_NODESr   r&   DICT_VERSIONr   r   guard_on_key_orderr   r   r   	enumerateitemsra   sysmodulesr"  re   dictr   defaultdictOrderedDictr   is_nn_module
BOOL_FALSESEQUENCE_LENGTHallkeysDICT_CONST_KEYSr*   rc   r   r>  r   r   r   Modulewrap_modulerY   r6  r  	frozensetr  r  enumEnumrZ   r   is_reorderable_logging_functionBUILTIN_MATCHloggingLoggerr   rI   r@   	functoolspartialrC  rD  r  r0   rE  r%   r'   r   
TYPE_MATCH	DICT_KEYSrm   rH   r   r  genericr  asarrayr=   callabler   r>   r   r?   iinfor   rl   can_rewriteautogradfunctionFunctionMetar}   FunctionCtxrG  RuntimeErrorr   r   r   r|   r   types
MethodTypegetattrrH  r   r"   lookup_callabler<   !has_user_defined_allowed_in_graphcreate_with_sourcenumberwrap_unspecialized_primitiverb   is_matching_objectwraprd   r   
NAME_MATCHrp   makecudaStreamContextrL  r_   r   create_proxyStreamrM  rN  rO  rM   noder`   device_C_SDPAParamsr   r   r\   _TensorMetar   
contextlibnullcontextr]   r   optim	Optimizerr8   r   rk   is_group_member_typerj   is_process_grouprg   is_device_meshrh   is_placement_typeri   is_placement	itertools__dict__valuesrq   SymBoolrequire_hintr.   	shape_env$create_unspecified_symint_and_symbolr   r   DYNAMICroot_tracercreate_graph_inputr	  subr   metabound_symbolsexprtracked_fakesTrackedFaker   rn   ampautocast_modeautocastr[   
fast_dtype_enabled_cache_enabledr   is_matching_clsrF   rR   r   
ModuleTyper!   DummyModuler   TreeSpecrW   ro   __func__GetSetDescriptorTyper   MethodWrapperTyper   
issubclasshooksBackwardHookr    _unsafe_preserve_version_counterr^   constructorr   rw   r  lenr   rY  rZ  hasattrwrap_user_definedrr   realize_all_typequalified_namer[  _libraryfake_class_registryto_fake_obj	fake_mode)%r   r   r*  r+  r,  type_dispatchid_dispatchr  factory_sourcefunc_srcfunc_objrD  args_sourcer0  argrE  keywords_sourcer1  r2  	dt_sourceactual_saved_tensorsrG  r   saved_tensors_sourcestream_source
stream_varstream_proxy
value_hint
new_source
new_symintsym_node_proxy	attr_nameself_objrY  rZ  fake_script_objproxyr   )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 )Nr   )r   r&   r  r   r   r)   "cls_supports_mutation_side_effectsr   r   r   r   r   )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
 |D ]
}||u r(td q fddt|D } jjjd}t jtr jjt|v r j}t|tsTJ  jjjjtdd jt||d}d	|jjd
< tt j||d |d}g }t|j D ]&\}	}
t!||	dd}|
 jjj"|< t#j$tj%t&||	 d}|'|(| qt)|ddi t*||dd dd}||jjd< t+,||t- d}t.|trш /||S |S )Nr   z-list elements are pointing to the list itselfc                    s(   g | ]\}}t j|t  |d qS r.  )rr   r  r0   r   )r   r0  itemr   r   r   r     s    z1VariableBuilder.wrap_listlike.<locals>.<listcomp>r   rR  rS  r   T	steal_arg)
target_clsr   r  example_valuesubclass_typer   Fbaseindexindex_is_slicer   rT   )r   r   r   rT  mutable_local)0r   specialize_intr   r   r  r   r&   CONSTANT_MATCHrY   r  rp  r%   rg  r   r   local_scoper_  r   r   r6   
local_namerD   r   r  r  r	  r  r   r  r  wrap_fx_proxy_clsr   rh  r0   input_source_to_varr}  r~  TENSOR_MATCHr   r  r   r'   r   rs   cls_for_instancerU   rJ   r   )r   r   r  r   maybe_gmr   tensor_list_proxylist_variabler   r0  tensor_variablesource_ir   rT  r  r   r   r   r    sj   
	
	
zVariableBuilder.wrap_listlikec                    sF     tj  fddttD }t|t  jd} |S )Nc                    ,   g | ]}t  jt  |t|qS r   )r   r   r;   r   rP   rV  r  r   r   r   8      z7VariableBuilder.wrap_tuple_iterator.<locals>.<listcomp>)r  r   )	r   r&   TUPLE_ITERATOR_LENr  rQ   rz   rU   r   r   )r   r   r   r  r   r  r   r  6  s   

z#VariableBuilder.wrap_tuple_iteratorc                    sF    fdddD }  tj ttrt| jdS t| jdS )Nc                    r  r   )r   r   r*   r   r  r7  r  r   r   r   E  r  z4VariableBuilder.wrap_slice_range.<locals>.<listcomp>)startstopstepr   )r   r&   r  r   r  ry   r   rv   )r   r   rh  r   r  r   r  D  s   
z VariableBuilder.wrap_slice_rangec                 C   sr  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|| jjrx| tj t|| jd}t t!|so|S | jj"j#$||S t%|j&tjj'j(j)r| tj t|S t*|d
drt*|ddsJ d| tjtj+ t,|| - dS | jj"j.|| j/| - 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=True)0
eval_framer  r  r  r%   rV   rJ   r#  r`  forwardr   r   r   r&   r  r*   ru  r  r   r   r   RNNGRULSTMr   	allow_rnnr    is_dynamic_nn_moduler   exportr   r)   r  r   r   r   r   r  r   paralleldistributedDistributedDataParallelr  r  r   r   register_attr_or_moduler   )r   r   r  r  r   r   r   ru  Q  sL   
zVariableBuilder.wrap_modulec                 C   s   t js8t|tu r8t js3||  v s%| j	 
 r%t| js%t| jr3| tj tj|| jdS | |S t jsFt|tu rF| |S | tj tj|dS )NrB  r  )r   r  r   r   r
   r_  #force_unspec_int_unbacked_size_liker   r   r   is_localr4   r2   r   r&   r  rY   r  wrap_symintspecialize_floatfloatwrap_symfloatr  r   r   r   r    s    


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   r  r$   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 |  st|d ur/|  s/| | | jjj	|| j
|dS t|rH| | | jjj	|tdd| j
|dS t|tjv rTt|}nt|tjtjjtjjjtjjjfv sqt|sqJ t|d }|| jjjv }|r| jjj| S | | | jjjjtdd| j
t||d}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*|r|j+st)d|j, d t-d| j||||d|}t!j.}t#|t/rt0|rt!j1}|  t2j3|t#|t4r|nt5|d	 t|r8|  t!j" |6 \}	}
|	D ]}t7||}t8| j|}t9:t;| j|| q|| jjj|< d
|j<j=vsHJ |j>? |j<j=d
< |j@j<j=d }tA|| jjBuretCdtD||d|}||j<j=d< | jjE| |S )Nr   rR  rS  torch_function_fn3torch.compile does not support strided NestedTensorz2torch.compile does not support sparse Tensor with z layout)r   r  r  r  r   r  tensor_dictr  z(Wrapped Tensor must be this graph's fakeFrT  r   )Fr   r   r   r   r   rn  rE   is_fsdp_moduler"  r  r   r3   r	  r  r   r   ra  r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r&   r  r   	is_nestednested	_internalnested_tensorNestedTensorr%   r   	is_sparselayoutwrap_fx_proxyr  r1   r5   NOT_NONE_MATCHr}  r~  r7   r   __tensor_flatten__r  r*   rr   r  r   r  r  r  copyr  r   r  r$   r   add_symbol_bindings)r   r   r   r  is_duplicate_tensortensor_proxyoptionsr  
guard_typeattrsrS  attrinner_valueinner_sourcefake_tensor_valuerT  r   r   r   r     s   








	

zVariableBuilder.wrap_tensorc              
   C   sj  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 z||}|rLddlm} ||}W n tye } ztt| W Y d }~nd }~ww tt| j|| | jjjjtdd| jt||d}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_stridesrR  rS  r   r   r  r   r  r  r  r   r   r   r   rT  r   )$r  r   r  r7   r   torch._numpyr<  flags	writeable
ValueErrorr  nditer_try_convert_to_tensortorch._prims_commonr=  NotImplementedErrorr%   strrr   r  r   r   r   r  r  r	  r  r   r   r  r   r  r  r  r  r   )r   r   r   r<  readonlytensor_valuer=  er  r5  numpy_ndarray_variabler  rT  r   r   r   r  H  s^   


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	rB|
 }t| | jjj|jj | jjjt|| jd  nt|  stjjjr[| tj tj|| jdS | j }|| jjjvrnt |d d}n| jjj| }|j!|krt"#d|||j! d |_!|| jjj|< tj$r|j!d u stj%st&j'}n| tj tj|dS |j(|| j|d}| jjj|jj | 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/t01dd| jt ||  d	}t2|j| t3||fi |}	|	| jjj| j< t|  s[| jj4rDt)|  t5sDt6d
| d|   |	j7jj8d }
t9|  |dd d|d|jj8d< |	S )NrB  )r   r   z%automatic dynamic int %s val %s != %sr  )r   rQ  r   rR  rS  r   =Dynamo attempts to add additional input during export: value=	, source=r  Fr?  rT  ):r   r   r   r   r   unspec_variable_mapr  r
   r_  r  create_unbacked_symintr   r  r   r  r  r  r  r  r   r3   r   r   _dynamor   r  r   r&   r  rY   r  frame_stater   r   logdebugautomatic_dynamic_shapesassume_static_by_defaultr   r  r  r   r9   r'   r   r  r  r  r	  r  rM   r   r  r6   AssertionErrorr  r  r   )r   r   r  wrapped_valuer   frame_state_entryrQ  r5  r  
unspec_varr  r   r   r   r    s   








	zVariableBuilder.wrap_symintc           	      C   s  | j | jjjv r| jjj| j  S tjjjs t| 	 s t
|r.| tj tj|| jdS tj|tjd}t| 	 tr?J t| 	 tj t| 	 |d}| jjjjtdd| j t|| 	 d}tt f| j||d|}t|t s{J || jjj| j < | jj!rt| 	 t"st#d| d	| 	  d }|j$j%j&d
 }t'|sJ |}|j(| jj(u sJ d|j( dt)| 	 |d|d|d|j%j&d< t*| j| jjj+ddgt,|gi R  }| jjj-.t/|j0| jd  |S )NrB  )rF  )r   	raw_valuerR  rS  r   r   r  r  rM  rN  r  fake mode (^) from fake tensor metadata doesn't match mode({self.tx.fake_mode}) from InstructionTranslatorTFr?  rT  call_methodr  )1r   r   r   rO  r   rQ  r   r  r3   r   mathisnanr   r&   r  rY   r  r   tensorfloat64r   r9   r'   r   r  r/   r  r  r	  r  r   r  r   r  r6   rW  r  r  r  r   r  r   r.  r  rL   r  r  r  sym_num)	r   r   rX  r5  r  rZ  r;  r  r   r   r   r   r!    sx   



zVariableBuilder.wrap_symfloatc                 C   sl  | j | jjjv r| jjj| j  S t|}t|  ts&t	|  
tj d|  i}|d|i | jjjjtdd| j t||  d}ttf| j||d|}|| jjj| j < t|  s| jjrzt|  tszt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[  rR  rS  r   r\  rM  rN  r  r]  r^  TFr?  rT  )!r   r   r   rO  r   rb  r   r   r9   r'   r   r&   r  updater  r  r	  r  r   r  r   r3   r  r6   rW  rY   r   r  r  r  r   r  r   )r   r   rX  r5  r  rZ  r;  r  r   r   r   r  ]  sZ   


z,VariableBuilder.wrap_unspecialized_primitive)0r   r   r   __doc__r:   r   r   r   staticmethodr}  	lru_cacher   r   r   r   classmethodr  r	  r
  r  r)  r   r   r  r   r   r   rK   r   r  rO   r  r  r  r  r   r   rt  ru  r  r   r"  r   r  r  r!  r  r   r   r   r   r   r     sL    

!     2JH >nir   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   rb   rW  r%   r%  r&  r   r0   r*   r   r  r{   )objr   rh  fieldr   r   r   r   r!    s   

r!  returnc                 K   sL   | |||d|}|d u rt ddti|S t ddti|}||  |S )N)r   r  r  r  r  r   )r  r   r   install_global)r   r  r  r  r5  kwargsr  r   r   r   r.    s   
r.  c                    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  |} fdd}|d u rDt|j dd}nSt	| j
u rLnKt|tjr jrstj  |||jj|j< W d    n1 snw   Y  d	| ttfv i}	d
|v r|d
 d usJ |d
 |	d
< t|fd i|	}t|tjrt	| j
urtd| t|tjrt|tjj}
||}t|j| | |}t|tjjjr|j
 j
u r|r|ntj}|
rtjjn||d< || | |fi |S t|jjdr|jjjdkrt|jjj tjj!s|jjtj"j#krt$|jjS |jjtjj%ks/|jjtj&j'kr3t(|S t)|tj*rSt+dd |D rSdd |D }t,|fi |S t|t-t.fr
t|j| g }t/|D ]L\}}|d u r}|0t1j2d)i | qg|jj3dt4j5||fi d}d
|v r|d
 }|6 }t7||dd|d
< n|}|0t8d*|  ||d| qgt|tj*rt,||fi |S t)|t-rt9|fi |S t)|t.t:frt;|fdt< i|S |j=j>dks t|ds J d|j=j> dt?| t@||j=fi |S |d u s|jjtjAu rt1j2d)i |S t|tjBtjCtjDfr:t|j| tE||fi |S tFG|jjrJtH|jjtIsW|jjdd tJ D v rht|j| tK|||jLfi |S tFG|jjrxtH|jjtMs|jjdd tJ D v rt|j| tN||fi |S |jjd kr|jjOd!krt|j| t1|fi |S |d urt|tMr|jjd"kr|jjOd!krt|j| tN||fi |S t|tPr|jjtjQtRt4j5tjSjTtjUt4jVtjWjXjYtRtjZd#t[tRtjZd$t[tj\f
v rt|j| t1j2|fi |S t|tj]j&j^r/d%d&l_m`} t|j| ||fi |S t|tarS|jjtj]j&jbtj]j&jcfv rSt|j| t1j2|fi |S t|tPtdtafrr|jjteu rrt|j| t1j2|fi |S tfd'tg| d(|jjO d(|jj   d S )+Nr   )InstructionTranslatorBaser   r  c                    s@   t | tjrt | tst| rt|  ju s| jst| } | S r   )	r   r   r   r   _is_functional_tensorr   r  r'  rA   r  r   r   r   _clone_input  s   z'wrap_fx_proxy_cls.<locals>._clone_inputT)allow_non_graph_faker   r   r   zU`example_value` needs to be a `FakeTensor`wrapped by this instance of Dynamo. Found: 
class_typer   	set_statec                 s   s    | ]}t |tV  qd S r   )r   r   r?  r   r   r   r8  F  rA  z$wrap_fx_proxy_cls.<locals>.<genexpr>c                 S   s   g | ]}t |qS r   )rY   r  r?  r   r   r   r   I  r   z%wrap_fx_proxy_cls.<locals>.<listcomp>r   )kindtargetrD  ro  Fr  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r   rS  device_interfacer   r   r   r         c                 S   rz  r   )Eventr|  r   r   r   r     r~  queryr_  record_eventget_rankget_world_sizerT   r   ztorch.* op returned non-Tensor  r   r   )hsymbolic_convertrp  r   r   r   re  r  r  rC   r   r  r   r   r  r  DisableTorchFunctionSubclasstracerreal_value_cacher   r   wrap_to_fake_tensor_and_recordr$   r   r   rM   
specializer   r   r   r  rx  r   rH  	Generatorrandomset_rng_stater   _DisableFuncTorchr  _is_in_bad_forkr   rJ   r  rq  rx   r   r   rg  r  rY   r  r  operatorgetitemr1  r0   r  r{   r   rt   rU   r   r   r   ru   manual_seedr   SymFloatr  r   r#  isclassr  r   r#   r`   r  r   r\   opr   sym_intr  _utils_element_sizeseedmod
_functorchvmap_validate_and_get_batch_sizer  r   _constrain_as_sizebackends
SDPAParamssdpar   r   can_use_flash_attentioncan_use_efficient_attentionr   r   r%   rV   )r  r   r  r  r  r5  rp  initial_example_valuers  ro  is_parameterspecialized_propstensor_typesizesunpackedr0  valproxy_ir   	options_ir   r   rr  r   r    sL  




	


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_contextrm  c                 C   s   t | j| j fS r   )hashr  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  r  r   r   r   r   r   r   r     s   
 zTrackedFake.__eq__N)r   r   r   r   r   r   r   r:   r   r   r   r  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| ry|syt| |||dd}
t| | \}}i }|D ]}t| |}t||}t||||}|||< qSt|
j|
j||
j|
j|dS |rttjg|   d g|   |||dS ddlm t fd	d
| ! D rtdd | ! D d g|   |||dS d }||j	j"vrt#d d }t$| ! |_!nK|j	j"| }|j!d ur| j%t&|j!krt'(d|| j%|j! d |_!n)t)|j!D ]#\}|d ur| !  |krt'(d|| !| d |j!< qt*| }i   fdd}|j	j+rV|j	j+D ])}|j,|kr=||j|j-|j. |j/d urT|j/j,|krT||j/j|j-|j. q,g }g }t0|  D ]t| dt1 v }t| dt1 v }t| dt1 v }t2j3o|j!d u p|j! d u }|j!r|rt'(d| d |j!<  }|d u r|rt2j4st5| drfdd| j6D 7 }|j8d u r|j9d u rt:dd}n@ddlm;} |t<|j8|j9ddd}n-t:dd}n'|s|rt:dd}nd }n|\}} | d ur| d d}!| |j	j=j>|!< |?| |d us-|s-|s-| j@ r1tjA}"n|s;t2jBs;|r?tj}"ntjC}"|?|" q`||j	j"|< t|||||dS )Nr$  _baseT)
outer_only)dynamic_sizesconstraint_sizesview_base_contexttensor_source#shape_env_to_source_to_symbol_cacheinner_contexts)r  r  r  r  r  r   is_nested_intc                 3   s$    | ]}t |to | V  qd S r   )r   r   r   sr  r   r   r8    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>z!automatic dynamic %s dim %s != %sz&automatic dynamic %s size(%s) %s != %sc                    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_shapesr  r  )dimconstraint_range
debug_namer  old_constraint_rangeold_debug_namenew_constraint_rangenew_debug_name)dim2constraintr   r   update_dim2constraintJ  s   
z1_automatic_dynamic.<locals>.update_dim2constraint_dynamo_dynamic_indices_dynamo_weak_dynamic_indices_dynamo_static_indicesz#automatic dynamic %s marked dynamic_dynamo_dynamic_rangec                    s   g | ]	}|j  kr|qS r   )r  )r   dr)r0  r   r   r     s    F)r  r  )lowerupperr  z.size()[])Dr'  r   r   r(  r)  r*  r+  r%   r   r   tracing_contexttensor_to_contextr_  r  _is_viewr*   _automatic_dynamicr  r   r   r0  r  r   r  r  r  r   r   r  r  r  r  anyr   rR  r   r   ndimr  rS  rT  rg  r(  export_constraintst_idr  r  sharedr  setr   rU  allow_ignore_mark_dynamicr  r  popminmaxr   r  r   r  source_name_to_debug_namer  shaper  rV  DUCK)#rK  r   r   static_shapesr  r   prior_policyr  r  base_sourceouter_contextr7  rS  r  r8  inner_tensorr:  inner_contextrY  r  r  r  
constraintdynamic_dimsconstraint_dimsmarked_dynamicmarked_weak_dynamicmarked_staticautomatic_dynamic	dim_rangeconstraint_dimr  r  dim_namedynamicr   )r  r0  r  r   r    s,  




	










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\}}|s1t
 |ntts8J j}|j| td t jt   t fdd}d urxt|trx|j }	d urx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)r   zwrap_to_fake %s %s %s %sc                      s   j j dS )N)r   r  )r  from_tensorr   rK  r   r  r   r   r   r    s
    z0wrap_to_fake_tensor_and_record.<locals>.<lambda>)r   r   r  )rT   )r   stridevalues_sizevalues_stride)r   r  )+r   r   r   r   r   r   r   r   rN   r   r  r*   rK  r  rS  rT  r   r   r  rS   	item_memor   r  r  r  r+   r0  r  r  r  r  r   r,  _valuesr  r   r  r  input_source_to_sizes_stridesrn  r3   tracked_fakes_id_to_sourcer(  )rK  r   r   r   r  r  reasoninner_context_namefake_esym_valr7  rS  r8  
fake_innerinnerr:  r  r   r  r   r    s   


	






r  c                   @   sB   e Zd ZdZdd ZedefddZedd Zed	d
 Z	dS )SourcelessBuildera  
    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.
    c                 C   s   t d)NzUse SourcelessBuilder.create())rW  r   r   r   r   r   0	  s   zSourcelessBuilder.__init__rm  c                 C   sp  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-d|j. d|j/  d S )NTz&Unexpected type in sourceless builder .)0r   r  _type_handlersr_  r   rW   r%  _HAS_DEFAULT_FACTORY_CLASSr   rY   r6  r  r  r"   r  r<   r   r  rF   r   rw  rx  rZ   abcABCMetar   r  r  r   r   fxgraph_moduleGraphModuler   rb  rc  r  LeafSpecri   r  rg   r  r	  r
  r   r%   r   r   )r   r   
value_typefast_handlerr   r   r   r  3	  sJ   





zSourcelessBuilder.createc                 C   s   t | sJ t j| dS )Nr  )rY   r6  r  r  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 ]}|| |< qZ| S )Nc                 S      t |S r   )rY   r   r   r   r   r   r  g	      z6SourcelessBuilder.make_type_handlers.<locals>.<lambda>c                       t  fdd|D t dS )Nc                       g | ]} |qS r   r   r?  r  r   r   r   r   i	  r   JSourcelessBuilder.make_type_handlers.<locals>.<lambda>.<locals>.<listcomp>r  )rf   rU   r  r  rr  r   r  h	      c                    s(   t  fdd| D t|t dS )Nc                    s"   i | ]\}} | |qS r   r   )r   r1  r2  r  r   r   r3  l	  s   " zJSourcelessBuilder.make_type_handlers.<locals>.<lambda>.<locals>.<dictcomp>r  )ra   rh  r   rU   r  r  rr  r   r  k	  s
    c                    r  )Nc                    r  r   r   r?  r  r   r   r   q	  r   r  r  )rt   rU   r  r  rr  r   r  p	  r  c                       t  fdd|D S )Nc                    r  r   r   r?  r  r   r   r   t	  r   r  )r{   r  r  rr  r   r  s	      c                    r  )Nc                    r  r   r   r?  r  r   r   r   w	  r   r  )rx   r  r  rr  r   r  v	  r  c                 S   r  r   )r   r  r   r   r   r  |	  r  c                 S   s   |S r   r   r  r   r   r   passthrough~	  s   z9SourcelessBuilder.make_type_handlers.<locals>.passthrough)r  r  rB   r  rk  r   r   r   r  r   rm  r   r   r  r  rX   all_subclasses)handlersr  r   r  r   r  r   make_type_handlersb	  s"   

z$SourcelessBuilder.make_type_handlersN)
r   r   r   rf  r   rg  rW   r  r  r#  r   r   r   r   r  #	  s    )
r  )NN)F)r  r   r  r%  rw  r}  r#  r  r{  r`  r  r	  ri  r  typingr   r   r   r   r   torch.utils._sympy.value_rangesr   numpyr  ModuleNotFoundErrorr   r   torch._guardsr	   r
   !torch._higher_order_ops.torchbindr   
torch._opsr   torch._streambaser   r   torch._subclasses.fake_tensorr   r   r   torch._subclasses.meta_utilsr   %torch.fx.experimental._backward_stater   r  r   r   r   r   r   r   torch.fx.immutable_collectionsr   r   torch.utils._python_dispatchr   torch.utils.weakr   rI  r   r    r!   r"   r}  r#   excr$   r%   r   r&   r'   r(   r   r)   r   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rb  r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r  rU   rV   rW   rX   constantrY   rZ   ctx_managerr[   r\   r]   r^   r_   r`   dictsra   rb   rc   rd   re   rf   r  rg   rh   ri   rj   rk   	functionsrl   rm   rn   ro   higher_order_opsrp   iterrq   lazyrr   listsrs   rt   ru   rv   rw   rx   ry   rz   r{   miscr|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	nn_moduler   r   	optimizerr   script_objectr   r  r   rb  r   r   r   r   r   r   r   torch_functionr   r   user_definedr   r   r   r   	getLoggerr   rS  DimListr   	dataclassr   r   r   r   r!  r.  r  r  r  r   r  r  r#  r
  r   r   r   r   <module>   s    PX  ,T
<           
?
 f
 h
bc