a
    h                     @   s:  U d dl Z d dl mZ e jjZd dlZd dlZd dlmZmZm	Z	 d dl
mZ d dlmZ i Zeee jjf ed< e Zee ed< e	dZed	Zd
d Zdd Zde jjeeee jjf  eeeef geeef f dddZeejjdeeee   ee e!edddZ"eejj#dee!edddZdS )    N)Tensor)CallableOptionalTypeVar)	ParamSpec)Numberdecomposition_tablefunction_name_set_T_Pc                 C   s`   t j}t | }|j D ]&}|j|ksJ d|j d| j q|j|ks\J d| j d S )NzNo signature on param z for function z"No return annotation for function )inspect_empty	signature
parametersvalues
annotationnamereturn_annotation)finspect_emptysigparam r   G/var/www/auris/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   )
Zdecomposition_sigZtorch_op_sigZdecomp_paramsZ	op_paramsZdecomp_paramZop_paramr   fieldZdecomp_defaultZ
op_defaultr   r   r   signatures_match#   s"    

r#   )aten_opregistryreturnc                    s*   t ttf t ttf d fdd}|S )N)r   r&   c                    s   d u rt t tjjsJ | jtvs8J d| j t| j tj	| }tj
|j tdD ] }tj
|j tj
|j qf|t j< | S )NzDuplicated function name    )r   
isinstancetorch_ops
OpOverload__name__r	   addjitscriptZ_CZ_jit_pass_inlinegraphrangeZ_jit_pass_peepholeZ_jit_pass_constant_propagationstrZ_schema)r   Zscripted_func_r$   r%   r   r   decomposition_decoratorF   s    
z7register_decomposition.<locals>.decomposition_decorator)r   r   r
   )r$   r%   r5   r   r4   r   register_decompositionB   s    &r6   F)inputdim
correctionkeepdimr&   c                 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 rt	|d }
n8t |t
rt	|| }
n t |t	rt	|| }
ntd|	td|
 S )Nr      Tzcorrection must be int or float)r(   tuplelistr   ZnumelshapeatenmeansumfloatintRuntimeErrormax)r7   r8   r9   r:   Zdim_inr@   subsqrA   Zdenomr   r   r   var_decompositionc   s(    


rI   T)r7   unbiasedr&   c                 C   s   t | |rdnddS )Nr;   r   )r9   )rI   )r7   rJ   r   r   r   var   s    rK   )N)NNF)T)$r)   r   opsr?   r   r   typingr   r   r   Ztyping_extensionsr   Ztorch.typesr   r   dictr2   r.   ZScriptFunction__annotations__setr	   r
   r   r   r#   r*   r+   r6   rK   r9   r=   rC   boolrI   r!   r   r   r   r   <module>   s@   
! !
   
#
