o
    h                    @   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mZmZmZmZ zd dlZW n eyI   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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' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZU ddlVmWZWmXZXmYZY ddlZm[Z[ ddl\m]Z]m^Z^ ddl_m`Z`maZa ddlbmcZcmdZdmeZemfZf ddlgmhZhmiZimjZj ddlkmlZlmmZmmnZn ddlompZp ddlqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{ ddl|m}Z}m~Z~mZmZmZmZmZmZmZmZ ddlmZmZ ddlmZ dd lmZmZmZmZmZmZ dd!lmZmZmZ dd"lmZmZmZ eeZeZG d#d$ d$ZejG d%d& d&ZejG d'd( d(ZG d)d* d*Zd+d, Zd<d-d.Z	/d=d0d1ZejG d2d3 d3Zd4d5 Z	/d>d6eeB d7efd8d9ZG d:d; d;ZdS )?    N)List
NamedTupleOptionalUnion)SymInt)GuardSourceTracingContext)HigherOrderOperator)
FakeTensoris_fake)DimConstraint
DimDynamicRelaxedUnspecConstraint)immutable_list)is_traceable_wrapper_subclass)TensorWeakRef	WeakIdRef   )configmutation_guardreplay_record	skipfiles)
is_allowedis_builtin_callableis_numpyis_user_defined_allowed)unimplemented)GuardBuildermake_dupe_guard)SideEffects)

AttrSourceConstantSourceGetItemSourceGlobalWeakRefSourceis_constant_sourceLocalSourceNumpyTensorSourceRandomValueSourceSourceTupleIteratorGetItemSource)build_checkpoint_variableclone_inputget_fake_valueget_static_address_typegetfileglobal_key_nameis_namedtuple	is_typingis_utils_checkpointistypeodict_valuespreserve_rng_statetensor_always_has_static_shapetuple_iteratortuple_iterator_getitemtuple_iterator_lenwrap_fake_exception   )MutableLocaltypestrVariableTracker)BuiltinVariable)ConstantVariableEnumVariable)CUDAStreamVariableNullContextVariable)ConstDictVariableDataClassVariableDefaultDictVariableHFPretrainedConfigVariable)DeviceMeshVariablePlacementClassVariableProcessGroupVariable)!CollectiveFunctionRewriteVariableUserFunctionVariableUserMethodVariable) TorchHigherOrderOperatorVariable)
BaseListVariableDequeVariableListVariableNamedTupleVariableRangeVariableSetVariableSizeVariableSliceVariableTupleIteratorVariableTupleVariable)
AutogradFunctionContextVariableAutogradFunctionVariableComptimeVariableGetAttrVariableInspectSignatureVariableLambdaVariableNumpyVariablePythonModuleVariableSkipFilesVariableTypingVariable)FSDPManagedNNModuleVariableUnspecializedNNModuleVariable)OptimizerVariable)NumpyNdarrayVariableSymNodeVariableTensorSubclassVariableTensorVariableTensorWithTFOverrideVariableUnspecializedPythonVariable)tensor_dunder_fnstorch_special_class_typesTorchVariable)KeyedJaggedTensorVariableUserDefinedClassVariableUserDefinedObjectVariablec                   @   s   e Zd ZdS )_missingN)__name__
__module____qualname__ rv   rv   U/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_dynamo/variables/builder.pyrr      s    rr   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S )GraphArgsource_exampleis_unspecializedfake_tensorT	is_tensorNexample_strong_refc                 C   s*   t | jtr|  }|d usJ |S | jS N)
isinstancerz   r   )selfrrv   rv   rw   example   s
   zGraphArg.examplec                 C   s0   t | jtjrt| j| _t| jsJ d S d S r   )r   rz   torchTensorr   r   r|   r   rv   rv   rw   __post_init__   s
   zGraphArg.__post_init__c                 C   s   | j |S r   )ry   reconstructr   txrv   rv   rw   load      zGraphArg.loadc                 C   s
   d | _ d S r   )rz   r   rv   rv   rw   erase   s   
zGraphArg.erase)rs   rt   ru   r(   __annotations__r   r   r   r   boolr   _subclassesr|   r
   r}   r~   r   propertyr   r   r   r   rv   rv   rv   rw   rx      s   
 
rx   c                   @   s*   e Zd ZU ee ed< eee  ed< dS )FrameStateSizeEntryscalarsizeN)rs   rt   ru   r   intr   r   rv   rv   rv   rw   r      s   
 r   c                       s,  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edd Zdd Zdd Zdd Zee	
d	dd Zee	
d	dd Zdd Zdd Z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+d, Z(d-d. Z)  Z*S )/VariableBuilderz3Wrap a python value in a VariableTracker() instancery   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   getsuper__init__r   ry   name)r   r   ry   	__class__rv   rw   r      s   

zVariableBuilder.__init__c                 C   s   || j jjv r!| j jj| }t| j|j}|r|| |}|S | |jdi | 	 }| 
|r>| j jj| j||}|S )Nrv   )r   outputside_effectsr   ry   
add_guardsmake_guards_wrapcloneoptions_can_lift_attrs_to_inputstrack_object_existing)r   valueside_effect_result	dup_guardvtrv   rv   rw   __call__   s   

zVariableBuilder.__call__c                 C   s   t |ttttfv rdS dS )NTF)typeri   rj   rq   rf   )r   r   rv   rv   rw   r      s   z)VariableBuilder._can_lift_attrs_to_inputsNc                   C   s   ddhS )Nr   r;   rv   rv   rv   rv   rw   _common_constants   s   z!VariableBuilder._common_constantsc                 C   sH   t | rtjtt| dS ttttt	tt
jjtt
jjttjtit|  S )N)	tuple_cls)r0   	functoolspartialrR   r   tuplerX   listrQ   r4   r   nnParameterList
ModuleListcollectionsdequerP   r   rv   rv   rw   	list_type   s   zVariableBuilder.list_typec                 C   s   | j S r   ry   r   rv   rv   rw   
get_source  s   zVariableBuilder.get_sourcec                 C   s   d|   iS )Nry   )r   r   rv   rv   rw   r     r   zVariableBuilder.optionsc                    s6   |    t ts  tjkrd S  fdd|D S )Nc                    s   h | ]}  |qS rv   )
make_guard).0guardr   rv   rw   	<setcomp>      z.VariableBuilder.make_guards.<locals>.<setcomp>)r   r   r!   guard_sourcer   CONSTANT)r   guardsrv   r   rw   r     s   zVariableBuilder.make_guardsc                 C   s   t jt jjt jjf| jfttt	t
jf| jft| jfttf| jfttttd tt jt jt jf| 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   r   	Parameterr   r
   wrap_tensorr   r   r4   r   r   wrap_listliker7   wrap_tuple_iteratorslicerangewrap_slice_ranger   floatr   r   strSizedevicedtypewrap_literalr   trace_numpynpappendndarraywrap_numpy_ndarrayr   )clsentriesresulttsfntrv   rv   rw   _type_dispatch  s6   


zVariableBuilder._type_dispatchc                 C   s   ddl m } tjdd f|dd ftjdd ftdd fg}i }|D ]\}}t|ttfr/|n|fD ]}||vs:J ||t	|< q2q"|S )Nr   )comptimec                 S   s   t tj| j| tjdS Nry   r   )r^   r]   createry   r   r   FUNCTION_MATCHr   r   rv   rv   rw   <lambda>I  s
    
z.VariableBuilder._id_dispatch.<locals>.<lambda>c                 S   s   t  S r   )r[   r   rv   rv   rw   r   O  s    c                 S   s   t t| j| tjdS r   )r^   _dataclasses_fields_lambdary   r   r   r   r   rv   rv   rw   r   R  
    
c                 S   s   t || j| tjdS r   )rn   ry   r   r   r   r   rv   rv   rw   r   Z  r   )
r   inspect	signaturedataclassesfieldsrl   r   r   r   id)r   r   r   r   r   r   r   rv   rv   rw   _id_dispatchA  s&   
	zVariableBuilder._id_dispatchc              	      s^  j } t}|d ur|S  t}|d ur'|S tdts8t	t
jr=S trFS t	ttjtjfrtfdd D rĈsl  rl tj n tj  D ]}|rjt|| qvfdd fdd D }t	tjrt|tj  d}n	t!|t d}jj"j#$j%|S t&t'j(j)rЈ*S t+,rڈ-S t	t.rtd	d D rt+j%|tj/d
S t&t0j1rt2j%|tj/d
S t3rt4j%|tj5dS t6r t7j%dS t8r:t9r/djj"_:t;j%|tj<dS t=rJt>j%|tj/dS t?rjt@sTJ tAj%|tBrdtj<dS tjCdS t	ttDjEfrtFjGtHddrtddstIj%|tj<dS tJKrtJL\}}j%}	|_%tJ||	||tj<dS t	tDjEt'jMjNfrtOj%|tj<dS t	tDjPtQjRfrtSj%|tjTdS t	t'jUjVjWrtXj%|tj<dS t&t'jUjVjYrjj"j#Zj%t[j%|tjCdS t&tDj\rAt	t]dd t'jUjVjWrAt]dddkrAt]j^dd krAt_tXj^j%|tj<ddS t@rPt&t@j`rPaS tbcrbtbde|tjCS tfcrqtf|tjCdS t&tgrthjij% tjCtjjdS tjkdkrt&j^tlrt;|tj<dS t&t'jmjnjortpd d S t&t'jqjrrt
jv rtsj%dS t&tDj\rt&j^t'j(j)rttjtuj%ddj^}
|
rt&|
tvsJ dtwjx|
j%|tj<dS t	tyjzrtdd d u rt{j%|tj<dS t|cr2t|j% tjCd}jj"j#Zj%|S t&t'j}j~rFtj% tjCdS trXtj% tj/dS trjtj% tj/dS tr{tj%|tj/dS tttrtj%|tj<dS tj% tjCd}tts|S jj"j#Zj%|S )N_torchdynamo_inlinec                 3   s0    | ]}t |p |pt|tjV  qd S r   )r@   
is_literaltensor_can_be_dict_keyr   enumEnumr   kr   rv   rw   	<genexpr>  s    


z(VariableBuilder._wrap.<locals>.<genexpr>c                    s     | rtt| S | S r   )r   r#   r/   )keyr   rv   rw   index_source  s   
z+VariableBuilder._wrap.<locals>.index_sourcec              	      s6   i | ]}|t jt ||  qS rv   r   r   r"   r   r   r   r   r   r   r   rv   rw   
<dictcomp>  s    z)VariableBuilder._wrap.<locals>.<dictcomp>r   c                 s   s"    | ]}t |pt|V  qd S r   )r   r@   r   r   xrv   rv   rw   r     s     )r   ry   r   r   r   T)allow_torchF)orig_fnorig_sourcery   r   __self__rs    applybuiltin_function_or_methodz3CUDAStreamVariable does not currently work soundly.z"Failed to produce a valid self objenter_result)r   r   r   r   r   r   r   getattr_staticr   r3   r   traceable_tensor_subclassesr   r0   r   dictr   defaultdictOrderedDictallkeysr   is_nn_moduler   
BOOL_FALSE	DICT_KEYSr   r   store_dict_keyr/   rF   r   default_factoryrD   r   r   
track_dictry   r   r   r   Modulewrap_moduler@   r   r   	frozensetID_MATCHr   r   rA   r   r?   BUILTIN_MATCHr2   r*   r   r   !has_user_defined_allowed_in_graphrn   r   r1   rb   r   r   r_   callable
TYPE_MATCHtypesFunctionTyper   checkr.   ra   rK   can_rewriterewritejitScriptFunctionrL   
ModuleTyper   DummyModuler`   PYMODULE_MATCHautogradfunctionFunctionMetarZ   FunctionCtxr   rY   
MethodTypegetattrr   r\   numberwrap_unspecialized_primitiverE   is_matching_objectwrapr   rG   r	   rN   make
NAME_MATCHrs   rm   cudastreamsStreamr   _C_TensorMetarh   r   r    r>   rM   __func__
contextlibnullcontextrC   ro   optim	Optimizerre   rJ   is_process_grouprH   is_device_meshrI   is_placement_type
issubclassrp   rq   r   "cls_supports_mutation_side_effects)r   r   r   type_dispatchid_dispatchr   r   new_fn
new_source
old_sourceself_objrv   r   rw   r   j  s  

































zVariableBuilder._wrapc                 C   s4   t |tjjpt | jto| jjdkot | jjtS )Nstate)	r   r   r   r   ry   r    memberbaser%   r   rv   rv   rw   r     s   
z&VariableBuilder.tensor_can_be_dict_keyc                 C   s   | j o[t| j to[t| j jto[| j jjdko[t| j jjto[t| j jjjto[| j jjjjdko[t| j jjjjto[| j jjjjj| j	j
 v rZt| j	j
| j jjjjj tjjS dS )Nparamsparam_groupsT)ry   r   r"   rE  indexr    rD  r%   
local_namer   f_localsr	  r   r6  r7  r   rv   rv   rw   tensor_should_specialize  s.   
z(VariableBuilder.tensor_should_specializer   c                    sx    tj |D ]
}||u rtd q fddt|D }||t  d}t|tr:j	j
jj||S |S )Nz-list elements are pointing to the list itselfc                    s0   g | ]\}}t jt || qS rv   r   )r   iitemr   r   rv   rw   
<listcomp>  s    z1VariableBuilder.wrap_listlike.<locals>.<listcomp>mutable_localr   )r   r   LIST_LENGTHr   	enumerater   r<   r3   r   r   r   r   
track_listry   )r   r   rM  r   r   rv   rN  rw   r     s   
zVariableBuilder.wrap_listlikec                    s:    tj  fddttD }t|t  dS )Nc                    s2   g | ]}t jt |t| qS rv   )r   r   r)   r   r8   r   )r   rL  r   r   r   rv   rw   rO    s    z7VariableBuilder.wrap_tuple_iterator.<locals>.<listcomp>rP  )r   r   TUPLE_ITERATOR_LENr   r9   rW   r<   )r   r   r   rv   rU  rw   r     s   
z#VariableBuilder.wrap_tuple_iteratorc                    sF    fdddD }t trt| tjdS t| tjdS )Nc                    s,   g | ]}t  jt  |t|qS rv   )r   r   r    r   r'  r   r   rv   rw   rO    s    z4VariableBuilder.wrap_slice_range.<locals>.<listcomp>)startstopstepr   )r   r   rV   r   r   r  rS   EQUALS_MATCH)r   r   itemsrv   r   rw   r     s   
z VariableBuilder.wrap_slice_rangec                 C   s2  ddl m} t||r!| tj}t| jd| _| |j	
|S t|tjjtjjtjjfr6tjs6td t|rYt|| tjd}tt|sN|S | jjj| j||S t|jtjj j!j"rmt|| tjdS t#|ddrt#|dds}J d	t$|| tjtj%| & d
S | jjj'|| j(| & dS )Nr   )OptimizedModule	_orig_modz5TorchDynamo purposely graph breaks on RNN, GRU, LSTMsr   _is_fsdp_managed_moduleF_fsdp_use_orig_paramsz3Dynamo only supports FSDP with use_orig_params=True)r   ry   r   ))
eval_framer\  r3   r   r   r  r    ry   r  r]  r   r   r   r   RNNGRULSTMr   	allow_rnnr   r   is_dynamic_nn_modulerd   r   r<  r   r   r   r   r   r;  r   paralleldistributedDistributedDataParallelr'  rc   r  r   register_attr_or_moduler   )r   r   r\  r   r   rv   rv   rw   r     sR   


zVariableBuilder.wrap_modulec                    s   t j }|r t|tju r t fddt|D  tj	dS |rKt|t
u rK|  v s< j  r< j  rFt| tjdS  |S t| tjdS )Nc                    s*   g | ]\}}t  jt  ||qS rv   )r   r   r"   r   )r   rL  vr   rv   rw   rO  I  s    z0VariableBuilder.wrap_literal.<locals>.<listcomp>r   r   r   )r   specialize_intr   r   r   rU   rS  r   r   rR  r   r   ry   r   is_localr
  r@   CONSTANT_MATCHr)  )r   r   unspecrv   r   rw   r   E  s.   




zVariableBuilder.wrap_literalc                 C   s  |   }|  st|d ur!|  s!| jjj|| j|dS t	|r5| jjj|t
dd| j|dS t|tjv r?d}nt|tjtjjtjjjfv sXt|sXJ t|d}|| jjjv }|rj| jjj| S || jjjv r| jjj| }| |}|r|| |}|S | jjjjt
dd| jt||d}t| j||| tj t!j"t#|t$r|nt%|d| & ||d}|| jjj|< d|j'j(vsJ |j)* |j'j(d< d }	|j+j'j(d	 }
t,|
r|
}	t-||d|	}||j'j(d
< | jj.| t|tjv rt/0| j|||j1j2t|S |S )Nr   [^a-zA-Z0-9]+_TFr   )r   proxyexample_valuer   should_specializeignore_subclassry   tensor_dictrs  grapharg)3r   r   r
  r-   is_fsdp_moduler   r   ri  r   r$   resubr   r   r  r   r   r   r   r   r|   r
   r   input_source_to_var"real_value_tensor_positive_aliases_make_dupe_guardr   r   root_tracercreate_graph_inputwrap_fx_proxyr   r   r   TENSOR_MATCHr   r&   r   rK  nodemeta__dict__copyrr  r   rx   add_symbol_bindingsrj   r   __torch_function__r3  )r   r   ry   ru  is_duplicate_tensorstored_valuer   tensor_proxytensor_variablefake_tensor_valuers  rw  rv   rv   rw   r   g  s   



zVariableBuilder.wrap_tensorc           
      C   s   t d usJ t|t jsJ t|  }t|}t| j||}| jj	j
jtdd| jt||d}||jd}td
t| j||d|}|| jj	j|< |jjjd }t||d|d|d}	|	|jjd	< |S )Nrp  rq  r   r   
target_clsr   rr  rs  rs  T)r{   r|   r}   r~   rw  rv   )r   r   r   r&   r   r   	as_tensorr   r   r   r~  r  ry  rz  r   r   r   wrap_fx_proxy_clsrf   r{  rr  r  r  rx   )
r   r   ry   tensor_value	tensor_vtrr  r   numpy_ndarray_variablers  rw  rv   rv   rw   r     s:   

z"VariableBuilder.wrap_numpy_ndarrayc                 C   s  | j | jjjv r| jjj| j  S t|trt|  st|  tst	j
jjr1t|| tjdS | jjj}| j  }|| jjjvrIt|d d}n| jjj| }|j|kratd|||j d |_|| jjj|< tjrp|jd u sstjswtj}n
t|| tjdS |j|| j|d}| jjjt|| jd  nt	 |}t|  ts|  !tj"dh}d|i}ni }|#d|  i t|t	j$r|#d|i | jjj%j&t'(d	d
| j t)||  d}	t*t+f| j|	|d|}
|
| jjj| j < t|  sR| jj,rt|  t-st.d/||  d }t|
tr|
j0}n|
j1j2j3d }t4|r>|}|j5| jj5u s>J d|j5 dt6|  |t|t	j$|d|d|	j2j3d< |
S )Nrk  )r   r   z%automatic dynamic int %s val %s != %s)ry   dynamic_dimTr   ry   	raw_valuerp  rq  r   )r   rr  rs  zJDynamo attempts to add additional input during export: value={}, source={}rs  zfake mode (z^) from fake tensor metadata doesn't match mode({self.tx.fake_mode}) from InstructionTranslatorF)r}   r~   rw  )7r   r   r   unspec_variable_mapr   r   r$   r   r'   r   _dynamor   rl  r@   r   r   rn  	shape_envry   frame_stater   r   logdebugautomatic_dynamic_shapesassume_static_by_defaultr   DYNAMIC$create_unspecified_symint_and_symboltracked_fakesr   TrackedFaketensorr   r  updater   r~  r  ry  rz  r   r  rk   exportr%   AssertionErrorformatr   rr  r  r  r   	fake_moderx   )r   r   r  r   frame_state_entryr  wrapped_valuer   r   rr  
unspec_varr  rs  rv   rv   rw   r)    s   













z,VariableBuilder.wrap_unspecialized_primitive)+rs   rt   ru   __doc__r(   r   r   r   staticmethodr   	lru_cacher   r   r   r   r   classmethodr   r   r   r   rK  r   r   r   r4   r   r   r7   r   r   r   r   r   r   r  r  r   r   r   r   r)  __classcell__rv   rv   r   rw   r      sF    

	$'  I	E" (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   rq   r   rE   user_clsr   r   r   ry   r"   r    r   r   add_optionsrX   )objr   r[  fieldry   rv   rv   rw   r     s   

r   c                 K   s   t dt| ||d|S )Nr  rv   )r  ri   )r   rr  rs  r   rv   rv   rw   r    s   r  Fc                    s  dd l ddlm} t|sJ d|v r$|d d ur$jj|d  d|jjvs3J |jjd  |}fdd  fdd	}t	 m |d u rRt
|j}nZt|tr]|jju sa |rbnJt|jrjrj  |||jj|j< W d    n1 sw   Y  || tu d
}	d|v r|d d usJ |d |	d< t|fdi|	}W d    n1 sw   Y  t|jrt|jj}
|dd}|
s|r|}nd }||}||jjd< | |}t|jjjr|jju r|
rjjnj|d< ||d< || | |fi |S t|jjdr.|jjjdkr.t|jjjjjs7|jjj j!krCddl"m#} ||jjS |jjjj$ksU|jjj%j&kr_ddl"m'} ||S t(|j)rt*dd |D rdd |D }t+|fi |S t|t,t-t.fr,||jjd< g }t/|D ]/\}}|d u r|0t1d$i | q|0t2| |j3dt4j5||fi fd|i| qt|j)rt+||fi |S t(|t,rt6|fi |S t(|t-t7frt8|fdt9 i|S t(|t.rt:|fdt9 i|S |j;j<dks"t|ds"J d|j;j< dt=| t>||j;fi |S |d u s9|jjj?u r@t1d$i |S t|j@jAjBfr[||jjd< tC||fi |S |jjj%jDjEj%jFfv rx||jjd< tG||fi |S t|tHr|jjjItJt4j5jKjLjMt4jNtJjOd tPtJjOd!tPjQjRjSf	v r||jjd< t1|fi |S tTd"tU| d#|jjV d#|jj   d S )%Nr   r   )InstructionTranslatorBaser   rs  c                    sJ   t |  jr# | r# j } jj| |}t |to"|jjkS dS NF)	r   r   _is_functional_tensorr1  $_functionalization_reapply_views_tls
_functorch_unwrap_functional_tensorr
   r  )r   reapply_views	unwrapped)r   r   rv   rw   (_is_functional_tensor_fakified_by_dynamo  s   


zCwrap_fx_proxy_cls.<locals>._is_functional_tensor_fakified_by_dynamoc                    s*   t | jrt | ts | st| } | S r   )r   r   r
   r+   r   )r  r   rv   rw   _clone_input  s   z'wrap_fx_proxy_cls.<locals>._clone_input)ru  r}   ry   r   rt  F
class_typespecialized_valuers   	set_stater;   )rn   )rq   c                 s   s    | ]}t |tV  qd S r   )r   r   r   rv   rv   rw   r   F  s    

z$wrap_fx_proxy_cls.<locals>.<genexpr>c                 S   s   g | ]}t |qS rv   )r@   r   rv   rv   rw   rO  I  s    z%wrap_fx_proxy_cls.<locals>.<listcomp>call_functionrQ  ztorch.return_types_fieldsz	expected z. == torch.return_types or named tuple but got get_rankget_world_sizeztorch.* op returned non-Tensor  r   )Wtorch._export.constraintssymbolic_convertr  r   r   r   r  r  r  r5   r,   r
   r  r   r  r1  DisableTorchFunctionSubclasstracerreal_value_cacheri   wrap_to_fake_tensor_and_recordr   r   pop
specializer   r|   hasattrtargetrs   r   	Generatorrandomset_rng_stater   rn   _DisableFuncTorchr.  _is_in_bad_forkrq   r3   r   r  rU   r   r   setrS  r   r@   r  create_proxyoperatorgetitemrX   r   rQ   r<   rT   r   rt   r   rR   manual_seedr   SymFloatSymBoolrg   r/  r0  current_streamrB   r   sym_intr'  _utils_element_sizeseedmodrg  rr   _exportconstraintsconstrain_as_valuer   r=   op)r  r   rr  rs  ru  r   r  initial_example_valuer  kwargsis_parameterrt  r  specialized_propsrn   rq   sizesunpackedrL  valrv   )r  r   r   rw   r    s  
	"



r  c                   @   sV   e Zd ZU eeef ed< eed< ee	e
  ed< defddZdedefdd	Zd
S )r  fakery   constraint_dimsreturnc                 C   s   t | j| j fS r   )hashr  ry   r   r   rv   rv   rw   __hash__  s   zTrackedFake.__hash__otherc                 C   s.   t |tr| j|ju o| j |j kS dS r  )r   r  r  ry   r   )r   r  rv   rv   rw   __eq__  s   
 zTrackedFake.__eq__N)rs   rt   ru   r   r
   r   r   r(   r   DimListr   r   r  objectr   r  rv   rv   rv   rw   r    s   
 r  c              	      s~  |rt jg|   d g|   fS d }||jjvr&td d }t|  |_nH|jj| }|jd urn| jt	|jkrGt
d|| j|j d |_n't|jD ]!\}}|d urm|  | |krmt
d||| || d |j|< qLt| }i   fdd}|jjr|jjD ]!}	|	j|kr||	j|	j |	jd ur|	jj|kr||	jj|	j qg }
g }t|  D ]}|t| dt v }|t| dt v }|t| dt v }tjo|jd u p|j| d u }|jr|rt
d| d |j|<  |}	|	d u r
|rtjstd	d
}	n|s
|r
tdd
}	||	 |	d us|s|rt j}n|s(tjs(|r,t j}nt j}|
| q||jj|< |
|fS )Nz!automatic dynamic %s dim %s != %sz&automatic dynamic %s size(%s) %s != %sc                    s@   |  v rddl m} ||j |  j@ dd | < d S | | < d S )Nr   )StrictMinMaxConstraintF)vr	warn_only)%torch.fx.experimental.symbolic_shapesr  r  )dimconstraint_ranger  dim2constraintrv   rw   update_dim2constraint  s   z1_automatic_dynamic.<locals>.update_dim2constraint_dynamo_dynamic_indices_dynamo_weak_dynamic_indices_dynamo_static_indicesz#automatic dynamic %s marked dynamicF)r  T)r   STATICr  r   r  r   r   r   ndimlenr  r  rS  r   export_constraintst_idr  sharedr   r'  r  r   r  r   allow_ignore_mark_dynamicr   r   r  r  DUCK)er   r   static_shapesr  rL  r  r  r  
constraintdynamic_dimsr  marked_dynamicmarked_weak_dynamicmarked_staticautomatic_dynamicdynamicrv   r  rw   _automatic_dynamic  s   











r  ry   r}   c                   s   t tjtjjtfv srttjstr~d usJ t|	 d\}}t
 |\ td tj  t fdd}|rm|rW smjjt|  jjt  | | djjt< |S S )N)r   zwrap_to_fake %s %s %s %sc                      s   j j dS )N)ru  ry   r  r  )r  from_tensorrv   r  r  r  ru  ry   r   rv   rw   r   0  s    z0wrap_to_fake_tensor_and_record.<locals>.<lambda>)r   stride)r   r   r   r   r   r
   r   r   r6   r   r  r   r  r  r   shaper:   r
  r   r  r   r  tracked_fakes_id_to_sourcer   r   r  tensor_weakref_to_sizes_stridesr   )r  r   ru  ry   r}   r  reasonfake_erv   r  rw   r    s@   


	r  c                   @   s*   e Zd ZdZdef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.
    r  c                    s&  t |tr|S t |tjrt|S t|rt|S t	|r#t
|S t|r4t|r0d jj_t|S t |tjr>t|S t |tjrHt|S t |ttjfrTt|S t |trkt fdd| D tt dS t |tt frt!"t|}| fdd|D t dS t#dt|  d S )NTc                    s   i | ]
\}}| |qS rv   rv   )r   r   rj  r   rv   rw   r   g  s    z.SourcelessBuilder.__call__.<locals>.<dictcomp>)rQ  c                    s   g | ]} |qS rv   rv   r   r   rv   rw   rO  m  r   z.SourcelessBuilder.__call__.<locals>.<listcomp>z&Unexpected type in sourceless builder )$r   r>   r   _HAS_DEFAULT_FACTORY_CLASSrq   r@   r   r  wrap_constant_literalr   r?   r   r   r   r   r  rn   r  r  rL   r   r   rA   r   abcABCMetarp   r  rD   r[  r<   r   r   rO   cls_forr   )r   r   r   r   rv   r   rw   r   Q  s8   




zSourcelessBuilder.__call__c                 C   s   t | sJ t | dS )Nr   )r@   r   r   rv   rv   rw   r  p  s   
z'SourcelessBuilder.wrap_constant_literalN)rs   rt   ru   r  r>   r   r  r  rv   rv   rv   rw   r  D  s
    r  r   r  )F)r   r   r4  r   r   r   r   loggingr  ry  r  typingr   r   r   r   numpyr   ModuleNotFoundErrorr   r   torch._guardsr   r   
torch._opsr	   torch._subclasses.fake_tensorr
   r   r  r   r   r   torch.fx.immutable_collectionsr   torch.utils._python_dispatchr   torch.utils.weakr   r   r   r   r   r   r   allowed_functionsr   r   r   r   excr   r   r   r   r   r   ry   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   utilsr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   rE  r<   r=   r>   builtinr?   constantr@   rA   ctx_managerrB   rC   dictsrD   rE   rF   rG   rg  rH   rI   rJ   	functionsrK   rL   rM   higher_order_opsrN   listsrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   miscrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   	nn_modulerc   rd   	optimizerre   r  rf   rg   rh   ri   rj   rk   rl   rm   rn   user_definedro   rp   rq   	getLoggerrs   r  r  rr   	dataclassrx   r   r   r   r  r  r  r  r   r  r  rv   rv   rv   rw   <module>   s    0L00 
(       R
3
 =v
-