
    Ph$                      ^   d dl Z d dlmZ d dl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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         rC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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)   sj    
 _%Bt~~r*'%,,2KK"Yt~~/F/F.G H//1d 3F$F G G &r   N)r"   
__module____qualname__staticmethodr   classmethodr   r    r   r   r   r   
   s0     , R R
Gr   r   c                   z     e Zd Zedd       ZddZi Zej                  j                  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_properties7   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>F   s     5u!:c1%us   c                 Z    t        | t              r| j                  j                         S | S r3   )
isinstancer,   r1   es    r   unwrapz2DiagTensorBelow.__torch_dispatch__.<locals>.unwrapR   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>.wrapU   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__D   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   r   _C_disabled_torch_function_impl__torch_function__rK   rP   __classcell__r    s   @r   r,   r,   6   sS    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_propertiesd   s(    }}...}EEEr   c                      || _         || _        y r3   )r\   r]   )r#   r	   r\   r]   r   s        r   r4   zSparseTensor.__init__i   s    r   c                 X    t         |   d| j                   d| j                         S )Nzvalues=z
, indices=rM   )rO   rP   r\   r]   rQ   s    r   rP   zSparseTensor.__repr__m   s/    w'$++jQUQ]Q]P^0_``r   c                     t        j                  | j                         | j                  j                        }| j                  || j
                  j                  d      <   |S )N)r
   r.   )r   zerosr	   r\   r
   r]   unbind)r#   ress     r   sparse_to_densezSparseTensor.sparse_to_densep   sD    kk$))+T[[->->?&*kkDLL"#
r   c                     | j                         }| |j                  d         }t        | j                         ||      S )Nr.   )nonzerorb   rZ   r	   )r   r]   r\   s      r   
from_densezSparseTensor.from_denseu   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;   rZ   rd   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   rZ   rg   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_namerc   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   ro   zSparseTensor.__rmul__   s    w&&r   c                 V    || j                   vrt        S  | j                   |   ||      S r3   )_SPECIAL_IMPLSrD   )r   rG   r   r   s       r   rl   z#SparseTensor._try_call_special_impl   s0    s)))!!'s!!$'f55r   rR   rS   )r"   r&   r'   r)   r   r4   rP   rd   r(   rg   rK   ro   rr   rl   rW   rX   s   @r   rZ   rZ   c   sm    F Fa
 7 7
  *' N6 6r   rZ   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   rv   )	rO   rV   r;   r   r   __deepcopy__r   rx   r"   )r   rG   rH   r   r   resultr    s         r   rV   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)   rV   r   rW   rX   s   @r   rt   rt      s!       .r   rt   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   )rt   r   randnr   s    r   <lambda>r      s     0U1C Dr   logging_tensorc                 >    t        t        j                  |             S r3   )r   r   r   r   s    r   r   r      s    ekk%.@ Ar   sparse_tensorc                 n    t         j                  t        j                  |       j	                               S r3   )rZ   rg   r   r   relur   s    r   r   r      s!     7 7E8J8O8O8Q Rr   diag_tensor_belowc                 >    t        t        j                  |             S r3   )r,   r   r   r   s    r   r   r      s    E0B Cr   F)r   r   )r   copyr   torch.utils._pytreer   &torch.testing._internal.logging_tensorr   r   r   r,   rZ   rt   r   r   subclass_dbr*   r   r   <module>r      s      ( A)GELL )GX*Em *EZ76= 76v.u|| .<1 1 
LL, lD <A ,R \C!r   