
    sh/                        S SK r S SKJr  S SKJr  S SKJs  Jr  S SKJ	r	   " S S\ R                  5      r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\ R                  5      r " S S5      rS r\ R                  \" S\ R&                  S9\\" SS S9\	\" SS S9\\" SS S9\\" SS SS9\\" S S! SS9\\" S"S# SS90r " S$ S%\ R                  5      rg)&    N)deepcopy)tree_map)LoggingTensorc                   :    \ rS rSr\S 5       r\S 5       rS rSr	g)WrapperTensor   c                 b   U R                   " U0 UD6u  p2SU;  a  UR                  5       nOUS   nUS	 SU;  a  UR                  US'   SU;  a  UR                  US'   SU;  a  UR                  US'   SU;  a  SUS'   [
        R                  R                  " X40 UD6nUR                  5         U$ )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         {/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/testing/_internal/common_subclass.py__new__WrapperTensor.__new__   s    ..??	668D&>Dv& ggF7O6! xxF86! xxF8&(&+F?# ,,55cJ6J!!#    c                     [        S5      e)Nz,You need to implement get_wrapper_properties)NotImplementedError)r   r   r   s      r   r   $WrapperTensor.get_wrapper_properties&   s    
 ""PQQr   c                     / SQnU HZ  n[        U R                  U5      [        [        R                  U5      Ld  M6  [	        SU R                  R
                   SU S35      e   g )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   WrapperTensor._validate_methods-   sj    
 _%Bt~~r*'%,,2KK"Yt~~/F/F.G H//1d 3F$F G G &r    N)
r%   
__module____qualname____firstlineno__staticmethodr   classmethodr   r   __static_attributes__r*   r   r   r   r      s0     , R R
Gr   r   c                   Z   ^  \ rS rSr\SS j5       rSS jr\SS j5       rU 4S jrSr	U =r
$ )	WrapperTensorWithCustomSizes:   c                     XSS.4$ )Nsizesr   dispatch_sizes_strides_policyr*   r   r   r   s      r   r   3WrapperTensorWithCustomSizes.get_wrapper_properties;   s    T[\\\r   c                     Xl         g Nr   r&   r   r   s      r   __init__%WrapperTensorWithCustomSizes.__init__?       r   c                    ^  [        U 4S jU 5       5      (       d  [        $ Uc  0 nS nS n[        Xa" [        XS5      0 [        XT=(       d    0 5      D65      nU$ )Nc              3   <   >#    U  H  n[        TU5      v   M     g 7fr;   
issubclass.0r   r   s     r   	<genexpr>BWrapperTensorWithCustomSizes.__torch_dispatch__.<locals>.<genexpr>D        5u!:c1%%u   c                 H    [        U [        5      (       a  U R                  $ U $ r;   )
isinstancer2   r   es    r   unwrap?WrapperTensorWithCustomSizes.__torch_dispatch__.<locals>.unwrapJ   s    $Q(DEE133L1Lr   c                 Z    [        U [        R                  5      (       a  [        U 5      $ U $ r;   )rL   r   r   r2   rM   s    r   wrap=WrapperTensorWithCustomSizes.__torch_dispatch__.<locals>.wrapM   s$    6@ELL6Q6Q/2XWXXr   allNotImplementedr   r   functypesr   r   rO   rR   rss   `       r   __torch_dispatch__/WrapperTensorWithCustomSizes.__torch_dispatch__B   s\    5u555!!>F	M	Y dD(6"8[HV\WY<Z[\	r   c                 8   > [         TU ]  SU R                   3S9$ Nzt=tensor_contentssuper__repr__r   r&   r#   s    r   rc   %WrapperTensorWithCustomSizes.__repr__S        w"TVVH>>r   r<   Fr*   Nr%   r+   r,   r-   r/   r   r>   r[   rc   r0   __classcell__r#   s   @r   r2   r2   :   s:    ] ]   ? ?r   r2   c                   Z   ^  \ rS rSr\SS j5       rSS jr\SS j5       rU 4S jrSr	U =r
$ )	WrapperTensorWithCustomStridesW   c                     XSS.4$ )Nstridesr6   r*   r8   s      r   r   5WrapperTensorWithCustomStrides.get_wrapper_propertiesX   s    T]^^^r   c                     Xl         g r;   r<   r=   s      r   r>   'WrapperTensorWithCustomStrides.__init__\   r@   r   c                    ^  [        U 4S jU 5       5      (       d  [        $ Uc  0 nS nS n[        Xa" [        XS5      0 [        XT=(       d    0 5      D65      nU$ )Nc              3   <   >#    U  H  n[        TU5      v   M     g 7fr;   rC   rE   s     r   rG   DWrapperTensorWithCustomStrides.__torch_dispatch__.<locals>.<genexpr>a   rI   rJ   c                 H    [        U [        5      (       a  U R                  $ U $ r;   )rL   rm   r   rM   s    r   rO   AWrapperTensorWithCustomStrides.__torch_dispatch__.<locals>.unwrapg   s    $Q(FGG133NQNr   c                 Z    [        U [        R                  5      (       a  [        U 5      $ U $ r;   )rL   r   r   rm   rM   s    r   rR   ?WrapperTensorWithCustomStrides.__torch_dispatch__.<locals>.wrapj   s$    8B1ell8S8S1!4ZYZZr   rT   rW   s   `       r   r[   1WrapperTensorWithCustomStrides.__torch_dispatch___   s\    5u555!!>F	O	[ dD(6"8[HV\WY<Z[\	r   c                 8   > [         TU ]  SU R                   3S9$ r^   ra   rd   s    r   rc   'WrapperTensorWithCustomStrides.__repr__p   rf   r   r<   rg   rh   ri   rk   s   @r   rm   rm   W   s:    _ _   ? ?r   rm   c                   ^   ^  \ rS rSr\SS j5       rSS jr0 r\SS j5       rU 4S jr	Sr
U =r$ )	DiagTensorBelowt   c                 p    UR                   S:X  d   eXR                  5       UR                  5       -   US.4$ )N   r
   r   )ndimr
   )r   diagr   s      r   r   &DiagTensorBelow.get_wrapper_propertiesu   s1    yyA~~iikDIIK7-XXXr   c                     Xl         g r;   r   )r&   r   r   s      r   r>   DiagTensorBelow.__init__z   s    	r   c                 (  ^  [        U 4S jU 5       5      (       d  [        $ T R                  R                  UR                  S 5      nU(       a  U" U0 U=(       d    0 D6$ S nS n[        Xq" [        Xc5      0 [        Xd=(       d    0 5      D65      nU$ )Nc              3   <   >#    U  H  n[        TU5      v   M     g 7fr;   rC   rE   s     r   rG   5DiagTensorBelow.__torch_dispatch__.<locals>.<genexpr>   rI   rJ   c                 d    [        U [        5      (       a  U R                  R                  5       $ U $ r;   )rL   r   r   rM   s    r   rO   2DiagTensorBelow.__torch_dispatch__.<locals>.unwrap   s#    (21o(F(Fqvv{{}MAMr   c                 j   [        U [        R                  5      (       a  U R                  S:X  a  [	        U 5      $ [        U [        R                  5      (       aY  U R                  S:X  aI  U R                  5       U R                  5       R                  5       :X  a  [	        U R                  5       5      $ U $ )Nr      )rL   r   r   r   r   count_nonzeror   rM   s    r   rR   0DiagTensorBelow.__torch_dispatch__.<locals>.wrap   sz    a..166Q;*1--a..166Q;1??CTXYX^X^X`XnXnXpCp*166844r   )rU   rV   handled_opsgetr%   r   )	r   rX   rY   r   r   fnrO   rR   rZ   s	   `        r   r[   "DiagTensorBelow.__torch_dispatch__   s    5u555!! __  5t."..N $hv&< _Q][]@^ _`BIr   c                 8   > [         TU ]  SU R                   3S9$ )Nzdiag=r_   )rb   rc   r   rd   s    r   rc   DiagTensorBelow.__repr__   s!    w%		{0CDDr   r   rg   rh   )r%   r+   r,   r-   r/   r   r>   r   r[   rc   r0   rj   rk   s   @r   r   r   t   sA    Y Y K 4E Er   r   c                      ^  \ rS rSr\SS j5       rSS jrU 4S jrS r\	S 5       r
\SS j5       rU 4S jr0 r\S	 5       rS
rU =r$ )SparseTensor   c                 F    UR                   UR                   :X  d   eX!US.4$ )Nr   )r   )r   r
   valuesindicesr   s        r   r   #SparseTensor.get_wrapper_properties   s&    }}...}EEEr   c                     X l         X0l        g r;   )r   r   )r&   r
   r   r   r   s        r   r>   SparseTensor.__init__   s    r   c                 R   > [         TU ]  SU R                   SU R                   3S9$ )Nzvalues=z
, indices=r_   )rb   rc   r   r   rd   s    r   rc   SparseTensor.__repr__   s/    w'$++jQUQ]Q]P^0_``r   c                     [         R                  " U R                  5       U R                  R                  S9nU R                  XR
                  R                  S5      '   U$ )N)r   r   )r   zerosr
   r   r   r   unbind)r&   ress     r   sparse_to_denseSparseTensor.sparse_to_dense   sB    kk$))+T[[->->?&*kkLL"#
r   c                 |    U R                  5       nXR                  S5         n[        U R                  5       X!5      $ )Nr   )nonzeror   r   r
   )r   r   r   s      r   
from_denseSparseTensor.from_dense   s1    ))+>>!$%AFFHf66r   c                     UR                    SUR                   3nU R                  XSU5      nU[        La  U$ S nS n[	        X" [	        Xs5      0 [	        Xt=(       d    0 5      D65      n	U	$ )N.c                 P    [        U [        5      (       a  U R                  5       $ U $ r;   )rL   r   r   rM   s    r   rO   /SparseTensor.__torch_dispatch__.<locals>.unwrap   s"    *4Q*E*E1$$&L1Lr   c                 n    [        U [        R                  5      (       a  [        R	                  U 5      $ U $ r;   )rL   r   r   r   r   rM   s    r   rR   -SparseTensor.__torch_dispatch__.<locals>.wrap   s)    1;Au||1L1L<**1-SRSSr   )r+   r%   _try_call_special_implrV   r   )
r   rX   rY   r   r   	func_namer   rO   rR   rZ   s
             r   r[   SparseTensor.__torch_dispatch__   sr    'q8	((&An$J	M	T dD(6"8[HV\WY<Z[\	r   c                 "   > [         TU ]  U5      $ r;   )rb   __rmul__)r&   otherr#   s     r   r   SparseTensor.__rmul__   s    w&&r   c                 V    XR                   ;  a  [        $ U R                   U   " X#5      $ r;   )_SPECIAL_IMPLSrV   )r   rX   r   r   s       r   r   #SparseTensor._try_call_special_impl   s*    )))!!!!$'55r   )r   r   rg   rh   )r%   r+   r,   r-   r/   r   r>   rc   r   r.   r   r[   r   r   r   r0   rj   rk   s   @r   r   r      sm    F Fa
 7 7
  *' N6 6r   r   c                   B   ^  \ rS rSrS r\SU 4S jj5       rS rSrU =r	$ )NonWrapperTensor   c                 V    [         R                  R                  X5      nSS 0Ul        U$ )Nlast_func_called)r   r   _make_subclassextra_state)r   datar   s      r   r   NonWrapperTensor.__new__   s+    LL''2
 r   r*   c                    > [         TU ]  XX45      n[        XP5      (       aO  U[        R                  R
                  L a  [        US   R                  5      Ul        U$ SUR                  0Ul        U$ )Nr   r   )	rb   __torch_function__rL   r   r   __deepcopy__r   r   r%   )r   rX   rY   r   r   resultr#   s         r   r   #NonWrapperTensor.__torch_function__   sm    +DFf"" u||000%-d1g.A.A%B"  '&" r   c                 L    [        U 5      " [        R                  " U5      5      $ r;   )typer   empty)r&   shapes     r   	new_emptyNonWrapperTensor.new_empty   s    Dz%++e,--r   rh   )
r%   r+   r,   r-   r   r/   r   r   r0   rj   rk   s   @r   r   r      s&       . .r   r   c                   &    \ rS rSr/ SQrSS jrSrg)SubclassInfo   name	create_fnclosed_under_opsc                 (    Xl         X l        X0l        g r;   r   )r&   r   r   r   s       r   r>   SubclassInfo.__init__   s    	" 0r   )r   r   r   N)T)r%   r+   r,   r-   	__slots__r>   r0   r*   r   r   r   r      s    9I1r   r   c                 ~    U " [         R                  " U5      5      nUR                  5         UR                  5         U$ r;   )r   randnr
   r!   )r   r   subs      r   _create_and_access_shaper     s.    
ekk% 
!C
 HHJJJLJr   base_tensor)r   non_wrapper_tensorc                 @    [        [        R                  " U 5      5      $ r;   )r   r   r   r   s    r   <lambda>r     s     0U1C Dr   logging_tensorc                 @    [        [        R                  " U 5      5      $ r;   )r   r   r   r   s    r   r   r     s    ekk%.@ Ar   sparse_tensorc                 p    [         R                  [        R                  " U 5      R	                  5       5      $ r;   )r   r   r   r   relur   s    r   r   r     s!     7 7E8J8O8O8Q Rr   diag_tensor_belowc                 @    [        [        R                  " U 5      5      $ r;   )r   r   r   r   s    r   r   r     s    E0B Cr   F)r   r   wrapper_with_custom_sizesc                 "    [        [        U 5      $ r;   )r   r2   r   s    r   r   r   $  s     89UW\ ]r   wrapper_with_custom_stridesc                 "    [        [        U 5      $ r;   )r   rm   r   s    r   r   r   )  s     89WY^ _r   c                   V    \ rS rSr\S 5       rS rS rS r\	S 5       r
\	S 5       rSrg	)
SubclassWithTensorFactoryi.  c                 (   UR                   n0 nUR                  5       US'   UR                  5       US'   UR                  US'   UR                  US'   UR
                  US'   UR                  US'   [        R                  R                  " X40 UD6nU$ )Nrp   storage_offsetr   r   r   r   )
r   r!   r   r   r   r   r   r   r   r   )r   srcr   r   outs        r   r   !SubclassWithTensorFactory.__new__/  s    		JJLy#&#5#5#7 ::x::x"%"3"3))wll11#GG
r   c                     Xl         g r;   r   )r&   r   s     r   r>   "SubclassWithTensorFactory.__init__<  s    r   c                 0    U R                   R                   $ r;   )r#   r%   r&   s    r   rc   "SubclassWithTensorFactory.__repr__?  s    ..))*+r   c                     S/S 4$ Nr   r*   r   s    r   __tensor_flatten__,SubclassWithTensorFactory.__tensor_flatten__B  s    w}r   c                     US   nU " U5      $ r   r*   )r   inner_tensorsmeta
outer_sizeouter_strider   s         r   __tensor_unflatten__.SubclassWithTensorFactory.__tensor_unflatten__E  s    E"3xr   c                 V   Uc  0 nS n[         R                  " XU5      n[         R                  " XU5      nU" U0 UD6n[         R                  " U5      u  pU	 Vs/ s H,  n[        U[        R
                  5      (       a  U " U5      OUPM.     nn[         R                  " X5      $ s  snf )Nc                     U R                   R                  [        R                  :X  a7  U R                   [        R                  " U R                   R
                  5      -  $ U R                   $ r;   )r   r   r   float32onesr   )xs    r   _fn9SubclassWithTensorFactory.__torch_dispatch__.<locals>._fnO  sA    67eekkU]]6R1555::aeekk22]XYX]X]]r   )pytreetree_map_onlytree_flattenrL   r   r   tree_unflatten)r   rX   rY   r   r   r  _args_kwargs_out	_out_flat	_out_specoout_flats                r   r[   ,SubclassWithTensorFactory.__torch_dispatch__J  s    >F	^ $$St4&&s8U&g&%2248	JST)QjELL99CFq@)T$$X99 Us   3B&r   N)r%   r+   r,   r-   r.   r   r>   rc   r   r/   r  r[   r0   r*   r   r   r   r   .  sK    
 
,   : :r   r   )r   copyr   torch.utils._pytreer   utils_pytreer  &torch.testing._internal.logging_tensorr   r   r   r2   rm   r   r   r   r   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
 !,#]#
 #L%_%5B,: ,:r   