a
    d                     @   s   d dl Z d dlmZmZ d dlZd dlm  mZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ ejjjZdd Zd	d
 Zdd ZG dd deZdS )    N)CallableUnion)
OpOverload)FakeTensorModetree_flatten_onlyUnsupportedFakeTensorException)TorchDispatchMode)tree_flattenc                    s4   dd t tj|D  t fddt tj| D S )Nc                 S   s"   h | ]}t j|r| jqS  torch_C_has_storage_typed_storage_cdata.0inpr
   r
   e/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_subclasses/fake_utils.py	<setcomp>   s   z'outputs_alias_inputs.<locals>.<setcomp>c                 3   s(   | ] }t j|o| j v V  qd S Nr   r   outZinput_storagesr
   r   	<genexpr>   s   z'outputs_alias_inputs.<locals>.<genexpr>r   r   Tensoranyoutputsinputsr
   r   r   outputs_alias_inputs   s    

r!   c                    s4   dd t tj|D  t fddt tj| D S )Nc                 S   s   h | ]}t |qS r
   idr   r
   r
   r   r           z%outputs_are_inputs.<locals>.<setcomp>c                 3   s   | ]}t | v V  qd S r   r"   r   Z	input_idsr
   r   r   !   r$   z%outputs_are_inputs.<locals>.<genexpr>r   r   r
   r%   r   outputs_are_inputs   s    r&   c                 C   sL   t  }ttj| D ]4}tj|s$q| j}||v r< dS || qdS )NTF)	setr   r   r   r   r   r   r   add)r   Zstoragesr   Zstorr
   r
   r   output_alias_each_other$   s    
r)   c                   @   s@   e Zd Zd
dddeeegef df dddZddd	ZdS )CrossRefFakeModeNT)check_stridescheck_aliasing)ignore_op_fnc                C   s&   |d ur|ndd | _ || _|| _d S )Nc                 S   s   dS )NFr
   )fnr
   r
   r   <lambda>9   r$   z+CrossRefFakeMode.__init__.<locals>.<lambda>)r-   r+   r,   )selfr-   r+   r,   r
   r
   r   __init__1   s    zCrossRefFakeMode.__init__r
   c                 C   s  |pi }d }|t jjt jjt jjfvr| |stjj	|j
vrtjj|j
vrtjj|j
vrzzt `}ttj|j||f\}}t  ||i |}W d    n1 s0    Y  W d    n1 s0    Y  W n ty   Y n0 ||i |}	|d urt|	\}
}t|\}}t|
t|
ksLJ dt|
 dt|
 d| | jrt|	||f}t|||f}||ksJ d| d| d| t|	||f}t|||f}||ksJ d| d| d| t|	}t|}||ksJ d| d| d| tt|	d t|d D ]\}}t|tj}|t|tjksVJ d| |r"|j|jksxJ d| tj|r|  }|  }||ksJ d| d| d| ztj!j"j#||| j$d W n< t%y } z"t&d| d| |W Y d }~n
d }~0 0 q"|	S )	Nz	Mismatch z != z on zMismatch on z: r   z'Mismatched number of tensor outputs on )r+   )'atenZ
lift_freshdefaultZlift_fresh_copyset_Zsource_Storage_storage_offsetr-   r   TagZdynamic_output_shapetagsZinplace_viewZdata_dependent_outputr   pytreeZtree_map_onlyr   Zfrom_tensorwarningscatch_warningsr   r	   lenr,   r!   r&   r)   zip
isinstanceZrequires_gradr   r   Zstorage_offsetZ_primsutilsZcompare_tensor_metar+   	ExceptionRuntimeError)r0   functypesargskwargsZfake_rZ	fake_modeZ	fake_argsZfake_kwargsrZr_flat_Zf_flatZ
r_aliasingZ
f_aliasingZr_identity_eqZf_identity_eqZr_output_alias_each_otherZf_output_alias_each_otherZr_outZfake_outZr_is_tenZr_offsetZf_offseter
   r
   r   __torch_dispatch__>   s    	

N

"


0z#CrossRefFakeMode.__torch_dispatch__)N)r
   N)	__name__
__module____qualname__r   r   r   boolr1   rG   r
   r
   r
   r   r*   0   s    r*   )r8   typingr   r   r   Ztorch.utils._pytreer=   Z_pytreer7   Z
torch._opsr   Ztorch._subclasses.fake_tensorr   r   r   Ztorch.utils._python_dispatchr   r	   Z_opsopsr2   r!   r&   r)   r*   r
   r
   r
   r   <module>   s   
