
    sgP-                    8   d dl mZ d dlmZ d dlmc mZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d	d
lmZmZmZmZmZ erd dlmZ  ed      Z  ed      Z!	 d	 	 	 	 	 	 	 ddZ"ddZ#ddZ$ddZ%	 	 	 	 	 	 ddZ&ddZ'	 	 	 	 	 	 	 	 ddZ(y)    )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 {};
  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                b   | j                   j                  j                         }|j                  dd       d}|rd|j	                  d      }dj                  |j                  dd      j                  d      D cg c]  }|j                          c}      }|rd| }|rdnd}| | S c c}w )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           \/var/www/html/venv/lib/python3.12/site-packages/torchgen/packaged/autograd/gen_view_funcs.pyr(   r(   t   s     66;;'')DS#./z:N#..s3
 . 6 6sC @ F Fs KL1QWWYL
   01N2C.I[()) Ms   ;B,c                n    | j                   j                         xs | j                   j                         S N)typeis_tensor_likeis_symint_like)args    r,   is_symint_or_tensorr3      s'    88""$A(?(?(AA    c                    t        | j                  | j                  j                         | j                  | j
                        S )N)r   nctypeargumentdefault)r   r   r6   remove_const_refr7   r8   )bindings    r,   r9   r9      s6    \\~~..0!!	 r4   c                    | j                   j                  }t        |      dk(  sJ |d   j                  j	                         d u}|d   j                  j                         }|xr |S )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           
        g }g }|j                   }|j                  |j                          d| d       t        |       dkD  r|j                  d       g }t	        |       D ]  \  }}t        |j                  t              sJ |j                  j                  j                         rf|j                    d}|j                  |       | d| d|j                    d|j                    d	}	d
| d| d|j                    d|j                    d	}
nt        |j                  j                  t              r_d|j                    d}|j                  |       d|j                    d}| d| d| d|j                    d}	| d|j                    d| d}
n7d}|j                  |       | d|j                    d}	|j                    d| d}
|j                  |	       |j                  |
       |t        |       dz
  k  s|j                  d| d        t        |      dk(  rdndj                  |      }t        |       dkD  r|j                  d| d| d       |j                  d| d       |||fS ) 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(# 51!**h///::??'')&&)HX&!{(9+XaffXZPQPVPVxW_`F!)N9+_UVU[U[T\\efgflflemmwxF

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5: 9~*

90EI
8}qA)Ii[CD')A./y00r4   c                   t        |       }|D cg c]  }|j                  dk7  s| }}| j                  j                  j                  dd  }|D cg c]  }t        j                  |d       }}|D cg c]  }|j                          }}|D cg c]  }|j                   }	}|D cg c]  }t        |      j                          d  }
}t        ||d      }g }t        ||      D ]N  \  }}|j                  j                  }t        |t              sJ |j                  | d|j                   d       P d	}|gd
 |D        }t!        j"                  | j                  j                  j%                         |      }t'        |       rad}d}| d| }|j                  |       |	j                  |       |
j                  | d       |j                  | d| d       |d| dz  }t)        |      dkD  rddj+                  |       nd}|D cg c]B  }t        |j                  t,              r&|j                  j.                  j1                         r|D }}t3        dt5        t7        t8                          }t;        ||      \  }}}|D cg c]B  }t        |j                  t,              r&|j                  j.                  j=                         r|D }}t3        dt5        t7        t>                          }t;        ||      \  }}}|j#                  tA        |       tA        | d      jC                         d||
||	|j                  ||||j                  |||||      S c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nselfr   T)remove_non_owning_ref_typesrE   )allow_expensive_conversionsrF   )
input_basec              3  4   K   | ]  }|j                     y wr.   )r   ).0rU   s     r,   	<genexpr>z#process_function.<locals>.<genexpr>   s     &I!qvv&Is   )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_bindingsrq   rr   state_variables
init_exprsinitializers	init_exprr   r{   op_call_argsr|   view_idx_nameview_idx_typenameview_idx_declro   symint_bindingssymints_vec_typert   ru   rv   tensor_bindingstensors_vec_typerx   ry   rz   s                                    r,   process_functionr      s   #H$,Aq&0@AAGG%%..qr2MJWEF
A4@ 
 +<<Q<<"34Q!&&4J4 3J-.A##%
&a(O  2PTJ L-z: 99xx}}$$$$tfAinn%5Q789 #O#J&I7H&IJL&&668"G B"%,-Q}o>.-(-23}oQ}oQ?@Q}oQ'' :=\9JQ9NDIIl345TV
 #ajj(+

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

0N0N0P 	
O 
 ")[79K-LM,H)-)Kk "#B59??A.))$))$))'#   Q B
 =4Ns0   M+M+M06M5M:,#M?ANAN	c           
       	
 |D cg c]  }t        |      s|j                   }}|D cg c]  }t        |      t        |      r| }}|D cg c]  }t	        |t
               c}|D cg c]  }t	        |t               c}	|D cg c]  }d|j                   d c}d}t        | |d      
dD ]!  }||z   
j                  	
fd       # y c c}w c c}w c c}w c c}w c c}w )Nz#include <ATen/ops/z_ops.h>	ViewFuncsF)install_dirtemplate_dirdry_run)z.hz.cppc                 B    ddj                          dz   z    d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>z 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277
?C
? M"-9BTUWBXH  JRR2$R)=>RLGOP#B(;<PKIQR2(g>RKM	=%	PB  
&
	

 @ SPRs-   C#C#C( C(C(C-4C2C7)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   