U
    Cvf                     @  s   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 d)ddZd*dd	Zd+d
dZd,ddZd-ddZd.ddZd/ddZd0ddZd1ddZd2ddZd3ddZd4ddZd5dd Zd6d!d"Zd7d#d$Zd8d%d&Zd9d'd(Z dS ):    )annotationsN)dtypesnputilsutils)countfillnaisnull	sum_wherewherewhere_method   c                 C  s   |dk	r\t | ddr\t|j| || | dk }t| j\}}t	||| 
|} n2t | ddtjkr|j|  }t	||k tj| } | S )z>
    xarray version of pandas.core.nanops._maybe_null_out
    NndimFr   dtype)getattrnpZtakeshapeprodsumr   Zmaybe_promoter   r
   astypeZ	NAT_TYPESsizenan)resultaxismask	min_countZ	null_maskr   
fill_value r   6/tmp/pip-unpacked-wheel-h316xyqg/xarray/core/nanops.py_maybe_null_out   s    $r   c                 K  sH   t ||d}t||}tt| |fd|i|}|dk rDt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datar   r   r   _nan_argminmax_object"   s    
r'   c                 K  sb   t ||d}t||}tt| |fd|i|}t|dsT|dkrF|n|}t|S t||dkS )z+In house nanmin and nanmax for object arrayr   r   r   r   )r   r   r   r   hasattrr   Zto_0d_object_arrayr   )r"   r   r#   r   r$   r%   Zfilled_valuer&   r   r   r   _nan_minmax_object1   s    


r)   c                 C  s0   | j jdkr"tdt| j | |S tj| |dS )NOminr   )r   kindr)   r   get_pos_infinityr   nanminar   outr   r   r   r.   >   s    r.   c                 C  s0   | j jdkr"tdt| j | |S tj| |dS )Nr*   maxr   )r   r,   r)   r   get_neg_infinityr   nanmaxr/   r   r   r   r4   E   s    r4   c                 C  s6   | j jdkr(t| j }td|| |dS tj| |dS )Nr*   Zargminr   )r   r,   r   r-   r'   r   	nanargminr0   r   r   r   r   r   r5   L   s    r5   c                 C  s6   | j jdkr(t| j }td|| |dS tj| |dS )Nr*   Zargmaxr   )r   r,   r   r3   r'   r   	nanargmaxr6   r   r   r   r7   T   s    r7   c                 C  s6   t | }t| |||d}|d k	r.t||||S |S d S )N)r   r   r
   )r   r	   r   r0   r   r   r1   r   r   r   r   r   r   nansum\   s
    r9   c           
      K  s   ddl m}m}m} |||d}||d}|dkrT|jjdkrT|jjdkrP|jnt}tj|f||d|}	|	||   }	||	|dkS )z>In house nanmean. ddof argument will be used in _nanvar methodr   )r   r   r   r   Nr*   )cfr   r   )	xarray.core.duck_array_opsr   r   r   r   r,   floatr   r   )
ddofr#   r   r   r$   r   r   r   r%   r&   r   r   r   _nanmean_ddof_objecte   s    
r?   c              
   C  s\   | j jdkrtd| ||dS t . tjddtd tj| ||dW  5 Q R  S Q R X d S )Nr*   r   r;   ignorezMean of empty slice)category)	r   r,   r?   warningscatch_warningsfilterwarningsRuntimeWarningr   nanmeanr0   r   r   r1   r   r   r   rF   u   s    
  rF   c                 C  s.   |d k	r t t|| jkr d }tj| |dS )Nr   )lenr   Z
atleast_1dr   r   	nanmedianr/   r   r   r   rI      s    rI   Fc                 K  sD   t f d| |dd|}| |j| d }t ||f||d|S )Nr   T)r>   r#   r   keepdims   )r   rJ   )r?   r   r   )r#   r   r>   rJ   r$   Z
value_meanZsquaredr   r   r   _nanvar_object   s       rL   c                 C  s.   | j jdkrt| |||dS tj| |||dS )Nr*   r   r   r>   )r   r,   rL   r   nanvarr0   r   r   r1   r>   r   r   r   rN      s    rN   c                 C  s   t j| |||dS )NrM   )r   nanstdrO   r   r   r   rP      s    rP   c                 C  s8   t | }tj| |||d}|d k	r0t||||S |S d S )N)r   r   r1   )r   r   nanprodr   r8   r   r   r   rQ      s
    rQ   c                 C  s   t j| ||dS Nr;   )r   	nancumsumrG   r   r   r   rS      s    rS   c                 C  s   t j| ||dS rR   )r   
nancumprodrG   r   r   r   rT      s    rT   )r   )N)N)NN)NN)N)N)NNNN)NN)NNN)NN)Nr   F)NNNr   )NNNr   )NNNN)NNN)NNN)!
__future__r   rB   Znumpyr   Zxarray.corer   r   r   r<   r   r   r   r	   r
   r   r   r'   r)   r.   r4   r5   r7   r9   r?   rF   rI   rL   rN   rP   rQ   rS   rT   r   r   r   r   <module>   s*    








	







	
