U
    O8c                     @   s`  d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZ edejddejdgd	d
ejdddgejejejdejdgdejejddejggZeddddged	d
dddgeddgedddggZeddddddgd	d
ddddgddddddgddddddggZeddddddgd	d
ddddgddddddgddddddggZG dd dZG dd dZG dd dZededdddd gd!Ze D ]Zejd"d# qejd$ej d% ej d&  d' ejjd(e e! d)G d*d+ d+Z"G d,d- d-Z#G d.d/ d/e#Z$G d0d1 d1e#Z%G d2d3 d3e#Z&d4Z'e(ej d& Z)e)d5d6 e'D 7 Z)G d7d8 d8Z*G d9d: d:Z+G d;d< d<Z,ejd=eejd>ejej-ged"d?d"d?gfejd@ddAdBgej.dCd?fed"d?d"d?gd?fejejd>gejej-ggej/dCed"d?gd"d?ggfgdDdE Z0dFdG Z1dS )H    N)normalize_axis_tuple)	_nan_mask_replace_nan)assert_assert_equalassert_almost_equalassert_raisesassert_array_equalsuppress_warningsgs?g&S:?g?gʡE?g	?ggzG?gL
F%u?g6<R!?g[B>٬?g:MgS㥛?gz):?g	h"?      ?        c                   @   s   e Zd Zejejejejejej	ej
ejejejejejejejejejejejejejejejejejejejejejiZ dd e D Z!e"dddZ#e$j%j&de ' e!ddd	 Z(d
d Z)dS )TestSignatureMatchc                 C   s   g | ]
}|j qS  __name__).0kr   r   E/tmp/pip-unpacked-wheel-fd_gsd75/numpy/lib/tests/test_nanfunctions.py
<listcomp>9   s     zTestSignatureMatch.<listcomp>...c                 C   sT   g }t | }|j D ]0}|jt jjkr6|| q||j|d qt 	|S )z?Construct a signature and replace all default parameter-values.)default)
inspect	signature
parametersvaluesr   	Parameteremptyappendreplace	Signature)funcr   Zprm_listr   Zprmr   r   r   get_signature;   s    
z TestSignatureMatch.get_signatureznan_func,funcidsc                 C   s&   |  |}|  |}tj|| d S N)r!   nptestingr   )selfZnan_funcr    r   Znan_signaturer   r   r   test_signature_matchG   s    

z'TestSignatureMatch.test_signature_matchc                 C   s"   t jt| jtt jjj dS )z4Validate that all nan functions are actually tested.N)r%   r&   r   setIDSlibZnanfunctions__all__r'   r   r   r   test_exhaustivenessP   s     z&TestSignatureMatch.test_exhaustivenessN)r   )*r   
__module____qualname__r%   nanminZaminnanmaxZamax	nanargminargmin	nanargmaxargmaxnansumsumnanprodprod	nancumsumcumsum
nancumprodcumprodnanmeanmean	nanmedianmediannanpercentile
percentilenanquantilequantilenanvarvarnanstdstdZNANFUNCSr*   staticmethodr!   pytestmarkparametrizeitemsr(   r.   r   r   r   r   r   (   sF                 
r   c                	   @   s   e Zd ZejejgZejejgZ	dd Z
dd Zdd Zdd Zd	d
 Zejddddgejdejd ejjdeejedejgddgddd Zdd Zdd Zdd Zdd Zejdejd d d! Zejdejd d"d# ZdS )$TestNanFunctions_MinMaxc                 C   s*   t  }| jD ]}|| t|t  qd S r$   _ndatcopynanfuncsr   r'   ndatfr   r   r   test_mutation\   s    
z%TestNanFunctions_MinMax.test_mutationc                 C   s\   t d}t| j| jD ]>\}}dD ]0}|||dd}|||dd}t|j|jk q$qd S N   Nr      Taxiskeepdimsr%   eyeziprT   stdfuncsr   ndimr'   matnfrfr^   tgtresr   r   r   test_keepdimsc   s    
z%TestNanFunctions_MinMax.test_keepdimsc                 C   s^   t d}t| j| jD ]@\}}t d}||dd}||d|d}t|| t|| qd S NrZ   r\   r^   r^   outr%   ra   rb   rT   rc   zerosr   r'   rf   rg   rh   resoutri   rj   r   r   r   test_outk   s    


z TestNanFunctions_MinMax.test_outc                 C   s   d}t | j| jD ]x\}}|D ]j}tjd|d}||ddjj}||ddjj}t||k ||d djj}||d djj}t||k qqd S )NefdgFDGrZ   dtyper\   rm   rb   rT   rc   r%   ra   rw   typer   r'   codesrg   rh   crf   ri   rj   r   r   r   test_dtype_from_inputt   s    z-TestNanFunctions_MinMax.test_dtype_from_inputc                    sD   t | j| jD ]0\}  fddtD }|tdd}t|| qd S )Nc                    s   g | ]} |qS r   r   r   drh   r   r   r      s     z>TestNanFunctions_MinMax.test_result_values.<locals>.<listcomp>r\   rm   rb   rT   rc   _rdatrR   r   r'   rg   ri   rj   r   r   r   test_result_values   s    z*TestNanFunctions_MinMax.test_result_valuesr^   Nr   r\   rw   AllFloatarrayrZ   rZ   0d2dr"   c              
   C   s   |d k	r|j dkrtd ||}d}| jD ]L}tjt|d |||d}W 5 Q R X t|	 slt
|j|jks0t
q0d S Nr   *`axis != None` not supported for 0d arraysAll-NaN slice encounteredmatchrm   )rd   rL   skipastyperT   warnsRuntimeWarningr%   isnanallAssertionErrorrw   r'   r^   rw   r   r   r    ro   r   r   r   test_allnans   s    


z$TestNanFunctions_MinMax.test_allnansc                 C   sj   t jt}|j }t jfD ]F}||dd}|tdd}t|| t|j| tt 	|
   qd S )Nr\   rm   )r%   maZfix_invalidrR   Z_maskrS   r1   r   r   isinfany)r'   rf   ZmskrW   rj   ri   r   r   r   test_masked   s    

z#TestNanFunctions_MinMax.test_maskedc                 C   s    | j D ]}t|ddk qd S Nr   rT   r   r'   rW   r   r   r   test_scalar   s    
z#TestNanFunctions_MinMax.test_scalarc              
   C   s   G dd dt j}t d|}| jD ]j}||dd}tt|| t|jdk ||dd}tt|| t|jdk ||}t|jdk q(t j|d< | jD ]T}t	j
d	d
P}t	d ||dd}tt|| tt t |  tt|dk W 5 Q R X t	j
d	d
}t	d ||dd}tt|| tt |d opt |d  opt |d   tt|dkd tt|d jt W 5 Q R X t	j
d	d
D}t	d ||}t|jdk t|t jk tt|dk W 5 Q R X qd S )Nc                   @   s   e Zd ZdS )z8TestNanFunctions_MinMax.test_subclass.<locals>.MyNDArrayNr   r/   r0   r   r   r   r   	MyNDArray   s   r   rZ   r   rm   rZ   r\   r   Trecordalways   no warning raised)r%   ndarrayra   viewrT   r   
isinstanceshapenanwarningscatch_warningssimplefilterr   r   len
issubclasscategoryr   )r'   r   minerW   rj   wr   r   r   test_subclass   sD    



$
z%TestNanFunctions_MinMax.test_subclassc              	   C   s   t jddgt jdgt jt jggtd}tt |d tt j|ddddg tjddV}td	 tt	t j|d
dddt jg t
t|d
kd t
t|d jt W 5 Q R X d S )Nr   g       @      @rv   r   rm   Tr   r   r\   r   )r%   r   r   objectr   r1   r   r   r   listr   r   r   r   r   )r'   arrr   r   r   r   test_object_array   s    &
 z)TestNanFunctions_MinMax.test_object_arrayc                 C   s   G dd dt j}t d|}t j|d d< | jD ]h}|t jkrHdnd}|||d}|j|ksft||ksrt||	||d}|j|kst||ks6tq6d S )Nc                   @   s   e Zd ZdS )z7TestNanFunctions_MinMax.test_initial.<locals>.MyNDArrayNr   r   r   r   r   r      s   r   	      d   r   initial)
r%   r   aranger   r   rT   r2   rw   r   r   )r'   rw   r   arrW   r   ret1ret2r   r   r   test_initial   s    
z$TestNanFunctions_MinMax.test_initialc           	      C   s   G dd dt j}t ddd|}t j|dd d f< t j|t jd}d|d d df< | jD ]l}|t j	krtdnd	}|||d
d}|j
|kst||kst||||d
d}|j
|kst||ksbtqbd S )Nc                   @   s   e Zd ZdS )z5TestNanFunctions_MinMax.test_where.<locals>.MyNDArrayNr   r   r   r   r   r      s   r   r   rZ   r   rv   F      r   wherer   )r%   r   r   reshaper   r   	ones_likebool_rT   r1   rw   r   r   )	r'   rw   r   r   r   rW   	referencer   r   r   r   r   
test_where   s    
z"TestNanFunctions_MinMax.test_where)r   r/   r0   r%   r1   r2   rT   minmaxrc   rX   rk   rt   r}   r   rL   rM   rN   	typecodesr   r   fullr   r   r   r   r   r   r   r   r   r   r   rP   W   s0   	

+
rP   c                	   @   s   e Zd ZejejgZdd Zdd Ze	j
ddddge	j
d	ejd
 e	j
jdeejedejgddgddd Zdd Zdd Zdd Ze	j
d	ejd
 dd Ze	j
d	ejd
 dd ZdS )TestNanFunctions_ArgminArgmaxc                 C   s*   t  }| jD ]}|| t|t  qd S r$   rQ   rU   r   r   r   rX     s    
z+TestNanFunctions_ArgminArgmax.test_mutationc                 C   s   t | jtjtjgD ]\}}tD ]t}t d}|td ||}|| }t	t
|  t	|||   t	t||d |    W 5 Q R X q qd S )Nzinvalid value encountered in)rb   rT   r%   ZgreaterZlessrR   r
   filterr   r   r   r   equal)r'   rW   Zfcmprowsupindvalr   r   r   r     s    z0TestNanFunctions_ArgminArgmax.test_result_valuesr^   Nr   r\   rw   r   r   r   r   r   r"   c              
   C   s\   |d k	r|j dkrtd ||}| jD ]*}tjtdd |||d W 5 Q R X q,d S r   )rd   rL   r   r   rT   Zraises
ValueError)r'   r^   rw   r   r    r   r   r   r     s    


z*TestNanFunctions_ArgminArgmax.test_allnansc                 C   sZ   t d}| jD ]D}dD ]}tt|||d qdD ] }|||d}t|t d q2qd S )Nr   rZ   r   Nrm   r\   r   )r%   rq   rT   r   r   r   )r'   rf   rW   r^   rj   r   r   r   
test_empty.  s    

z(TestNanFunctions_ArgminArgmax.test_emptyc                 C   s    | j D ]}t|ddk qd S r   r   r   r   r   r   r   7  s    
z)TestNanFunctions_ArgminArgmax.test_scalarc                 C   s   G dd dt j}t d|}| jD ]j}||dd}tt|| t|jdk ||dd}tt|| t|jdk ||}t|jdk q(d S )	Nc                   @   s   e Zd ZdS )z>TestNanFunctions_ArgminArgmax.test_subclass.<locals>.MyNDArrayNr   r   r   r   r   r   <  s   r   rZ   r   rm   r   r\   r   )r%   r   ra   r   rT   r   r   r   )r'   r   r   rW   rj   r   r   r   r   ;  s    
z+TestNanFunctions_ArgminArgmax.test_subclassc                 C   sh   t d|}t j|d d< | jD ]>}|t jkr6dnd}||dd}|j|jksVt||ks$tq$d S )Nr   r   r   T)r_   )r%   r   r   r   rT   r3   rd   r   r'   rw   r   rW   r   retr   r   r   rk   L  s    
z+TestNanFunctions_ArgminArgmax.test_keepdimsc                 C   st   t d|}t j|d d< | jD ]J}t jdt jd}|t jkrFdnd}|||d}||ksbt||ks$tq$d S )Nr   r   r   rv   r   ro   )	r%   r   r   r   rT   rq   intpr3   r   )r'   rw   r   rW   ro   r   r   r   r   r   rt   W  s    
z&TestNanFunctions_ArgminArgmax.test_out)r   r/   r0   r%   r3   r5   rT   rX   r   rL   rM   rN   r   r   r   r   r   r   r   r   rk   rt   r   r   r   r   r     s&   
		

r   r      '   ]   W   .   )r   Z1dF)writerw   Z
AllIntegerr   Orf   r"   c                   @   s  e Zd Zejejejejejej	ej
ejejejejejejejejejejejejejejejejejiZdd eD Zejj de! edej"dddd Z#ejj dej$ej%fej&ej'fgd	d
gddd Z(ejj dejejfejejfgddgddd Z)dS )TestNanFunctions_NumberTypesc                 C   s   g | ]
}|j qS r   r   r   ir   r   r   r     s     z'TestNanFunctions_NumberTypes.<listcomp>znanfunc,funcr"   ignore)Zoverc                 C   sV   | |}||}||}t|| |dkrBt|t|ksRtn|j|jksRtd S )Nr   r   r   ry   r   rw   r'   rf   rw   Znanfuncr    ri   ro   r   r   r   test_nanfunc  s    

z)TestNanFunctions_NumberTypes.test_nanfuncrE   rC   c                 C   s^   | |}||dd}||dd}t|| |dkrJt|t|ksZtn|j|jksZtd S )Nr\   qr   r   r   r   r   r   test_nanfunc_q  s    

z+TestNanFunctions_NumberTypes.test_nanfunc_qrG   rI   c                 C   s^   | |}||dd}||dd}t|| |dkrJt|t|ksZtn|j|jksZtd S )N      ?ddofr   r   r   r   r   r   test_nanfunc_ddof  s    

z.TestNanFunctions_NumberTypes.test_nanfunc_ddofN)*r   r/   r0   r%   r1   r   r2   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rG   rH   rI   rJ   rT   Znanfunc_idsrL   rM   rN   rO   Zerrstater   rE   rF   rC   rD   r   r   r   r   r   r   r   m  sR               

r   c                   @   sT   e Z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 )SharedNanFunctionsTestsMixinc                 C   s*   t  }| jD ]}|| t|t  qd S r$   rQ   rU   r   r   r   rX     s    
z*SharedNanFunctionsTestsMixin.test_mutationc                 C   s\   t d}t| j| jD ]>\}}dD ]0}|||dd}|||dd}t|j|jk q$qd S rY   r`   re   r   r   r   rk     s    
z*SharedNanFunctionsTestsMixin.test_keepdimsc                 C   s^   t d}t| j| jD ]@\}}t d}||dd}||d|d}t|| t|| qd S rl   rp   rr   r   r   r   rt     s    


z%SharedNanFunctionsTestsMixin.test_outc           	      C   s   t d}d}t| j| jD ]\}}|D ]}t }|t jt jhkrX|dkrX|t j	 ||t 
|ddj
j}||t 
|ddj
j}t||k ||t 
|d dj
j}||t 
|d dj
j}t||k W 5 Q R X q(qd S NrZ   ru   ZFDGr\   )rw   r^   r%   ra   rb   rT   rc   r
   rI   rG   r   ComplexWarningrw   ry   r   	r'   rf   r{   rg   rh   r|   r   ri   rj   r   r   r   test_dtype_from_dtype  s    
z2SharedNanFunctionsTestsMixin.test_dtype_from_dtypec           	      C   s   t d}d}t| j| jD ]\}}|D ]}t }|t jt jhkrX|dkrX|t j	 |||ddj
j}|||ddj
j}t||k |||d dj
j}|||d dj
j}t||k W 5 Q R X q(qd S r   r   r   r   r   r   test_dtype_from_char  s    
z1SharedNanFunctionsTestsMixin.test_dtype_from_charc                 C   s   d}t | j| jD ]\}}|D ]t}tjd|d}||ddjj}||ddjj}t||kd||f  ||d djj}||d djj}t||k qqd S )Nru   rZ   rv   r\   rm   zres %s, tgt %srx   rz   r   r   r   r}     s    z2SharedNanFunctionsTestsMixin.test_dtype_from_inputc                    sD   t | j| jD ]0\}  fddtD }|tdd}t|| qd S )Nc                    s   g | ]} |qS r   r   r~   r   r   r   r     s     zCSharedNanFunctionsTestsMixin.test_result_values.<locals>.<listcomp>r\   rm   r   r   r   r   r   r     s    z/SharedNanFunctionsTestsMixin.test_result_valuesc                 C   s    | j D ]}t|ddk qd S r   r   r   r   r   r   r     s    
z(SharedNanFunctionsTestsMixin.test_scalarc                 C   s   G dd dt j}t d}||}| jD ]}||ddj}||dd}tt|| t|j|k ||ddj}||dd}tt|| t|j|k ||j}||}tt|| t|j|k q,d S )Nc                   @   s   e Zd ZdS )z=SharedNanFunctionsTestsMixin.test_subclass.<locals>.MyNDArrayNr   r   r   r   r   r     s   r   rZ   r   rm   r\   )r%   r   ra   r   rT   r   r   r   )r'   r   r   r   rW   Zexpected_shaperj   r   r   r   r     s     



z*SharedNanFunctionsTestsMixin.test_subclassN)r   r/   r0   rX   rk   rt   r   r   r}   r   r   r   r   r   r   r   r     s   	r   c                	   @   s   e Zd ZejejgZejejgZ	e
jddddge
jdejd e
jjdeejedejgd	d
gddd Zdd Ze
jdejd dd Ze
jdejd dd ZdS )TestNanFunctions_SumProdr^   Nr   r\   rw   r   r   r   r   r   r"   c                 C   sr   |d k	r|j dkrtd ||}t| jddgD ]6\}}|||d}t||ks\t|j	|j	ks6tq6d S )Nr   r   r\   rm   
rd   rL   r   r   rb   rT   r%   r   r   rw   r'   r^   rw   r   r    identityro   r   r   r   r     s    

z%TestNanFunctions_SumProd.test_allnansc                 C   s   t tjtjgddgD ]f\}}td}|gd }||dd}t|| g }||dd}t|| |}||d d}t|| qd S )Nr   r\   r   rZ   rm   )rb   r%   r7   r9   rq   r   r'   rW   Z	tgt_valuerf   ri   rj   r   r   r   r   /  s    



z#TestNanFunctions_SumProd.test_emptyc                 C   sf   t d|}t j|d d< | jD ]<}|t jkr6dnd}||dd}|j|ksTt||ks$tq$d S )Nr   r      i   r   r   )r%   r   r   r   rT   r7   rw   r   r   r   r   r   r   <  s    
z%TestNanFunctions_SumProd.test_initialc                 C   s   t ddd|}t j|dd d f< t j|t jd}d|d d df< | jD ]>}|t jkrbdnd}|||dd	}|j	|kst
||ksPt
qPd S )
Nr   rZ   r   rv   F   i  r   r   )r%   r   r   r   r   r   r   rT   r7   rw   r   )r'   rw   r   r   rW   r   r   r   r   r   r   G  s    
z#TestNanFunctions_SumProd.test_where)r   r/   r0   r%   r7   r9   rT   r8   r:   rc   rL   rM   rN   r   r   r   r   r   r   r   r   r   r   r   r   r     s    



r   c                	   @   s   e Zd ZejejgZejejgZ	e
jddddge
jdejd e
jjdeejedejgd	d
gddd Zdd Zdd Zdd Zdd ZdS )TestNanFunctions_CumSumProdr^   Nr   r\   rw   r   r   r   r   r   r"   c                 C   sn   |d k	r|j dkrtd ||}t| jddgD ]2\}}||}t||ksXt|j	|j	ks6tq6d S )Nr   r   r\   r   r   r   r   r   r   Z  s    

z(TestNanFunctions_CumSumProd.test_allnansc                 C   s   t | jddgD ]p\}}td}|td }||dd}t|| |}||dd}t|| td}||d d}t|| qd S )Nr   r\   r   rm   )rb   rT   r%   rq   onesr   r  r   r   r   r   j  s    



z&TestNanFunctions_CumSumProd.test_emptyc           	      C   s   t | j| jD ]H\}}td}dD ]0}|||d d}|||d d}t|j|jk q$q| jD ]p}td}tj	d}tj
||j|j dk < ||d d}t|jd td	D ]}|||d}t|jd qq^d S )
NrZ   r[   rn   rZ   r         r   r   rm   )i  r   )rb   rT   rc   r%   ra   r   rd   r  randomZRandomStater   randr   r   r   )	r'   rW   grf   r^   ri   rj   r   rsr   r   r   rk   w  s    


z)TestNanFunctions_CumSumProd.test_keepdimsc                 C   sZ   dD ]P}t jt|d}t jt|d}t|| t jt|d}t jt|d}t|| qd S )N)r   r\   Nrm   )	r%   r>   
_ndat_onesr=   rR   r   r<   _ndat_zerosr;   )r'   r^   ri   rj   r   r   r   r     s    
z.TestNanFunctions_CumSumProd.test_result_valuesc                 C   sh   t d}t| j| jD ]J\}}t d}dD ]2}|||d}||||d}t|| t|| q.qd S )NrZ   )r  r  r   r\   rm   rn   )r%   ra   rb   rT   rc   r   )r'   rf   rg   rh   rs   r^   ri   rj   r   r   r   rt     s    


z$TestNanFunctions_CumSumProd.test_out)r   r/   r0   r%   r;   r=   rT   r<   r>   rc   rL   rM   rN   r   r   r   r   r   r   rk   r   rt   r   r   r   r   r  U  s   

	r  c                	   @   s   e Zd ZejejejgZejej	ej
gZdd Zdd Zdd Zdd Zejd	d
ddgejdejd ejjdeejedejgddgddd Zdd Zejdejd dd Zd
S )TestNanFunctions_MeanVarStdc              	   C   s8   | j D ],}tjtjtjfD ]}tt|td|d qqd S )Nr\   )r^   rw   )rT   r%   r   int_object_r   	TypeErrorrR   )r'   rW   rw   r   r   r   test_dtype_error  s    
z,TestNanFunctions_MeanVarStd.test_dtype_errorc              	   C   sL   | j D ]@}tjtjtjfD ]*}tjtjd |d}tt	|td|d qqd S )Nr   rv   r\   rn   )
rT   r%   r   r  r  r   rR   r   r   r  )r'   rW   rw   ro   r   r   r   test_out_dtype_error  s    
z0TestNanFunctions_MeanVarStd.test_out_dtype_errorc                    sf   t jt jg}t jt jg}t||D ]>\}dD ]0  fddtD }|td d}t|| q.q"d S )Nr   r\   c                    s   g | ]}| d qS )r   r   r~   r   rh   r   r   r     s     z9TestNanFunctions_MeanVarStd.test_ddof.<locals>.<listcomp>r\   r^   r   )	r%   rG   rI   rH   rJ   rb   r   rR   r   )r'   rT   rc   rg   ri   rj   r   r  r   	test_ddof  s    z%TestNanFunctions_MeanVarStd.test_ddofc           	         s   t jt jg}t jt jg}dd tD }t||D ]\}}tdD ] t z}|	t
 |t j  fdd|D }|td d}tt || t|rtt|jdk ntt|jdk W 5 Q R X q@q0d S )Nc                 S   s   g | ]}t |qS r   )r   r~   r   r   r   r     s     zATestNanFunctions_MeanVarStd.test_ddof_too_big.<locals>.<listcomp>r   c                    s   g | ]} |kqS r   r   r~   r   r   r   r     s     r\   r  r   )r%   rG   rI   rH   rJ   r   rb   ranger
   r   r   r   r   rR   r   r   r   r   r   log)	r'   rT   rc   Zdsizerg   rh   r   ri   rj   r   r   r   test_ddof_too_big  s    
z-TestNanFunctions_MeanVarStd.test_ddof_too_bigr^   Nr   r\   rw   r   r   r   r   r   r"   c              
   C   s   |d k	r|j dkrtd ||}d}| jD ]n}tjt|d |||d}W 5 Q R X t|	 slt
|tjkr|j|jkst
q0|jt|jks0t
q0d S )Nr   r   z:(Degrees of freedom <= 0 for slice.)|(Mean of empty slice)r   rm   )rd   rL   r   r   rT   r   r   r%   r   r   r   r?   rw   absr   r   r   r   r     s    



z(TestNanFunctions_MeanVarStd.test_allnansc                 C   s   t d}| jD ]}dD ]d}tjddN}td tt |||d  tt	|dk tt
|d jt W 5 Q R X qd	D ]N}tjdd8}td t|||dt g  tt	|dk W 5 Q R X qqd S 
Nr   r   Tr   r   rm   r\   r   r   )r%   rq   rT   r   r   r   r   r   r   r   r   r   r   r   )r'   rf   rW   r^   r   r   r   r   r     s    


 
z&TestNanFunctions_MeanVarStd.test_emptyc           	      C   s   t ddd|}t j|dd d f< t j|t jd}d|d d df< t| j| j	D ]Z\}}||| dd  }|t j
kr|n|jj}|||d}|j|kstt j|| qXd S )Nr   rZ   r   rv   Fr   )r   )r%   r   r   r   r   r   r   rb   rT   rc   r?   realrw   r   r&   Zassert_allclose)	r'   rw   r   r   rW   Zf_stdr   Zdtype_referencer   r   r   r   r     s    z&TestNanFunctions_MeanVarStd.test_where)r   r/   r0   r%   r?   rG   rI   rT   r@   rH   rJ   rc   r  r  r  r  rL   rM   rN   r   r   r   r   r   r   r   r   r   r   r   r    s$   	
r  )YMWDhmsmsusnsZpsfsasc                 C   s   g | ]}d | dqS )zm8[]r   )r   unitr   r   r   r     s     r   c                   @   s   e Zd Zdd Zdd Zejjddddd	d
gdejddd Z	dd Z
dd Zdd Zejddddgejdedd Zdd Zdd Zdd Zdd  ZdS )!TestNanFunctions_Medianc                 C   s    t  }t| t|t  d S r$   )rR   rS   r%   rA   r   r'   rV   r   r   r   rX   
  s    
z%TestNanFunctions_Median.test_mutationc              	   C   sX  t d}dD ]8}t j||d dd}t j||d dd}t|j|jk qt d}t jdt |j	d d d f  }|
t j}t j|t|< t }|t t j|d dd}t|j	d	 t j|d
dd}t|j	d t j|ddd}t|j	d t j|ddd}t|j	d t j|ddd}t|j	d	 t j|ddd}t|j	d W 5 Q R X d S )NrZ   r[   Fr^   ro   overwrite_inputr  r      Tr]   r\   r\   r\   r\   r  r\   r\   r  r	  r   r\   r   r  r\   r   rZ   r\   r  r	  r   r\   r   rZ   r   r\   rZ   r\   r\   r  r\   )r%   ra   rB   rA   r   rd   r  r
  r   r   r   r   r   tupler
   r   r   r   r'   rf   r^   ri   rj   r   r   r   r   r   r   rk     s.    

$
z%TestNanFunctions_Median.test_keepdimsr^   Nr\   r   r  r  argnamesZ	argvalues#ignore:All-NaN slice:RuntimeWarningc                    s   t dt jdt jd d d f  }|t j}t jt|< |d kr\dj	 }n*t
|j	 t fddtj	D }t |}t j|d|d}||kstt|j| d S )Nr  r4  r   c                 3   s$   | ]}| krd nj | V  qdS r\   Nr   r   Z	axis_normr   r   r   	<genexpr>@  s    z<TestNanFunctions_Median.test_keepdims_out.<locals>.<genexpr>Tr^   r_   ro   )r%   r  r
  r   r   r   r   r   r=  rd   r   r  r   rA   r   r   )r'   r^   r   	shape_outro   resultr   rF  r   test_keepdims_out+  s    
$
z)TestNanFunctions_Median.test_keepdims_outc                 C   s   t jdd}t j|ddgt jdd}t d}t j|dd}t j|d|d}t|| t|| t d}t j|d d}t j|d |d}t|| t|| t j|d|d}t|| t|| d S )	NrZ   r   r   r\   rm   rn   r   r  )	r%   r
  r  insertr   rq   rB   rA   r   r'   rf   nan_matrs   ri   rj   r   r   r   rt   G  s    






z TestNanFunctions_Median.test_outc                 C   s   dD ]}t jd|}t jjd|j|jd d}t j| |< d|d d df< g }|D ],}t t | |}|	t j
|dd qVtt j|d	d
| qd S )N)r      3   r5  i  r   r   r   )sizer   T)r3  r  rm   )r%   r
  ZrandnrandintrQ  r   Zravelcompressr   r   rB   r	   rA   )r'   r(  r   r   ri   xZnonanr   r   r   test_small_largeY  s    z(TestNanFunctions_Median.test_small_largec                 C   s*   dd t D }tjtdd}t|| d S )Nc                 S   s   g | ]}t |qS r   )r%   rB   r~   r   r   r   r   j  s     z>TestNanFunctions_Median.test_result_values.<locals>.<listcomp>r\   rm   )r   r%   rA   rR   r   r'   ri   rj   r   r   r   r   i  s    z*TestNanFunctions_Median.test_result_valuesr   rw   c              	   C   s   t dt j|}t }|t t j||d}|j|jksDt	t 
| sVt	|d krrtt|jdk ntt|jdk t t j|d }t |}|j|jkst	t 
|st	|d krtt|jdk ntt|jdk W 5 Q R X d S )Nr   rm   r\   rZ   r   r   r   )r%   r   r   r   r
   r   r   rA   rw   r   r   r   r   r   r  r   )r'   rw   r^   rf   r   outputZscalarZoutput_scalarr   r   r   r   n  s     

z$TestNanFunctions_Median.test_allnansc              
   C   s   t d}dD ]f}tjddP}td tt t j||d  tt	|dk tt
|d jt W 5 Q R X qd	D ]P}tjdd:}td tt j||dt g  tt	|dk W 5 Q R X qzd S r   )r%   rq   r   r   r   r   r   rA   r   r   r   r   r   r   r'   rf   r^   r   r   r   r   r     s    

 
z"TestNanFunctions_Median.test_emptyc                 C   s   t tddk d S r   )r   r%   rA   r-   r   r   r   r     s    z#TestNanFunctions_Median.test_scalarc                 C   sp   t d}tt jt j|dd tt jt j|dd tt jt j|dd tt jt j|dd ttt j|dd d S )Nr  rm   r   rY  r   r   r   r\   r\   )r%   r  r   	AxisErrorrA   r   r'   r   r   r   r   test_extended_axis_invalid  s    
z2TestNanFunctions_Median.test_extended_axis_invalidc              	   C   s  t  }|t tjtj fD ]}t|tjgtjtjgg}ttj|dd|tjg ttj|dd|tjg tt|| ttjtj|gtjtj|gg}tt|| ttj|ddtjtj|g ttj|dd| t||g||gg}ttj|dd| tj|d| dgdtjtjdgdtjtj|ggtj	d	}|dkrttj|ddd
d| dg tt|d n.ttj|dddd| dg tt|d ttj|dddd|g t
ddD ]}t
ddD ]}ttjg| |g|  gd }tt|| ttj|dd| ttj|ddtjg| |g|   ttjg| | g|  gd }tt||  ttj|dd|  ttj|ddtjg| | g|   qqq"W 5 Q R X d S )Nr   rm   r\   r  iir   r   rv   r   g      @      @g      @g      $g      "g      r  g      
   r   )r
   r   r   r%   infr   r   r   rA   float32r  )r'   r   rb  ar   jr   r   r   test_float_special  sR    


"$z*TestNanFunctions_Median.test_float_special)r   r/   r0   rX   rk   rL   rM   rN   filterwarningsrK  rt   rU  r   _TYPE_CODESr   r   r   r_  rf  r   r   r   r   r0    s.   

r0  c                	   @   s   e Zd Zdd Zdd Zejddddggejjdd	dd
ddgdejddd Z	dd Z
dd Zejdd	ddgejdejd ejjdeejedejgddgddd Zdd  Zd!d" Zd#d$ Zd%d& Zd	S )'TestNanFunctions_Percentilec                 C   s"   t  }t|d t|t  d S )N   )rR   rS   r%   rC   r   r1  r   r   r   rX     s    z)TestNanFunctions_Percentile.test_mutationc              	   C   sh  t d}dD ]<}t j|d|d dd}t j|d|d dd}t|j|jk qt d}t jdt |j	d d d f  }|
t j}t j|t|< t }|t t j|dd d	d
}t|j	d t j|ddd	d
}t|j	d t j|ddd	d
}t|j	d t j|ddd	d
}t|j	d t j|ddd	d
}t|j	d t j|ddd	d
}t|j	d W 5 Q R X d S )NrZ   r[   F   Fr2  r  r4  Z   Tr]   r6  r  r7  r   r8  r   r9  r:  r;  r<  )r%   ra   rD   rC   r   rd   r  r
  r   r   r   r   r   r=  r
   r   r   r   r>  r   r   r   rk     s6    

$
z)TestNanFunctions_Percentile.test_keepdimsr   r  r\   r^   Nr   r  r?  rA  rC  c                    s   t dt jdt jd d d f  }|t j}t jt|< |d kr\dj	 }n*t
|j	 t fddtj	D }t || }t |}t j||d|d}||kstt|j| d S )Nr  r4  r   c                 3   s$   | ]}| krd nj | V  qdS rD  rE  r   rF  r   r   rG    s    z@TestNanFunctions_Percentile.test_keepdims_out.<locals>.<genexpr>TrH  )r%   r  r
  r   r   r   r   r   r=  rd   r   r  r   rC   r   r   )r'   r   r^   r   rI  ro   rJ  r   rF  r   rK    s    
$
z-TestNanFunctions_Percentile.test_keepdims_outc                 C   s   t jdd}t j|ddgt jdd}t d}t j|ddd}t j|dd|d}t|| t|| t d}t j|dd d}t j|dd |d}t|| t|| t j|dd	|d}t|| t|| d S )
NrZ   r   r   r\   rm   *   rn   r   r  )	r%   r
  r  rL  r   rq   rD   rC   r   rM  r   r   r   rt     s    






z$TestNanFunctions_Percentile.test_outc                 C   sZ   dd t D }tjtddd}t|| tdd t D }tjtddd}t|| d S )Nc                 S   s   g | ]}t |d qS )r  r%   rD   r~   r   r   r   r   (  s     zBTestNanFunctions_Percentile.test_result_values.<locals>.<listcomp>r  r\   rm   c                 S   s   g | ]}t |d qS )r  b   rn  r~   r   r   r   r   ,  s     ro  )r   r%   rC   rR   r   Z	transposerV  r   r   r   r   '  s    
z.TestNanFunctions_Percentile.test_result_valuesr   rw   r   r   r   r   r   r"   c              	   C   sv   |d k	r|j dkrtd ||}tjtdd tj|d|d}W 5 Q R X t|	 sbt
|j|jksrt
d S )Nr   r   r   r   <   rm   )rd   rL   r   r   r   r   r%   rC   r   r   r   rw   r'   r^   rw   r   ro   r   r   r   r   0  s    

z(TestNanFunctions_Percentile.test_allnansc              
   C   s   t d}dD ]h}tjddR}td tt t j|d|d  tt	|dk tt
|d	 jt W 5 Q R X qd
D ]R}tjdd<}td tt j|d|dt g  tt	|d	k W 5 Q R X q|d S )Nr   r   Tr   r   (   rm   r\   r   r   )r%   rq   r   r   r   r   r   rC   r   r   r   r   r   r   rX  r   r   r   r   @  s    

 
z&TestNanFunctions_Percentile.test_emptyc                 C   sH   t tddd td}tj|ddd}t |d tt| d S )Nr   r      2   r   rm   g      @)r   r%   rC   r   r   Zisscalar)r'   rd  rr   r   r   r   N  s
    

z'TestNanFunctions_Percentile.test_scalarc                 C   sz   t d}tt jt j|ddd tt jt j|ddd tt jt j|ddd tt jt j|ddd ttt j|ddd d S )	Nr  r   rY  r   r^   rZ  r   r[  r\  )r%   r  r   r]  rC   r   r^  r   r   r   r_  U  s    
z6TestNanFunctions_Percentile.test_extended_axis_invalidc                 C   s  ddg}t d}t j| }t d}d|d d dddd d f< |d d d d dd f  d9  < d	D ]}d
D ]}t r}|td t j||||d}t j||||d}	t|	j	|j	 t j||||d}t j||||d}	t|	| W 5 Q R X qpqht d}
tt j|
|ddj	d d S )Nru  r   )r   rZ   )rZ   r   r   r   r   r   rZ   r[   )FTr   r]   )rZ   r   r   rt  )r\   r   rm   )r   rZ   rt  )
r%   r  r   r
   r   r   rD   rC   r   r   )r'   percrf   rN  Z	large_matr^   Zkeepdimr   r   Znan_valZmegamatr   r   r   test_multiple_percentiles]  s0    


"



z5TestNanFunctions_Percentile.test_multiple_percentiles)r   r/   r0   rX   rk   rL   rM   rN   rg  rK  rt   r   r%   r   r   r   r   r   r   r   r_  ry  r   r   r   r   ri    s:   

	

ri  c                	   @   s   e Zd Zdd Zdd Zdd Zejddd	d
gejde	j
d ejjde	e	je	de	jgddgddd ZdS )TestNanFunctions_Quantilec                 C   s   t ddddt}t j|d d< tt j|ddt j|d	d tt j|ddd
t j|d	dd
 tt j|ddd
t j|d	dd
 tt j|dgdd
t j|d	gdd
 tt j|dddgdd
t j|dd	dgdd
 d S )N   r   rZ   r   r   r\   r   r   ru  rw        ?      ?   K   )	r%   r   r   r   floatr   r   rE   rC   )r'   r   r   r   r   test_regression{  s    z)TestNanFunctions_Quantile.test_regressionc                 C   sH   t dd }tt |dd tt |dd tt |dd d S )Nr   r   r   r   r\   g      @g      ?)r%   r   r   rE   )r'   rT  r   r   r   
test_basic  s    z$TestNanFunctions_Quantile.test_basicc                 C   sp   t dddddg}| }t jt d|dd t|| | }| }t jt d|dd t|| d S )	Nr   r}  r|  r   r   g      Y@Zmidpoint)method)r%   r   rS   rE   r   r	   tolist)r'   Zp0pr   r   r   test_no_p_overwrite  s    
z-TestNanFunctions_Quantile.test_no_p_overwriter^   Nr   r\   rw   r   r   r   r   r   r"   c              	   C   sv   |d k	r|j dkrtd ||}tjtdd tj|d|d}W 5 Q R X t|	 sbt
|j|jksrt
d S )Nr   r   r   r   r\   rm   )rd   rL   r   r   r   r   r%   rE   r   r   r   rw   rr  r   r   r   r     s    

z&TestNanFunctions_Quantile.test_allnans)r   r/   r0   r  r  r  rL   rM   rN   r%   r   r   r   r   r   r   r   r   r   rz  x  s   
rz  zarr, expectedr`  Tr\   r  r   rv   c                 C   sP   d t j| jt jdfD ]4}t| |d}t|| t|t jk	r|dkstqd S )Nrv   r   T)	r%   r   r   r   r   r   ry   r   r   )r   expectedro   actualr   r   r   test__nan_mask  s
    
r  c                  C   s  t jt jt jfD ]<} t jddg| d}t|d\}}|dks@t||kstqt jt jfD ]} t jddg| d}t|d\}}|dk	 st||k	stt
|| t jddt jg| d}t|d\}}t
|t dddg ||k	stt
|t dddg t |d sZtqZdS )	z] Test that _replace_nan returns the original array if there are no
    NaNs, not a copy.
    r   r\   rv   Nr   FTr  )r%   r   Zint32int64r   r   r   rc  Zfloat64r   r   r   r   )rw   r   rJ  maskZarr_nanZ
result_nanZmask_nanr   r   r   test__replace_nan  s"    
r  )2r   rL   r   Znumpyr%   Znumpy.core.numericr   Znumpy.lib.nanfunctionsr   r   Znumpy.testingr   r   r   r   r	   r
   r   r   rR   r   r  r  r   rP   r   Z_TEST_ARRAYSr   Z_vZsetflagsrM   rN   r   keysr   r   r   r  r  Z_TIME_UNITSr   rh  r0  ri  rz  rb  r  Z	complex64r  r  r   r   r   r   <module>   s    / 1_?i;Ia J (3


