o
    m9:j
                     @   s`   d dl 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 )    )AnyN)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dB 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   i/home/nk/hobo-godmode/plappi-mvp/.venv/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   sL   |d urt d| d }t|r |d u rt d|d u r t dt|||S )NzExpected meta to be Noner   z"Expected outer_size to not be Nonez$Expected outer_stride to not be None)AssertionErrorr   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>7       z4WrapperSubclass.__torch_dispatch__.<locals>.<lambda>c                 S   r)   r   r   r*   r   r   r   r,   9   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.condr2   r   )r   functypesargsr   args_akwargs_aout_a
out_a_flatspecout_flatr   r2   r   r   r   __torch_dispatch__3   s   z"WrapperSubclass.__torch_dispatch__expected_metadataexpected_typec                 C   s2   |t | ju r
| jS |tu rt| j| j S d S r   )typer   r   clone)r   rB   rC   r   r   r   #__coerce_same_metadata_as_tangent__I   s
   z3WrapperSubclass.__coerce_same_metadata_as_tangent__)NNr   )__name__
__module____qualname__staticmethodr   r   r#   r$   r(   classmethodrA   r   rD   rF   r   r   r   r   r      s     


r   )typingr   r   torch.utils._pytreeutils_pytreer3   torch._subclasses.fake_tensorr   "torch.testing._internal.two_tensorr   torch.utils._python_dispatchr   r   r   r   r   r   r   <module>   s   