U
    »mœd	,  ã                $   @   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   úT/home/sam/Atlas/atlas_env/lib/python3.8/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  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:   gX9´Èv¾@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	expected1Ú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   Z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   é   é   Ú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\   rx   r   r   rJ   Û   rK   zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>)r   Zapply_along_axis)r'   r\   rm   ©rx   r[   r   Ú	rank_omitÚ   s     ÿz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omitÚomit©rm   Ú
nan_policyrl   )	r   re   Zdefault_rngÚabsÚhashrv   Úinfr   r   )r   rm   r\   rp   Úrngr'   r?   rA   r&   rz   rw   Zres0r   ry   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;   r{   r|   r	   g      @g      @r   r   Ú	propagate©r   rv   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   rv   Ú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   ro   Ú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•   )Únumpyr   Znumpy.testingr   r   Zscipy.statsr   r   r‹   r   r.   r   r“   r•   r   r   r   r   Ú<module>   sN   B LÚ*