U
    9%e                    @   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k
r   dZY nX 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.Zd<d0d1ZejG d2d3 d3Zd4d5 Zd=eeB ed6d7d8ZG d9d: 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   ^/var/www/html/Darija-Ai-API/env/lib/python3.8/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 k	s t|S | jS d S N)
isinstancerz   r   AssertionError)selfrrv   rv   rw   example   s
    zGraphArg.examplec                 C   s,   t | jtjr(t| j| _t| js(td S r   )r   rz   torchTensorr   r   r|   r   r   rv   rv   rw   __post_init__   s    zGraphArg.__post_init__c                 C   s   | j |S r   )ry   Zreconstructr   txrv   rv   rw   load   s    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ed 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eeeeef ddd Zedd!d"Zeeef dd#d$Z e!j"j#dd%d&Z$d'd( Z%e!j&dd)d*Z'd+d, Z(d-d. Z)  Z*S )/VariableBuilderz3Wrap a python value in a VariableTracker() instancery   c                    sH   |d k	st dt d k	s$t dt   || _|| _| | _d S )NzRConsider SourcelessBuilder for ephemeral objects, usually objects created locally.zExpected active TracingContext)r   r   getsuper__init__r   ry   name)r   r   ry   	__class__rv   rw   r      s    
zVariableBuilder.__init__c                 C   s|   || j jjkrB| j jj| }t| j|j}|r>|| |}|S | |jf | 	 }| 
|rx| j jj| j||}|S r   )r   outputside_effectsr   ry   
add_guardsmake_guards_wrapcloneoptions_can_lift_attrs_to_inputstrack_object_existing)r   valueZside_effect_result	dup_guardvtrv   rv   rw   __call__   s     

  zVariableBuilder.__call__c                 C   s   t |ttttfk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)Z	tuple_cls)r0   	functoolspartialrR   r   tuplerX   listrQ   r4   r   nnZParameterListZ
ModuleListcollectionsdequerP   r   rv   rv   rw   	list_type   s"          zVariableBuilder.list_typec                 C   s   | j S r   r   r   rv   rv   rw   
get_source  s    zVariableBuilder.get_sourcec                 C   s   d|   iS )Nry   )r   r   rv   rv   rw   r     s    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>  s     z.VariableBuilder.make_guards.<locals>.<setcomp>)r   r   r!   guard_sourcer   Z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rtr|tj| j f i }|D ]6\}}t!|tr|n|fD ]}||kst"|||< qq|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SizeZdeviceZdtypewrap_literalr   Ztrace_numpynpappendndarraywrap_numpy_ndarrayr   r   )clsentriesresulttsfntrv   rv   rw   _type_dispatch  s4    

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 ]}||kstt	||t
|< qdqD|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      c                 S   s   t t| j| tjdS r   )r^   _dataclasses_fields_lambdary   r   r   r   r   rv   rv   rw   r   R  s   
c                 S   s   t || j| tjdS r   )rn   ry   r   r   r   r   rv   rv   rw   r   Z  s   
)r   inspect	signaturedataclassesfieldsrl   r   r   r   r   id)r   r   r   r   r   r   r   rv   rv   rw   _id_dispatchA  s$    
	zVariableBuilder._id_dispatchc              	      sj  j } t}|d k	r*|S  t}|d k	rN|S tdtspt	t
jrzS trS t	ttjtjfrtfdd D rs܈  r܈ tj n tj  D ] }|rjt|| qfdd fdd D }t	tjrft|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r8t4j%|tj5dS t6rNt7j%dS t8rt9rldjj"_:t;j%|tj<dS t=rt>j%|tj/dS t?rt@stAtBj%|tCrtj<ntjDdS t	ttEjFfr(tGjHtIddr(tdds(tJj%|tj<dS tKLrftKM\}}j%}	|_%tK||	||tj<dS t	tEjFt'jNjOfrtPj%|tj<dS t	tEjQtRjSfrtTj%|tjUdS t	t'jVjWjXrtYj%|tj<dS t&t'jVjWjZrjj"j#[j%t\j%|tjDdS t&tEj]rt	t^dd t'jVjWjXrt^dddkrt^j_dd krt`tYj_j%|tj<ddS t@rt&t@jarbS tcdrtcef|tjDS tgdrtg|tjDdS t&thrtijjj% tjDtjkdS tjldkrDt&j_tmrDt;|tj<dS t&t'jnjojprbtqd nt&t'jrjsrt
jkrttj%dS t&tEj]rt&j_t'j(j)rtujtvj%ddj_}
|
rt&|
twstAdtxjy|
j%|tj<dS t	tzj{r2tdd d kr2t|j%|tj<dS t}drlt}j% tjDd}jj"j#[j%|S t&t'j~jrtj% tjDdS trtj% tj/dS trtj% tj/dS trtj%|tj/dS tttr$tj%|tj<dS tj% tjDd}ttsP|S jj"j#[j%|S d S )NZ_torchdynamo_inlinec                 3   s.   | ]&}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 d 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)Zallow_torchF)Zorig_fnZorig_sourcery   r   __self__rs    applyZ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   Z
BOOL_FALSEZ	DICT_KEYSr   r   Zstore_dict_keyr/   rF   r   default_factoryrD   r   r   Z
track_dictry   r   r   r   Modulewrap_moduler@   r   r   	frozensetID_MATCHr   r   rA   r   r?   ZBUILTIN_MATCHr2   r*   r   r   !has_user_defined_allowed_in_graphrn   r   r1   rb   r   r   r   r_   callable
TYPE_MATCHtypesFunctionTyper   checkr.   ra   rK   Zcan_rewriteZrewriteZjitZScriptFunctionrL   
ModuleTyper   ZDummyModuler`   ZPYMODULE_MATCHZautogradfunctionZFunctionMetarZ   ZFunctionCtxr   rY   
MethodTypegetattrr   r\   numberwrap_unspecialized_primitiverE   Zis_matching_objectwrapr   rG   r	   rN   makeZ
NAME_MATCHrs   rm   cudastreamsStreamr   _CZ_TensorMetarh   r   r    r>   rM   __func__
contextlibnullcontextrC   ro   optim	Optimizerre   rJ   Zis_process_grouprH   Zis_device_meshrI   Zis_placement_type
issubclassrp   rq   r   "cls_supports_mutation_side_effects)r   r   r   Ztype_dispatchZid_dispatchr   r   Znew_fnZ
new_sourceZ
old_sourceZself_objrv   r   rw   r   j  s0   


 

 

















 	
     
 


  




  zVariableBuilder._wrapc                 C   s4   t |tjjp2t | jto2| jjdko2t | 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 ot| j tot| j jto| j jjdkot| j jjtot| j jjjto| j jjjjdkot| j jjjjto| j jjjjj| j	j
 krt| j	j
| j jjjjj tjjS dS )NparamsZparam_groupsT)ry   r   r"   r  indexr    r  r%   Z
local_namer   f_localsr   r   r  r  r   rv   rv   rw   tensor_should_specialize  s,    
z(VariableBuilder.tensor_should_specializer   c                    sx    tj |D ]}||krtd q fddt|D }||t  d}t|trt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   Z
track_listry   )r   r   r"  r   r   rv   r#  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   r!  r   r   r   rv   rw   r$    s   z7VariableBuilder.wrap_tuple_iterator.<locals>.<listcomp>r%  )r   r   ZTUPLE_ITERATOR_LENr   r9   rW   r<   )r   r   r   rv   r)  rw   r     s    
  z#VariableBuilder.wrap_tuple_iteratorc                    sJ    fdddD }t tr2t| tjdS t| tjdS d S )Nc                    s,   g | ]$}t  jt  |t|qS rv   )r   r   r    r   r
  r   r   rv   rw   r$    s   z4VariableBuilder.wrap_slice_range.<locals>.<listcomp>)startstopstepr   )r   r   rV   r   r   r  rS   ZEQUALS_MATCH)r   r   itemsrv   r   rw   r     s    
 
 
z VariableBuilder.wrap_slice_rangec                 C   s:  ddl m} t||rB| tj}t| jd| _| |j	
|S t|tjjtjjtjjfrltjsltd t|rt|| tjd}tt|s|S | jjj| j||S t|jtjj j!j"rt|| tjdS t#|ddrt#|dd st$d	t%|| tjtj&| ' d
S | jjj(|| j)| ' dS d S )Nr   )OptimizedModule	_orig_modz5TorchDynamo purposely graph breaks on RNN, GRU, LSTMsr   Z_is_fsdp_managed_moduleFZ_fsdp_use_orig_paramsz3Dynamo only supports FSDP with use_orig_params=True)r   ry   r   )*Z
eval_framer.  r3   r   r   r  r    ry   r   r/  r   r   r   r   ZRNNZGRUZLSTMr   Z	allow_rnnr   r   Zis_dynamic_nn_modulerd   r   r  r   r   r   r   r   r  r   paralleldistributedZDistributedDataParallelr
  r   rc   r   r   register_attr_or_moduler   )r   r   r.  r   r   rv   rv   rw   r      s`    

 

   
 
  zVariableBuilder.wrap_modulec                    s   t j }|r@t|tjkr@t fddt|D  tj	dS |rt|t
kr|  ksx j  rx j  rt| tjdS  |S nt| tjdS d S )Nc                    s*   g | ]"\}}t  jt  ||qS rv   )r   r   r"   r   )r   r!  vr   rv   rw   r$  I  s   z0VariableBuilder.wrap_literal.<locals>.<listcomp>r   r   r   )r   specialize_intr   r   r   rU   r(  r   r   r'  r   r   ry   r   is_localr   r@   CONSTANT_MATCHr  )r   r   Zunspecrv   r   rw   r   E  s0    


	

zVariableBuilder.wrap_literalc                 C   s(  |   }|  s,t|d k	rB|  sB| jjj|| j|dS t	|rj| jjj|t
dd| j|dS t|tjkr~d}n6t|tjtjjtjjjfkst|stt|d}|| jjjk}|r| jjj| S || jjjkr| jjj| }| |}|r|| |}|S | jjjjt
dd| jt||d}t| j||| t j!t"j#t$|t%rb|nt&|d| ' ||d}|| jjj|< d|j(j)kst|j*+ |j(j)d< d }	|j,j(j)d	 }
t-|
r|
}	t.||d|	}||j(j)d
< | jj/| t|tjkr$t01| j|||j2j3t|S |S )Nr   [^a-zA-Z0-9]+_TFr   )r   proxyexample_valuer   should_specializeignore_subclassry   Ztensor_dictr;  grapharg)4r   r   r   r-   Zis_fsdp_moduler   r   r2  r   r$   resubr   r   r   r   r   r   r   r   r|   r
   r   r   input_source_to_varZ"real_value_tensor_positive_aliasesZ_make_dupe_guardr   r   root_tracercreate_graph_inputwrap_fx_proxyr   r   r   ZTENSOR_MATCHr   r&   r   r   nodemeta__dict__copyr:  r   rx   Zadd_symbol_bindingsrj   r   Z__torch_function__r  )r   r   ry   r=  Zis_duplicate_tensorZstored_valuer   Ztensor_proxyZtensor_variablefake_tensor_valuer;  r>  rv   rv   rw   r   g  s    




  
zVariableBuilder.wrap_tensorc           
      C   s   t d k	stt|t jstt|  }t|}t| j	||}| j	j
jjtdd| jt||d}||jd}tf t| j	||d|}|| j	j
j|< |jjjd }t||d|d|d}	|	|jjd	< |S )
Nr8  r9  r   r   
target_clsr   r:  r;  r;  T)r{   r|   r}   r~   r>  )r   r   r   r   r&   r   r   Z	as_tensorr   r   r   rB  rC  r?  r@  r   r   r   wrap_fx_proxy_clsrf   rA  r:  rE  rF  rx   )
r   r   ry   Ztensor_valueZ	tensor_vtr:  r   Znumpy_ndarray_variabler;  r>  rv   rv   rw   r     s>    

  z"VariableBuilder.wrap_numpy_ndarrayc                 C   s  | j | jjjkr | jjj| j  S t|tr6t|  s6t|  ts6t	j
jjrht|| tjdS | jjj}| j  }|| jjjkrt|d d}n0| jjj| }|j|krtd|||j d |_|| jjj|< tjr|jd kstjstj}nt|| tjdS |j|| j|d}| jjjt|| jd  n
t	 |}t|  tsn|  !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|  s| jj,r0t|  t-s0t.d/||  d }t|
trH|
j0}n|
j1j2j3d }t4|r|}|j5| jj5kst.d|j5 dt6|  |t|t	j$|d|d|	j2j3d< |
S d S )Nr4  )r   r   z%automatic dynamic int %s val %s != %s)ry   dynamic_dimTr   ry   Z	raw_valuer8  r9  r   )r   r:  r;  zJDynamo attempts to add additional input during export: value={}, source={}r;  zfake mode (z^) from fake tensor metadata doesn't match mode({self.tx.fake_mode}) from InstructionTranslatorF)r}   r~   r>  )7r   r   r   Zunspec_variable_mapr   r   r$   r   r'   r   Z_dynamor   r5  r@   r   r   r7  	shape_envry   frame_stater   r   logdebugautomatic_dynamic_shapesassume_static_by_defaultr   DYNAMICZ$create_unspecified_symint_and_symboltracked_fakesr   TrackedFaketensorr   r  updater   rB  rC  r?  r@  r   rL  rk   exportr%   r   formatr   r:  rE  rF  r   	fake_moderx   )r   r   rN  r   frame_state_entryrM  Zwrapped_valuer   r   r:  Z
unspec_varrI  r;  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   r   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      sB   

	$'  I	E" (r   c                 C   s   t | tr| j}n t | tr$| j}ntd|   g }t|D ]:}d }| jrbt	t
| jd|j}|t||d|  q@t|| S )Nz)Dataclass fields handling fails for type __dataclass_fields__r   )r   rq   r   rE   Zuser_clsr   r   r   ry   r"   r    r   r   add_optionsrX   )objr   r-  fieldry   rv   rv   rw   r     s    


 r   c                 K   s   t f t| ||d|S )NrJ  )rL  ri   )r   r:  r;  r   rv   rv   rw   rD    s    rD  Fc                    sJ  dd l ddlm} t|s"td|krH|d d k	rHjj|d  d|jj	ksft|jj	d  |}fdd  fdd	}t
  |d krt|j}nt|tr|jjks |rnt|jrLjrj  |||jj|j< W 5 Q R X || tkd
}	d|kr(|d d k	s,t|d |	d< t|fdi|	}W 5 Q R X t|jrt|jj}
|dd}|
s|r|}nd }||}||jj	d< | |}t|jjjr|jjkr|
rjjnj|d< ||d< || | |f|S t|jjdr>|jjjdkr>t|jjjjj sP|jjj!j"krhddl#m$} ||jjS |jjjj%ks|jjj&j'krddl#m(} ||S t)|j*rt+dd |D rdd |D }t,|f|S t|t-t.t/fr(||jj	d< g }t0|D ]X\}}|d kr*|1t2d$| n2|1t3| |j4dt5j6||fi fd|i| qt|j*r|t,||f|S t)|t-rt7|f|S t)|t.t8frt9|fdt: i|S t)|t/rt;|fdt: i|S |j<j=dkst|dstd|j<j= dt>| t?||j<f|S n|d ksB|jjj@krLt2d%|S t|jAjBjCfr~||jj	d< tD||f|S |jjj&jEjFj&jGfkr||jj	d< tH||f|S t|tIr|jjjJtKt5j6jLjMjNt5jOtKjPd tQtKjPd!tQjRjSjTf	kr||jj	d< t2|f|S tUd"tV| d#|jjW d#|jj   d S )&Nr   r   )InstructionTranslatorBaser   r;  c                    sJ   t |  jrF | rF j } jj| |}t |toD|jjkS dS NF)	r   r   Z_is_functional_tensorr  Z$_functionalization_reapply_views_tlsZ
_functorchZ_unwrap_functional_tensorr
   r[  )r   Zreapply_viewsZ	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   )rh  r   rv   rw   _clone_input  s    z'wrap_fx_proxy_cls.<locals>._clone_input)r=  r}   ry   r   r<  FZ
class_typespecialized_valuers   Z	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   r$  I  s     z%wrap_fx_proxy_cls.<locals>.<listcomp>Zcall_functionr&  ztorch.return_types_fieldsz	expected z. == torch.return_types or named tuple but got Zget_rankZget_world_sizeztorch.* op returned non-Tensor  )N)N)XZtorch._export.constraintsZsymbolic_convertrf  r   r   r   r   rX  rE  rF  r5   r,   r
   r[  r   rY  r  ZDisableTorchFunctionSubclassZtracerZreal_value_cacheri   wrap_to_fake_tensor_and_recordr   r   popZ
specializer   r|   hasattrtargetrs   r   	GeneratorrandomZset_rng_stater   rn   Z_DisableFuncTorchr  Z_is_in_bad_forkrq   r3   r   r   rU   r   r   setr(  r   r@   rL  Zcreate_proxyoperatorgetitemrX   r   rQ   r<   rT   r   rt   r   rR   Zmanual_seedr   ZSymFloatZSymBoolrg   r  r  Zcurrent_streamrB   r   Zsym_intr
  _utilsZ_element_sizeseedmodr1  rr   Z_exportconstraintsZconstrain_as_valuer   r=   op)rK  r   r:  r;  r=  r   rf  Zinitial_example_valueri  kwargsZis_parameterr<  rj  Zspecialized_propsrn   rq   sizesunpackedr!  valrv   )rh  r   r   rw   rL    s   






    
rL  c                   @   sT   e Zd ZU eeef ed< eed< ee	e
  ed< edddZeeddd	Zd
S )rV  fakery   constraint_dimsreturnc                 C   s   t | j| j fS r   )hashr  ry   r   r   rv   rv   rw   __hash__  s    zTrackedFake.__hash__)otherr  c                 C   s.   t |tr*| j|jko(| j |j kS dS rg  )r   rV  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   rV    s
   
rV  c              	      s  |r"t jg|   d g|   fS d }||jjkrLtd d }t|  |_n|jj| }|jd k	r| jt	|jkrt
d|| j|j d |_nNt|jD ]B\}}|d k	r|  | |krt
d||| || d |j|< qt| }i   fdd}|jjrR|jjD ]J}	|	j|kr$||	j|	j |	jd k	r|	jj|kr||	jj|	j qg }
g }t|  D ]}|t| dt k}|t| dt k}|t| dt k}tjo|jd kp|j| d k}|jr|rt
d| d |j|<  |}	|	d kr,|rtjstd	d
}	n|s,|r,tdd
}	||	 |	d k	sL|sL|rTt j}n"|shtjsh|rpt j}nt j}|
| qf||jj|< |
|fS )Nz!automatic dynamic %s dim %s != %sz&automatic dynamic %s size(%s) %s != %sc                    s>   |  kr2ddl m} ||j |  j@ dd | < n| | < d S )Nr   )StrictMinMaxConstraintF)vr	warn_only)%torch.fx.experimental.symbolic_shapesr  r  )dimconstraint_ranger  Zdim2constraintrv   rw   update_dim2constraint  s    z1_automatic_dynamic.<locals>.update_dim2constraintZ_dynamo_dynamic_indicesZ_dynamo_weak_dynamic_indicesZ_dynamo_static_indicesz#automatic dynamic %s marked dynamicF)r  T)r   ZSTATICr  r   rO  r   r   r   ndimlenrP  rQ  r(  r   Zexport_constraintst_idr  Zsharedr   r
  rs  r   rR  r   Zallow_ignore_mark_dynamicr   r   rT  rS  ZDUCK)er   r   static_shapesr\  r!  r  r  r  
constraintdynamic_dimsr  Zmarked_dynamicZmarked_weak_dynamicZmarked_staticZautomatic_dynamicZdynamicrv   r  rw   _automatic_dynamic  s    


 




r  )ry   r}   c                   s  t tjtjjtfks0r(ttjs0trd k	s<tt	|
 d\}}t |\ td tj  t fdd}|r|r sڈjjt|  jjt  | | djjt< |S S d S )N)r   zwrap_to_fake %s %s %s %sc                      s   j j dS )N)r=  ry   r  r  )r[  Zfrom_tensorrv   r  r  r  r=  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   r   r6   r   r  r   rP  rQ  r   shaper:   r   r   rU  r   rV  Ztracked_fakes_id_to_sourcer   r   r  Ztensor_weakref_to_sizes_stridesr   )r  r   r=  ry   r}   r  reasonZfake_erv   r  rw   rm    sL    
  
   	rm  c                   @   s*   e Zd ZdZed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|r6t|S t	|rFt
|S t|rht|r`d jj_t|S t |tjr|t|S t |tjrt|S t |ttjfrt|S t |trt fdd| D tt dS t |tt frt!"t|}| fdd|D t dS t#dt|  d S )NTc                    s   i | ]\}}| |qS rv   rv   )r   r   r3  r   rv   rw   r   g  s      z.SourcelessBuilder.__call__.<locals>.<dictcomp>)r&  c                    s   g | ]} |qS rv   rv   r   r   rv   rw   r$  m  s     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   Zcls_forr   )r   r   r   r   rv   r   rw   r   Q  s8    




zSourcelessBuilder.__call__c                 C   s   t | stt | dS )Nr   )r@   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  )N)NF)F)r  r   r  r   r   r   r   loggingrt  r?  r  typingr   r   r   r   numpyr   ModuleNotFoundErrorr   r   Ztorch._guardsr   r   Z
torch._opsr	   Ztorch._subclasses.fake_tensorr
   r   r  r   r   r   Ztorch.fx.immutable_collectionsr   Ztorch.utils._python_dispatchr   Ztorch.utils.weakr   r   r   r   r   r   r   Z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:   r  r<   r=   r>   builtinr?   Zconstantr@   rA   Zctx_managerrB   rC   ZdictsrD   rE   rF   rG   r1  rH   rI   rJ   Z	functionsrK   rL   rM   Zhigher_order_opsrN   listsrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   miscrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   Z	nn_modulerc   rd   Z	optimizerre   rW  rf   rg   rh   ri   rj   rk   rl   rm   rn   Zuser_definedro   rp   rq   	getLoggerrs   rP  r  rr   	dataclassrx   r   r   r   rD  rL  rV  r  r   rm  r  rv   rv   rv   rw   <module>   s   
0L00 
(       R
3   
 =v  -