o
    hq                     @   s   d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	m
Z
mZmZm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 eZd	d
 Zdd Zdd ZddddZG dd dZd dl m!Z" dS )    N)ContextManagerListOptional)_unwrap_functional_tensor_wrap_functional_tensorcurrent_levelpeek_interpreter_stackTransformType)Source)DimConstraint
DimDynamic)StorageWeakRef)is_traceable_wrapper_subclasstransform_subclass)	WeakIdRefc                 C   s   z| j W S  ty   Y dS w )NF)is_leafRuntimeErrort r   R/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_subclasses/meta_utils.pysafe_is_leaf   s
   r   c                 C   s>   t   t dd | jW  d    S 1 sw   Y  d S )NignorezThe .grad attribute of a Tensor)warningscatch_warningsfilterwarningsgradr   r   r   r   	safe_grad#   s   
$r   c                 C   s   | |ksJ |  d| d S )Nz != r   )abr   r   r   	assert_eq)   s   r    Fskip_symbolicc                   s    fdd||S )Nc                    sf   | j |j  s | j|j  | j|j  | j|j  | jd u |jd u   | j|j  |  |   |  |   |  |   t	| d ut	|d u t	| d urgt	| t	| | jr | 
 |
   |  |   |  |  d S s |  |   |  |   |  |  |  r| j|j d S d S N)dtypeshaperequires_gradr   grad_fn	is_sparseis_inferenceis_conjis_negr   	dense_dim
sparse_dimis_coalescedstridestorage_offset_is_view_base)m1m2r    gor"   r   r   r6   .   s0   zassert_metadata_eq.<locals>.gor   )r    r3   r4   r"   r   r5   r   assert_metadata_eq-   s   
r7   c                	   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zddd dddfde	e
 de	ee  de	ee  fddZ	ddd dddddddZdS )MetaConverterc                 C   s>   i | _ t | _g | _d| _d| _d| _d| _d | _	d| _
d S )N   r   )storage_memoweakrefWeakValueDictionarytensor_memomaybe_storages_to_deletecheck_expired_frequencycheck_expired_counthitmissdel_hookarg_cntselfr   r   r   __init__V   s   

zMetaConverter.__init__c                 C   s   | j dko	| jdkS )Nr   )rA   rB   rE   r   r   r   
successfula   s   zMetaConverter.successfulc                 C   sh   g }g }| j D ]}| s|| q|| q|D ]	}| j|d  q|| _ t| jt| j | _d S r#   )r>   expiredappendr:   popmaxr?   len)rF   new_listor_to_deleteobjr   r   r   check_for_expired_weak_storagesd   s   

z-MetaConverter.check_for_expired_weak_storagesc                 C   s   | j t|d S r#   )r=   getr   )rF   r   r   r   r   get_tensor_memox   s   zMetaConverter.get_tensor_memoc                    sZ   t |  |js|jrd nt| t| fdd}t || || j< d S )Nc                     sZ     } | d u r	d S | j d  r r| jd  d S d ur+| j d S d S r#   )r=   rK   rI   r:   r>   rJ   )self_refself_weak_reftensor_ref_keyweak_str   r   del_ten   s   
z.MetaConverter.set_tensor_memo.<locals>.del_ten)	r;   refr(   	is_mkldnnr   _typed_storager   finalizer=   )rF   r   vrY   r   rU   r   set_tensor_memo{   s   
zMetaConverter.set_tensor_memoc                    s6   t  }|| jvr| fdd | j|< | j| S )Nc                      s   t j  t jddS Nmeta)r$   device)torchemptysizeuint8r   sr   r   <lambda>   s    z,MetaConverter.meta_storage.<locals>.<lambda>)r   r:   untyped_storage)rF   rh   callbackswrr   rg   r   meta_storage   s   


zMetaConverter.meta_storageNc                 C      |  S r#   r   r   r   r   r   ri          zMetaConverter.<lambda>sourcedynamic_dimsconstraint_dimsc                    s  d u rddl m} |dt| j tj tjjj	r!J | j
}|  j
d7  _
tj}	d ur5j}	 fdd}
|  jd7  _| j| jkrR|   d| _| d u rlt  jrt}|fdd}t|szJ d	|  jrd
|_jr|st  | }|  W d    n1 sw   Y  nqjrt}|
\}|fdd}t|sJ d	jrd
|_jr|st  | }W d    n1 sw   Y  n, rV sJ ddl m} rtjgj !  }nd }| j"j ||d|d}dd }tj#tjjj$}tj%tjjj$d z|j&j&krAn"||j&j&rOt'|}n|j&|j&r]t(|}n|)j&}|
\}trt* # |	  |+|}W d    n	1 sw   Y  W d    n	1 sw   Y  j|_nj jjkrt # |	  |+|}W d    n	1 sw   Y  W d    n	1 sw   Y  nUjsJ t*  |)|j,}W d    n	1 sw   Y  j|_t # |	  |+|}W d    n	1 sw   Y  W d    n	1 s-w   Y  tjj-.|tjj-/ W tj%tjjj$| ntj%tjjj$| w t}|
\}|fdd}t|stJ d	jrj|_|st  |jtj0d}W d    n	1 sw   Y  tjj12rt3W  d    S 4 }t5|}|| j6vr|7 kr|8 |kr|4 | j6|< nN| j9||d}t }ddl:m;}m<} t=||r||j>}|% t*  |?|| W d    n	1 s	w   Y  W d    n	1 sw   Y  t@d ur<ddl m} | j"t@||d d|_AtjB|C  tjD|E  W d    n	1 sYw   Y  tFtG|d
d | H| | S )Nr   )ConstantSource__meta_utils_unknown_tensor   c                    sH   d urj |  dS d u sJ  d u sJ |  |  |  fS )N)rq   rr   ),create_symbolic_sizes_strides_storage_offsetre   r/   r0   r   )rr   rq   	shape_envrp   r   r    sym_sizes_strides_storage_offset   s   zCMetaConverter.meta_tensor.<locals>.sym_sizes_strides_storage_offsetc                      s(   t jjj     j jt jddS )Nra   )r$   layoutrb   )	rc   opsaten_sparse_coo_tensor_with_dimsr-   r,   r%   r$   
sparse_coor   r   r   r   ri      s    z+MetaConverter.meta_tensor.<locals>.<lambda>z)the callback you passed in doesn't detachTc                         t j jddS r`   rc   empty_stridedr$   r   sizesstridesr   r   r   ri         
)
AttrSourcer2   )rp   rq   c                 S   s   t | ot | |kS r#   )utilsis_complex_dtypecorresponding_real_dtype)complex_dtype
real_dtyper   r   r   	is_c_of_r;  s
   
z,MetaConverter.meta_tensor.<locals>.is_c_of_rFc                      r~   r`   r   r   r   r   r   ri     r   )memory_format)rk   )
FakeTensorin_kernel_invocation_managerr   )rp   rq   rr   r!   )Itorch._dynamo.sourcers   rM   r=   rc   _C_dispatch_tls_local_exclude_sethasDispatchKeyPythonrD   
contextlibnullcontextsuppress_guardsr@   r?   rQ   rS   inference_moder)   r(   r   _coalesced_r.   r&   enable_gradcloner[   r1   r   r   STATICr2   dimmeta_tensor&_dispatch_tls_is_dispatch_key_excludedADInplaceOrView'_dispatch_tls_set_dispatch_key_excludedr$   view_as_realview_as_complexviewno_grad
as_stridedr%   	_autograd_set_creation_meta_get_creation_metapreserve_format
_functorchis_functorch_wrapped_tensorNotImplementedrj   r   r:   r/   r0   rm   torch._subclasses.fake_tensorr   r   
isinstance	fake_modeset_r   r   	_set_conjr*   _set_negr+   r7   r    r_   )rF   r   rw   rk   rp   rq   rr   rs   rD   maybe_suppressrx   r   r_storage_offsetr   base_dynamic_dimsbaser   old_excluder0   midrh   rl   r_smaybe_fake_mgrr   r   r   )rr   rq   rw   r   rp   r   r   r   r      sN  	











 
 
 


  /	
   n
zMetaConverter.meta_tensorc                 C   rn   r#   r   r   r   r   r   ri     ro   F)rk   ignore_subclassrp   rq   rr   c             	      s  ddl m} t|tju s#t|tjju s#|rt|tjs#t||r'|jjdkrt	|j
|jtjtjtjfv |j|j| oF|jd uoF|jjt||jjdv grt|r|jjdkr| retdt }	|	d u sw|	 tjkswJ d|	d u rt| t|}
tjj  j|
 ||d}W d    n1 sw   Y  tj |dd	S tj!" }t#||}
tj$j%& }| j|
 ||d}W d    n1 sw   Y  t'|t( S  j)d
7  _)t*S  j+d
7  _+t,- }|rtj!. }| j| ||d}W d    n	1 sw   Y  t|tjju r%d|_/|S tj01|rJt2|rAt3| fdd}|S  j)d
7  _)t*S |S )Nr   )r   xlalazyzVCannot safely fakify a view because this process drops the view information right now.z@Expect st to be either None or have Functionalize transform key.)rw   rk   rp   rq   rr   T)mirror_autograd_metaru   c                    s   j |  dS )N)rw   rk   rp   )r   r   rk   rF   rw   rp   r   r   ri   b  s    z(MetaConverter.__call__.<locals>.<lambda>)4r   r   typerc   Tensornn	Parameterr   rb   anyis_sparse_csrry   
sparse_csc
sparse_bsr
sparse_bscis_quantized	is_nestedr1   r2   r(   _is_functional_tensorr   r   keyr	   Functionalize_sync_from_functional_tensor	_dispatchpythonsuspend_functionalizationr   _to_functional_tensorr   $_functionalization_reapply_views_tlsr   r   pyfunctorch!temporarily_pop_interpreter_stackr   r   rB   r   rA   r   r   DisableTorchFunctionSubclass	_is_param	overridesis_tensor_liker   r   )rF   r   rw   rk   r   rp   rq   rr   r   stunwrap_tfake_treapply_views
pop_st_ctxctxr   outr   r   r   __call__  s   



	


	
	
zMetaConverter.__call__r#   )__name__
__module____qualname__rG   rH   rQ   rS   r_   rm   r   r
   DimListr   r   r   r   r   r   r   r   r8   U   s:    $


  Br8   )#r   r   r;   typingr   r   r   rc   torch._C._functorchr   r   r   r   r	   torch._guardsr
   %torch.fx.experimental.symbolic_shapesr   r    torch.multiprocessing.reductionsr   torch.utils._python_dispatchr   r   torch.utils.weakr   r   r   r   r    r7   r8   torch._prims_common_prims_commonr   r   r   r   r   <module>   s,    (    #