a
    ˆù»j/  ã                $   @   s"  d dl Zd dlmZmZ d dlZd dlmZmZ d dl	m
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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fZd&d'„ ZdS )(é    N)Úassert_equalÚassert_array_equal)ÚrankdataÚ
tiecorrect)Únp_longc                   @   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   úAE:\soccer\ml_env\Lib\site-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_overflowC   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ej ddg¡ej ddgedƒ¢¡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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   M   s
    zTestRankData.test_emptyÚshape)r   é   é   ÚaxisNr   c                 C   sH   t j|td�}t||d�}|d u r&dn|}t|j|ƒ t|jt jƒ d S )Nr   ©r6   )r   )r   Úemptyr1   r   r   r3   r	   r   )r   r3   r6   r(   r2   Zexpected_shaper   r   r   Útest_empty_multidimU   s
    z TestRankData.test_empty_multidimc                 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
   Nr0   )r   Údatar(   r2   r   r   r   r   ^   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.)r:   é
   é2   )r   r
   r   r   )é(   r<   é   r<   r=   )r   r   r   r   ç      @)é   rA   rA   r<   r<   r<   )r@   r@   r@   r   r   r   r5   r   N)r   r   r   r1   r   r   Zreshape)r   r;   r"   r(   r2   Za2dr   r   r   r#   g   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                    s   ‡ fdd„ˆ D ƒS )Nc                    s&   g | ]‰ d t ‡ fdd„ˆD ƒƒ ‘qS )r4   c                 3   s   | ]}|ˆ k V  qd S ©Nr   ©Ú.0Úi©Újr   r   Ú	<genexpr>ˆ   ó    zXTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<listcomp>.<genexpr>©Úsum©rD   ©r(   rF   r   Ú
<listcomp>ˆ   rI   zNTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<listcomp>r   rM   r   rM   r   Úmin_rank‡   s    z:TestRankData.test_rankdata_object_string.<locals>.min_rankc                    s   ‡ fdd„ˆ D ƒS )Nc                    s"   g | ]‰ t ‡ fd d„ˆD ƒƒ‘qS )c                 3   s   | ]}|ˆ kV  qd S rB   r   rC   rF   r   r   rH   ‹   rI   zXTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<listcomp>.<genexpr>rJ   rL   rM   rF   r   rN   ‹   rI   zNTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<listcomp>r   rM   r   rM   r   Úmax_rankŠ   s    z:TestRankData.test_rankdata_object_string.<locals>.max_rankc                    s   ˆ dd„ t | ƒD ƒƒS )Nc                 S   s   g | ]\}}||f‘qS r   r   )rD   rE   Úxr   r   r   rN   Ž   rI   zRTestRankData.test_rankdata_object_string.<locals>.ordinal_rank.<locals>.<listcomp>)Ú	enumeraterM   )rO   r   r   Úordinal_rank�   s    z>TestRankData.test_rankdata_object_string.<locals>.ordinal_rankc                    s   dd„ t ˆ| ƒˆ | ƒƒD ƒS )Nc                 S   s   g | ]\}}|| d  ‘qS )r   r   )rD   rE   rG   r   r   r   rN   ‘   rI   zRTestRankData.test_rankdata_object_string.<locals>.average_rank.<locals>.<listcomp>)ÚziprM   )rP   rO   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 )r4   c                 3   s   | ]}|ˆ k V  qd S rB   r   rC   rF   r   r   rH   •   rI   zZTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>.<genexpr>rJ   rL   ©ÚbrF   r   rN   •   rI   zPTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>)r   ÚuniquerM   r   rV   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)rZ   r[   r^   r\   r]   ©Úmethod©r   r   )r(   r`   r*   )Úrankfr   r   Úcheck_ranksš   s    z=TestRankData.test_rankdata_object_string.<locals>.check_ranks)	ZfooÚbarZquxZxyzÚabcZefgZaceZqweZqazéÈ   Úobject)r   r4   r5   gX9´Èv¾@r   gTã¥›Ä 	@r   )Údictr   ÚrandomÚchoiceZastyper   )r   rS   rU   rY   rc   Úvalr   )rP   rO   rb   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   r;   r2   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      à?r4   ztest failed with n=%d)r   Zonesr1   r   r   )r   r)   r;   r2   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   r5   r4   )é   r5   r5   )r
   r   r
   )r   r   r   r   r7   ©r
   r   r   )r   r   r   r4   ra   )r   r;   Z	expected0Zr0Z	expected1Úr1r   r   r   Ú	test_axis»   s    ÿÿ
ÿzTestRankData.test_axis)r]   rZ   r[   r^   r\   ro   r   r4   zmethod, dtypec                 C   s8   d}t  |¡}t|||d�}t|j|ƒ t|j|ƒ d S )N)r   r   )r`   r6   )r   Zzerosr   r   r3   r	   )r   r6   r`   r	   r3   r;   r2   r   r   r   Útest_size_0_axisÊ   s
    
zTestRankData.test_size_0_axisr`   c                    s°   d}t j 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)rA   é   é   iŠôm)r   gš™™™™™Ù?gš™™™™™¹?c                 S   s@   t  | ¡}t  | ¡}| |  }t||ƒ}||| < t j||< |S rB   )r   Z
zeros_likeÚisnanr   Únan)r(   r`   r*   rE   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 rB   r   rM   )r`   ry   r   r   Ú<lambda>ë   rI   zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>)r   Zapply_along_axis)r(   r`   r6   ©ry   r_   r   Ú	rank_omitê   s    ÿz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omitÚomit©r6   Ú
nan_policyr7   )r   ri   ZRandomStaterw   Úinfr   r   )r   r6   r`   r3   Úrngr(   rE   rG   r'   r|   rx   Zres0r   r{   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g d¢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   ro   r5   ©r4   r5   r5   r}   r~   r
   g      @g      @r   r   Ú	propagate©r   rw   r   r   ©r   r;   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 d   ƒ n1 sD0    Y  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 d   ƒ n1 s¢0    Y  tjtdd�� t|ddd
� W d   ƒ n1 sÞ0    Y  d S )Nr   r5   r   éþÿÿÿzThe input contains nan)ÚmatchÚraise©r   ro   r~   r4   )r   rw   Ú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g d¢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g d¢gƒ d S )Nr   r5   r   rˆ   r„   r‹   ro   rƒ   r~   r4   )r4   r   r   r…   r†   r   r   r   Útest_nan_policy_propagate  s(    ÿ

þþÿþÿz&TestRankData.test_nan_policy_propagate)r,   r-   r.   r   rŒ   ÚmarkZparametrizeÚranger9   r   r#   rl   rm   rn   rr   Úmethodsr   r   r   ZdtypesrT   rs   r‚   r‡   rŽ   r�   r   r   r   r   r/   K   s*   	!r/   r]   rZ   r[   r^   r\   r:   r
   )r:   r:   r:   )r   r   r   )r
   r
   r
   )r   r   r   )r
   r   r   )r:   é,  rf   rp   )r:   rf   r“   rf   )r
   r   r   r   )r
   r   r   r   )r
   r   r   r   )r
   r   r   r   )r
   r   r   r   )r:   rf   r“   rf   r:   )r   ç      @r@   r”   r   )r
   r   r@   r   r
   )r   r   r@   r   r   )r
   r   r   r   r
   )r
   r   r@   r   r   r<   r?   g      ?@c                  C   s*   t D ] \} }}t| |d�}t||ƒ qd S )Nr_   )Ú_casesr   r   )Úvaluesr`   r"   r2   r   r   r   Ú
test_casesM  s    r—   )Únumpyr   Znumpy.testingr   r   rŒ   Zscipy.statsr   r   Zscipy._lib._utilr   r   r/   r   r•   r—   r   r   r   r   Ú<module>   sP   B [Ú*