o
    EbS                      @   sV  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 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g ddg dfg dd	g dfg dd
g dfg ddg dfg ddg dfg ddg dfg dd	g dfg dd
g dfg ddg dfg ddg dfg ddg dfg dd	g dfg dd
g dfg ddg dfg ddg dfg ddg dfg dd	g dfg dd
g dfg ddg d fg ddg d!fd"gd# dedd$fR 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   =/usr/lib/python3/dist-packages/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 g d}t|}d}|j}d|d | |d |   }t|| t g d}t|}d}|j}d|d | |d |   }t|| t g d}t|}d}|j}d|d | |d |   }t|| t g d}t|}d}d}|j}d|d | |d |  |d |   }t|| d	S )
z8Check a few basic examples of the tie correction factor.)r	         @r   r   r	      )      ?r   r   )r	   r   r   r   r   )r   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	g dZ
ejgejgd  Zejdddgejdee
e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  g d}t jg dt jd}t j|td}t|}t|| t|}t|| g d}t jg dt jd}t j|td}t|}t|| t|}t|| g d}t jg d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   )(   r4      r4   r5   )r   r   r   r         @)   r9   r9   r4   r4   r4   )r8   r8   r8   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}g d}|tj|d |tj|dd tjg ddd}|tj|dd d S )Nc                        fdd D S )Nc                    &   g | ] d t  fddD  qS )   c                 3       | ]}| k V  qd S Nr   .0ijr   r   	<genexpr>|       XTestRankData.test_rankdata_object_string.<locals>.<lambda>.<locals>.<listcomp>.<genexpr>sumrA   r'   rC   r   
<listcomp>|      & NTestRankData.test_rankdata_object_string.<locals>.<lambda>.<locals>.<listcomp>r   rK   r   rK   r   <lambda>|       z:TestRankData.test_rankdata_object_string.<locals>.<lambda>c                    r;   )Nc                    s"   g | ] t  fd dD qS )c                 3   s    | ]}| kV  qd S r?   r   r@   rC   r   r   rE   }   rF   rG   rH   rJ   rK   rC   r   rL   }   s   " rN   r   rK   r   rK   r   rO   }   rP   c                    s    dd t | D S )Nc                 S   s   g | ]\}}||fqS r   r   )rA   rB   xr   r   r   rL   ~   s    rN   )	enumeraterK   )min_rankr   r   rO   ~   s    c                    s   dd t |  | D S )Nc                 S   s   g | ]
\}}|| d  qS )r   r   )rA   rB   rD   r   r   r   rL      s    zRTestRankData.test_rankdata_object_string.<locals>.average_rank.<locals>.<listcomp>)ziprK   )max_rankrS   r   r   average_rank   s   z>TestRankData.test_rankdata_object_string.<locals>.average_rankc                    s   t |   fdd| D S )Nc                    r<   )r=   c                 3   r>   r?   r   r@   rC   r   r   rE      rF   zZTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>.<genexpr>rH   rJ   brC   r   rL      rM   zPTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>)r   uniquerK   r   rW   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)r[   r\   r_   r]   r^   methodr   r   )r'   ra   r)   )rankfr   r   check_ranks   s   z=TestRankData.test_rankdata_object_string.<locals>.check_ranks)	ZfooZbarZquxZxyzabcZefgZaceZqweZqaz   object)r   r=   r:   gX9v@r   gT㥛 	@r   )dictr   ZrandomchoiceZastyper   )r   Zordinal_rankrV   rZ   rd   valr   )rU   rS   rc   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   s`   g dg dg}g dg dg}t |dd}t|| g dg dg}t |d	d}t|| d S )
N)r   r:   r=   )   r:   r:   )r	   r   r	   )r   r   r   r   )axisr	   r   r   )r   r   r   r=   rb   )r   r3   Z	expected0Zr0Z	expected1Zr1r   r   r   	test_axis   s   
zTestRankData.test_axis)r^   r[   r\   r_   r]   rn   ro   r   r=   zmethod, dtypec                 C   s8   d}t |}t|||d}t|j| t|j| d S )N)r   r   )ra   ro   )r   Zzerosr   r   shaper   )r   ro   ra   r   rr   r3   r1   r   r   r   test_size_0_axis   s
   
zTestRankData.test_size_0_axisN)r+   r,   r-   r   r   r"   rk   rl   rm   rq   methodsr   r   Zint_ZdtypespytestZmarkZparametrizerT   rs   r   r   r   r   r.   J   s    	r.   r^   r[   r\   r_   r]   r2   r	   )r2   r2   r2   )r   r   r   )r	   r	   r	   )r   r   r   )r	   r   r   )r2   ,  rf   rp   )r2   rf   rv   rf   )r	   r   r   r   )r	   r   r   r   )r	   r   r   r   )r	   r   r   r   )r	   r   r   r   )r2   rf   rv   rf   r2   )r         @r8   rw   r   )r	   r   r8   r   r	   )r   r   r8   r   r   )r	   r   r   r   r	   )r	   r   r8   r   r   r4   r7   g      ?@c                  C   s*   t D ]\} }}t| |d}t|| qd S )Nr`   )_casesr   r   )valuesra   r!   r1   r   r   r   
test_cases   s   rz   )Znumpyr   Znumpy.testingr   r   Zscipy.statsr   r   ru   r   r.   r   rx   rz   r   r   r   r   <module>   s    Bz	
 !"#$&*