
    sgo$                    X   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 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)Sequence)	translate)DispatcherSignature)method_with_native_function)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturn
SchemaKindType)mapMaybec                `    t        | t              xr | j                  t        j                  k(  S N)
isinstancer   namer
   Tensortyps    M/var/www/html/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_tensorr/   %   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_tensorr1   +   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    r/   r1   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_unwrapsrE   5   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_allr5   is_tensor_liker8   r   r   from_schemar7   r   funcunambiguous_name)	outer_sigschemar-   
conditions	flat_argsrD   sigtranslated_argss           r   !gen_case_where_all_bdims_are_nonerZ   Q   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), rG      zmakeBatchedVector(std::get<z	std::get<zreturn ;zreturn std::make_tuple(r%   r&   )r   r5   r8   r"   lenr7   )returnsr-   results_varidxwrapped_returnsretr.   s          r   gen_returnsre   e   s5    CO SXX""'uB{m<ayPRS^R__bcpbqqrs 1HCCHH%""-cU"[McRSeWTVWbVccfgtfuuvw 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   r5   rP   )rJ   r:   s     r   rL   z4accepts_at_least_one_tensor_input.<locals>.<genexpr>   s     J1qvv$$&J   $&)anyrN   rO   )rU   s    r   !accepts_at_least_one_tensor_inputrk      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_argrp      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   r5   r"   rJ   rd   s     r   rL   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;
})rR   r   rQ   r`   kindr   inplacerp   rN   rO   r_   allrk   rE   rZ   declr   rS   r)   indentr7   )	native_functionrU   rX   r`   rD   r-   r?   rC   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 )Nrt   ru   rv   rw   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing_no_returns");
  int64_t rx   ry   r'   rz   r%   rM   )rR   r   rQ   rE   rN   rO   rZ   r~   r   rS   r)   r   r7   )r   rU   rX   r-   r?   rC   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   rh   rs   s     r   rL   z$gen_vmap_plumbing.<locals>.<genexpr>   s     =c'')=ri   inplace_viewresultsrt   ru   rv   rw   z {
  c10::impl::ExcludeDispatchKeyGuard guard(DispatchKey::FuncTorchBatched);
  auto maybe_layer = maybeCurrentDynamicLayer();
  vmap_check_escaped(maybe_layer, "gen_vmap_plumbing");
  int64_t rx   ry   r'   z
  auto z = batch_rule(r%   z);
  z
})rR   r   rQ   r`   rk   r_   r   r}   r   rS   tagsr{   r   r|   r   
functionalrE   rN   rO   rZ   re   r~   r)   r   r7   )r   rU   rX   r`   return_symint_overridesra   r-   r?   rC   r   rc   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
)r7   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])r9   zSequence[Argument]r-   r   r   ztuple[str, list[str]])rT   r   rU   r   r-   r   r   r   )r`   ztuple[Return, ...]r-   r   ra   r   r   r   )rU   r   r   r   )ro   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   r   r    r"   r/   r1   rE   rZ   re   rk   rp   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   