
    Og$                    h   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d d	lmZ erd d
lmZ ddZddZddZddZddZ 	 	 	 	 	 	 ddZ!	 	 	 	 	 	 	 	 d dZ"	 	 	 	 	 	 	 	 d!dZ#d"dZ$d#dZ%d$dZ&d%dZ'd$dZ( ed       G d d             Z)d&dZ*y)'    )annotationsN)	dataclass)TYPE_CHECKING)	translate)DispatcherSignature)method_with_native_function)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturn
SchemaKindType)mapMaybe)Sequencec                `    t        | t              xr | j                  t        j                  k(  S N)
isinstancer   namer
   Tensortyps    a/var/www/html/suriana-translation/venv/lib/python3.12/site-packages/torchgen/gen_vmap_plumbing.py	is_tensorr      s!    c8$BV]])BB    c                P    t        | t              xr t        | j                        S r   )r   r   r   elemr   s    r   is_optional_tensorr!   !   s    c<(@Ysxx-@@r   c                P    t        | t              xr t        | j                        S r   )r   r   r   r    r   s    r   is_tensor_listr#   %   s    c8$<388)<<r   c           	     h    d|  d|  d|  d| d	}t        j                  |      j                  d      S )Nz
    auto [_value, z_bdim] = unwrapTensorAtLevel(, );
textwrapdedentsplitr   cur_level_varresults      r   unwrap_tensorr0   )   sD    &;D6M?RTXF??6"((..r   c                z    d|  d|  d|  d|  d|  d|  d| d}t        j                  |      j                  d	      S )
Nz    std::optional<Tensor> z#_value;
    std::optional<int64_t> z_bdim;
    if (z) {
        std::tie(r%   z_bdim) = unwrapTensorAtLevel(z
.value(), z);
    }r(   r)   r-   s      r   unwrap_optional_tensorr2   /   sh    & ! 6 "		 xv%B4&
S`Ra b	
F ??6"((..r   c                    | D cg c]  }|j                    }}| D cg c]  }|j                   }}t        ||      D cg c]  \  }}t        |      s| }}}t        ||      D cg c]  \  }}t	        |      s| }}}g }	|D ]  }
|	t        |
|      z  }	 |D ]  }|	t        ||      z  }	 dj                  |	      }g }|D ])  }||v s||v r|| d| dgz  }|j                  |       + ||fS c c}w c c}w c c}}w c c}}w )Nr(   _value_bdim)	r   typezipr   r!   r0   r2   joinappend)flat_argumentsr.   a	arg_names	arg_typesr   r   tensorsoptional_tensorsunwrapstensor
opt_tensorunwrap_codeunwrapped_arg_listargs                  r   gen_unwrapsrF   9   sJ    "00A0I0!/0A0I0%(I%>Q	T)C.tQGQ!)Y7d;Mc;R  G 8=778 ' E
)*mDDE))G$K +'>S$44cU&>cU%="AA%%c*	+
 ***- 10Qs"   C:C?DD,D
 D
c                   g }|j                   j                  }|D ]?  }|j                  j                         s|j	                  d|j
                   d| d       A t        j                  |      }dj                  d t        | j                         |j                               D              }ddj                  |       d|j                  j
                  j                          d| d	S )
Nz!isBatchedAtLevel(r&   )c              3  4   K   | ]  }|j                     y wr   )expr).0es     r   	<genexpr>z4gen_case_where_all_bdims_are_none.<locals>.<genexpr>`   s        s   zif (z && z) {
  return at::_ops::z::call();
})	argumentsflat_allr6   is_tensor_liker9   r   r   from_schemar8   r   funcunambiguous_name)	outer_sigschemar.   
conditions	flat_argsrE   sigtranslated_argss           r   !gen_case_where_all_bdims_are_noner[   U   s     J  ))I Mxx&&(.sxxj=/KLM
 
)
)&
1Cii  !)"5"5"7I  O[[ HHMM2245W_<M N r   c                   d}g }| D ]  }t        |j                        r*|j                  d| d| d|dz    d| d| d       |dz  }Bt        |j                        r*|j                  d	| d| d|dz    d| d| d       |dz  }|j                  d
| d| d       |dz  } t	        |      dk(  rd|d    d}|S ddj                  |       d}|S )Nr   zmakeBatched(std::get<z>(z), std::get<   z), rH      zmakeBatchedVector(std::get<z	std::get<zreturn ;zreturn std::make_tuple(r&   r'   )r   r6   r9   r#   lenr8   )returnsr.   results_varidxwrapped_returnsretr/   s          r   gen_returnsrf   i   s5    CO SXX""'uB{m<ayPRS^R__bcpbqqrs 1HCCHH%""-cU"[McTUgYVXYdXeehivhwwxy 1HC""Yse2k]!#DE1HC ?q ?1-.a0 M +499_+E*FbIMr   c                N    t        d | j                  j                  D              S )Nc              3  P   K   | ]  }|j                   j                            y wr   r6   rQ   )rK   r;   s     r   rM   z4accepts_at_least_one_tensor_input.<locals>.<genexpr>   s     J1qvv$$&J   $&)anyrO   rP   )rV   s    r   !accepts_at_least_one_tensor_inputrl      s    J0@0@0I0IJJJr   c                N    | j                   d uxr | j                   j                  S r   )
annotationis_write)arguments    r   is_mutated_argrq      s$    d*Kx/B/B/K/KKr   c                \   | j                   }t        j                  |      }|j                  }|j	                         t
        j                  k(  sJ t        |j                  j                  d         sy t        |j                  j                  D cg c]  }t        |      s| c}      dk(  sy t        |      dk(  ry t        d |D              sy t        |      sy d}t        |j                  j                  |      \  }}t        |||      }d|j                  |j                   j#                         dz          d| d	t%        j&                  |d
       dt%        j&                  |d
       ddj)                  |       d|j                  j                  d   j                    dS c c}w )Nr   r]   c              3  t   K   | ]0  }t        |j                        xs t        |j                         2 y wr   )r   r6   r#   rK   re   s     r   rM   z,gen_vmap_inplace_plumbing.<locals>.<genexpr>   s*     R3y">nSXX&>>Rs   68	cur_level:template <typename batch_rule_t, batch_rule_t batch_rule>
_generated_plumbingr   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_inplace_plumbing");
  int64_t  = maybe_layer->layerId();
  r(   
  batch_rule(r&   z);
  return z;
})rS   r   rR   ra   kindr   inplacerq   rO   rP   r`   allrl   rF   r[   declr   rT   r*   indentr8   )	native_functionrV   rY   ra   rE   r.   r@   rD   bdims_all_none_cases	            r   gen_vmap_inplace_plumbingr      s   
 !!F

)
)&
1CnnG ;;=J.....&**33A67v//88PN3<OPQUVV 7|qR'RR,V4M"-f.>.>.G.G"WG;CWv{{++-0EEF G H / 	$d+ , -	$   !ii*+, -




#
#A
&
+
+	, - ! Qs   F)"F)c                   | j                   }t        j                  |      }d}t        |j                  j
                  |      \  }}t        |||      }d|j                  |j                  j                         dz          d| dt        j                  |d       dt        j                  |d       d	d
j                  |       dS )Nru   rv   rw   rx   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing_no_returns");
  int64_t ry   rz   r(   r{   r&   rN   )rS   r   rR   rF   rO   rP   r[   r   r   rT   r*   r   r8   )r   rV   rY   r.   r@   rD   r   s          r   gen_vmap_plumbing_no_returnsr      s    !!F

)
)&
1CM"-f.>.>.G.G"WG;CWv{{++-0EEF G H / 	$d+ , -	$   !ii*+, -
 
r   c                <   | j                   }t        j                  |      }|j                  }t	        |      sy t        |      dk(  rt        |       S ddg}t        d |D              s|j                  j                         |vry d| j                  v ry |j                         t        j                  k(  rt        |       S |j                         t        j                  k7  ry d}d}t!        |j"                  j$                  |      \  }}t'        |||      }	t)        |||      }
d|j+                  |j                  j                         d	z   
       d| dt-        j.                  |	d       dt-        j.                  |d       d| ddj1                  |       d|
 dS )Nr   #_scaled_dot_product_flash_attention#_scaled_dot_product_cudnn_attentionc              3  P   K   | ]  }|j                   j                            y wr   ri   rt   s     r   rM   z$gen_vmap_plumbing.<locals>.<genexpr>   s     =c'')=rj   inplace_viewresultsru   rv   rw   rx   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing");
  int64_t ry   rz   r(   z
  auto z = batch_rule(r&   z);
  z
})rS   r   rR   ra   rl   r`   r   r~   r   rT   tagsr|   r   r}   r   
functionalrF   rO   rP   r[   rf   r   r*   r   r8   )r   rV   rY   ra   return_symint_overridesrb   r.   r@   rD   r   rd   s              r   gen_vmap_plumbingr      s   !!F

)
)&
1CnnG -V4
7|q+O<<--
 =W==KK((*2II---{{}
***(99 {{}
---KM"-f.>.>.G.G"WG;CW!'=+FOv{{++-0EEF G H / 	$d+ , -	$   !}N499-?#@"A B  r   T)frozenc                      e Zd Zedd       Zy)ComputeBatchRulePlumbingc                    t        |      }|S r   )r   )selffr/   s      r   __call__z!ComputeBatchRulePlumbing.__call__  s    "1%r   N)r   r   return
str | None)__name__
__module____qualname__r   r    r   r   r   r      s      !r   r   c                f    dj                  t        t        t               |                   }d| dS )Nr(   z|
#pragma once
#include <ATen/Operators.h>
#include <ATen/functorch/PlumbingHelper.h>

namespace at { namespace functorch {

z 

}} // namespace at::functorch
)r8   listr   r   )native_functionsbodys     r   gen_all_vmap_plumbingr     s<    99T(#;#=?OPQRD  
 
r   )r   r   r   bool)r   strr.   r   r   z	list[str])r:   zSequence[Argument]r.   r   r   ztuple[str, list[str]])rU   r   rV   r   r.   r   r   r   )ra   ztuple[Return, ...]r.   r   rb   r   r   r   )rV   r   r   r   )rp   r	   r   r   )r   r   r   r   )r   r   r   r   )r   zSequence[NativeFunction]r   r   )+
__future__r   r*   dataclassesr   typingr   torchgen.api.translater   torchgen.api.typesr   torchgen.contextr   torchgen.modelr	   r
   r   r   r   r   r   r   r   r   torchgen.utilsr   collections.abcr   r   r!   r#   r0   r2   rF   r[   rf   rl   rq   r   r   r   r   r   r   r   r   <module>r      s    "  !   , 2 8   $ (CA=//+&+7:++8",:KN(03BE4KL)X*0f $  r   