
    shV-                    R   S SK Jr  S SKJr  S SKJs  Jr  S SKJr  S SK	J
r
JrJrJrJrJr  S SKJr  S SKJrJrJr  S SKJr  S	S
KJrJrJrJrJr  \(       a  S SKJr  \" S5      r \" S5      r! S       SS j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(g)    )annotations)TYPE_CHECKINGN)	translate)	BaseCTypeBinding
NamedCTypeSymIntTtensorTVectorCType)CodeTemplate)ArgumentNativeFunctionOptionalType)FileManager   )CALL_DISPATCHextract_bindingsget_view_infomodifies_argumentsuse_derived)'NativeFunctionWithDifferentiabilityInfoa+  #define ${uppercase_op}_AVAILABLE
struct ${op} : public ${superclass} {
  ${op}(${constructor_args}) ${initializer_list}
  {}
  virtual ~${op}() override = default;
  virtual std::vector<c10::SymInt> get_symints() const override;
  virtual size_t num_symints() const override;
  virtual std::vector<at::Tensor> get_tensors() const override;
  virtual size_t num_tensors() const override;
  virtual at::Tensor operator()(const at::Tensor&) const override;
  virtual std::unique_ptr<ViewFunc> clone_and_set(
      std::optional<std::vector<c10::SymInt>> = ::std::nullopt,
      std::optional<std::vector<at::Tensor>> = ::std::nullopt) const override;

protected:
  virtual void set_symints(std::vector<c10::SymInt>) override;
  virtual void set_tensors(std::vector<at::Tensor>) override;

private:
  ${state}
};

a  std::vector<c10::SymInt> ${op}::get_symints() const {
  ${get_symints}
}

size_t ${op}::num_symints() const {
  return static_cast<size_t>(${num_symints});
}

void ${op}::set_symints(std::vector<c10::SymInt> ${symints_vec}) {
  TORCH_INTERNAL_ASSERT(${symints_vec}.size() == num_symints());
  ${set_symints}
}

std::vector<at::Tensor> ${op}::get_tensors() const {
  ${get_tensors}
}

size_t ${op}::num_tensors() const {
  return static_cast<size_t>(${num_tensors});
}

void ${op}::set_tensors(std::vector<at::Tensor> ${tensors_vec}) {
  TORCH_INTERNAL_ASSERT(${tensors_vec}.size() == num_tensors());
  ${set_tensors}
}

at::Tensor ${op}::operator()(const at::Tensor& ${call_input_name}) const {
  return ${op_call};
}

std::unique_ptr<ViewFunc> ${op}::clone_and_set(
    std::optional<std::vector<c10::SymInt>> ${symints_vec},
    std::optional<std::vector<at::Tensor>> ${tensors_vec}) const {
  auto output = std::make_unique<${op}>(${clone_args});
  if (${symints_vec}.has_value()) {
    output->set_symints(std::move(*(${symints_vec})));
  }
  if (${tensors_vec}.has_value()) {
    output->set_tensors(std::move(*(${tensors_vec})));
  }
  return output;
}

c                   U R                   R                  R                  5       nUR                  SS5       S3nU(       ak  UR	                  S5      nSR                  UR                  SS5      R                  S5       Vs/ s H  ofR                  5       PM     sn5      nU(       a  SU 3nU(       a  SOSnU U 3$ s  snf )N._
_view_func ztorch::autograd::generated::)funcnameunambiguous_namereplace
startswithjoinsplittitle)finclude_namespace
camel_caser   view_func_name
is_privatep	namespaces           }/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torchgen/packaged/autograd/gen_view_funcs.pyr(   r(   t   s     66;;'')DS#./z:N#..s3
 . 6 6sC @ F Fs KL K1WWY KL
   01N2C.I[()) Ms    B=c                x    U R                   R                  5       =(       d    U R                   R                  5       $ N)typeis_tensor_likeis_symint_like)args    r,   is_symint_or_tensorr3      s'    88""$A(?(?(AA    c                    [        U R                  U R                  R                  5       U R                  U R
                  S9$ )N)r   nctypeargumentdefault)r   r   r6   remove_const_refr7   r8   )bindings    r,   r9   r9      s6    \\~~..0!!	 r4   c                    U R                   R                  n[        U5      S:X  d   eUS   R                  R	                  5       S LnUS   R                  R                  5       nU=(       a    U$ )Nr   r   )r   returnslenr/   is_list_liker0   )fnr<   returns_list_likereturns_tensor_likes       r,   returns_multi_tensorrB      s`    ggooGw<1
446dB!!*//88:4!44r4   c           
        / n/ nUR                   nUR                  UR                  5        SU S35        [        U 5      S:  a  UR                  S5        / n[	        U 5       GH  u  pg[        UR                  [        5      (       d   eUR                  R                  R                  5       (       af  UR                    S3nUR                  U5        U SU SUR                    SUR                    S	3n	S
U SU SUR                    SUR                    S3	n
O[        UR                  R                  [        5      (       a_  SUR                    S3nUR                  U5        SUR                    S3nU SU SU SUR                    S3n	U SUR                    SU S3n
O7SnUR                  U5        U SUR                    S3n	UR                    SU S3n
UR                  U	5        UR                  U
5        U[        U 5      S-
  :  d  GM  UR                  SU S35        GM     [        U5      S:X  a  SOSR                  U5      n[        U 5      S:  a  UR                  SU SU S35        UR                  SU S35        X#U4$ ) N ;r   zauto i = 0;z.size()z.insert(z.end(), z
.begin(), z.end());z
std::copy(z.begin() + i, z.begin() + i + z	.size(), z
.begin());(z.has_value() ? 1 : 0)zif(z.has_value())z
.end(), *(z));z = z[i];1z.push_back(z);r   zi += 0z + z	.reserve(zreturn )r   appendcpp_typer=   	enumerate
isinstancer7   r   r/   r>   r   r"   insert)bindingsstate_vec_typegetter_logicsetter_logic	state_vec	num_exprsibnum_exprgettersetterconditional	num_itemss                r,   generate_state_getter_setterr[      s    LL##I>2245QykCD
8}qM*I(#!**h////::??''))&&)HX&!{(9+XaffXZPQPVPVxW_`F!)N9+_UVU[U[T\\efgflflemmwxF

66166("78HX&x}5K-q8I;jPST  $}AaffXS4@FHX&!{+affXR8Fxs9+T2FF#F#s8}q  %z 345 $: 9~*

90EI
8}qA)Ii[CD')A./y00r4   c                v   [        U 5      nU Vs/ s H  o3R                  S:w  d  M  UPM     nnU R                  R                  R                  SS  nU Vs/ s H  n[
        R                  " USS9PM     nnU Vs/ s H  o3R                  5       PM     nnU Vs/ s H  o3R                  PM     n	nU Vs/ s H  n[        U5      R                  5        S3PM!     n
n[        XGSS9n/ n[        XK5       HS  u  p=UR                  R                  n[        U[        5      (       d   eUR                  U SUR                   S35        MU     S	nU/S
 U 5       Qn[         R"                  " U R                  R                  R%                  5       US9n['        U 5      (       aa  SnSnU SU 3nUR                  U5        U	R                  U5        U
R                  U S35        UR                  U SU S35        USU S3-  n[)        U5      S:  a  SSR+                  U5       3OSnU Vs/ s HQ  n[        UR                  [,        5      (       d  M$  UR                  R.                  R1                  5       (       d  MO  UPMS     nn[3        S[5        [7        [8        5      5      5      n[;        UU5      u  nnnU Vs/ s HQ  n[        UR                  [,        5      (       d  M$  UR                  R.                  R=                  5       (       d  MO  UPMS     nn[3        S[5        [7        [>        5      5      5      n[;        UU5      u  nnnUR#                  [A        U 5      [A        U SS9RC                  5       SUU
UU	UR                  UUUUR                  UUUUUS9$ s  snf s  snf s  snf s  snf s  snf s  snf s  snf )Nselfr   T)remove_non_owning_ref_typesrE   )allow_expensive_conversionsrF   )
input_basec              3  8   #    U  H  oR                   v   M     g 7fr.   )r   ).0rU   s     r,   	<genexpr>#process_function.<locals>.<genexpr>   s     &I7H!vv7Hs   )r   unpacked_argsview_idxint64_trD   []r   z: z, r   symintstensorsF)r'   ztorch::autograd::ViewFunc)opuppercase_op
superclassinitializer_liststateconstructor_args
clone_argssymints_vecget_symintsset_symintsnum_symintstensors_vecget_tensorsset_tensorsnum_tensorscall_input_nameop_call)"r   r   r   	argumentsflat_all
dispatcherr7   defnr9   r   zipr6   rL   strrI   exprr   
substituter   rB   r=   r"   r   r/   r1   r   r   r   r	   r[   r0   r
   r(   upper) r?   templaterN   rU   non_self_bindingsnon_self_argsanon_self_value_bindingsrr   rs   state_variables
init_exprsinitializers	init_exprr   r|   op_call_argsr}   view_idx_nameview_idx_typenameview_idx_declrp   symint_bindingssymints_vec_typeru   rv   rw   tensor_bindingstensors_vec_typery   rz   r{   s                                    r,   process_functionr      s   #H$,AHq&0@HAGG%%..qr2MJWJWQ
A4@-  
 +<<*;Q*;<"34"3Q&&"3J4 3J2IQA##%
&a(2I   PTJ L-:xx}}$$$$$tfAinn%5Q78 ; #O#J&I7H&IJL&&668"G B"%,-Q}o>.-(-23}oQ}oQ?@Q}oQ'' :=\9JQ9NDIIl345TV
 #"Aajj(+ 	
01

0N0N0P 	
"  
 ")[79K-LM,H)-)Kk #"Aajj(+ 	
01

0N0N0P 	
"  
 ")[79K-LM,H)-)Kk "#B59??A.))$))$))'#   Q B
 =4NsF   NNN;N"N'5&N,*#N1'N1<N1:#N6!'N6N6c           
     .  ^^	^
^^ U Vs/ s H!  n[        U5      (       d  M  UR                  PM#     nnU Vs/ s H%  n[        U5      c  M  [        U5      (       a  M#  UPM'     nnU Vs/ s H  n[	        U[
        5      PM     snmU Vs/ s H  n[	        U[        5      PM     snm	U Vs/ s H  nSUR                   S3PM     snmSn[        XSS9m
S H"  nXg-   mT
R                  TTUU	U
UU4S j5        M$     g s  snf s  snf s  snf s  snf s  snf )Nz#include <ATen/ops/z_ops.h>	ViewFuncsF)install_dirtemplate_dirdry_run)z.hz.cppc                 B   > SSTR                  5        S3-   T-   T TTS.$ )N@zgenerated from /)generated_commentview_func_declarationsview_func_definitionsops_headers)template_dir_for_comments)declarationsdefinitionsfmfnamer   s   r,   <lambda> gen_view_funcs.<locals>.<lambda>L  s:    %(#B$@$@$B#C1E&F& +7)4*r4   )
r   r   r   r   r   FUNCTION_DECLARATIONFUNCTION_DEFINITION	root_namer   write_with_template)outfns_with_infostemplate_pathr?   fnsview_fnsfile_basenamesuffixr   r   r   r   r   s           @@@@@r,   gen_view_funcsr   5  s    ,
?^r{27277^C
? rM"-BTUWBXS   JRR2$R)=>RLGOPx#B(;<xPKIQR2(g>RKM	%	PB &
 	
 ! @ SPRs-   C>C>DDD*DD,D)FT)r%   r   r&   boolr'   r   returnr   )r2   r   r   r   )r:   r   r   r   )r?   r   r   r   )rN   zlist[Binding]rO   r   r   z tuple[list[str], list[str], str])r?   r   r   r   r   r   )r   r   r   z-list[NativeFunctionWithDifferentiabilityInfo]r   r   r   None))
__future__r   typingr   torchgen.api.dispatcherapir   torchgen.api.translater   torchgen.api.typesr   r   r   r	   r
   r   torchgen.code_templater   torchgen.modelr   r   r   torchgen.utilsr   gen_inplace_or_view_typer   r   r   r   r   torchgen.api.autogradr   r   r   r(   r3   r9   rB   r[   r   r    r4   r,   <module>r      s    #   , , ,  0 A A &  M $ 6 #,. h LP***.*DH**"B5"010101 &01f\~
	
A
 
 
	
r4   