a
    ;=ic                     @   s   U d dl Z d dl mZ e jjZd dlmZmZmZmZ d dl	Z	d dl
mZ d dlZi Zeee jjf ed< e Zee ed< dd Zd	d
 ZdddZeejdeeee  ee eedddZeejdeeedddZdS )    N)Tensor)OptionalListDictSet)get_signature_for_torch_opdecomposition_tablefunction_name_setc                 C   s`   t j}t | }|j D ]$}|j|ksJ dj|j| jdq|j|ks\J dj| jdd S )Nz0No signature on param {name} for function {func})namefuncz(No return annotation for function {func})r   )	inspect_empty	signature
parametersvalues
annotationformatr
   return_annotation)finspect_emptysigparam r   j/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/torch/jit/_decompositions.py(check_decomposition_has_type_annotations   s    
r   c           
      C   s   | j }|j }t|t|kr dS t| | D ]z\}}tj}dD ]<}|dkrd|jdkrdtd t	||t	||krD  dS qD|j
}|j
}	||kr2|	|kr2||	kr2 dS q2| j|jkS )NF)r
   r   r
   selfz4PyTorch uses 'input' instead of 'self' on public api)r   lenzipr   r   r   r
   warningswarngetattrdefaultr   )
decomposition_sigtorch_op_sigZdecomp_paramsZ	op_paramsZdecomp_paramZop_paramr   fieldZdecomp_defaultZ
op_defaultr   r   r   signatures_match   s"    

r%   c                    s    fdd}|S )Nc           	         s   d u rt t|  t dd\}}t| }d }t|D ]\}}t||r:|} qVq:|d usnJ dt|  | jt	vsJ d
| jt	| j tj| }tj|j tdD ] }tj|j tj|j q|t|| < | S )NT)Zreturn_schemasz#Could not find matching signature: zDuplicated function name {}   )r   r   r   r   r   	enumerater%   str__name__r	   r   addtorchjitscriptZ_CZ_jit_pass_inlinegraphrangeZ_jit_pass_peepholeZ_jit_pass_constant_propagation)	r   Ztorch_op_sigsZtorch_op_schemasr"   Zfound_indexir#   Zscripted_func_aten_opregistryr   r   decomposition_decorator8   s(    

z7register_decomposition.<locals>.decomposition_decoratorr   )r3   r4   r5   r   r2   r   register_decomposition7   s     r6   F)inputdim
correctionkeepdimreturnc           
      C   s   |d u rg }|}t |ttfr4t|dkr4|  }nd}|D ]}|| j| 9 }q<t| |d}| | }|| }t|||}	|d ur|| }|	| S )Nr      T)	
isinstancetuplelistr   Znumelshapeatenmeansum)
r7   r8   r9   r:   Zdim_inrB   subsqrC   r   r   r   var_decomposition\   s    
rG   T)r7   unbiasedr;   c                 C   s   t | |rdnddS )Nr<   r   )r9   )rG   )r7   rH   r   r   r   vart   s    rI   )N)NNF)T)r+   r   opsrA   typingr   r   r   r   r   Ztorch.fx.operator_schemasr   r   r   r(   r,   ZScriptFunction__annotations__setr	   r   r%   r6   rI   intboolrG   r   r   r   r   <module>   s&   


%  