o
    wZŽhâ	  ã                   @   sd   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 d dlmZ G dd„ dejƒZdS )é    )ÚAnyÚOptionalN)Úis_fake)Ú	TwoTensor)Úreturn_and_correct_aliasingc                   @   sf   e Zd Zeddd„ƒZddd„Zdd„ Zdd	„ Zed
d„ ƒZe	dd„ ƒZ
	ddedee fdd„ZdS )ÚWrapperSubclassNc                 C   sz   |d u r|  ¡ }|d u r| ¡ }i }||d< | ¡ |d< |j|d< |j|d< |j|d< |j|d< tjj	| |fi |¤Ž}|S )NÚstridesÚstorage_offsetÚdeviceÚlayoutÚrequires_gradÚdtype)
ÚsizeZstrider	   r
   r   r   r   ÚtorchÚTensorZ_make_wrapper_subclass)ÚclsÚaÚ
outer_sizeÚouter_strideÚkwargsÚout© r   úQ/var/www/auris/lib/python3.10/site-packages/torch/testing/_internal/subclasses.pyÚ__new__   s   



zWrapperSubclass.__new__c                 C   s
   || _ d S ©N©r   )Úselfr   r   r   r   r   r   Ú__init__   ó   
zWrapperSubclass.__init__c                 C   s   dt | jƒ› dS )NzWrapperSubclass(ú))Úreprr   ©r   r   r   r   Ú__repr__!   s   zWrapperSubclass.__repr__c                 C   s
   dgd fS ©Nr   r   r!   r   r   r   Ú__tensor_flatten__$   r   z"WrapperSubclass.__tensor_flatten__c                 C   s@   |d u sJ ‚| d }t |ƒr|d usJ ‚|d usJ ‚t|||ƒS r#   )r   r   )Zinner_tensorsÚmetar   r   r   r   r   r   Ú__tensor_unflatten__'   s   z$WrapperSubclass.__tensor_unflatten__c                 C   sŒ   |d u ri }t  tdd„ |¡}t  tdd„ |¡}||i |¤Ž}t  |¡\}}	dd„ |D ƒ}
t  |
|	¡}ddlm} ||u r?|S t||||ƒS )Nc                 S   ó   | j S r   r   ©Úxr   r   r   Ú<lambda>4   ó    z4WrapperSubclass.__torch_dispatch__.<locals>.<lambda>c                 S   r'   r   r   r(   r   r   r   r*   6   r+   c                 S   s$   g | ]}t |tjƒrt|ƒn|‘qS r   )Ú
isinstancer   r   r   )Ú.0Zo_ar   r   r   Ú
<listcomp>:   s    ÿÿz6WrapperSubclass.__torch_dispatch__.<locals>.<listcomp>r   )Úcond_op)ÚpytreeZtree_map_onlyr   Ztree_flattenZtree_unflattenZtorch._higher_order_ops.condr/   r   )r   ÚfuncÚtypesÚargsr   Zargs_aZkwargs_aZout_aZ
out_a_flatÚspecZout_flatr   r/   r   r   r   Ú__torch_dispatch__0   s   þz"WrapperSubclass.__torch_dispatch__Úexpected_metadataÚexpected_typec                 C   s2   |t | jƒkr
| jS |tu rt| j| j ¡ ƒS d S r   )Útyper   r   Úclone)r   r6   r7   r   r   r   Ú#__coerce_same_metadata_as_tangent__F   s
   z3WrapperSubclass.__coerce_same_metadata_as_tangent__)NNr   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r"   r$   r&   Úclassmethodr5   r   r   r8   r:   r   r   r   r   r      s     


ÿÿÿr   )Útypingr   r   r   Ztorch.utils._pytreeÚutilsZ_pytreer0   Ztorch._subclasses.fake_tensorr   Z"torch.testing._internal.two_tensorr   Ztorch.utils._python_dispatchr   r   r   r   r   r   r   Ú<module>   s   