
    Vh	                     |    d dl mZmZ d dlZd dlmc mZ d dlm	Z	 d dl
mZ d dlmZ  G d dej                        Zy)    )AnyOptionalN)is_fake)	TwoTensor)return_and_correct_aliasingc                   l    e Zd Zedd       ZddZd Zd Zed        Ze	d        Z
	 dded	ee   fd
Zy)WrapperSubclassNc                 <   ||j                         }||j                         }i }||d<   |j                         |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outs         R/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/subclasses.py__new__zWrapperSubclass.__new__   s    J88:L(y#$#3#3#5 88x88x"#//''wll11#zLVL
    c                     || _         y Nr   )selfr   r   r   s       r   __init__zWrapperSubclass.__init__   s	    r   c                 4    dt        | j                         dS )NzWrapperSubclass())reprr   r"   s    r   __repr__zWrapperSubclass.__repr__!   s    !$tvv,q11r   c                     dgd fS Nr    r'   s    r   __tensor_flatten__z"WrapperSubclass.__tensor_flatten__$   s    ud{r   c                 T    |J | d   }t        |      r|J |J t        |||      S r*   )r   r	   )inner_tensorsmetar   r   r   s        r   __tensor_unflatten__z$WrapperSubclass.__tensor_unflatten__'   sD    ||#1:)))+++q*l;;r   c                    |i }t        j                  t        d |      }t        j                  t        d |      } ||i |}t        j                  |      \  }}	|D 
cg c])  }
t	        |
t
        j                        rt        |
      n|
+ }}
t        j                  ||	      }ddlm	} ||u r|S t        ||||      S c c}
w )Nc                     | j                   S r    r!   xs    r   <lambda>z4WrapperSubclass.__torch_dispatch__.<locals>.<lambda>4   s
     r   c                     | j                   S r    r!   r3   s    r   r5   z4WrapperSubclass.__torch_dispatch__.<locals>.<lambda>6   s
    133 r   r   )cond_op)pytreetree_map_onlyr	   tree_flatten
isinstancer   r   tree_unflattentorch._higher_order_ops.condr7   r   )r   functypesargsr   args_akwargs_aout_a
out_a_flatspeco_aout_flatr   r7   s                 r   __torch_dispatch__z"WrapperSubclass.__torch_dispatch__0   s    >F%%o}dK''Of))!..u5
D "
 %/sELL$AOC sJ
 
 ##Hd387?J.tT63GG
s   !.Cexpected_metadataexpected_typec                     |t        | j                        k(  r| j                  S |t        u r.t        | j                  | j                  j                               S y r    )typer   r   clone)r"   rI   rJ   s      r   #__coerce_same_metadata_as_tangent__z3WrapperSubclass.__coerce_same_metadata_as_tangent__F   sC     DL(66Mi'TVVTVV\\^44r   )NNr    )__name__
__module____qualname__staticmethodr   r#   r(   r,   r0   classmethodrH   r   r   rL   rN   r+   r   r   r	   r	      sm     "2 < < H H, GK!$5=d^r   r	   )typingr   r   r   torch.utils._pytreeutils_pytreer8   torch._subclasses.fake_tensorr   "torch.testing._internal.two_tensorr   torch.utils._python_dispatchr   r   r	   r+   r   r   <module>r[      s,       $ $ 1 8 DCell Cr   