o
    k9:j3                     @   sX  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 d dl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dZdd Z	d de jjdeee jjf dB deeeef geeef f fddZeejj			d!dedee  dB dedB de!def
ddZ"eejj#d"dede!defddZdS )#    N)Tensor)Callable)TypeVar)	ParamSpec)Numberdecomposition_tablefunction_name_set_T_Preturnc                 C   s`   t j}t | }|j D ]}|j|kr td|j d| j q|j|kr.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   `/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/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 ]?\}}tj}dD ] }|dkr4|jdkr4tjddd t	||t	||krB  dS q"|j
}|j
}	||krX|	|krX||	krX dS q| j|jkS )NF)r   r   r   selfz4PyTorch uses 'input' instead of 'self' on public api   )
stacklevel)r   lenzipr   r   r   r   warningswarngetattrdefaultr   )
decomposition_sigtorch_op_sigdecomp_params	op_paramsdecomp_paramop_paramr   fielddecomp_default
op_defaultr   r   r   signatures_match$   s*   r.   aten_opregistryc                    s,   dt ttf dt ttf f fdd}|S )Nr   r   c                    s   d u rt t tjjstdt  | jtv r#td| j t	| j tj
| }tj|j tdD ]}tj|j tj|j q:|t j< | S )Nz'Expected aten_op to be OpOverload, got zDuplicated function name r   )r   
isinstancetorch_ops
OpOverloadr   type__name__r   addjitscript_C_jit_pass_inlinegraphrange_jit_pass_peephole_jit_pass_constant_propagationstr_schema)r   scripted_func_r/   r0   r   r   decomposition_decoratorI   s    
z7register_decomposition.<locals>.decomposition_decorator)r   r
   r	   )r/   r0   rE   r   rD   r   register_decompositionE   s   (rF   Finputdim
correctionkeepdimc                 C   s   |d u rg }|}t |ttfrt|dkr|  }nd}|D ]	}|| j| 9 }qt| |d}| | }|| }t|||}	|d u rIt	|d }
nt |t
rUt	|| }
nt |t	rat	|| }
ntd|	td|
 S )Nr      Tzcorrection must be int or float)r1   tuplelistr   numelshapeatenmeansumfloatintRuntimeErrormax)rG   rH   rI   rJ   dim_inrQ   subsqrR   denomr   r   r   var_decompositionh   s(   


r\   Tunbiasedc                 C   s   t | |rddS ddS )NrK   r   )rI   )r\   )rG   r]   r   r   r   var   s   r^   )r   N)N)NNF)T)$r2   r   opsrP   r   r!   collections.abcr   typingr   typing_extensionsr   torch.typesr   r   dictr@   r8   ScriptFunction__annotations__setr   r	   r
   r   r.   r3   r4   rF   r^   rI   rM   rT   boolr\   r$   r   r   r   r   <module>   sP   

#

#

$