
    `iE-                       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/d0dZ"d1dZ#d2dZ$d3dZ%d4d%Z&d5d(Z'd6d.Z(dS )7    )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;
}

FTfr   include_namespacebool
camel_casereturnstrc                P   | j         j                                        }|                    dd           d}|rb|                    d          }d                    d |                    dd                              d          D                       }|rd| }|rdnd}| | S )N._
_view_func c                6    g | ]}|                                 S  )title).0ps     }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchgen/packaged/autograd/gen_view_funcs.py
<listcomp>z"view_func_name.<locals>.<listcomp>|   s     LLL1QWWYYLLL    ztorch::autograd::generated::)funcnameunambiguous_namereplace
startswithjoinsplit)r   r   r   r,   view_func_name
is_private	namespaces          r(   r2   r2   t   s     6;''))DS#..:::N 2#..s33
LL 6 6sC @ @ F Fs K KLLL
 
  	2111N2CK..I))))r*   argr   c                f    | j                                         p| j                                         S N)typeis_tensor_likeis_symint_like)r5   s    r(   is_symint_or_tensorr;      s)    8""$$A(?(?(A(AAr*   bindingr   c                t    t          | j        | j                                        | j        | j                  S )N)r,   nctypeargumentdefault)r   r,   r>   remove_const_refr?   r@   )r<   s    r(   rA   rA      s:    \~..00!	   r*   fnc                    | j         j        }t          |          dk    sJ |d         j                                        d u}|d         j                                        }|o|S )Nr   r   )r+   returnslenr8   is_list_liker9   )rB   rD   returns_list_likereturns_tensor_likes       r(   returns_multi_tensorrI      sc    goGw<<1
4466dB!!*/88::4!44r*   bindingslist[Binding]state_vec_typer    tuple[list[str], list[str], str]c           
        g }g }|j         }|                    |                                 d| d           t          |           dk    r|                    d           g }t	          |           D ]\  }}t          |j        t                    sJ |j        j        	                                rQ|j          d}|                    |           | d| d|j          d|j          d	}	d
| d| d|j          d|j          d	}
nt          |j        j        t                    rOd|j          d}|                    |           d|j          d}| d| d| d|j          d}	| d|j          d| d}
n1d}|                    |           | d|j          d}	|j          d| d}
|                    |	           |                    |
           |t          |           dz
  k     r|                    d| d           t          |          dk    rdnd                    |          }t          |           dk    r|                    d| d| d           |                    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_typerE   	enumerate
isinstancer?   r   r8   rF   r   r0   insert)rJ   rL   getter_logicsetter_logic	state_vec	num_exprsibnum_exprgettersetterconditional	num_itemss                r(   generate_state_getter_setterrd      s    LL#I>2244CCyCCCDDD
8}}qM***I(## 5 51!*h/////:?'')) 	3&)))HX&&&!``9``af``PQPV```Fx)xx9xxUVU[xxfgflxxxFF
66 	3816888HX&&&5555KTTTTITTTTT  $@@af@@@@@FFHX&&&!88af888F229222FF###F###s8}}q    3 3 3 3444 9~~**

90E0EI
8}}qA)CCiCCCDDD.)...///y00r*   templater   c                |   t          |           }d |D             }| j        j        j        dd          }d |D             }d |D             }d |D             }d |D             }t	          ||d          }	g }
t          ||	          D ]H\  }}|j        j        }t          |t                    sJ |

                    | d	|j         d
           Id}|gd |D             }t          j        | j        j                                        |          }t          |           rqd}d}| d| }|
                    |           |
                    |           |
                    | d           |

                    | d	| d
           |d| dz  }t!          |
          dk    rdd                    |
           nd}d |D             }t%          dt'          t)          t*                                        }t-          ||          \  }}}d |D             }t%          dt'          t)          t.                                        }t-          ||          \  }}}|                    t1          |           t1          | d                                          d|||||j        ||||j        |||||          S ) Nc                (    g | ]}|j         d k    |S )selfr,   r&   r^   s     r(   r)   z$process_function.<locals>.<listcomp>   s$    AAAq&0@0@0@0@0@r*   r   c                :    g | ]}t          j        |d           S )T)remove_non_owning_ref_types)
dispatcherr?   )r&   as     r(   r)   z$process_function.<locals>.<listcomp>   s5       EF
A4@@@  r*   c                6    g | ]}|                                 S r$   )defnrj   s     r(   r)   z$process_function.<locals>.<listcomp>   s     <<<Q<<<r*   c                    g | ]	}|j         
S r$   ri   rj   s     r(   r)   z$process_function.<locals>.<listcomp>   s    444Q!&444r*   c                V    g | ]&}t          |                                           d 'S )rP   )rA   rp   rj   s     r(   r)   z$process_function.<locals>.<listcomp>   sC       -.A##%%(((  r*   T)allow_expensive_conversionsrQ   )
input_basec              3  $   K   | ]}|j         V  d S r7   ri   rj   s     r(   	<genexpr>z#process_function.<locals>.<genexpr>   s$      &I&I!qv&I&I&I&I&I&Ir*   )r-   unpacked_argsview_idxint64_trO   rP   []r   z: z, r"   c                    g | ]<}t          |j        t                    |j        j                                        :|=S r$   )rW   r?   r   r8   r:   rj   s     r(   r)   z$process_function.<locals>.<listcomp>  T       aj(++ 12
0N0N0P0P	  r*   symintsc                    g | ]<}t          |j        t                    |j        j                                        :|=S r$   )rW   r?   r   r8   r9   rj   s     r(   r)   z$process_function.<locals>.<listcomp>  r~   r*   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+   	argumentsflat_allr   zipr>   r,   rW   r   rT   exprr   
substituter-   rI   rE   r0   r   r   r   r	   rd   r
   r2   upper)rB   re   rJ   non_self_bindingsnon_self_argsnon_self_value_bindingsr   r   state_variables
init_exprsinitializersr^   	init_exprr,   r   op_call_argsr   view_idx_nameview_idx_typenameview_idx_declr   symint_bindingssymints_vec_typer   r   r   tensor_bindingstensors_vec_typer   r   r   s                                  r(   process_functionr      s   ##HAAHAAAG%.qrr2M JW  
 =<*;<<<44"3444J 2I  O 2PT  J L-z:: 9 99x}$$$$$$t77in7778888 #O#J&I&I7H&I&I&IJL&6688"  G B ("%,>>}>>...-(((-222333}??}???@@@'}'''' :=\9J9JQ9N9N5DIIl33555TV "  O
 ")[79K9K-L-LMM,H)- -)Kk
 "  O
 ")[79K9K-L-LMM,H)- -)Kk "#B5999??AA.))$)$)'#    r*   outfns_with_infos-list[NativeFunctionWithDifferentiabilityInfo]template_pathNonec           
        	
 d |D             }d |D             }d |D             d |D             d |D             d}t          | |d          	d	D ]%}||z   
	                    

	
fd
           &d S )Nc                :    g | ]}t          |          |j        S r$   )r   r+   r&   rB   s     r(   r)   z"gen_view_funcs.<locals>.<listcomp>;  s%    
?
?
?r{2
?27
?
?
?r*   c                N    g | ]"}t          |          t          |           |#S r7   )r   r   r   s     r(   r)   z"gen_view_funcs.<locals>.<listcomp>=  s;       M"--9BTUWBXBX9999r*   c                8    g | ]}t          |t                    S r$   )r   FUNCTION_DECLARATIONr   s     r(   r)   z"gen_view_funcs.<locals>.<listcomp>A  s$    RRR2$R)=>>RRRr*   c                8    g | ]}t          |t                    S r$   )r   FUNCTION_DEFINITIONr   s     r(   r)   z"gen_view_funcs.<locals>.<listcomp>B  s$    PPP#B(;<<PPPr*   c                $    g | ]}d |j          dS )z#include <ATen/ops/z_ops.h>)	root_namer   s     r(   r)   z"gen_view_funcs.<locals>.<listcomp>C  s&    RRR2>>>>RRRr*   	ViewFuncsF)install_dirtemplate_dirdry_run)z.hz.cppc                 H    dd                                  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>L  s@    %(LB$@$@$B$BLLULL&M*6)4*  r*   )r   write_with_template)r   r   r   fnsview_fnsfile_basenamesuffixr   r   r   r   r   s          @@@@@r(   gen_view_funcsr   5  s     @
?^
?
?
?C   H SRRRRLPPxPPPKRRRRRKM	=%	P	P	PB  
 
&
       
	
 
	
 
	
 
	

 
r*   )FT)r   r   r   r   r   r   r   r   )r5   r   r   r   )r<   r   r   r   )rB   r   r   r   )rJ   rK   rL   r   r   rM   )rB   r   re   r   r   r   )r   r   r   r   r   r   r   r   ))
__future__r   typingr   torchgen.api.dispatcherapirm   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   r2   r;   rA   rI   rd   r   r   r$   r*   r(   <module>r      s.   # " " " " "             , , , , , , , , , , , , , , ,                0 / / / / / A A A A A A A A A A & & & & & &               NMMMMMM $|  6 #l,. . h LP* * * * *"B B B B   5 5 5 5"01 01 01 01f\ \ \ \~
 
 
 
 
 
r*   