
    shc                     "   S SK r S SK Jr  S SKrS SKJr  S SKJrJrJr  S SK	J
r  S SKJr  S SKJrJr  S SKJs  Jr  S SKJr  S SKrS	 rS
 rS rS rS rSS jrS rS rS r S r!S r"SS jr#S r$S r%S r&SS jr'  SS\4S jjr(SS\4S jjr)g)     N)Tensor)TorchDispatchMode)tree_maptree_flattentree_unflatten)_pytree)partial)no_dispatchall_same_mode)Callablec                 d    U R                   nU" U 5      nU" U5      nXE:X  a  g [        SU S35      e)Nz.This operator is not Composite Compliant: the zR of the tensor was modified directly without going through the PyTorch dispatcher.)elemRuntimeError)wrapper_tensormetadata_namemetadata_accessorr   metadata_wrapper_tensormetadata_elems         ڀ/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/testing/_internal/composite_compliance.pycheck_attr_consistencyr      sJ    D/?%d+M/

8/ 0	12 2    c                     [        X5      (       d  g [        R                  S S [        R                  [        R                  [        R
                  S.nUR                  5        H  u  p4[        XU5        M     g )Nc                     U R                   $ N)dtypexs    r   <lambda>,check_metadata_consistency.<locals>.<lambda>"   s    177r   c                     U R                   $ r   )devicer   s    r   r   r   #   s    AHHr   )shaper   r!   numelstridestorage_offset)
isinstancer   sizer#   r$   r%   itemsr   )r   CCTthings_to_checkr   r   s        r   check_metadata_consistencyr+      s_    n**"$-- //O -<,A,A,C(~>OP -Dr   c                 4    U R                   R                  S;   $ )N>"   timagrealview_conjaliaschunkslicesplitdetachexpandhsplitnarrowselectunbindunfoldvsplitmovedimpermutesqueezeview_asdiagonalswapaxes	expand_as	transpose	unflatten	unsqueeze
as_strided_unsafe_viewtensor_splitview_as_real_reshape_aliasview_as_complexsplit_with_sizesoverloadpacket__name__funcs    r   
is_view_fnrT   +   s     '' #, # #r   c                 4    U R                   R                  S;   $ )N>   t_detach_squeeze_	swapaxes_	swapdims_
transpose_
unsqueeze_as_strided_rO   rR   s    r   is_inplace_view_fnr^   S   s     '' 	, 	 	r   c                     U R                   R                  n[        R                  " SU5      (       a  g[        R                  " SU5      (       a  gUS   S:H  $ )Nz__i.+__Tz__.+__F_)rP   rQ   rematch)rS   names     r   
is_inplacere   a   sI    ''D	xx	4  	xx$8s?r   c                 v   ^ ^  " U4S jS[         R                  5      m " UU 4S jS[        5      nTU" 5       4$ )Nc                   l   > \ rS rSr% \R
                  \S'   S/r\S 5       r	S r
\SU 4S jj5       rSrg)	7generate_cct_and_mode.<locals>.CompositeCompliantTensort   r   c                    [        U5      U Ld   S5       e[        R                  R                  XR	                  5       UR
                  UR                  UR                  UR                  UR                  5       UR                  5       S9nUR                  (       a  [        R                  " SUR
                  UR                  UR                  SS9nUR                  UR                  5       R                  5       UR                  5       UR	                  5       UR                  5       S9  Xel        OXl        UR                  5       UR                  R                  5       :X  d   e[        R                   R#                  XUR                  R%                  5       5        [        R                   R'                  XUR                  R)                  5       5        X%l        U$ )NzRWrapping a CompositeCompliantTensor in a CompositeCompliantTensor is not supported)r   layoutr!   requires_gradstridesr%    F)r   r!   rk   rl   )sourcer%   r'   r$   )typetorchr   _make_wrapper_subclassr'   r   rk   r!   rl   r$   r%   emptyset_untyped_storagecloner   _C	_set_conjis_conj_set_negis_negmode)clsr   r|   argskwargsrtmps          r   __new__?generate_cct_and_mode.<locals>.CompositeCompliantTensor.__new__y   s`   :S( ede( 33YY[jj{{$2D2Dd6I6I6K	 4 MA !! kk**;;;;"' //1779#'#6#6#8;;=	   88:000
 HHq&&.."23HHa1FHr   c                 "    SU R                    S3$ )NzCompositeCompliantTensor())r   )selfs    r   __repr__@generate_cct_and_mode.<locals>.CompositeCompliantTensor.__repr__   s    .tyyk;;r   rn   Nc                    > [         R                  " U0 U=(       d    0 D6n[        U4S jU 5       5      n[        U5      (       d  [	        S5      eUS      U" U0 UD6sS S S 5        $ ! , (       d  f       g = f)Nc              3   b   >#    U  H$  n[        UT5      (       d  M  UR                  v   M&     g 7fr   )r&   r|   ).0eCompositeCompliantTensors     r   	<genexpr>]generate_cct_and_mode.<locals>.CompositeCompliantTensor.__torch_dispatch__.<locals>.<genexpr>   s!     ^(QjD\6]&!&&(s   //z*Multiple CompositeCompliantTensorModes NYIr   )pytreearg_tree_leavestupler   r   )r}   rS   typesr~   r   all_argsmodesr   s          r   __torch_dispatch__Jgenerate_cct_and_mode.<locals>.CompositeCompliantTensor.__torch_dispatch__   sa    --tF"FH^(^^E ''"#OPPqT,V, s   A((
A6rn   N)rQ   
__module____qualname____firstlineno__rq   r   __annotations__	__slots__staticmethodr   r   classmethodr   __static_attributes__)r   s   r   r   rh   t   s@    llH		-	 
-	^	< 
	- 
	-r   r   c                   (   > \ rS rSrSU U4S jjrSrg);generate_cct_and_mode.<locals>.CompositeCompliantTensorMode   rn   Nc                 N  >^  U4S jnUU 4S jnU[         R                  R                  R                  R                  :X  a  [        S5      eUR                  R                  S;   a  [        UR                   S35      e[        U5      (       aL  US   n[        UT5      (       d6  [        U4S jUSS   5       5      (       a  [        S	UR                   S
35      e[        XS5      n[        XT5      n	U" U0 U	D6n
[        Xj5      n[        U5      (       at  T(       am  [        5          U" U0 UD6n[        U[        [        45      (       a&  [!        X5       H  u  pUR#                  U5        M     OUR#                  U5        S S S 5        [        5          [%        U5      (       a  U" U0 UD6  S S S 5        ['        [(        TS9n[*        R,                  " X5        [*        R,                  " X5        [*        R,                  " X5        U$ ! , (       d  f       N= f! , (       d  f       Nq= f)Nc                 B   > [        U T5      (       a  U R                  $ U $ r   r&   r   )r   r   s    r   unwrap^generate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__.<locals>.unwrap   s    !+A/G!H!HqvvOaOr   c                 X   > [        U [        R                  5      (       a	  T" U T5      $ U $ r   r&   rq   r   )r   r   r   s    r   wrap\generate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__.<locals>.wrap   s'    <Fq%,,<W<W/48^]^^r   z.item() is not allowed to be called inside of composite functions in the PyTorch library because not all backends and/or Tensor subclasses (e.g. vmap, ProxyTensor) support them.)rt   resize_z; is not allowed to be called inside of Composite operators.r   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr   )r&   )r   ar   s     r   r   agenerate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__.<locals>.<genexpr>   s     VXJq*BCCXs      z7Not composite compliant: performing in-place operation z where the Tensor being written to is regular Tensor but the other tensors are Tensor Subclasses. Please try to avoid this in-place operation.)r)   )rq   opsaten_local_scalar_densedefaultr   rP   rQ   re   r&   anyr   rT   r
   r   listziprt   r^   r	   r+   r   	tree_map_)r   rS   r   r~   r   r   r   mutated_argumentunwrapped_argsunwrapped_kwargsunwrapped_rsrsresultr   bcheckr   autograd_view_consistencys   `               r   r   Ngenerate_cct_and_mode.<locals>.CompositeCompliantTensorMode.__torch_dispatch__   s   P_ uyy~~99AAA"VW W
 ""++/BB"}}o &+ ,- - $ $(7 !"24LMMVTRSRTXVVV&Q==/ *GGH H &f3N'7D3CDL$-B$$= !] "4262F!&5$-88$'ODAFF1I %4 # #, %d++$)&)  6<TUEU)U+U'IC #], s   %AHH
H
H$r   )rQ   r   r   r   r   r   )r   r   s   r   CompositeCompliantTensorModer      s    J	 J	r   r   )rq   r   r   )r   r   r   s   ` @r   generate_cct_and_moder   j   s;    ?-5<< ?-BK K'8 KZ $%A%CCCr   c                     [        U [        5      (       d  [        U [        5      (       d  g[        U 5      S:X  a  g[	        S U  5       5      nU(       a  g[	        S U  5       5      nU(       a  [        S5      eg)NFr   c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   r   r   elts     r   r    is_tensorlist.<locals>.<genexpr>	  s     Csjell33s   ')Tc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   r   r   s     r   r   r     s     IScJsELL99Sr   zVThis test assumes that PyTorch APIs cannot take mixed lists of Tensor and other things)r&   r   r   lenallr   )lstall_tensorsexists_one_tensors      r   is_tensorlistr     sn    c4  C)?)?
3x1}CsCCKISII D E 	Er   c                 $    U(       a  U " U5      $ U$ r   rn   )fn
should_mapargs      r   	maybe_mapr     s     2c7)c)r   c                     [        U [        R                  5      (       a  U" X5      $ [        U 5      (       a  U  Vs/ s H
  o1" X25      PM     sn$ [	        S5      es  snf )Nz*wrap assumes that the input can be wrapped)r&   rq   r   r   r   )r   r)   cct_moder   s       r   r   r     sT    #u||$$3!!S*-.#QA #..
C
DD /s   Ac              #     #    U  Vs/ s H/  n[        U[        R                  5      =(       d    [        U5      PM1     nnU Vs/ s H  oU(       a  SS/OS/PM     nn[        R
                  " U6  H=  n[        Xp5       VVs/ s H  u  p[        [        [        XS9X5      PM     n	nnX4v   M?     g s  snf s  snf s  snnf 7f)NFT)r)   r   )
r&   rq   r   r   	itertoolsproductr   r   r	   r   )
	flat_argsr)   r   r   is_tensor_likesis_tensor_likesubclass_optionswhich_args_are_wrappedshould_wrap_argr   s
             r   generate_subclass_choicesr   *  s     V_`V_sz#u||4Jc8JJV_O`[jk[jeWD[jk"+"3"35E"F /22H.TV.T*o GDcE\.T 	 V,,	 #G akVs'   C6B1CB6&C $B;$Cc              #   "  #    [        U5      u  pE[        U 5      [        U5      -   n[        XbU5       HW  u  pxUS [        U 5       n	[	        U[        U 5      S  U5      n
US [        U 5       n[	        U[        U 5      S  U5      nXX4v   MY     g 7fr   )r   r   r   r   r   )r~   r   r)   r   flat_kwargsspecflat_args_kwargschoicedebug_metadatanew_args
new_kwargsr   which_kwargs_are_wrappeds                r   %generate_subclass_choices_args_kwargsr   9  s     $V,KDzD$55";<LS["\*3t9%#F3t9:$6=
!/
T!;#1.T2Ld#S $:TT #]s   BBc                 "    [        SU S35      U e)Nz8Composite compliance check failed with the above error.
a(  If you are adding an OpInfo of an existing operator, please feel free to skip this test because the problem was pre-existing and file an issue. Otherwise, if you added a new operator, please read through the Composite Compliance section in aten/src/ATen/native/README.md for how to resolve this. )r   )erradditional_infos     r    raise_composite_compliance_errorr   E  s+    
	
	C	C
 
r   c           
         ^ [        5       u  mnU " U0 UD6n[        XTU5       H*  nUu  pxp U " U0 UD6nU4S jnU" [	        UW5      U5        M,     g ! [         a  n[        USU	 SU
 S35         S nAN@S nAff = f)N- wrapped_args: 
- wrapped_kwargs: 
c                 B   > [        U T5      (       a  U R                  $ U $ r   r   r   r)   s    r   r   &check_all_permutations.<locals>.unwrapw  s    '3//1666Q6r   )r   r   r   r   r   )opr~   r   assert_equal_fnr   expectedr   r   r   r   r   actualr   r   r)   s                 @r   check_all_permutationsr   [  s    )+MC4"6"H7c8TQWN4	0Z0F*	7 	0(;9 U$  	,"#9": ;%%=$>bB 	s   A
A:A55A:c                 ,  ^	^
 [        5       u  m	m
U	U
4S jnU " U0 UD6n[        XA5      n[        XB5      n T
   U " U0 UD6nS S S 5        U	4S jnU" [        UW5      U5        g ! , (       d  f       N(= f! [         a  n[        U5         S nANES nAff = f)Nc                 X   > [        U [        R                  5      (       a	  T" U T5      $ U $ r   r   )r   r)   r   s    r   r   check_with_mode.<locals>.wrap  s%    #-a#>#>s1hEAEr   c                 B   > [        U T5      (       a  U R                  $ U $ r   r   r   s    r   r   check_with_mode.<locals>.unwrap  s    #As++qvv22r   )r   r   r   r   )r   r~   r   r   r   r   r   r   r   r)   r   s            @@r   check_with_moder    s    )+MCF 4"6"HDDd#F.((F 3 HVV,h7 X  .(--.s4   A4 	A#A4 #
A1-A4 1A4 4
B>BBc                     / n[        U 5      u  p[        U5      u  pX-   n U  HH  n[        U[        R                  5      (       d  M$  UR                  (       d  M7  UR                  U5        MJ     U$ r   )r   r&   rq   r   rl   append)r~   r   leaf_tensors
_args_spec_kwargs_specr   s         r   gather_leaf_tensorsr	    sh    L#D)D'/F=D#u||,,$	 
 r   c           	      b   Uc	  U " U0 UD6nOU" U /UQ70 UD6nUb  U" U5      n[         R                  " U5      nU Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU Vs/ s H  owR
                  (       d  M  UPM     nn[        U5      S:  d   eU Vs/ s H7  n[        R                  " UR                  UR                  UR                  S9PM9     n	n[        X5      n
[        U
5      S:  d   e[        R                  R                  XU	SSS9$ s  snf s  snf s  snf )Nr   r!   r   Tallow_unusedretain_graph)r   tree_leavesr&   rq   r   rl   r   onesr"   r!   r   r	  autogradgrad)r   r~   r   output_process_fn_gradgradcheck_wrapperresultsflat_resultsr   flat_diff_resultsgradsr  s              r   compute_expected_gradsr    s    d%f%#B888)(1%%g.L+K|!z!U\\/JA|LK$0DLqOOLD !A%%%J[\J[QUZZ@J[E\&t4L|q   >>0$4d  L L LD ]s   #D"%D"1D'	D'&>D,r   c                   ^ [        5       u  mn[        XX#U5      n[        XTU5       GHf  nUu  pp[        X5      n[	        U5      S:  d   e Uc	  U " U	0 U
D6nOU" U /U	Q70 U
D6nUb  U" U5      n[        R                  " W5      nU Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU Vs/ s H  nUR                  (       d  M  UPM     nn[	        U5      S:  d   eU Vs/ s H7  n[        R                  " UR                  UR                  UR                   S9PM9     nn[#        UTU5       HI  u  nn [        R$                  R'                  UUUSSS9nU4S	 jnU" [)        [+        UW5      5      USS
9  MK     GMi     g ! [
         a  n[        USU SU S35         S nAGNFS nAff = fs  snf s  snf s  snf ! [
         a   n[        USU SU SU S35         S nANS nAff = f)Nr   r   r   r   r  Tr  z
- wrapped_grads: c                 B   > [        U T5      (       a  U R                  $ U $ r   r   r   s    r   r   &check_backward_formula.<locals>.unwrap  s    !+As!3!3qvv::r   	equal_nan)r   r  r   r	  r   r   r   r   r  r&   rq   r   rl   r  r"   r!   r   r   r  r  r   map)r   r~   r   r  r  r   r   r   r   r   r   r   r   r  r  r   r  r   r  r  flat_new_gradswhich_grad_is_batchedr   r   r)   s                           @r   check_backward_formular"    s2    *+MC%bPabH7c8TQWN4*8@< 1$$$	 (h5*5+BHHZH%109 ))'2#/O<a:a3N<O(4H1QH$%))) ,-+Q AGGAHHAGGD+ 	 -5NuVY[c5d1N1
,,->n:>T - S; E#ff"56DQ! 6e9 U  	,"#9": ;%%=$>bB 	 PH-   0&'=&> ?))A(B C((='>bB sN   #F#G 3G ?GG5>G
	!G
F=F88F=
G9G44G9c                   ^ ^^!^"^#^$ [        SS9u  m!nU!4S jm#[        U#4S jU 5       5      n[        U5      u  px[        U#4S jU 5       5      n	[        X5      n
[        R
                  " 5          S m"UU"U 4S jnU" XX*5      n[        [        R                  U5      n[        S U5      n[        S	 U5      n[        XT!U5       H  nUu  nnnn[        XjT!U5       H  nUu  nnnn[        [        T"[        UU5      5      5      nUR                  5        VVs0 s H  u  nnUT"" UUU   45      _M     nnn Tc	  T " U0 UD6nOT" T /UQ70 UD6n U!4S jm$[        [        R                  W5      n[        U$4S jU5      n[        U$4S jU5      n U" UUSS9  U" U USS9  M     M     S S S 5        g s  snnf ! [         a#  n[        US
U SU SU SU S3	5         S nANS nAff = f! , (       d  f       g = f)NF)r   c                 N  > [        U 5      TLd   e[        U [        R                  5      (       a'  U R                  (       a  [        R
                  " U 5      $ [        U 5      (       a9  U  Vs/ s H+  oR                  (       a  [        R
                  " U5      OS PM-     sn$ g s  snf r   )rp   r&   rq   r   rl   
randn_liker   )r-   r   r)   s     r   maybe_tangent/check_forward_ad_formula.<locals>.maybe_tangent  s|    Awc!!! a&&1??##A&&1NOPa??E$$Q'DaPP Qs   ,2B"c              3   4   >#    U  H  nT" U5      v   M     g 7fr   rn   r   r   r&  s     r   r   +check_forward_ad_formula.<locals>.<genexpr>  s     <ts++t   c              3   4   >#    U  H  nT" U5      v   M     g 7fr   rn   r)  s     r   r   r*    s     Jksc 2 2kr+  c                    U u  p[        U[        R                  5      (       a6  UR                  (       a%  [        R
                  " UR                  5       U5      $ [        U5      (       a  [        S [        X5       5       5      $ U$ )Nc              3   z   #    U  H1  u  pUb%  [         R                  " UR                  5       U5      OUv   M3     g 7fr   )fwAD	make_dualr6   )r   pritangs      r   r   Dcheck_forward_ad_formula.<locals>.maybe_make_dual.<locals>.<genexpr>  s8      D.B DHCST^^CJJL$?Y\\.Bs   9;)
r&   rq   r   rl   r/  r0  r6   r   r   r   )dualprimaltangents      r   maybe_make_dual1check_forward_ad_formula.<locals>.maybe_make_dual  sn     #OF&%,,//F4H4H~~fmmow??v&& D.1&.BD D DMr   c           
         > [        [        T	[        X5      5      5      nUR                  5        VVs0 s H  u  pVUT	" XcU   45      _M     nnnTc  T
" U0 UD6$ T" T
/UQ70 UD6$ s  snnf r   )r   r  r   r(   )r~   tangent_argsr   tangent_kwargsop_argskv	op_kwargsr  r7  r   s           r   compute_expected_grad7check_forward_ad_formula.<locals>.compute_expected_grad!  s}    CT1HIJGPVP\P\P^_P^OQq0A,BCCP^I_ (70i00$R?'?Y??	 `s   A&c                     U R                   $ r   r5  r   s    r   r   *check_forward_ad_formula.<locals>.<lambda>+  s    ahhr   c                     U R                   $ r   r6  r   s    r   r   rD  ,  s    qyyr   r   r   z
- wrapped_tangent_args: z
- wrapped_tangent_kwargs: r   c                 B   > [        U T5      (       a  U R                  $ U $ r   r   r   s    r   r   (check_forward_ad_formula.<locals>.unwrapI  s    %/3%7%7166>Q>r   c                 (   > T" U R                   5      $ r   rC  r   r   s    r   r   rD  M  s    F1884Dr   c                 (   > T" U R                   5      $ r   rF  rJ  s    r   r   rD  N  s    VAII5Fr   Tr  )r   r   r   r   r/  
dual_levelr   unpack_dualr   r  r   r(   r   r   )%r   r~   r   r  r   r   r:  r   r   flat_tangent_kwargsr;  r@  r   expected_primalsexpected_tangentsr   r   r   r   r   tang_choicenew_tang_argsnew_tang_kwargswhich_tang_args_are_wrappedwhich_tang_kwargs_are_wrappedr<  r=  r>  r?  r   r   actual_primalsactual_tangentsr)   r7  r&  r   s%   `  `                             @@@@r   check_forward_ad_formularX    s0   )EJMC <t<<L$V,KJkJJ#$7>N					@ )VTD,,h7#$6A$%8(C <D#xXFU[RHj"8:R  E\cfhpqQ\O/1NOS=5Q RSU_UeUeUghUgTQPQQOA4F0G HHUg	h(0!#W!:	!:!22!M!M9!M? "$"2"2F;!)*Df!M"*+F"O0@DQ1BdS;  r	 Y5 
	F i $ 4*+A*B C--E,F G33N2O P55R4SSUW W 
	sV   0B)G(F24G(8F8G(F8AG(2G(8
G%	G 	G( G%	%G((
G6)T) )NN)NNN)*rq   r   r   torch.utils._python_dispatchr   torch.utils._pytreer   r   r   torch.utilsr   r   	functoolsr	   torch.utils._mode_utilsr
   r   torch.autograd.forward_adr  
forward_adr/  typingr   rb   r   r+   rT   r^   re   r   r   r   r   r   r   r   r   r  r	  r  r"  rX  rn   r   r   <module>rb     s       : F F )  > ( (  		2Q$P
XDt*E&	-	U,<Z8,
L: 37CG3Rx 3RxMT MTr   