o
    0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)
sizestrider	   r
   r   r   r   torchTensor_make_wrapper_subclass)clsa
outer_sizeouter_stridekwargsout r   V/var/www/vscode/kcb/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   )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   ).0o_ar   r   r   
<listcomp>:   s    z6WrapperSubclass.__torch_dispatch__.<locals>.<listcomp>r   )cond_op)pytreetree_map_onlyr   tree_flattentree_unflattentorch._higher_order_ops.condr3   r   )r   functypesargsr   args_akwargs_aout_a
out_a_flatspecout_flatr   r3   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   rC   rD   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)   classmethodrB   r   r   rE   rG   r   r   r   r   r      s     


r   )typingr   r   r   torch.utils._pytreeutils_pytreer4   torch._subclasses.fake_tensorr   "torch.testing._internal.two_tensorr   torch.utils._python_dispatchr   r   r   r   r   r   r   <module>   s   