o
    i.                     @   sn  d dl Zd dlmZmZ d dlZd dlmZ d dlm	Z	m
Z
 d dlm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)skip_xp_invalid_arg)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   U/home/kim/smarthome/.venv/lib/python3.10/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_overflowD   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
e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   N   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	   r7   )r   )r   emptyr2   r   r   r4   r
   r   )r   r4   r7   r)   r3   Zexpected_shaper   r   r   test_empty_multidimV   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   Nr1   )r   datar)   r3   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         @)   rB   rB   r=   r=   r=   )rA   rA   rA   r   r   r   r6   r   N)r   r   r   r2   r   r   Zreshape)r   r<   r#   r)   r3   Za2dr   r   r   r$   h   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 )r5   c                 3       | ]}| k V  qd S Nr   .0ijr   r   	<genexpr>       zXTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<listcomp>.<genexpr>sumrH   r)   rJ   r   
<listcomp>      & zNTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<listcomp>r   rQ   r   rQ   r   min_rank      z:TestRankData.test_rankdata_object_string.<locals>.min_rankc                    rC   )Nc                    s"   g | ] t  fd dD qS )c                 3   s    | ]}| kV  qd S rF   r   rG   rJ   r   r   rL      rM   zXTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<listcomp>.<genexpr>rN   rP   rQ   rJ   r   rR      s   " zNTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<listcomp>r   rQ   r   rQ   r   max_rank   rU   z:TestRankData.test_rankdata_object_string.<locals>.max_rankc                    s    dd t | D S )Nc                 S   s   g | ]\}}||fqS r   r   )rH   rI   xr   r   r   rR      s    zRTestRankData.test_rankdata_object_string.<locals>.ordinal_rank.<locals>.<listcomp>)	enumeraterQ   )rT   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   )rH   rI   rK   r   r   r   rR      s    zRTestRankData.test_rankdata_object_string.<locals>.average_rank.<locals>.<listcomp>)ziprQ   )rV   rT   r   r   average_rank   s   z>TestRankData.test_rankdata_object_string.<locals>.average_rankc                    s   t |   fdd| D S )Nc                    rD   )r5   c                 3   rE   rF   r   rG   rJ   r   r   rL      rM   zZTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>.<genexpr>rN   rP   brJ   r   rR      rS   zPTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>)r   uniquerQ   r   r\   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`   ra   rd   rb   rc   methodr   r   )r)   rf   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   r5   r6   gX9v@r   gT㥛 	@r	   )dictr   randomchoiceZastyper   )r   rY   r[   r_   ri   valr   )rV   rT   rh   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<   r3   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      ?r5   ztest failed with n=%d)r   Zonesr2   r   r   )r   r*   r<   r3   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   r6   r5   )   r6   r6   )r   r   r   )r   r   r   r   r8   r   r   r   )r   r   r   r5   rg   )r   r<   Z	expected0Zr0Z	expected1r1r   r   r   	test_axis   s   
zTestRankData.test_axis)rc   r`   ra   rd   rb   ru   r   r5   zmethod, dtypec                 C   s8   d}t |}t|||d}t|j| t|j| d S )N)r   r   )rf   r7   )r   Zzerosr   r   r4   r
   )r   r7   rf   r
   r4   r<   r3   r   r   r   test_size_0_axis   s
   
zTestRankData.test_size_0_axisrf   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)rB         im)r    g?g?c                 S   s@   t | }t | }| |  }t||}||| < t j||< |S rF   )r   Z
zeros_likeisnanr   nan)r)   rf   r+   rI   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 rF   r   rQ   )rf   r   r   r   <lambda>   s   
 zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>)r   Zapply_along_axis)r)   rf   r7   r   re   r   	rank_omit   s   z7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omitomitr7   
nan_policyr8   )r   ro   ZRandomStater}   infr   r   )r   r7   rf   r4   rngr)   rI   rK   r(   r   r~   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   ru   r6   r5   r6   r6   r   r   r   g      @g      @r   r   	propagater   r}   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 s"w   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 sQw   Y  tjtdd t|ddd
 W d    d S 1 spw   Y  d S )Nr   r6   r   zThe input contains nan)matchraiser   ru   r   r5   )r   r}   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   r6   r   r   r   r   ru   r   r   r5   )r5   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ranger:   r   r$   r   rr   rs   rt   rx   methodsr   r   r   ZdtypesrZ   ry   r   r   r   r   r   r   r   r   r0   L   s.    	
!r0   rc   r`   ra   rd   rb   r;   r   )r;   r;   r;   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r;   ,  rl   rv   )r;   rl   r   rl   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r;   rl   r   rl   r;   )r         @rA   r   r   )r   r   rA   r   r   )r   r   rA   r   r   )r   r   r   r   r   )r   r   rA   r   r   r=   r@   g      ?@c                  C   s*   t D ]\} }}t| |d}t|| qd S )Nre   )_casesr   r   )valuesrf   r#   r3   r   r   r   
test_casesO  s   r   )numpyr   Znumpy.testingr   r   r   Zscipy.conftestr   Zscipy.statsr   r   Zscipy._lib._utilr   r   r0   r   r   r   r   r   r   r   <module>   s    B Z	
 !"#$&*