U
    /e                     @   sl  d dl mZ d dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ eejjd
d Zeejd>ddZdd ZeejjZeejjZeejjZeejjZeejjZeejdd Z eejdd Z!eejdd Z"eejdd Z#eejdd Z$eejd?ddZ%eejd@dd Z&eejd!d" Z'eejd#d$ Z(ejj)dfd%d&Z*eejejj)dfd'd(Zd)d* Z+eejd+d, Z,eejdAd.d/Z-dBd0d1Z.eejdCd2d3Z/eejj0d4d5 Z1eejj0d6d7 Z2eejj0d8d9 Z3eejj0d:d; Zeejj0dDd<d=Z4dS )E    wrapsN)chunk)
asanyarray	blockwiseelemwise
map_blocks)	reduction_average)nonzero)normalize_token)derived_fromc                 C   s(   t | j}t | j}t | j}|||fS N)r   datamask
fill_value)xr   r   r    r   1/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/ma.pynormalize_masked_array   s    


r   c                 C   s   t | } | jtjj|dS N)r   )r   r   npmafilledar   r   r   r   r      s    r   c                    s   t   fdd}|S )Nc              	      sf   t | } t |}tt| jd d d }tt|jd d d }t||td}t || |||| jdS )N)keydtype)r   tuplerangendimmaxlenr   r    )r   valueaindsZvindsZoindsfr   r   _   s    z_wrap_masked.<locals>._r   )r)   r*   r   r(   r   _wrap_masked   s    r+   c              	   C   sF   t | } t|ddrtdtt| j}ttjj	|| ||d| j
dS )Nshaper   z1da.ma.masked_equal doesn't support array `value`sr   )r   getattr
ValueErrorr!   r"   r#   r   r   r   masked_equalr    )r   r&   indsr   r   r   r/   0   s
    r/   c                 C   s   t | tjjS r   )r   r   r   r   masked_invalidr   r   r   r   r1   9   s    r1   c                 C   s   t | } | tjj||S r   )r   r   r   r   masked_insider   Zv1Zv2r   r   r   r3   >   s    r3   c                 C   s   t | } | tjj||S r   )r   r   r   r   masked_outsider4   r   r   r   r5   D   s    r5   c              	   C   st   t | dd}|r,||jkr,td||jf t| } t|}tt|j}tt| j}ttj	j
|| ||||jdS )Nr,   r   zFInconsistant shape between the condition and the input (got %s and %s)r   )r-   r,   
IndexErrorr   r!   r"   r#   r   r   r   masked_wherer    )	conditionr   Zcshaper'   Zcindsr   r   r   r7   J   s(          r7   h㈵>:0yE>Tc                 C   s4   t | } t|ddrtdttjj| ||||dS )Nr,   r   z2da.ma.masked_values doesn't support array `value`s)rtolatolshrink)r   r-   r.   r   r   r   masked_values)r   r&   r;   r<   r=   r   r   r   r>   [   s         r>   c                 C   s   t | } | jtjj|dS r   )r   r   r   r   fix_invalidr   r   r   r   r?   e   s    r?   c                 C   s   t | } | tjjS r   )r   r   r   r   getdatar2   r   r   r   r@   k   s    r@   c                 C   s   t | } | tjjS r   )r   r   r   r   getmaskarrayr2   r   r   r   rA   q   s    rA   c                 K   s(   d|kr|d= t jj| f||d|S )Nchunks)r   r    )r   r   masked_array)r   r   masked_dtypekwargsr   r   r   _masked_arrayw   s    rF   c                 K   s   t | } tt| j}|| |g}t|ddr4td||d< |tjjk	rt |}|j	dkrl|
d| j }n,| j|jkrtjdt| jt|jf |||g d|kr|d |d	< n
| j|d< ttf||S )
Nr,   r   z#non-scalar fill_value not supportedr      )rG   zEMask and data not compatible: data shape is %s, and mask shape is %s.r    rD   )r   r!   r"   r#   r-   r.   r   r   nomasksizeZreshaper,   Z	MaskErrorreprextendr    r   rF   )r   r   r   rE   r0   Zargindsr   r   r   rC   }   s*    


rC   c                 C   s*   t | tjjr&|  } tjj| |d | S r   )
isinstancer   r   rC   copyset_fill_value)r   r   r   r   r   _set_fill_value   s    rO   c                 C   sN   t | } t|ddrtdtjj|| j}| t	|}|j
| _
|j| _d S )Nr,   r   z3da.ma.set_fill_value doesn't support array `value`s)r   r-   r.   r   r   coreZ_check_fill_valuer    r   rO   Zdaskname_name)r   r   resr   r   r   rN      s    rN   Fc                 C   s   t | |||d|dS )NT)Z	is_maskedkeepdimsr
   )r   axisweightsZreturnedrT   r   r   r   average   s    rW   c                 C   s   t jj| ||dS )N)rU   rT   )r   r   count)r   rU   rT   r   r   r   _chunk_count   s    rY   c              
   C   s   t | ttj||tj|d dS )N)rU   rT   r    split_everyout)r	   rY   r   sumr   Zintp)r   rU   rT   rZ   r   r   r   rX      s    rX   c                 K   s   t | } | jtjjjf|S r   )r   r   r   r   rP   	ones_liker   rE   r   r   r   r]      s    r]   c                 K   s   t | } | jtjjjf|S r   )r   r   r   r   rP   
zeros_liker^   r   r   r   r_      s    r_   c                 K   s   t | } | jtjjjf|S r   )r   r   r   r   rP   
empty_liker^   r   r   r   r`      s    r`   c                 C   s   t t| t|   S r   )_nonzeror@   rA   r2   r   r   r   r      s    r   c                 C   sF   |d k|d kkrt d|d kr0|d kr0t| S ttjj| ||S d S )Nz1either both or neither of x and y should be given)r.   r   r   r   r   where)r8   r   yr   r   r   rb      s
    rb   )N)r9   r:   T)N)NNFF)NN)NFN)NN)5	functoolsr   Znumpyr   Z
dask.arrayr   Zdask.array.corer   r   r   r   Zdask.array.reductionsr	   Zdask.array.routinesr   r   ra   Z	dask.baser   Z
dask.utilsr   registerr   rC   r   r   r+   Zmasked_greaterZmasked_greater_equalZmasked_lessZmasked_less_equalZmasked_not_equalr/   r1   r3   r5   r7   r>   r?   r@   rA   rH   rF   rO   rN   rW   rY   rX   rP   r]   r_   r`   rb   r   r   r   r   <module>   sr   





	













