
    Vhj                         d dl Z d dlmc mZ d dlmZ  G d de j                        Z G d de j                  j                  j                        Zy)    N)return_and_correct_aliasingc                   X    e Zd Zed	d       Zd	dZd Zd Zed        Ze	d        Z
d Zy)
	TwoTensorNc                    ||j                         }||j                         }|j                  |j                  k(  rK|j                  |j                  k(  r2|j                  |j                  k(  r|j
                  |j
                  k(  sJ |}i }||d<   |j                         |d<   |j                  |d<   |j                  |d<   |j                  |d<   |j
                  |d<   t        j                  j                  | |fi |}|j                  |j                  k(  sJ |j                         |j                         k(  sJ |j                         |j                         k(  sJ |S )Nstridesstorage_offsetdevicelayoutrequires_graddtype)sizestrider	   r
   r   r   r   torchTensor_make_wrapper_subclassshape)clsab
outer_sizeouter_strider   kwargsouts           R/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/two_tensor.py__new__zTwoTensor.__new__
   sA   J88:L HH AHH$1??2177"		
# (y#$#3#3#5 88x88x"#//''wll11#uGGww!''!!!xxzQXXZ'''!Q%5%5%7777
    c                      || _         || _        y N)r   r   )selfr   r   r   r   s        r   __init__zTwoTensor.__init__'   s    r   c                 h    t        | j                        }t        | j                        }d| d| dS )Nz
TwoTensor(z, ))reprr   r   )r   a_reprb_reprs      r   __repr__zTwoTensor.__repr__+   s1    dffdffF82fXQ//r   c                     ddgd fS Nr   r    r   s    r   __tensor_flatten__zTwoTensor.__tensor_flatten__0   s    Sz4r   c                     |J | d   | d   }}t        |      t        j                  u r|J |J t        ||||      S r(   )typer   r   r   )inner_tensorsmetar   r   r   r   s         r   __tensor_unflatten__zTwoTensor.__tensor_unflatten__3   sX    ||S!=#517ell")))+++Az<88r   c                 R   |i }t        j                  t        d |      }t        j                  t        d |      }t        j                  t        d |      }t        j                  t        d |      } ||i |}	 ||i |}
t        j                  |	      \  }}t        j                  |
      }t        ||      D cg c]*  \  }}t        |t        j                        r	 | ||      n|, }}}t        j                  ||      }ddl
m} ||u r|S t        ||||      S c c}}w )Nc                     | j                   S r   r   xs    r   <lambda>z.TwoTensor.__torch_dispatch__.<locals>.<lambda>@   
    133 r   c                     | j                   S r   r   r4   s    r   r6   z.TwoTensor.__torch_dispatch__.<locals>.<lambda>A   r7   r   c                     | j                   S r   r3   r4   s    r   r6   z.TwoTensor.__torch_dispatch__.<locals>.<lambda>C   
    QSS r   c                     | j                   S r   r9   r4   s    r   r6   z.TwoTensor.__torch_dispatch__.<locals>.<lambda>D   r;   r   r   )cond_op)pytreetree_map_onlyr   tree_flattentree_leaveszip
isinstancer   r   tree_unflattentorch._higher_order_ops.condr=   r   )r   functypesargsr   args_aargs_bkwargs_akwargs_bout_aout_b
out_a_flatspec
out_b_flato_ao_bout_flatr   r=   s                      r   __torch_dispatch__zTwoTensor.__torch_dispatch__<   s   >F%%iE%%iE''	=&I''	=&If))f))!..u5
D''.

  
J7
S (U\\:CSMC
 
 ##Hd387?J.tT63GG
s   /D#c                     | j                   S r   r3   r*   s    r   
get_elem_azTwoTensor.get_elem_aX   s    vvr   )NN)__name__
__module____qualname__staticmethodr   r    r&   r+   r0   classmethodrU   rW   r)   r   r   r   r   	   sR     80
  9 9 H H6r   r   c                       e Zd ZddZy)TwoTensorModeNc                      ||i |}t         j                  j                  j                  |      rt	        ||j                               }|S r   )r   _subclassesfake_tensor_is_tensor_constructorr   clone)r   rF   rG   rH   r   r   s         r   rU   z TwoTensorMode.__torch_dispatch__]   sB    D#F#((??EC-C
r   )r)   N)rX   rY   rZ   rU   r)   r   r   r^   r^   \   s    r   r^   )r   torch.utils._pytreeutils_pytreer>   torch.utils._python_dispatchr   r   r   _python_dispatchTorchDispatchModer^   r)   r   r   <module>rj      sB     $ $ DP PfEKK00BB r   