U
    9%e                     @   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	m
Z
 d dlm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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)DictListOptionalSet)Numberdecomposition_tablefunction_name_setc                 C   s`   t j}t | }|j D ]&}|j|kstd|j d| j q|j|ks\td| j d S )NzNo signature on param z for function z"No return annotation for function )	inspect_empty	signature
parametersvalues
annotationAssertionErrornamereturn_annotation)finspect_emptysigparam r   X/var/www/html/Darija-Ai-API/env/lib/python3.8/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"   c                    s    fdd}|S )Nc                    s   d krt t tjjst| jtks8t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torchZ_opsZ
OpOverloadr   __name__r	   addjitscriptZ_CZ_jit_pass_inlinegraphrangeZ_jit_pass_peepholeZ_jit_pass_constant_propagationstrZ_schema)r   Zscripted_func_aten_opregistryr   r   decomposition_decorator<   s    
z7register_decomposition.<locals>.decomposition_decoratorr   )r/   r0   r1   r   r.   r   register_decomposition;   s    r2   F)inputdim
correctionkeepdimreturnc                 C   s   |d krg }|}t |ttfr4t|dkr4|  }nd}|D ]}|| j| 9 }q<t| |d}| | }|| }t|||}	|d k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)r3   r4   r5   r6   Zdim_inr=   subsqr>   denomr   r   r   var_decompositionY   s(    


rG   T)r3   unbiasedr7   c                 C   s   t | |rdnddS )Nr8   r   )r5   )rG   )r3   rH   r   r   r   var}   s    rI   )N)NNF)T)r%   r   Zopsr<   r
   r   typingr   r   r   r   Ztorch.typesr   r   r,   r(   ZScriptFunction__annotations__setr	   r   r"   r2   rI   r5   r@   boolrG   r    r   r   r   r   <module>   s2    

   
#
