
    `i/                     &   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          Z G d de          Z G d de j
                  Z G d d          Z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          e ed d! d          e ed"d# d          iZ G d$ d%e j
                  ZdS )&    N)deepcopy)tree_map)LoggingTensorc                   @    e Zd Zed             Zed             Zd ZdS )WrapperTensorc                 ,    | j         |i |\  }}d|vr|                                }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 |}|                                 |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         {/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/testing/_internal/common_subclass.py__new__zWrapperTensor.__new__   s    .C.???	66688DD&>Dv&  gF7O6!! xF86!! xF8&((&+F?# ,5c4JJ6J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QQr   c                     g d}|D ]Q}t          | j        |          t          t          j        |          ur t	          d| j        j         d| d          Rd S )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-   s    
 _^^% 	G 	GBt~r**'%,2K2KKK" $Ft~/F $F $F/1$F $F $F G G G L	G 	Gr   N)r"   
__module____qualname__staticmethodr   classmethodr   r    r   r   r   r      s_          \, R R [R
G 
G 
G 
G 
Gr   r   c                   V     e Zd Zedd            ZddZed	d            Z fdZ xZS )
WrapperTensorWithCustomSizesFc                     ||ddfS )Nsizesr   dispatch_sizes_strides_policyr*   r   r   r   s      r   r   z3WrapperTensorWithCustomSizes.get_wrapper_properties;   s    MT[\\\\r   c                     || _         d S Nr   r#   r   r   s      r   __init__z%WrapperTensorWithCustomSizes.__init__?       r   r*   Nc                      t           fd|D                       st          S |i }d }d }t          | |t          ||          i t          ||pi                     }|S )Nc              3   8   K   | ]}t          |          V  d S r3   
issubclass.0r   r   s     r   	<genexpr>zBWrapperTensorWithCustomSizes.__torch_dispatch__.<locals>.<genexpr>D   -      55!:c1%%555555r   c                 >    t          | t                    r| j        n| S r3   )
isinstancer,   r   es    r   unwrapz?WrapperTensorWithCustomSizes.__torch_dispatch__.<locals>.unwrapJ   s    $Q(DEEL1331Lr   c                 X    t          | t          j                  rt          |           n| S r3   )rA   r   r   r,   rB   s    r   wrapz=WrapperTensorWithCustomSizes.__torch_dispatch__.<locals>.wrapM   s(    6@EL6Q6QX/222WXXr   allNotImplementedr   r   functypesr   r   rD   rF   rss   `       r   __torch_dispatch__z/WrapperTensorWithCustomSizes.__torch_dispatch__B   s    5555u55555 	"!!>F	M 	M 	M	Y 	Y 	Y dDD(64"8"8[HVV\WY<Z<Z[[\\	r   c                 X    t                                          d| j                   S Nzt=tensor_contentssuper__repr__r   r#   r    s    r   rU   z%WrapperTensorWithCustomSizes.__repr__S   &    wwTV>>>r   Fr*   N	r"   r&   r'   r)   r   r6   rN   rU   __classcell__r    s   @r   r,   r,   :   s        ] ] ] []       [ ? ? ? ? ? ? ? ? ?r   r,   c                   V     e Zd Zedd            ZddZed	d            Z fdZ xZS )
WrapperTensorWithCustomStridesFc                     ||ddfS )Nstridesr/   r*   r1   s      r   r   z5WrapperTensorWithCustomStrides.get_wrapper_propertiesX   s    MT]^^^^r   c                     || _         d S r3   r4   r5   s      r   r6   z'WrapperTensorWithCustomStrides.__init__\   r7   r   r*   Nc                      t           fd|D                       st          S |i }d }d }t          | |t          ||          i t          ||pi                     }|S )Nc              3   8   K   | ]}t          |          V  d S r3   r:   r<   s     r   r>   zDWrapperTensorWithCustomStrides.__torch_dispatch__.<locals>.<genexpr>a   r?   r   c                 >    t          | t                    r| j        n| S r3   )rA   r^   r   rB   s    r   rD   zAWrapperTensorWithCustomStrides.__torch_dispatch__.<locals>.unwrapg   s    $Q(FGGN133QNr   c                 X    t          | t          j                  rt          |           n| S r3   )rA   r   r   r^   rB   s    r   rF   z?WrapperTensorWithCustomStrides.__torch_dispatch__.<locals>.wrapj   s(    8B1el8S8SZ1!444YZZr   rG   rJ   s   `       r   rN   z1WrapperTensorWithCustomStrides.__torch_dispatch___   s    5555u55555 	"!!>F	O 	O 	O	[ 	[ 	[ dDD(64"8"8[HVV\WY<Z<Z[[\\	r   c                 X    t                                          d| j                   S rP   rS   rV   s    r   rU   z'WrapperTensorWithCustomStrides.__repr__p   rW   r   rX   rY   rZ   r\   s   @r   r^   r^   W   s        _ _ _ [_       [ ? ? ? ? ? ? ? ? ?r   r^   c                   Z     e Zd Zedd            ZddZi Zed	d            Z fdZ xZ	S )
DiagTensorBelowFc                 x    |j         dk    sJ ||                                |                                z   |dfS )N   r	   r   )ndimr	   )r   diagr   s      r   r   z&DiagTensorBelow.get_wrapper_propertiesu   s9    yA~~~~diikkDIIKK7-XXXXr   c                     || _         d S r3   )rm   )r#   rm   r   s      r   r6   zDiagTensorBelow.__init__z   s    			r   r*   Nc                     t           fd|D                       st          S  j                            |j        d           }|r
 ||i |pi S d }d }t          | |t          ||          i t          ||pi                     }|S )Nc              3   8   K   | ]}t          |          V  d S r3   r:   r<   s     r   r>   z5DiagTensorBelow.__torch_dispatch__.<locals>.<genexpr>   r?   r   c                 b    t          | t                    r| j                                        n| S r3   )rA   rh   rm   rB   s    r   rD   z2DiagTensorBelow.__torch_dispatch__.<locals>.unwrap   s%    (21o(F(FMqv{{}}}AMr   c                 r   t          | t          j                  r| j        dk    rt	          |           S t          | t          j                  rh| j        dk    r]|                                 |                                                                 k    r!t	          |                                           S | S )Nrj      )rA   r   r   rl   rh   count_nonzerorm   rB   s    r   rF   z0DiagTensorBelow.__torch_dispatch__.<locals>.wrap   s    a.. .16Q;;*1---a.. 516Q;;1??CTCTXYX^X^X`X`XnXnXpXpCpCp*16688444r   )rH   rI   handled_opsgetr"   r   )	r   rK   rL   r   r   fnrD   rF   rM   s	   `        r   rN   z"DiagTensorBelow.__torch_dispatch__   s    5555u55555 	"!! _  55 	2t."...N N N   $hvt&<&< _QWQ][]@^@^ _ _``BIr   c                 X    t                                          d| j                   S )Nzdiag=rQ   )rT   rU   rm   rV   s    r   rU   zDiagTensorBelow.__repr__   s)    ww0C	0C0CDDDr   rX   rY   )
r"   r&   r'   r)   r   r6   ru   rN   rU   r[   r\   s   @r   rh   rh   t   s        Y Y Y [Y    K   [4E E E E E E E E Er   rh   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 )SparseTensorFc                 4    |j         |j         k    sJ |||dfS )Nrk   )r   )r   r	   valuesindicesr   s        r   r   z#SparseTensor.get_wrapper_properties   s*    }....}EEEEr   c                 "    || _         || _        d S r3   )r|   r}   )r#   r	   r|   r}   r   s        r   r6   zSparseTensor.__init__   s    r   c                 h    t                                          d| j         d| j                   S )Nzvalues=z
, indices=rQ   )rT   rU   r|   r}   rV   s    r   rU   zSparseTensor.__repr__   s5    ww0_$+0_0_QUQ]0_0_```r   c                     t          j        |                                 | j        j                  }| j        || j                            d          <   |S )N)r
   rj   )r   zerosr	   r|   r
   r}   unbind)r#   ress     r   sparse_to_densezSparseTensor.sparse_to_dense   sD    k$))++T[->???&*kDL""#
r   c                     |                                  }| |                    d                   }t          |                                 ||          S )Nrj   )nonzeror   rz   r	   )r   r}   r|   s      r   
from_densezSparseTensor.from_dense   s?    ))++7>>!$$%AFFHHfg666r   r*   Nc                     |j          d|j         }|                     |||          }|t          ur|S d }d }t	          | |t	          ||          i t	          ||pi                     }	|	S )N.c                 X    t          | t                    r|                                 n| S r3   )rA   rz   r   rB   s    r   rD   z/SparseTensor.__torch_dispatch__.<locals>.unwrap   s(    *4Q*E*EL1$$&&&1Lr   c                 n    t          | t          j                  rt                              |           n| S r3   )rA   r   r   rz   r   rB   s    r   rF   z-SparseTensor.__torch_dispatch__.<locals>.wrap   s-    1;Au|1L1LS<**1---RSSr   )r&   r"   _try_call_special_implrI   r   )
r   rK   rL   r   r   	func_namer   rD   rF   rM   s
             r   rN   zSparseTensor.__torch_dispatch__   s    8888	((D&AAn$$J	M 	M 	M	T 	T 	T dDD(64"8"8[HVV\WY<Z<Z[[\\	r   c                 F    t                                          |          S r3   )rT   __rmul__)r#   otherr    s     r   r   zSparseTensor.__rmul__   s    ww&&&r   c                 P    || j         vrt          S  | j         |         ||          S r3   )_SPECIAL_IMPLSrI   )r   rK   r   r   s       r   r   z#SparseTensor._try_call_special_impl   s0    s)))!!'s!$'f555r   rX   rY   )r"   r&   r'   r)   r   r6   rU   r   r(   r   rN   r   r   r   r[   r\   s   @r   rz   rz      s        F F F [F   a a a a a  
 7 7 \7
    [*' ' ' ' ' N6 6 [6 6 6 6 6r   rz   c                   <     e Zd Zd Zed fd	            Zd Z xZS )NonWrapperTensorc                 X    t           j                            | |          }dd i|_        |S )Nlast_func_called)r   r   _make_subclassextra_state)r   datar   s      r   r   zNonWrapperTensor.__new__   s.    L''T22
 r   r*   Nc                     t                                          ||||          }t          ||           rA|t          j        j        u r t          |d         j                  |_        nd|j        i|_        |S )Nr   r   )	rT   __torch_function__rA   r   r   __deepcopy__r   r   r"   )r   rK   rL   r   r   resultr    s         r   r   z#NonWrapperTensor.__torch_function__   sx    ++D%vFFfc"" 	 u|000%-d1g.A%B%B"" '&" r   c                 V     t          |           t          j        |                    S r3   )typer   empty)r#   shapes     r   	new_emptyzNonWrapperTensor.new_empty   s"    tDzz%+e,,---r   rY   )r"   r&   r'   r   r)   r   r   r[   r\   s   @r   r   r      sg                [ . . . . . . .r   r   c                       e Zd Zg dZddZdS )SubclassInfoname	create_fnclosed_under_opsTc                 0    || _         || _        || _        d S r3   r   )r#   r   r   r   s       r   r6   zSubclassInfo.__init__   s    	" 0r   N)T)r"   r&   r'   	__slots__r6   r*   r   r   r   r      s3        999I1 1 1 1 1 1r   r   c                      | t          j        |                    }|                                 |                                 |S r3   )r   randnr	   r   )r   r   subs      r   _create_and_access_shaper     s<    
#ek%  
!
!C
 HHJJJJJLLLJr   base_tensor)r   non_wrapper_tensorc                 D    t          t          j        |                     S r3   )r   r   r   r   s    r   <lambda>r     s     0U1C1C D D r   logging_tensorc                 D    t          t          j        |                     S r3   )r   r   r   r   s    r   r   r     s    ek%.@.@ A A r   sparse_tensorc                 ~    t                               t          j        |                                                     S r3   )rz   r   r   r   relur   s    r   r   r     s*     7 7E8J8J8O8O8Q8Q R R r   diag_tensor_belowc                 D    t          t          j        |                     S r3   )rh   r   r   r   s    r   r   r     s    E0B0B C C r   F)r   r   wrapper_with_custom_sizesc                 ,    t          t          |           S r3   )r   r,   r   s    r   r   r   $  s     89UW\ ] ] r   wrapper_with_custom_stridesc                 ,    t          t          |           S r3   )r   r^   r   s    r   r   r   )  s     89WY^ _ _ r   c                   b    e Zd Zed             Zd Zd Zd Zed             Z	ed             Z
dS )SubclassWithTensorFactoryc                     |j         }i }|                                |d<   |                                |d<   |j        |d<   |j        |d<   |j        |d<   |j        |d<   t          j        j	        | |fi |}|S )Nr`   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    	JJLLy#&#5#5#7#7 :x:x"%"3)wl1#uGGGG
r   c                     || _         d S r3   )r   )r#   r   s     r   r6   z"SubclassWithTensorFactory.__init__<  s    r   c                     | j         j         S r3   )r    r"   r#   s    r   rU   z"SubclassWithTensorFactory.__repr__?  s    .)++r   c                     dgd fS Nr   r*   r   s    r   __tensor_flatten__z,SubclassWithTensorFactory.__tensor_flatten__B  s    w}r   c                 (    |d         } | |          S r   r*   )r   inner_tensorsmeta
outer_sizeouter_strider   s         r   __tensor_unflatten__z.SubclassWithTensorFactory.__tensor_unflatten__E  s    E"s3xxr   c                      |i }d }t          j         ||          }t          j         ||          } ||i |}t          j        |          \  }	}
 fd|	D             }t          j        ||
          S )Nc                     | j         j        t          j        k    r&| j         t          j        | j         j                  z  n| j         S r3   )r   r
   r   float32onesr   )xs    r   _fnz9SubclassWithTensorFactory.__torch_dispatch__.<locals>._fnO  s6    67ekU]6R6R155:aek2222XYX]]r   c                 ^    g | ])}t          |t          j                  r |          n|*S r*   )rA   r   r   )r=   or   s     r   
<listcomp>z@SubclassWithTensorFactory.__torch_dispatch__.<locals>.<listcomp>Y  s6    TTTQjEL99@CCFFFqTTTr   )pytreetree_map_onlytree_flattentree_unflatten)r   rK   rL   r   r   r   _args_kwargs_out	_out_flat	_out_specout_flats   `           r   rN   z,SubclassWithTensorFactory.__torch_dispatch__J  s    >F	^ 	^ 	^ $S#t44&sC88tU&g&&%2488	9TTTT)TTT$Xy999r   N)r"   r&   r'   r(   r   r6   rU   r   r)   r   rN   r*   r   r   r   r   .  s        
 
 \
  , , ,     [ : : [: : :r   r   )r   copyr   torch.utils._pytreer   utils_pytreer   &torch.testing._internal.logging_tensorr   r   r   r,   r^   rh   rz   r   r   r   r   subclass_dbr   r*   r   r   <module>r      s          ( ( ( ( ( ( $ $ $ $ $ $ $ $ $ A @ @ @ @ @)G )G )G )G )GEL )G )G )GX? ? ? ? ?= ? ? ?:? ? ? ? ?] ? ? ?:'E 'E 'E 'E 'Em 'E 'E 'ET76 76 76 76 76= 76 76 76v. . . . .u| . . .<1 1 1 1 1 1 1 1   
L,,   llDD   <<AA   ,,RR   \\CC  
 !,,#]]# # #
 #LL%__% % %5B,: ,: ,: ,: ,: ,: ,: ,: ,: ,:r   