
    d                        d dl mZ d dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZmZmZmZ ddZddZddZdd	Zdd
ZddZddZddZddZddZddZddZddZddZddZddZ ddZ!dS )    )annotationsN)dtypesnputilsutils)astypecountfillnaisnull	sum_wherewherewhere_method   c                   |t          | dd          rt          j        |j        |                                          |                    |          z
  |z
  dk     }t          j        | j                  \  }}t          ||t          | |                    } nXt          | dd          t          j        vr;|j        |                                z
  }t          ||k     t          j        |           } | S )z>
    xarray version of pandas.core.nanops._maybe_null_out
    NndimFr   dtype)getattrnptakeshapeprodsumr   maybe_promoter   r   r   	NAT_TYPESsizenan)resultaxismask	min_count	null_maskr   
fill_values          2lib/python3.11/site-packages/xarray/core/nanops.py_maybe_null_outr#      s     GFFE::WTZ..3355FRVWW	"0>>zy*fVU.C.CDD	$	'	'v/?	?	?I

*	y9,bff==M    c                    t          ||          }t          ||          } t          t          |           |fd|i|}|dk                                    rt          d          |S )zTIn house nanargmin, nanargmax for object arrays. Always return integer
    type
    r   r   r   zAll-NaN slice encountered)r   r	   r   r   any
ValueError)funcr!   valuer   kwargsvalid_countdatas          r"   _nan_argminmax_objectr.   #   sz     D)))K5*%%E72tU88888D 	q 64555Kr$   c                   t          ||          }t          ||          } t          t          |           |fd|i|}t	          |d          s|dk    r|n|}t          j        |          S t          ||dk              S )z+In house nanmin and nanmax for object arrayr&   r   r   r   )r   r	   r   r   hasattrr   to_0d_object_arrayr   )r)   r!   r*   r   r+   r,   filled_valuer-   s           r"   _nan_minmax_objectr3   2   s    D)))K%,,L72t\?????D4!! .(A--zz4 '---kQ.///r$   c                    | j         j        dk    r)t          dt          j        | j                   | |          S t          j        | |          S )NOminr&   )r   kindr3   r   get_pos_infinityr   nanminar   outs      r"   r9   r9   ?   G    w|s!%)@)I)I1dSSS>!$''''r$   c                    | j         j        dk    r)t          dt          j        | j                   | |          S t          j        | |          S )Nr5   maxr&   )r   r7   r3   r   get_neg_infinityr   nanmaxr:   s      r"   rA   rA   F   r=   r$   c                    | j         j        dk    r,t          j        | j                   }t	          d|| |          S t          j        | |          S )Nr5   argminr&   )r   r7   r   r8   r.   r   	nanargminr;   r   r!   s      r"   rD   rD   M   P    w|s,QW55
$Xz14HHHHQT****r$   c                    | j         j        dk    r,t          j        | j                   }t	          d|| |          S t          j        | |          S )Nr5   argmaxr&   )r   r7   r   r@   r.   r   	nanargmaxrE   s      r"   rI   rI   U   rF   r$   c                r    t          |           }t          | |||          }|t          ||||          S |S )N)r   r   r   )r
   r   r#   r;   r   r   r<   r   r   r   s          r"   nansumrL   ]   sB    !99Dqt5===FvtT9===r$   c                    ddl m}m}m}  |||          } ||d          }|,|j        j        dk    r|j        j        dv r|j        nt          }t          j        |f||d|}	|	|| z
  z  }	 ||	|dk              S )z>In house nanmean. ddof argument will be used in _nanvar methodr   )r   r	   r   r&   Nr5   )cfr   r   )	xarray.core.duck_array_opsr   r	   r   r   r7   floatr   r   )
ddofr*   r   r   r+   r   r	   r   r,   r-   s
             r"   _nanmean_ddof_objectrS   f   s    FFFFFFFFFF%D)))KF5!E })S00${/699u6%:d%::6::D;%&D<kQ.///r$   c                   | j         j        dk    rt          d| ||          S t          j                    5  t          j        ddt                     t          j        | ||          cd d d            S # 1 swxY w Y   d S )Nr5   r   rO   ignorezMean of empty slice)category)	r   r7   rS   warningscatch_warningsfilterwarningsRuntimeWarningr   nanmeanr;   r   r   r<   s       r"   r[   r[   v   s    w|s#Aqt5AAAA		 	"	" 5 5,~	
 	
 	
 	
 z!$e4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   3A77A;>A;c                    |,t          t          j        |                    | j        k    rd }t	          j        | |          S )Nr&   )lenr   
atleast_1dr   r   	nanmedianr:   s      r"   r`   r`      sC    
 Cd 3 344>>QT****r$   Fc                |    t          dd| |dd|}t          | |j                  |z
  dz  }t          ||f||d|S )Nr   T)rR   r*   r   keepdims   )r   rb    )rS   r   r   )r*   r   rR   rb   r+   
value_meansquareds          r"   _nanvar_objectrg      si    % e$ 9? J eZ-..;AGgVD8VVvVVVr$   c                x    | j         j        dk    rt          | |||          S t          j        | |||          S )Nr5   r   r   rR   )r   r7   rg   r   nanvarr;   r   r   r<   rR   s        r"   rj   rj      sA    w|sad%dCCCC>!$e$????r$   c                2    t          j        | |||          S )Nri   )r   nanstdrk   s        r"   rm   rm      s    >!$e$????r$   c                |    t          |           }t          j        | |||          }|t          ||||          S |S )N)r   r   r<   )r
   r   nanprodr#   rK   s          r"   ro   ro      sD    !99D_QTC@@@FvtT9===r$   c                0    t          j        | ||          S NrO   )r   	nancumsumr\   s       r"   rr   rr      s    QT7777r$   c                0    t          j        | ||          S rq   )r   
nancumprodr\   s       r"   rt   rt      s    ad%8888r$   )r   )N)NN)NNNN)NNN)Nr   F)NNNr   )"
__future__r   rW   numpyr   xarray.corer   r   r   rP   r   r   r	   r
   r   r   r   r#   r.   r3   r9   rA   rD   rI   rL   rS   r[   r`   rg   rj   rm   ro   rr   rt   rd   r$   r"   <module>rx      s   " " " " " "      . . . . . . . . . .                        
0 
0 
0 
0( ( ( (( ( ( (+ + + ++ + + +   0 0 0 0 	5 	5 	5 	5+ + + +W W W W@ @ @ @@ @ @ @   8 8 8 89 9 9 9 9 9r$   