U
    Hvf	,                  $   @   s  d dl Zd dlmZmZ d dlmZmZ d dlZG dd dZ	G dd dZ
g dg fg d	g fg d
g fg dg fg dg fdgddgfdgd	dgfdgd
dgfdgddgfdgddgfdddgddddgfdddgd	dddgfdddgd
dddgfdddgddddgfdddgddddgfdddgddddgfdddgd	dddgfdddgd
dddgfdddgddddgfdddgddddgfddddgdddddgfddddgd	ddddgfddddgd
ddddgfddddgdddddgfddddgdddddgfdddddgddddddgfdddddgd	dddddgfdddddgd
dddddgfdddddgddddddgfdddddgddddddgfdgd deddffZdd ZdS )    N)assert_equalassert_array_equal)rankdata
tiecorrectc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestTieCorrectc                 C   s&   t jg t jd}t|}t|d dS )z9An empty array requires no correction, should return 1.0.dtype      ?Nnparrayfloat64r   r   selfranksc r   ?/tmp/pip-unpacked-wheel-96ln3f52/scipy/stats/tests/test_rank.py
test_empty
   s    zTestTieCorrect.test_emptyc                 C   s(   t jdgt jd}t|}t|d dS )z;A single element requires no correction, should return 1.0.r	   r   Nr
   r   r   r   r   test_one   s    zTestTieCorrect.test_onec                 C   s<   t d}t|}t|d t d}t|}t|d dS )z*Arrays with no ties require no correction.       @r	         @N)r   aranger   r   r   r   r   r   test_no_correction   s    


z!TestTieCorrect.test_no_correctionc                 C   s:  t dddg}t|}d}|j}d|d | |d |   }t|| t dddg}t|}d}|j}d|d | |d |   }t|| t ddddg}t|}d}|j}d|d | |d |   }t|| t dddddg}t|}d}d}|j}d|d | |d |  |d |   }t|| dS )	z8Check a few basic examples of the tie correction factor.r	         @r            ?r         @N)r   r   r   sizer   )r   r   r   TNexpectedZT1ZT2r   r   r   
test_basic   s2    


(zTestTieCorrect.test_basicc                 C   sZ   d\}}t t ||}|j}tt|}t|d||d |  t|d |    d S )N)i     r	   r   )r   repeatr   r   r   r   r   float)r   Zntiekanoutr   r   r   test_overflowB   s
    zTestTieCorrect.test_overflowN)__name__
__module____qualname__r   r   r   r"   r*   r   r   r   r   r      s
   	#r   c                   @   s   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dddgZ
ejgejgd  Zejdddgejdee
edd Zejdedejde
dd Zdd  Zd!d" Zd#d$ Zd%S )&TestRankDatac                 C   sN   t jg td}t|}t|t jg t jd tg }t|t jg t jd dS )z0stats.rankdata([]) should return an empty array.r   Nr   r   intr   r   r   )r   r'   rr   r   r   r   L   s
    zTestRankData.test_emptyc                 C   sX   dg}t j|td}t|}t|t jdgt jd t|}t|t jdgt jd dS )z/Check stats.rankdata with an array of length 1.d   r   r	   Nr/   )r   datar'   r1   r   r   r   r   T   s    zTestRankData.test_onec                 C   s,  dddg}t jdddgt jd}t j|td}t|}t|| t|}t|| ddd	ddg}t jd
ddddgt jd}t j|td}t|}t|| t|}t|| ddddddg}t jddddddgt jd}t j|td}t|}t|| t|}t|| |dd}t|}t|| dS )zBasic tests of stats.rankdata.r2   
   2   r   r	   r   r   (      r   r         @      r   N)r   r   r   r0   r   r   Zreshape)r   r3   r!   r'   r1   Za2dr   r   r   r"   ]   s0    






zTestRankData.test_basicc              	      s   dd dd  fdd} fdd}dd }t  |||d	fd
d}dddddddddg	}|tj|d |tj|dd tjddddddgdd}|tj|dd d S )Nc                    s    fdd D S )Nc                    s&   g | ] d t  fddD  qS )   c                 3   s   | ]}| k V  qd S Nr   .0ijr   r   	<genexpr>|   s     XTestRankData.test_rankdata_object_string.<locals>.<lambda>.<locals>.<listcomp>.<genexpr>sumr>   r'   r@   r   
<listcomp>|   s     NTestRankData.test_rankdata_object_string.<locals>.<lambda>.<locals>.<listcomp>r   rG   r   rG   r   <lambda>|       z:TestRankData.test_rankdata_object_string.<locals>.<lambda>c                    s    fdd D S )Nc                    s"   g | ] t  fd dD qS )c                 3   s   | ]}| kV  qd S r<   r   r=   r@   r   r   rB   }   s     rC   rD   rF   rG   r@   r   rH   }   s     rI   r   rG   r   rG   r   rJ   }   rK   c                    s    dd t | D S )Nc                 S   s   g | ]\}}||fqS r   r   )r>   r?   xr   r   r   rH   ~   s     rI   )	enumeraterG   )min_rankr   r   rJ   ~   rK   c                    s   dd t |  | D S )Nc                 S   s   g | ]\}}|| d  qS )r   r   )r>   r?   rA   r   r   r   rH      s     zRTestRankData.test_rankdata_object_string.<locals>.average_rank.<locals>.<listcomp>)ziprG   )max_rankrN   r   r   average_rank   s    z>TestRankData.test_rankdata_object_string.<locals>.average_rankc                    s   t |   fdd| D S )Nc                    s&   g | ] d t  fddD  qS )r;   c                 3   s   | ]}| k V  qd S r<   r   r=   r@   r   r   rB      s     zZTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>.<genexpr>rD   rF   br@   r   rH      s     zPTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>)r   uniquerG   r   rR   r   
dense_rank   s    
z<TestRankData.test_rankdata_object_string.<locals>.dense_rank)minmaxordinalaveragedensec                    s,   dD ]"}t | |d}t| | |  qd S )N)rV   rW   rZ   rX   rY   methodr   r   )r'   r\   r)   )rankfr   r   check_ranks   s    z=TestRankData.test_rankdata_object_string.<locals>.check_ranksZfoobarZquxZxyzabcZefgZaceZqweZqaz   objectr   r;   r:   gX9v@r   gT㥛 	@r   )dictr   randomchoiceZastyper   )r   Zordinal_rankrQ   rU   r_   valr   )rP   rN   r^   r   test_rankdata_object_string{   s     z(TestRankData.test_rankdata_object_stringc                 C   s   t jddgt jd}t|}t|ddg t jddgt jd}t|}t|ddg t jddgt jd}t|}t|ddg d S )Nl            l           r   r	   r   l)r   r   Zuint64r   r   Zint64)r   r3   r1   r   r   r   test_large_int   s    zTestRankData.test_large_intc                 C   sD   dD ]:}t j|td}t|}d|d  }t||| d|  qd S )N)i'  i i@B r   g      ?r;   ztest failed with n=%d)r   Zonesr0   r   r   )r   r(   r3   r1   Zexpected_rankr   r   r   test_big_tie   s    
zTestRankData.test_big_tiec                 C   sl   dddgdddgg}dddgdddgg}t |dd}t|| dd	dgd	ddgg}t |dd}t|| d S )
Nr   r:   r;      r	   r   r   axisr   r]   )r   r3   Z	expected0Zr0Z	expected1Zr1r   r   r   	test_axis   s    
zTestRankData.test_axisrY   rV   rW   rZ   rX   rk   rm   r   r;   zmethod, dtypec                 C   s8   d}t |}t|||d}t|j| t|j| d S )N)r   r   )r\   rm   )r   zerosr   r   shaper   )r   rm   r\   r   rp   r3   r1   r   r   r   test_size_0_axis   s
    
zTestRankData.test_size_0_axisr   r\   c                    s   d}t jttd}|j|d}|j|ddk }|j|ddk }|j|ddk }t j||< t j ||< || t j  dd   fdd	}	t|||d
d}
|	|||d}t|
| d S )N)r9         Zfalafel)r   g?g?c                 S   s@   t | }t | }| |  }t||}||| < t j||< |S r<   )r   Z
zeros_likeisnanr   nan)r'   r\   r)   r?   Za_compressedresr   r   r   rank_1d_omit   s    





z:TestRankData.test_nan_policy_omit_3d.<locals>.rank_1d_omitc                    s   t  fdd|| S )Nc                    s
   |  S r<   r   rG   )r\   rw   r   r   rJ      rK   zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>)r   Zapply_along_axis)r'   r\   rm   rw   r[   r   	rank_omit   s     z7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omitomitrm   
nan_policyrl   )	r   re   Zdefault_rngabshashru   infr   r   )r   rm   r\   rp   rngr'   r?   rA   r&   ry   rv   Zres0r   rx   r   test_nan_policy_omit_3d   s    
	z$TestRankData.test_nan_policy_omit_3dc                 C   s   dt jdgddt jgdddgg}tt|d dddt jd	d
dt jdddg	 tt|d ddt jt jt jt jt jt jt jt jt jg	 d S )Nr   r   rk   r:   r;   rz   r{   r	   g      @g      @r   r   	propagater   ru   r   r   r   r3   r   r   r   test_nan_policy_2d_axis_none   s    

  z)TestRankData.test_nan_policy_2d_axis_nonec              	   C   s   ddddt jt jg}tjtdd t|dd W 5 Q R X dt jdgd	dt jgt jddgg}tjtdd t|ddd
 W 5 Q R X tjtdd t|ddd
 W 5 Q R X d S )Nr   r:   r   zThe input contains nan)matchraiser|   rk   r{   r;   )r   ru   pytestZraises
ValueErrorr   r   r   r   r   test_nan_policy_raise   s    


z"TestRankData.test_nan_policy_raisec                 C   s   ddddt jt jg}tt|ddt jt jt jt jt jt jg dt jdgddt jgdddgg}tt|ddd	dt jt jgdt jt jgdt jt jgg tt|ddd	t jt jt jgt jt jt jgdd
d
gg d S )Nr   r:   r   r   r   r   rk   r;   r{   r   r   r   r   r   r   test_nan_policy_propagate   s(    

z&TestRankData.test_nan_policy_propagateN)r+   r,   r-   r   r   r"   rh   ri   rj   rn   methodsr   r   int_Zdtypesr   markZparametrizerO   rq   ranger   r   r   r   r   r   r   r   r.   J   s$   	r.   rY   rV   rW   rZ   rX   r2   r	   r   r   i,  rb   r   r   r   g      @r8   r4   r7   g      ?@c                  C   s*   t D ] \} }}t| |d}t|| qd S )Nr[   )_casesr   r   )valuesr\   r!   r1   r   r   r   
test_cases=  s    r   )Znumpyr   Znumpy.testingr   r   Zscipy.statsr   r   r   r   r.   r   r   r   r   r   r   r   <module>   sN   B L*