
    Yh$                    P   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 d6dZd6dZd6dZd7dZd7dZ d8dZ!d9d Z"d:d$Z#d;d%Z$d<d(Z%d=d,Z&d>d-Z'd=d.Z( ed/0           G d1 d2                      Z)d?d5Z*dS )@    )annotationsN)	dataclass)TYPE_CHECKING)	translate)DispatcherSignature)method_with_native_function)
ArgumentBaseTyBaseTypeFunctionSchemaListTypeNativeFunctionOptionalTypeReturn
SchemaKindType)mapMaybe)Sequencetypr   returnboolc                V    t          | t                    o| j        t          j        k    S N)
isinstancer   namer
   Tensorr   s    l/var/www/tools.fuzzalab.pt/emblema-extractor/venv/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_tensorr4   )   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.   r2   s      r   unwrap_optional_tensorr6   /   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><       000A000r    c                    g | ]	}|j         
S r<   )typer>   s     r   rA   zgen_unwraps.<locals>.<listcomp>=   rB   r    c                6    g | ]\  }}t          |          |S r<   )r   r?   r   r   s      r   rA   zgen_unwraps.<locals>.<listcomp>?   s'    QQQ	T)C..QtQQQr    c                6    g | ]\  }}t          |          |S r<   )r#   rF   s      r   rA   zgen_unwraps.<locals>.<listcomp>@   s:       d;Mc;R;R  r    r-   _value_bdim)zipr4   r6   joinappend)r7   r'   	arg_names	arg_typestensorsoptional_tensorsunwrapstensor
opt_tensorunwrap_codeunwrapped_arg_listargs               r   gen_unwrapsrW   9   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_allrD   is_tensor_likerL   r   r   from_schemarK   r   funcunambiguous_name)rX   rY   r'   
conditions	flat_argsrV   sigtranslated_argss           r   !gen_case_where_all_bdims_are_nonerk   U   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), r[      zmakeBatchedVector(std::get<z	std::get<zreturn ;zreturn std::make_tuple(r+   r,   )r   rD   rL   r%   lenrK   )rl   r'   rn   idxwrapped_returnsretr3   s          r   gen_returnsrw   i   sr    CO  SX 	""sss{ssassS^sscpsss   1HCCCH%% 	""ycyy[yycTUgyyYdyyivyyy   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   rD   rc   r>   s     r   r_   z4accepts_at_least_one_tensor_input.<locals>.<genexpr>   s0      JJ1qv$$&&JJJJJJr    )anyra   rb   )rY   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?   rV   s     r   rA   z-gen_vmap_inplace_plumbing.<locals>.<listcomp>   s%    PPPN3<O<OPPPPr    rp   c              3  f   K   | ],}t          |j                  pt          |j                  V  -d S r   )r   rD   r%   r?   rv   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;
})re   r   rd   rl   kindr   inplacer   ra   rb   rs   allr|   rW   rk   declr   rf   r/   indentrK   )r   rY   ri   rl   r'   rQ   rU   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`   )re   r   rd   rW   ra   rb   rk   r   r   rf   r/   r   rK   )r   rY   ri   r'   rQ   rU   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   rz   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
})re   r   rd   rl   r|   rs   r   r   r   rf   tagsr   r   r   r   
functionalrW   ra   rb   rk   rw   r   r/   r   rK   )r   rY   ri   rl   return_symint_overridesrn   r'   rQ   rU   r   ru   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   r3   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
)rK   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(   )r7   r8   r'   r&   r   r9   )rX   r   rY   r   r'   r&   r   r&   )rl   rm   r'   r&   rn   r&   r   r&   )rY   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   collections.abcr   r   r#   r%   r4   r6   rW   rk   rw   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    