
    '}h#              	          d dl Z d dlmZ d dlmZmZmZ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	ed
efdZd	ed
efdZd	ed
efdZdeded
ee   fdZ deded
ee   fdZ!dee   ded
eeee   f   fdZ"dededed
efdZ#deedf   deded
efdZ$ded
efdZ%ded
efdZ&ded
ee   fdZ'ded
efd Z(ded
ee   fd!Z) ed"#       G d$ d%             Z*d&ee   d
efd'Z+y)(    N)	dataclass)ListOptionalSequenceTuple)	translate)DispatcherSignature)method_with_native_function)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturn
SchemaKindType)mapMaybetypreturnc                 `    t        | t              xr | j                  t        j                  k(  S N)
isinstancer   namer   Tensorr   s    Y/var/www/html/test/engine/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    r   cur_level_varc                 t    d|  d|  d|  d|  d|  d| d}t        j                  |      j                  d      S )	Nz    Tensor _value;
    optional<int64_t> z_bdim;
    std::tie(_value, _bdim) = unwrapTensorAtLevel(, );
textwrapdedentsplitr   r&   results      r   unwrap_tensorr4   #   sZ    6 f V8D6!>tfB}oUW[F ??6"((..r    c                 z    d|  d|  d|  d|  d|  d|  d| d}t        j                  |      j                  d	      S )
Nz    optional<Tensor> r(   z_bdim;
    if (z) {
        std::tie(r)   r*   z
.value(), z);
    }r-   r.   r2   s      r   unwrap_optional_tensorr6   +   sh    V f 		 xv%B4&
S`Ra b	
F ??6"((..r    flat_argumentsc                     | 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#   r4   r6   joinappend)r7   r&   a	arg_names	arg_typesr   r   tensorsoptional_tensorsunwrapstensor
opt_tensorunwrap_codeunwrapped_arg_listargs                  r   gen_unwrapsrJ   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
	outer_sigschemac                    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_allr;   is_tensor_liker>   r   r	   from_schemar=   r   funcunambiguous_name)rK   rL   r&   
conditions	flat_argsrI   sigtranslated_argss           r   !gen_case_where_all_bdims_are_noner_   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    returns.results_varc                    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), rN      zmakeBatchedVector(std::get<z	std::get<zreturn ;zreturn std::make_tuple(r+   r,   )r   r;   r>   r%   lenr=   )r`   r&   ra   idxwrapped_returnsretr3   s          r   gen_returnsrj   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   r;   rW   )rQ   r?   s     r   rS   z4accepts_at_least_one_tensor_input.<locals>.<genexpr>   s     J1qvv$$&J   $&)anyrU   rV   )rL   s    r   !accepts_at_least_one_tensor_inputrp      s    J0@0@0I0IJJJr    argumentc                 N    | j                   d uxr | j                   j                  S r   )
annotationis_write)rq   s    r   is_mutated_argru      s$    d*Kx/B/B/K/KKr    native_functionc                 \   | 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   rc   c              3   t   K   | ]0  }t        |j                        xs t        |j                         2 y wr   )r   r;   r%   rQ   ri   s     r   rS   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;
})rY   r	   rX   r`   kindr   inplaceru   rU   rV   rf   allrp   rJ   r_   declr   rZ   r/   indentr=   )	rv   rL   r]   r`   rI   r&   rD   rH   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 )Nrz   r{   r|   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+   rT   )rY   r	   rX   rJ   rU   rV   r_   r   r   rZ   r/   r   r=   )rv   rL   r]   r&   rD   rH   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 t        d |D              s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   c              3   P   K   | ]  }|j                   j                            y wr   rm   ry   s     r   rS   z$gen_vmap_plumbing.<locals>.<genexpr>   s     <Ssxx&&(<rn   inplace_viewresultsrz   r{   r|   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
})rY   r	   rX   r`   rp   rf   r   r   tagsr   r   r   r   
functionalrJ   rU   rV   r_   rj   r   r   rZ   r/   r   r=   )
rv   rL   r]   r`   ra   r&   rD   rH   r   rh   s
             r   gen_vmap_plumbingr      s   !!F

)
)&
1CnnG -V4
7|q+O<<<G<<---{{}
***(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edee   fd       Zy)ComputeBatchRulePlumbingfr   c                 Z    t        |j                  j                        }t        |      }|S r   )strrY   r   r   )selfr   opnamer3   s       r   __call__z!ComputeBatchRulePlumbing.__call__   s#    QVV[[!"1%r    N)__name__
__module____qualname__r
   r   r   r   r    r    r   r   r      s&     . Xc]  !r    r   native_functionsc                 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
)r=   listr   r   )r   bodys     r   gen_all_vmap_plumbingr      s<    99T(#;#=?OPQRD  
 
r    ),r/   dataclassesr   typingr   r   r   r   torchgen.api.translater   torchgen.api.typesr	   torchgen.contextr
   torchgen.modelr   r   r   r   r   r   r   r   r   r   torchgen.utilsr   boolr   r#   r%   r   r4   r6   rJ   r_   rj   rp   ru   r   r   r   r   r   r   r    r   <module>r      s    ! 2 2 , 2 8   $C4 CD CAD AT A= = =/ /C /DI // /S /T#Y /+X&+7:+
3S	>+8",:KN(63;03BE4Kn K KLX L$ L)~ )(3- )X. S *)~ )(3- )X $  H^,D  r    