a
    ==ic1                  	   @   sD  U d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	 e
 Zejdddd ejdd	d
d ejdddd ejdddd ejdddd e \ZZejrejejsedeje jd ejejd d dlmZ nd dlmZ eejejdZzd dlmZ W n  eyD   d dlm Z Y n0 dd Z!dd Z"dd Z#dd Z$dd d!d!d"d#Z%d$d%d&d'd(d)d*d+d,Z&d-d.iZ'd/d0 Z(d1d2 Z)ed3Z*ed4Z+ed5Z,d6d7 Z-d8d9 Z.d:d; Z/d<d= Z0d>d? Z1d@dA Z2dBdC Z3e4dDkr@ej5e"ejej6dEedFZ7e2e7Z8dGdH e7D Z9g g g dIZ:ee;ef e<dJ< e= Z>e	e; e<dK< d Z?e9D ]Z@e.e@ZAe1e@ZBdLe@dM geA eBg ZCeCe>v rqhe>DeC e:dN EdOeCe? e@dM g g g g e;e?dPZFdQe@dR vrdSe@dR vrdTe@dR v sJ eGdUdV e@dW D ZHeIdXdV e@dW D ZJeJrZdYdH eKe@dW D d  ZLd ZMeKe@dW D ]\ZNZOeFdW EeOdM  eJreNeLk rdZneHZPeOd[ d\kreFd] Ed^eOdM eMeH neOd[ d_kreFd] Ed`eOdM eMeH n\e$eOr$eFd] EdaeOdM eMeP eMdb7 ZMn,ee&eOd[  jQeFeOdM dcZReFdd EeR qje3e@eF e@dM e'v rdee'e@dM  dfeFdW eFdg< nZdQe@dR v redhQeFeFdg< n8dSe@dR v sJ die@dM djeFdW dbd eFdg< e:dk Ee*QeF e:dl Ee+QeF e?db7 Z?qhe!ejejSejTdm eQe: dS )n    N)deepcopy)DictListSetz--template_dir.zwhere template.h is)defaulthelpz
--yaml_dirzaten/src/ATen/ATenzwhere ATen yaml files arez--output_prefix z--install_dirzwhere to put generated filez--aten_rootzroot directory of atenzaten_root ({}) does not existz..)CodeTemplatezaten_op_template.h)CSafeLoader)
SafeLoaderc                 C   s8   t | d}|| W d    n1 s*0    Y  d S )Nw)openwrite)filenamesf r   k/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/caffe2/contrib/aten/gen_op.pyr   7   s    r   c                 C   s6   t | d}| W  d    S 1 s(0    Y  d S )Nr)r   read)r   r   r   r   r   r   <   s    r   c                 C   s   d| d v od| d vS )NTensordynamic_typeZSparser   vr   r   r   value_has_tensorsA   s    r   c                 C   s   t | o| d dvS )Nr   at::TensorList,const c10::List<c10::optional<at::Tensor>> &r   r   r   r   r   value_is_tensor_typeF   s    r    z&assignTo(Output(${offset}),${output});z8assignTo(Output(${offset}),${output}.type(), ${output});z4assignToValue<int64_t>(Output(${offset}),${output});z+assignListStartingAt(${offset}, ${output});)
at::Tensorz
at::Scalarboolint64_tz::std::vector<at::Tensor>z2at::Scalar ${arg} = readScalarAttribute("${arg}");z/bool ${arg} = readAttribute<int64_t>("${arg}");z.int ${arg} = readAttribute<int64_t>("${arg}");z/double ${arg} = readAttribute<float>("${arg}");z2int64_t ${arg} = readAttribute<int64_t>("${arg}");z(auto ${arg} = readIntArrayRef("${arg}");z(auto ${arg} = readBoolMask<2>("${arg}");z(auto ${arg} = readBoolMask<3>("${arg}");)zconst at::Scalar &r"   intdoubler#   zat::IntArrayRefz::std::array<bool,2>z::std::array<bool,3>indexz#internal::index_with_uint8_handlingc                 C   sv   t dd | d D }| g}td|D ]J}d| d |d   v sDJ t| }|d d |d   |d< || q&|S )Nc                 s   s   | ]}d |v rdndV  qdS )r      r   Nr   .0argr   r   r   	<genexpr>h       zexpand.<locals>.<genexpr>	argumentsr   r   r'   )sumranger   append)onum_defaultsresultsir   r   r   r   expandg   s    r5   c                 C   s  | d |v rF|| d  dkr.t d| d  || d   d7  < dS | d rRdS d| d v rbdS t| d dkrvdS | d D ]<}t|s~|d	 tvr~t d
| d |d	 |d   dS q~| d D ]<}t|s|d	 tvrt d| d |d	 |d   dS qdS )Nnamer   z*Skipping {} because it is a factory methodr'   FZinplaceZ_outreturnstypez#Skipping {} Because of Ret: {} ({})r   r-   z$Skipping {} Because of Arg: {} ({}) T)printformatlenr   
RETURN_MAPARGUMENT_MAP)r1   factory_methodsretr*   r   r   r   supportst   s0    r@   a  C10_NOINLINE void implementation_${key}() { // ${name}
    ${initialization}
    run_op = [=] {
        at::AutoDispatchBelowAutograd guard;
        ${statements}
        auto the_result = ${invocation};
        ${assignments}
        return true;
    };
}
z<case ${key}: // ${name}
  implementation_${key}();
  break;
z/  if(OutputSize() > ${offset}) {${assignment}}
c                 C   s"   t | d dkrdS d|S d S )Nr7   r'   Z
the_resultz::std::get<{}>(the_result))r;   r:   )r1   r4   r   r   r   
get_output   s    rA   c                 C   s   t dd | d D S )Nc                 S   s   g | ]}t |s|d  qS )r6   r   r)   ar   r   r   
<listcomp>   r,   z#attribute_names.<locals>.<listcomp>r-   sortedr1   r   r   r   attribute_names   s    rH   c                 C   s   t dd | d D S )Nc                 S   s$   g | ]}t |sd |vr|d qS )r   r6   r   rB   r   r   r   rD      r,   z,required_attribute_names.<locals>.<listcomp>r-   rE   rG   r   r   r   required_attribute_names   s    rI   c                 C   s   dd | D dd | D  S )Nc                 S   s   g | ]}|d  dkr|qS r6   selfr   rB   r   r   r   rD      r,   z*self_as_first_argument.<locals>.<listcomp>c                 S   s   g | ]}|d  dkr|qS rJ   r   rB   r   r   r   rD      r,   r   )r-   r   r   r   self_as_first_argument   s    rL   c                 C   s<   d}| d D ]&}|d dv r" dS t |r|d7 }qt|S )Nr   r-   r8   r   *r'   )r   str)r1   argsrC   r   r   r   get_num_inputs   s    
rP   c                 C   s4   i }| D ]&}t dd |d D rd||d < q|S )Nc                 s   s   | ]}|d  dkV  qdS )r   zat::TensorOptionsNr   r(   r   r   r   r+      r,   z'find_factory_methods.<locals>.<genexpr>r-   r   r6   )any)declsr>   r1   r   r   r   find_factory_methods   s
    rS   c                 C   sj   t | d D ]X\}}tt|s&|d nd }t|j||t| |d}tj|||d}|d | qd S )Nr7   r8   r!   )offsetoutput)rT   
assignmentassignments)	enumerater<   r    CT
substituterA   ASSIGN_CHECK_SIZE_TEMPLATEr0   )r1   envr4   r   trV   Zcheck_size_assignmentr   r   r   emit_assignments   s
    r^   __main__zDeclarations.yaml)Loaderc                 C   s(   g | ] }t |D ]}t|tr|qqS r   )r5   r@   r>   )r)   r1   expandedr   r   r   rD      r,   rD   )mappingsimplementationscasestop_envseen-r6   rb   z{{ "{}", {} }},)r6   
statementsr-   rW   initializationkey	namespaceZ	method_ofr   Typec                 c   s"   | ]}|d  dvot |V  qdS r8   r   N)r    r(   r   r   r   r+     r,   r+   r-   c                 c   s   | ]}|d  dv V  qdS rm   r   r(   r   r   r   r+     r,   c                 C   s    g | ]\}}|d  dv r|qS )r8   r   r   )r)   r4   r*   r   r   r   rD     r,   zInputSize()r8   r   rh   z7auto {} = peekSlice({}, InputSize() - {}, InputSize());r   z@auto {} = peekSliceOptionals({}, InputSize() - {}, InputSize());zauto {} = peek({}, {});r'   )r*   ri   z{}({}),Z
invocationzat::${name}(${arguments})zself.{}({})z, rc   rd   z	aten_op.h)Usysyamlargparseoscopyr   typingr   r   r   ArgumentParserparseradd_argumentparse_known_argsrO   _Z	aten_rootpathexists
ValueErrorr:   insertjoinZtorchgen.code_templater
   rY   	from_fileZtemplate_dirZOP_TEMPLATEr   r`   ImportErrorr   r   r   r   r    r<   r=   ZSPECIAL_IMPLEMENTATIONSr5   r@   ZIMPLEMENTATION_TEMPLATEZCASE_TEMPLATEr[   rA   rH   rI   rL   rP   rS   r^   __name__loadZyaml_dirrR   r>   filteredre   rN   __annotations__setrf   rj   r1   
attr_namesZ
num_inputsZ
descriptoraddr0   r\   r.   Zstatic_tensor_inputsrQ   Zhas_tensorlistrX   Ztensorlist_idxZreal_inputsr4   r*   Zview_lengthrZ   initZinstall_dirZoutput_prefixr   r   r   r   <module>   s  
0
	

	

	




$