
    sg$                        d dl Z d dlmZ d dlmZ d dlmc mZ d dlm	Z	  G d de j                        Z G d de      Z G d	 d
e      Z G d de j                        Z G d d      Ze j                   ede j                         e edd       e	 edd       e edd       e edd d      iZ G d de j                        Zy)    N)deepcopy)tree_map)LoggingTensorc                   2    e Zd Zed        Zed        Zd Zy)WrapperTensorc                 P    | j                   |i |\  }}d|vr|j                         }n|d   }|d= d|vr|j                  |d<   d|vr|j                  |d<   d|vr|j                  |d<   d|vrd|d<   t        j                  j                  | |fi |}|j                          |S )Nsizedtypelayoutdevicerequires_gradF)	get_wrapper_propertiesr	   r
   r   r   torchTensor_make_wrapper_subclass_validate_methods)clsargskwargstr	   wrappers         Z/var/www/html/venv/lib/python3.12/site-packages/torch/testing/_internal/common_subclass.py__new__zWrapperTensor.__new__   s    .C..??	6668D&>Dv& ggF7O6! xxF86! xxF8&(&+F?# ,,55c4J6J!!#    c                     t        d      )Nz,You need to implement get_wrapper_properties)NotImplementedError)r   r   r   s      r   r   z$WrapperTensor.get_wrapper_properties&   s    
 ""PQQr   c                     g d}|D ]X  }t        | j                  |      t        t        j                  |      us4t	        d| j                  j
                   d| d       y )N)r	   strider
   r   r   r   z	Subclass z is overwriting the property zN but this is not allowed as such change would not be reflected to c++ callers.)getattr	__class__r   r   RuntimeError__name__)selfforbidden_overridesels      r   r   zWrapperTensor._validate_methods-   sq    
 _% 	GBt~~r*'%,,2KK"Yt~~/F/F.G H//1d 3F$F G G	Gr   N)r"   
__module____qualname__staticmethodr   classmethodr   r    r   r   r   r      s0     , R R
Gr   r   c                   N     e Zd Zedd       ZddZi Zedd       Z fdZ xZ	S )DiagTensorBelowc                 p    |j                   dk(  sJ ||j                         |j                         z   |dfS )N   r	   r   )ndimr	   )r   diagr   s      r   r   z&DiagTensorBelow.get_wrapper_properties;   s3    yyA~~diikDIIK7-XXXr   c                     || _         y N)r1   )r#   r1   r   s      r   __init__zDiagTensorBelow.__init__@   s	    	r   c                     t         fd|D              st        S  j                  j                  |j                  d       }|r ||i |xs i S d }d }t        | |t        ||      i t        ||xs i             }|S )Nc              3   6   K   | ]  }t        |        y wr3   )
issubclass).0r   r   s     r   	<genexpr>z5DiagTensorBelow.__torch_dispatch__.<locals>.<genexpr>G   s     5!:c1%5s   c                 Z    t        | t              r| j                  j                         S | S r3   )
isinstancer,   r1   es    r   unwrapz2DiagTensorBelow.__torch_dispatch__.<locals>.unwrapS   s     (21o(Fqvv{{}MAMr   c                 P   t        | t        j                        r| j                  dk(  rt	        |       S t        | t        j                        rW| j                  dk(  rH| j                         | j                         j                         k(  rt	        | j                               S | S )Nr.      )r;   r   r   r0   r,   count_nonzeror1   r<   s    r   wrapz0DiagTensorBelow.__torch_dispatch__.<locals>.wrapV   st    a.166Q;*1--a.166Q;1??CTXYX^X^X`XnXnXpCp*166844r   )allNotImplementedhandled_opsgetr"   r   )	r   functypesr   r   fnr>   rB   rss	   `        r   __torch_dispatch__z"DiagTensorBelow.__torch_dispatch__E   s    5u55!! __  5t."..N $hvt&< _QWQ][]@^ _`BIr   c                 >    t         |   d| j                         S )Nzdiag=tensor_contents)super__repr__r1   r#   r    s    r   rP   zDiagTensorBelow.__repr__`   s!    w%		{0CDDr   Fr*   N)
r"   r&   r'   r)   r   r4   rE   rK   rP   __classcell__r    s   @r   r,   r,   :   sA    Y Y K 4E Er   r,   c                   ~     e Zd Zed	d       Zd	dZ fdZd Zed        Z	ed
d       Z
 fdZi Zed        Z xZS )SparseTensorc                 F    |j                   |j                   k(  sJ |||dfS )Nr/   )r   )r   r	   valuesindicesr   s        r   r   z#SparseTensor.get_wrapper_propertiese   s(    }}...}EEEr   c                      || _         || _        y r3   )rY   rZ   )r#   r	   rY   rZ   r   s        r   r4   zSparseTensor.__init__j   s    r   c                 X    t         |   d| j                   d| j                         S )Nzvalues=z
, indices=rM   )rO   rP   rY   rZ   rQ   s    r   rP   zSparseTensor.__repr__n   s/    w'$++jQUQ]Q]P^0_``r   c                     t        j                  | j                         | j                  j                        }| j                  || j
                  j                  d      <   |S )N)r
   r.   )r   zerosr	   rY   r
   rZ   unbind)r#   ress     r   sparse_to_densezSparseTensor.sparse_to_denseq   sD    kk$))+T[[->->?&*kkDLL"#
r   c                     | j                         }| |j                  d         }t        | j                         ||      S )Nr.   )nonzeror_   rW   r	   )r   rZ   rY   s      r   
from_densezSparseTensor.from_densev   s5    ))+7>>!$%AFFHfg66r   c                     |j                    d|j                   }| j                  |||      }|t        ur|S d }d }t	        | |t	        ||      i t	        ||xs i             }	|	S )N.c                 F    t        | t              r| j                         S | S r3   )r;   rW   ra   r<   s    r   r>   z/SparseTensor.__torch_dispatch__.<locals>.unwrap   s    *4Q*E1$$&L1Lr   c                 d    t        | t        j                        rt        j	                  |       S | S r3   )r;   r   r   rW   rd   r<   s    r   rB   z-SparseTensor.__torch_dispatch__.<locals>.wrap   s&    1;Au||1L<**1-SRSSr   )r&   r"   _try_call_special_implrD   r   )
r   rG   rH   r   r   	func_namer`   r>   rB   rJ   s
             r   rK   zSparseTensor.__torch_dispatch__|   sx    'q8	((D&An$J	M	T dD(64"8[HVV\WY<Z[\	r   c                 "    t         |   |      S r3   )rO   __rmul__)r#   otherr    s     r   rl   zSparseTensor.__rmul__   s    w&&r   c                 V    || j                   vrt        S  | j                   |   ||      S r3   )_SPECIAL_IMPLSrD   )r   rG   r   r   s       r   ri   z#SparseTensor._try_call_special_impl   s0    s)))!!'s!!$'f55r   rR   rS   )r"   r&   r'   r)   r   r4   rP   ra   r(   rd   rK   rl   ro   ri   rT   rU   s   @r   rW   rW   d   sm    F Fa
 7 7
  *' N6 6r   rW   c                   6     e Zd Zd Zed fd	       Zd Z xZS )NonWrapperTensorc                 X    t         j                  j                  | |      }dd i|_        |S )Nlast_func_called)r   r   _make_subclassextra_state)r   datar   s      r   r   zNonWrapperTensor.__new__   s-    LL''T2
 r   c                     t         |   ||||      }t        ||       rN|t        j                  j
                  u rt        |d   j                        |_        |S d|j                  i|_        |S )Nr   rs   )	rO   __torch_function__r;   r   r   __deepcopy__r   ru   r"   )r   rG   rH   r   r   resultr    s         r   rx   z#NonWrapperTensor.__torch_function__   sp    +D%vFfc" u||000%-d1g.A.A%B"  '&" r   c                 J     t        |       t        j                  |            S r3   )typer   empty)r#   shapes     r   	new_emptyzNonWrapperTensor.new_empty   s    tDz%++e,--r   rS   )r"   r&   r'   r   r)   rx   r   rT   rU   s   @r   rq   rq      s!       .r   rq   c                       e Zd Zg dZddZy)SubclassInfoname	create_fnclosed_under_opsc                 .    || _         || _        || _        y r3   r   )r#   r   r   r   s       r   r4   zSubclassInfo.__init__   s    	" 0r   N)T)r"   r&   r'   	__slots__r4   r*   r   r   r   r      s    9I1r   r   base_tensor)r   non_wrapper_tensorc                 >    t        t        j                  |             S r3   )rq   r   randnr~   s    r   <lambda>r      s     0U1C D r   logging_tensorc                 >    t        t        j                  |             S r3   )r   r   r   r   s    r   r   r      s    ekk%.@ A r   sparse_tensorc                 n    t         j                  t        j                  |       j	                               S r3   )rW   rd   r   r   relur   s    r   r   r      s#     7 7E8J8O8O8Q R r   diag_tensor_belowc                 >    t        t        j                  |             S r3   )r,   r   r   r   s    r   r   r      s    E0B C r   F)r   r   c                   N    e Zd Zed        Zd Zd Zd Zed        Z	ed        Z
y)SubclassWithTensorFactoryc                 (   |j                   }i }|j                         |d<   |j                         |d<   |j                  |d<   |j                  |d<   |j
                  |d<   |j                  |d<   t        j                  j                  | |fi |}|S )Nstridesstorage_offsetr   r   r   r
   )
r~   r   r   r   r   r   r
   r   r   r   )r   srcr~   r   outs        r   r   z!SubclassWithTensorFactory.__new__   s    		JJLy#&#5#5#7 ::x::x"%"3"3))wll11#uGG
r   c                     || _         y r3   )r   )r#   r   s     r   r4   z"SubclassWithTensorFactory.__init__   s	    r   c                 0    | j                   j                   S r3   )r    r"   r#   s    r   rP   z"SubclassWithTensorFactory.__repr__   s    ..))*+r   c                     dgd fS Nr   r*   r   s    r   __tensor_flatten__z,SubclassWithTensorFactory.__tensor_flatten__   s    w}r   c                     |d   } | |      S r   r*   )r   inner_tensorsmeta
outer_sizeouter_strider   s         r   __tensor_unflatten__z.SubclassWithTensorFactory.__tensor_unflatten__   s    E"3xr   c                 D   |i }d }t        j                  | ||      }t        j                  | ||      } ||i |}t        j                  |      \  }	}
|	D cg c]&  }t        |t        j
                        r | |      n|( }}t        j                  ||
      S c c}w )Nc                     | j                   j                  t        j                  k(  r6| j                   t        j                  | j                   j
                        z  S | j                   S r3   )r   r
   r   float32onesr~   )xs    r   _fnz9SubclassWithTensorFactory.__torch_dispatch__.<locals>._fn   sA    67eekkU]]6R1555::aeekk22]XYX]X]]r   )pytreetree_map_onlytree_flattenr;   r   r   tree_unflatten)r   rG   rH   r   r   r   _args_kwargs_out	_out_flat	_out_specoout_flats                r   rK   z,SubclassWithTensorFactory.__torch_dispatch__   s    >F	^ $$S#t4&&sC8U&g&%2248	9JSTQjELL9CFq@TT$$Xy99 Us   +BN)r"   r&   r'   r(   r   r4   rP   r   r)   r   rK   r*   r   r   r   r      sK    
 
,   : :r   r   )r   copyr   torch.utils._pytreer   utils_pytreer   &torch.testing._internal.logging_tensorr   r   r   r,   rW   rq   r   r   subclass_dbr   r*   r   r   <module>r      s      ( $ $ A)GELL )GX'Em 'ET76= 76v.u|| .<1 1 
LL, lD <A ,R \C!.,: ,:r   