
    9j).                    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 = 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                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           i/media/conek/DATA/Code/OCR/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k7  rt        dt        |             |d   j                  j                         d u}|d   j                  j                         }|xr |S )Nr   zExpected 1 return, got r   )r   returnslenAssertionErrorr/   is_list_liker0   )fnr<   returns_list_likereturns_tensor_likes       r,   returns_multi_tensorrC      sq    ggooG
7|q6s7|nEFF
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!t        dt        |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Expected Argument, got 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   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/ #:4

;K:L!MNN::??'')&&)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475< 9~*

90EI
8}qA)Ii[CD')A./y00r4   c                F   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 ]c  \  }}|j                  j                  }t        |t              st        dt        |             |j!                  | d|j"                   d	       e 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                  t0              r&|j                  j                  j3                         r|D }}t5        dt7        t9        t:                          }t=        ||      \  }}}|D cg c]B  }t        |j                  t0              r&|j                  j                  j?                         r|D }}t5        dt7        t9        t@                          }t=        ||      \  }}}|j'                  tC        |       tC        | d      jE                         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_typesrF   )allow_expensive_conversionszExpected name to be str, got rG   )
input_basec              3  4   K   | ]  }|j                     y wr.   )r   ).0rV   s     r,   	<genexpr>z#process_function.<locals>.<genexpr>   s     &I!qvv&Is   )r   unpacked_argsview_idxint64_trE   []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   rM   strr>   r/   rJ   exprr   
substituter   rC   r=   r"   r   r1   r   r   r   r	   r\   r0   r
   r(   upper) r@   templaterO   rV   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$,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}}$$ #@d!MNN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.))$))$))'#   S B
 =4Ps0   N N N6N
N,#N.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                 @    ddj                          d 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>O  s6    %(#B$@$@$B#C1UGL&M*6)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   8  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   )rO   zlist[Binding]rP   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   rC   r\   r   r    r4   r,   <module>r      s    #   , , ,  0 A A &  M $ 6 #,. h LP***.*DH**"B5$111111 &11h]@
	
A
 
 
	
r4   