
    3jC.                    F   S r SSKJr  SSKrSSKJr  SSKrSSKJrJ	r	  \(       a  SSK
JrJrJrJrJrJr  S rS	 r\S!S
S.S"S jjj5       r\  S#S
S.       S$S jjj5       r\  S#S
S.       S$S jjj5       r\   S%SS.         S&S jjj5       r\   S%SS.         S&S jjj5       r\     S'           S(S jj5       r\r\     S'           S(S jj5       r\r\   S%       S$S jj5       r\      S)             S*S jj5       r\      S)             S*S jj5       r\r\    S+SS.           S,S jjj5       r \     S-SS.           S,S jjj5       r!\     S-SS.           S,S jjj5       r"   S.       S/S jjr#   S.       S/S jjr$\$r%   S%S
S.   S0S jjjr&     S1SS.           S2S jjjr'     S1SS.           S2S jjjr(    S3     S4S  jjr)g)5zImplementation 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)TYPE_CHECKING   )_dtypes_impl_util)	ArrayLikeAxisLike	DTypeLikeKeepDimsNotImplementedTypeOutArrayc                J   ^  [         R                  " T 5      SU 4S jj5       nU$ )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
c                   > Ub   [         R                  " XR                  5      nUS:X  a2  [         R                  " U R                  SS9nU R                  U5      n SnT" X/UQ70 UD6$ )N r   axisr   )r   normalize_axis_tuplendimexpand_shapeshapereshape)ar   argskwdsnewshapefuncs        W/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_numpy/_reductions_impl.pywrapped"_deco_axis_expand.<locals>.wrapped$   sd    --dFF;D2: ))!'':H		(#ADA+d+d++    N)	functoolswraps)r   r   s   ` r   _deco_axis_expandr%      s'     __T, , Nr!   c                    U c  Un U R                   (       d0  U R                  (       d  [        R                  " 5       R                  $ U $ )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
)is_floating_point
is_complexr   default_dtypesfloat_dtype)dtypeother_dtypes     r   _atleast_floatr-   5   s9     }##u'7'7**,888Lr!   F)keepdimsc               $    U R                  U5      $ r"   )count_nonzero)r   r   r.   s      r   r0   r0   C   s    ??4  r!   c               0   U R                  5       (       a  [        SU R                   S35      e[        R                  " U5      nU R                  [
        R                  :X  a  U R                  [
        R                  5      n [
        R                  " X5      $ )Nzargmax with dtype=.)
r(   NotImplementedErrorr+   r   allow_only_single_axistorchbooltouint8argmaxr   r   outr.   s       r   r9   r9   H   i     	||~~!$6qwwiq"ABB''-Dww%**DD<<  r!   c               0   U R                  5       (       a  [        SU R                   S35      e[        R                  " U5      nU R                  [
        R                  :X  a  U R                  [
        R                  5      n [
        R                  " X5      $ )Nzargmin with dtype=r2   )
r(   r3   r+   r   r4   r5   r6   r7   r8   argminr:   s       r   r>   r>   \   r<   r!   )wherec               n    [         R                  " U5      nUc  0 OSU0n[        R                  " U 40 UD6$ Ndim)r   r4   r5   anyr   r   r;   r.   r?   axis_kws         r   rC   rC   p   7     ''-DLbudmG99Q"'""r!   c               n    [         R                  " U5      nUc  0 OSU0n[        R                  " U 40 UD6$ rA   )r   r4   r5   allrD   s         r   rH   rH   ~   rF   r!   c                ~    U R                  5       (       a  [        SU R                   35      eU R                  U5      $ )Nzamax with dtype=)r(   r3   r+   amaxr   r   r;   r.   initialr?   s         r   rJ   rJ      4     	||~~!$4QWWI">??66$<r!   c                ~    U R                  5       (       a  [        SU R                   35      eU R                  U5      $ )Nzamin with dtype=)r(   r3   r+   aminrK   s         r   rO   rO      rM   r!   c                H    U R                  U5      U R                  U5      -
  $ r"   )rJ   rO   r:   s       r   ptprQ      s     66$<!&&,&&r!   c                (   Ub@  [        U[        R                  5      (       d!  [        S[	        U5      R
                   35      eU[        R                  :X  a  [        R                  " 5       R                  nUc  0 OSU0nU R                  " SSU0UD6$ )Nz)dtype must be None or a torch.dtype, got rB   r+   r   )
isinstancer5   r+   AssertionErrortype__name__r6   r   r)   	int_dtypesumr   r   r+   r;   r.   rL   r?   rE   s           r   rX   rX      s     E5;;!?!?7U8L8L7MN
 	
 

++-77LbudmG55(u(((r!   c                    [         R                  " U5      nU[        R                  :X  a  [        R
                  " 5       R                  nUc  0 OSU0nU R                  " SSU0UD6$ NrB   r+   r   )r   r4   r5   r6   r   r)   rW   prodrY   s           r   r\   r\      sZ     ''-D

++-77LbudmG66))))r!   c               j    [        X R                  5      nUc  0 OSU0nU R                  " SSU0UD6nU$ r[   )r-   r+   mean)r   r   r+   r;   r.   r?   rE   results           r   r^   r^      s<     5''*ELbudmGVV+%+7+FMr!   c                   Un[        X R                  5      n[        R                  " X5      nUR	                  XS9n	[        R                  " X5      $ N)rB   
correction)r-   r+   r   cast_if_neededstd
r   r   r+   r;   ddofr.   r?   in_dtypetensorr_   s
             r   rd   rd      H     H5''*E!!!+FZZDZ2F11r!   c                   Un[        X R                  5      n[        R                  " X5      nUR	                  XS9n	[        R                  " X5      $ ra   )r-   r+   r   rc   varre   s
             r   rk   rk   
  ri   r!   c                   U[         R                  :X  a  [        R                  " 5       R                  nUc  U R
                  n[        R                  " XS9u  u  p[        R                  " XR                  5      nU R                  XS9$ Nr   )r   r+   )r5   r6   r   r)   rW   r+   r   axis_none_flattennormalize_axis_indexr   cumsumr   r   r+   r;   s       r   rp   rp   !  sk     

++-77}((6JDQ%%dFF3D888++r!   c                   U[         R                  :X  a  [        R                  " 5       R                  nUc  U R
                  n[        R                  " XS9u  u  p[        R                  " XR                  5      nU R                  XS9$ rm   )r5   r6   r   r)   rW   r+   r   rn   ro   r   cumprodrq   s       r   rs   rs   2  sk     

++-77}((6JDQ%%dFF3D99$9,,r!   c                  UcI  [        XS9n[        R                  " U R                  5       UR                  5       -  UR                  S9nGOU R                  R
                  (       d  U R                  5       n U R                  UR                  :w  a  Uc  [        S5      eUR                  S:w  a  [        S5      eUR                  S   U R                  U   :w  a  [        S5      e[        R                  " X R                  S-
  S-  UR                  -   5      nUR                  S	U5      n[        R                  " X5      n[        X-  XS9n[        X!US9nX-  nU(       a!  [         R"                  " XQU R                  5      nU(       aK  UR                  UR                  :w  a.  [        R                  " XeR                  5      R%                  5       nXV4$ U$ )
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   )r^   r5   	as_tensornumelr+   r'   doubler   	TypeErrorr   
ValueErrorbroadcast_toswapaxesr   result_type_implrX   r   apply_keepdimsclone)	r   r   weightsreturnedr.   r_   wsumresult_dtype	numerators	            r   averager   F  s    a#qwwy6<<>9Nww((
A 77gmm#|Q  ||q N  }}Q1774=0 K 
 ((66A:2E2UVG&&r40G $44Q@T>	75! %%fAFF;::%%%dLL9??AD|r!   )interpolationc               D   U(       a   U R                   R                  (       d0  [        R                  " 5       R                  nU R                  U5      n U R                   [        R                  :X  a  U R                  [        R                  5      n Uc#  U R                  5       n UR                  5       nSnO [        R                  " X R                  5      n[        R                  " U5      n[        R                  " XR                   5      n[        R                  " XX%S9$ )Nr   )r   r   )r+   r'   r   r)   r*   r7   r5   float16float32flattenr   r   r   r4   rc   quantile)	r   qr   r;   overwrite_inputmethodr.   r   r+   s	            r   r   r   {  s     
 	77$$++-99DDK 	ww%--DD|IIKIIK))$7
 ''-DQ(A>>!T@@r!   c          
         [         R                  " UR                  5      [        L a.  UR	                  [         R
                  " 5       R                  5      nUS-  n[        U UUUUUUS9$ )Ng      Y@)r   r   r   r.   r   )r   python_type_for_torchr+   intr7   r)   r*   r   )	r   r   r   r;   r   r   r.   r   qqs	            r   
percentiler     sc     ))!''2c9DD,,.::;	
UB	
'# r!   c           	     F    [        U [        R                  " S5      UUUUS9$ )Ng      ?)r   r   r;   r.   )r   r5   rv   )r   r   r;   r   r.   s        r   medianr     s,     	' r!   r"   )r   r   r   r	   r.   r   )NN)r   r   r   r	   r;   OutArray | Noner.   r   )NNF)
r   r   r   r	   r;   r   r.   r   r?   r   )NNFNN)r   r   r   r	   r;   r   r.   r   rL   r   r?   r   )NNNFNN)r   r   r   r	   r+   DTypeLike | Noner;   r   r.   r   rL   r   r?   r   )NNNF)r   r   r   r	   r+   r   r;   r   r.   r   r?   r   )NNNr   F)NNN)r   r   r   r	   r+   r   r;   r   )r   r   r   r   )NNFlinearF)r   r   r   r   r   r	   r;   r   r.   r   r   r   )NNFF)r   r   r;   r   r.   r   )*__doc__
__future__r   r#   typingr   r5    r   r   _normalizationsr   r	   r
   r   r   r   r%   r-   r0   r9   r>   rC   rH   rJ   maxrO   minrQ   rX   r\   productr^   rd   rk   rp   rs   
cumproductr   r   r   r   r   r!   r   <module>r      s-   #     !  . !u ! !  !
 !!
! 
!
 ! !&  !
 !!
! 
!
 ! !&  	
# !%
#
#

# 

# 	
# 
# 
#  	
# !%
#
#

# 

# 	
# 
# 
#  "& $
 
 	
       "& $
 
 	
       	''
' 
' 	' '  ""& $))
) ) 
	)
 )  ) ) )*  ""& $**
* * 
	*
 *  * * *$   " !%
  
	
   "  "	
2 !%22
2 2 
	2 2 2 2"  "	
2 !%22
2 2 
	2 2 2 20 "	,,
, , 
	,& "	--
- - 
	-" 

 
	1 11 1p (A )-(A(A(A (A 
	(A (A &(A\  )-  
	  &: 
 

 r!   