
    JTh$                       S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJrJrJrJrJrJrJrJr  S S	KJr  \(       a  S S
KJr  SS jrSS jrSS jrSS jrSS jr       SS jr!        S S jr"        S!S jr#S"S jr$S#S jr%S$S jr&S%S jr'S$S jr(\" SS9 " S S5      5       r)S&S jr*g)'    )annotationsN)	dataclass)TYPE_CHECKING)	translate)DispatcherSignature)method_with_native_function)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturn
SchemaKindType)mapMaybe)Sequencec                j    [        U [        5      =(       a    U R                  [        R                  :H  $ N)
isinstancer   namer
   Tensortyps    R/var/www/auris/envauris/lib/python3.13/site-packages/torchgen/gen_vmap_plumbing.py	is_tensorr      s!    c8$BV]])BB    c                Z    [        U [        5      =(       a    [        U R                  5      $ r   )r   r   r   elemr   s    r   is_optional_tensorr!   !   s    c<(@Ysxx-@@r   c                Z    [        U [        5      =(       a    [        U R                  5      $ r   )r   r   r   r    r   s    r   is_tensor_listr#   %   s    c8$<388)<<r   c           	     j    SU  SU  SU  SU S3	n[         R                  " U5      R                  S5      $ )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                |    SU  SU  SU  SU  SU  SU  SU S3n[         R                  " U5      R                  S	5      $ )
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                N   U  Vs/ s H  o"R                   PM     nnU  Vs/ s H  o"R                  PM     nn[        XC5       VVs/ s H  u  pV[        U5      (       d  M  UPM     nnn[        XC5       VVs/ s H  u  pV[	        U5      (       d  M  UPM     nnn/ n	U H  n
U	[        X5      -  n	M     U H  nU	[        X5      -  n	M     SR                  U	5      n/ nU H,  nX;   d  X;   a  X S3U S3/-  nM  UR                  U5        M.     X4$ s  snf s  snf s  snnf s  snnf )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   s&    "00AI0!/0AI0%(%>Q%>	)C.t%>GQ!)77;Mc;R7   G=77  '
)*DD '))G$K>S4U&>cU%="AA%%c*	 
 **- 10Qs"   DDDD6D!D!c                   / nUR                   R                  nU HF  nUR                  R                  5       (       d  M$  UR	                  SUR
                   SU S35        MH     [        R                  " U5      nSR                  S [        U R                  5       UR                  5       5       5       5      nSSR                  U5       SUR                  R
                  R                  5        SU S	3$ )
Nz!isBatchedAtLevel(r&   )c              3  8   #    U  H  oR                   v   M     g 7fr   )expr).0es     r   	<genexpr>4gen_case_where_all_bdims_are_none.<locals>.<genexpr>`   s       I1Is   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xx&&((.sxxj=/KL 
 
)
)&
1Cii  !)"5"5"7I  O[[ HHMM2245W_<M N r   c                   Sn/ nU  H  n[        UR                  5      (       a+  UR                  SU SU SUS-    SU SU S35        US-  nMH  [        UR                  5      (       a+  UR                  S	U SU SUS-    SU SU S35        US-  nM  UR                  S
U SU S35        US-  nM     [	        U5      S:X  a  SUS    S3nU$ SSR                  U5       S3nU$ )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_returnsrg   i   s6    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    [        S U R                  R                   5       5      $ )Nc              3  T   #    U  H  oR                   R                  5       v   M      g 7fr   r6   rR   )rK   r;   s     r   rM   4accepts_at_least_one_tensor_input.<locals>.<genexpr>   s      J0I1vv$$&&0I   &()anyrP   rQ   )rW   s    r   !accepts_at_least_one_tensor_inputrn      s    J0@0@0I0IJJJr   c                X    U R                   S L=(       a    U R                   R                  $ r   )
annotationis_write)arguments    r   is_mutated_argrs      s$    d*Kx/B/B/K/KKr   c                   U R                   n[        R                  " U5      nUR                  nUR	                  5       [
        R                  :X  d   e[        UR                  R                  S   5      (       d  g [        UR                  R                   Vs/ s H  n[        U5      (       d  M  UPM     sn5      S:X  d  g [        U5      S:X  a  g [        S U 5       5      (       d  g [        U5      (       d  g Sn[        UR                  R                  U5      u  pg[        X!U5      nSUR                  UR                   R#                  5       S-   S9 SU S	[$        R&                  " US
5       S[$        R&                  " US
5       SSR)                  U5       SUR                  R                  S   R                    S3$ s  snf )Nr   r^   c              3     #    U  H6  n[        UR                  5      =(       d    [        UR                  5      v   M8     g 7fr   )r   r6   r#   rK   rf   s     r   rM   ,gen_vmap_inplace_plumbing.<locals>.<genexpr>   s*     R'3y">nSXX&>>'s   >A 	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;
})rT   r   rS   rb   kindr   inplacers   rP   rQ   ra   allrn   rF   r\   declr   rU   r*   indentr8   )	native_functionrW   rZ   rb   rE   r.   r@   rD   bdims_all_none_cases	            r   gen_vmap_inplace_plumbingr      s   
 !!F

)
)&
1CnnG ;;=J.....&**33A677v//88P8N3<O8PQUVV 7|qR'RRR,V44M"-f.>.>.G.G"WG;CWv{{++-0EEF G H / 	$d+ , -	$   !ii*+, -




#
#A
&
+
+	, - ! Qs   G0Gc                   U R                   n[        R                  " U5      nSn[        UR                  R
                  U5      u  pE[        X!U5      nSUR                  UR                  R                  5       S-   S9 SU S[        R                  " US5       S[        R                  " US5       S	S
R                  U5       S3$ )Nrx   ry   rz   r{   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing_no_returns");
  int64_t r|   r}   r(   r~   r&   rO   )rT   r   rS   rF   rP   rQ   r\   r   r   rU   r*   r   r8   )r   rW   rZ   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                X   U R                   n[        R                  " U5      nUR                  n[	        U5      (       d  g [        U5      S:X  a  [        U 5      $ SS/n[        S U 5       5      (       d  UR                  R                  5       U;  a  g SU R                  ;   a  g UR                  5       [        R                  :X  a  [        U 5      $ UR                  5       [        R                  :w  a  g SnSn[!        UR"                  R$                  U5      u  px['        X!U5      n	[)        X6U5      n
SUR+                  UR                  R                  5       S	-   S
9 SU S[,        R.                  " U	S5       S[,        R.                  " US5       SU SSR1                  U5       SU
 S3$ )Nr   #_scaled_dot_product_flash_attention#_scaled_dot_product_cudnn_attentionc              3  T   #    U  H  oR                   R                  5       v   M      g 7fr   rj   rv   s     r   rM   $gen_vmap_plumbing.<locals>.<genexpr>   s     =Wc''))Wrl   inplace_viewresultsrx   ry   rz   r{   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing");
  int64_t r|   r}   r(   z
  auto z = batch_rule(r&   z);
  z
})rT   r   rS   rb   rn   ra   r   r   r   rU   tagsr   r   r   r   
functionalrF   rP   rQ   r\   rg   r   r*   r   r8   )r   rW   rZ   rb   return_symint_overridesrc   r.   r@   rD   r   re   s              r   gen_vmap_plumbingr      s   !!F

)
)&
1CnnG -V4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                  (    \ rS rSr\SS j5       rSrg)ComputeBatchRulePlumbing   c                    [        U5      nU$ r   )r   )selffr/   s      r   __call__!ComputeBatchRulePlumbing.__call__  s    "1%r    N)r   r   return
str | None)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r   r   r   r   r      s      !r   r   c                f    SR                  [        [        [        5       U 5      5      5      nSU S3$ )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]])rV   r   rW   r   r.   r   r   r   )rb   ztuple[Return, ...]r.   r   rc   r   r   r   )rW   r   r   r   )rr   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\   rg   rn   rs   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   