o
    Ih.                     @  sr  d Z ddlmZ ddlZddlmZmZ ddlZddlm	Z	m
Z
 er2ddlmZmZmZmZmZmZ dd	 Zd
d ZedGdddHddZe		dIdddJddZe		dIdddJddZe			dKdddLdd Ze			dKdddLd!d"Ze					dMdNd$d%ZeZe					dMdNd&d'ZeZe			dKdJd(d)Ze						dOdPd,d-Ze						dOdPd.d/ZeZ e				dQdddRd0d1Z!e					dSdddRd2d3Z"e					dSdddRd4d5Z#			dTdUd6d7Z$			dTdUd8d9Z%e%Z&			dKdddVd;d<Z'				=	dWdd>dXdAdBZ(				=	dWdd>dXdCdDZ)				dYdZdEdFZ*dS )[z Implementation of reduction operations, to be wrapped into arrays, dtypes etc
in the 'public' layer.

Anything here only deals with torch objects, e.g. "dtype" is a torch.dtype instance etc
    )annotationsN)OptionalTYPE_CHECKING   )_dtypes_impl_util)	ArrayLikeAxisLike	DTypeLikeKeepDimsNotImplementedTypeOutArrayc                   s   t  d fdd	}|S )z
    Generically handle axis arguments in reductions.
    axis is *always* the 2nd arg in the function so no need to have a look at its signature
    Nc                   sT   |d urt || j}|dkrt j| jdd}| |} d} | |g|R i |S )N r   axisr   )r   normalize_axis_tuplendimexpand_shapeshapereshape)ar   argskwdsnewshapefuncr   Q/var/www/vscode/kcb/lib/python3.10/site-packages/torch/_numpy/_reductions_impl.pywrapped#   s   
z"_deco_axis_expand.<locals>.wrappedN)	functoolswraps)r   r   r   r   r   _deco_axis_expand   s   r"   c                 C  s&   | du r|} | j s| jst jS | S )a$  Return a dtype that is real or complex floating-point.

    For inputs that are boolean or integer dtypes, this returns the default
    float dtype; inputs that are complex get converted to the default complex
    dtype; real floating-point dtypes (`float*`) get passed through unchanged
    N)is_floating_point
is_complexr   default_dtypesfloat_dtype)dtypeother_dtyper   r   r   _atleast_float4   s
   
r)   F)keepdimsr   r   r   r	   r*   r   c                C  s
   |  |S r   )count_nonzero)r   r   r*   r   r   r   r+   B   s   
r+   outOptional[OutArray]c                C  H   |   rtd| j dt|}| jtjkr| tj} t	| |S )Nzargmax with dtype=.)
r$   NotImplementedErrorr'   r   allow_only_single_axistorchbooltouint8argmaxr   r   r,   r*   r   r   r   r6   G      
r6   c                C  r.   )Nzargmin with dtype=r/   )
r$   r0   r'   r   r1   r2   r3   r4   r5   argminr7   r   r   r   r9   [   r8   r9   )wherer:   r   c                C  0   t |}|d u ri nd|i}tj| fi |S Ndim)r   r1   r2   anyr   r   r,   r*   r:   axis_kwr   r   r   r>   o      
	r>   c                C  r;   r<   )r   r1   r2   allr?   r   r   r   rB   }   rA   rB   initialc                 C  "   |   rtd| j | |S )Nzamax with dtype=)r$   r0   r'   amaxr   r   r,   r*   rC   r:   r   r   r   rE         	
rE   c                 C  rD   )Nzamin with dtype=)r$   r0   r'   aminrF   r   r   r   rH      rG   rH   c                 C  s   |  || | S r   )rE   rH   r7   r   r   r   ptp   s   rI   r'   Optional[DTypeLike]c                 C  sT   |d u st |tjsJ |tjkrt j}|d u ri nd|i}| jdd|i|S Nr=   r'   r   )
isinstancer2   r'   r3   r   r%   	int_dtypesumr   r   r'   r,   r*   rC   r:   r@   r   r   r   rN      s
   


rN   c                 C  sF   t |}|tjkrt j}|d u ri nd|i}| jdd|i|S rK   )r   r1   r2   r3   r   r%   rM   prodrO   r   r   r   rP      s
   



rP   c                C  s8   t || j}|d u ri nd|i}| jdd|i|}|S rK   )r)   r'   mean)r   r   r'   r,   r*   r:   r@   resultr   r   r   rQ      s   
rQ   c          
      C  6   |}t || j}t| |}|j||d}	t|	|S N)r=   
correction)r)   r'   r   cast_if_neededstd
r   r   r'   r,   ddofr*   r:   in_dtypetensorrR   r   r   r   rW      
   rW   c          
      C  rS   rT   )r)   r'   r   rV   varrX   r   r   r   r]     r\   r]   c                 C  R   |t jkr
t j}|d u r| j}tj| |d\\} }t|| j	}| j
||dS Nr   )r   r'   )r2   r3   r   r%   rM   r'   r   axis_none_flattennormalize_axis_indexr   cumsumr   r   r'   r,   r   r   r   rb        

rb   c                 C  r^   r_   )r2   r3   r   r%   rM   r'   r   r`   ra   r   cumprodrc   r   r   r   re   .  rd   re   weightsc          	      C  s*  |d u rt | |d}tj|  |  |jd}n[| jjs!|  } | j|jkrZ|d u r/td|j	dkr8td|jd | j| krFt
dt|| j	d d |j }|d	|}t| |}t| | ||d}t|||d}|| }|r~t||| j	}|r|j|jkrt||j }||fS |S )
Nr   )r'   z;Axis must be specified when shapes of a and weights differ.r   z81D weights expected when shapes of a and weights differ.r   z5Length of weights not compatible with specified axis.)r   )rQ   r2   	as_tensornumelr'   r#   doubler   	TypeErrorr   
ValueErrorbroadcast_toswapaxesr   result_type_implrN   r   apply_keepdimsclone)	r   r   rf   returnedr*   rR   wsumresult_dtype	numeratorr   r   r   averageB  s>   
rv   linear)interpolationqrx   c          	      C  s   |r	 | j jst j}| |} | j tjkr| tj} |d u r,| 	 } |	 }d}nt
|| j}t
|}t
|| j }tj| |||dS )Nr   )r   rx   )r'   r#   r   r%   r&   r4   r2   float16float32flattenr   r   r   r1   rV   quantile)	r   ry   r   r,   overwrite_inputmethodr*   rx   r'   r   r   r   r}   w  s   


r}   c          	   	   C  s>   t |jtkr|t  j}|d }t| ||||||dS )Ng      Y@)r   r~   r   r*   rx   )r   python_type_for_torchr'   intr4   r%   r&   r}   )	r   ry   r   r,   r~   r   r*   rx   qqr   r   r   
percentile  s   r   c                 C  s   t | td||||dS )Ng      ?)r   r~   r,   r*   )r}   r2   rh   )r   r   r,   r~   r*   r   r   r   median  s   r   r   )r   r   r   r	   r*   r   )NN)r   r   r   r	   r,   r-   r*   r   )NNF)
r   r   r   r	   r,   r-   r*   r   r:   r   )NNFNN)r   r   r   r	   r,   r-   r*   r   rC   r   r:   r   )NNNFNN)r   r   r   r	   r'   rJ   r,   r-   r*   r   rC   r   r:   r   )NNNF)r   r   r   r	   r'   rJ   r,   r-   r*   r   r:   r   )NNNr   F)NNN)r   r   r   r	   r'   rJ   r,   r-   )r   r   rf   r   )NNFrw   F)r   r   ry   r   r   r	   r,   r-   r*   r   rx   r   )NNFF)r   r   r,   r-   r*   r   )+__doc__
__future__r   r    typingr   r   r2    r   r   _normalizationsr   r	   r
   r   r   r   r"   r)   r+   r6   r9   r>   rB   rE   maxrH   minrI   rN   rP   productrQ   rW   r]   rb   re   
cumproductrv   r}   r   r   r   r   r   r   <module>   s   
	8	.	