
    Χgo$                    @   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 d5dZd5dZd5dZd6dZd6dZd7dZd8dZ d9d#Z!d:d$Z"d;d'Z#d<d+Z$d=d,Z%d<d-Z& ed./           G d0 d1                      Z'd>d4Z(dS )?    )annotationsN)	dataclass)Sequence)	translate)DispatcherSignature)method_with_native_function)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturn
SchemaKindType)mapMaybetypr   returnboolc                V    t          | t                    o| j        t          j        k    S N)
isinstancer   namer
   Tensorr   s    V/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchgen/gen_vmap_plumbing.py	is_tensorr      s     c8$$BV])BB    c                T    t          | t                    ot          | j                  S r   )r   r   r   elemr   s    r   is_optional_tensorr"      s!    c<((@Ysx-@-@@r   c                T    t          | t                    ot          | j                  S r   )r   r   r   r!   r   s    r   is_tensor_listr$   !   s!    c8$$<38)<)<<r   r   strcur_level_var	list[str]c           	     n    d|  d|  d|  d| d	}t          j        |                              d          S )Nz
    auto [_value, z_bdim] = unwrapTensorAtLevel(, );
textwrapdedentsplitr   r&   results      r   unwrap_tensorr3   %   sj    XX XX X<@X XDQX X XF?6""((...r   c                    d|  d|  d|  d|  d|  d|  d| d}t          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-   r1   s      r   unwrap_optional_tensorr5   +   s    

 
 
 
 

 
 	
 
 !%	
 
 DH	
 
 Ta	
 
 
F ?6""((...r   flat_argumentsSequence[Argument]tuple[str, list[str]]c                   d | D             }d | D             }d t          ||          D             }d t          ||          D             }g }|D ]}|t          ||          z  }|D ]}|t          ||          z  }d                    |          }	g }
|D ]-}||v s||v r|
| d| dgz  }
|
                    |           .|	|
fS )Nc                    g | ]	}|j         
S  r   .0as     r   
<listcomp>zgen_unwraps.<locals>.<listcomp>8       000A000r   c                    g | ]	}|j         
S r;   )typer=   s     r   r@   zgen_unwraps.<locals>.<listcomp>9   rA   r   c                6    g | ]\  }}t          |          |S r;   )r   r>   r   r   s      r   r@   zgen_unwraps.<locals>.<listcomp>;   s'    QQQ	T)C..QtQQQr   c                6    g | ]\  }}t          |          |S r;   )r"   rE   s      r   r@   zgen_unwraps.<locals>.<listcomp><   s:       d;Mc;R;R  r   r,   _value_bdim)zipr3   r5   joinappend)r6   r&   	arg_names	arg_typestensorsoptional_tensorsunwrapstensor
opt_tensorunwrap_codeunwrapped_arg_listargs               r   gen_unwrapsrV   5   s@    10000I00000IQQSI%>%>QQQG !)Y77   G 8 8=777& E E
)*mDDD))G$$K + +'>>S$444c>>>c==="AA%%c*******r   	outer_sigr   schemar   c                   g }|j         j        }|D ]=}|j                                        s|                    d|j         d| d           >t          j        |          }d                    d t          |                                  |                                           D                       }dd                    |           d|j
        j                                         d| d	S )
Nz!isBatchedAtLevel(r*   )c              3  $   K   | ]}|j         V  d S r   )expr)r>   es     r   	<genexpr>z4gen_case_where_all_bdims_are_none.<locals>.<genexpr>\   s5                     r   zif (z && z) {
  return at::_ops::z::call();
})	argumentsflat_allrC   is_tensor_likerK   r   r   from_schemarJ   r   funcunambiguous_name)rW   rX   r&   
conditions	flat_argsrU   sigtranslated_argss           r   !gen_case_where_all_bdims_are_nonerj   Q   s    J )I M Mx&&(( 	KsxKK=KKKLLLL

)&
1
1Cii    !)"5"5"7"7II       O[[ HM2244 =L   r   returnstuple[Return, ...]results_varc                   d}g }| D ]}t          |j                  r.|                    d| d| d|dz    d| d| d           |dz  }Dt          |j                  r.|                    d	| d| d|dz    d| d| d           |dz  }|                    d
| d| d           |dz  }t	          |          dk    rd|d          d}ndd                    |           d}|S )Nr   zmakeBatched(std::get<z>(z), std::get<   z), rZ      zmakeBatchedVector(std::get<z	std::get<zreturn ;zreturn std::make_tuple(r*   r+   )r   rC   rK   r$   lenrJ   )rk   r&   rm   idxwrapped_returnsretr2   s          r   gen_returnsrv   e   sr    CO  SX 	""sss{ssassS^sscpsss   1HCCCH%% 	""wcww[wwcRSewwWbwwgtwww   1HCC""#Ds#D#Dk#D#D#DEEE1HCC
?q  0?1-000I499_+E+EIIIMr   c                H    t          d | j        j        D                       S )Nc              3  H   K   | ]}|j                                         V  d S r   rC   rb   r=   s     r   r^   z4accepts_at_least_one_tensor_input.<locals>.<genexpr>   s0      JJ1qv$$&&JJJJJJr   )anyr`   ra   )rX   s    r   !accepts_at_least_one_tensor_inputr{      s%    JJ0@0IJJJJJJr   argumentr	   c                ,    | j         d uo| j         j        S r   )
annotationis_write)r|   s    r   is_mutated_argr      s    d*Kx/B/KKr   native_functionr   
str | Nonec                &   | j         }t          j        |          }|j        }|                                t
          j        k    sJ t          |j        j	        d                   sd S t          d |j        j	        D                       dk    sd S t          |          dk    rd S t          d |D                       sd S t          |          sd S d}t          |j        j	        |          \  }}t          |||          }d|                    |j                                        dz              d	| d
t%          j        |d           dt%          j        |d           dd                    |           d|j        j	        d         j         dS )Nr   c                0    g | ]}t          |          |S r;   )r   )r>   rU   s     r   r@   z-gen_vmap_inplace_plumbing.<locals>.<listcomp>   s%    PPPN3<O<OPPPPr   ro   c              3  f   K   | ],}t          |j                  pt          |j                  V  -d S r   )r   rC   r$   r>   ru   s     r   r^   z,gen_vmap_inplace_plumbing.<locals>.<genexpr>   s;      RR3y"">nSX&>&>RRRRRRr   	cur_level:template <typename batch_rule_t, batch_rule_t batch_rule>
_generated_plumbingr<   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;
})rd   r   rc   rk   kindr   inplacer   r`   ra   rr   allr{   rV   rj   declr   re   r.   indentrJ   )r   rX   rh   rk   r&   rP   rT   bdims_all_none_cases           r   gen_vmap_inplace_plumbingr      s   
 !F

)&
1
1CnG ;;==J.....&*3A677 tPPv/8PPPQQUVVVt 7||qtRR'RRRRR t,V44 tM"-f.>.G"W"WG;CWWv{++--0EEFF    
$d++  
$  ii*++  

#A
&
+   r   c                   | j         }t          j        |          }d}t          |j        j        |          \  }}t          |||          }d|                    |j        	                                dz              d| dt          j        |d           dt          j        |d           d	d
                    |           dS )Nr   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*   r_   )rd   r   rc   rV   r`   ra   rj   r   r   re   r.   r   rJ   )r   rX   rh   r&   rP   rT   r   s          r   gen_vmap_plumbing_no_returnsr      s    !F

)&
1
1CM"-f.>.G"W"WG;CWW
v{++--0EEFF
 
 
 
 
$d++
 
 
$
 
 ii*++
 
 
 
r   c                d   | j         }t          j        |          }|j        }t	          |          sd S t          |          dk    rt          |           S ddg}t          d |D                       s|j        	                                |vrd S d| j
        v rd S |                                t          j        k    rt          |           S |                                t          j        k    rd S d}d}t!          |j        j        |          \  }}t'          |||          }	t)          |||          }
d|                    |j        	                                d	z   
           d| dt-          j        |	d           dt-          j        |d           d| dd                    |           d|
 dS )Nr   #_scaled_dot_product_flash_attention#_scaled_dot_product_cudnn_attentionc              3  H   K   | ]}|j                                         V  d S r   ry   r   s     r   r^   z$gen_vmap_plumbing.<locals>.<genexpr>   s0      ==c''))======r   inplace_viewresultsr   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
})rd   r   rc   rk   r{   rr   r   r   r   re   tagsr   r   r   r   
functionalrV   r`   ra   rj   rv   r   r.   r   rJ   )r   rX   rh   rk   return_symint_overridesrm   r&   rP   rT   r   rt   s              r   gen_vmap_plumbingr      s   !F

)&
1
1CnG -V44 t
7||q+O<<<--
 ==W=====K((**2IIIt---t{{}}
***(999 {{}}
---tKM"-f.>.G"W"WG;CWW!'=+FFOv{++--0EEFF    
$d++  
$  	  $(99-?#@#@     r   T)frozenc                  &    e Zd Zedd            ZdS )ComputeBatchRulePlumbingfr   r   r   c                $    t          |          }|S r   )r   )selfr   r2   s      r   __call__z!ComputeBatchRulePlumbing.__call__   s    "1%%r   N)r   r   r   r   )__name__
__module____qualname__r   r   r;   r   r   r   r      s3            !   r   r   native_functionsSequence[NativeFunction]c                    d                     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
)rJ   listr   r   )r   bodys     r   gen_all_vmap_plumbingr     sK    99T(#;#=#=?OPPQQRRD
 
 
 
 
r   )r   r   r   r   )r   r%   r&   r%   r   r'   )r6   r7   r&   r%   r   r8   )rW   r   rX   r   r&   r%   r   r%   )rk   rl   r&   r%   rm   r%   r   r%   )rX   r   r   r   )r|   r	   r   r   )r   r   r   r   )r   r   r   r%   )r   r   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$   r3   r5   rV   rj   rv   r{   r   r   r   r   r   r   r;   r   r   <module>r      s|   " " " " " "  ! ! ! ! ! !       , , , , , , 2 2 2 2 2 2 8 8 8 8 8 8                        $ # # # # #C C C CA A A A= = = =/ / / // / / /+ + + +8   (   4K K K KL L L L) ) ) )X   *0 0 0 0f $            r   