
    Yhh1                         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	 d dl
mZmZ d dlmZmZ  G d d          Z eej                   G d	 d
                      ZdS )    N)assert_equalassert_array_equal)stats)skip_xp_invalid_arg)rankdata
tiecorrect)xp_assert_equalmake_xp_test_casec                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestTieCorrectc                     t          j        g t           j                  }t          |          }t	          |d           dS )z9An empty array requires no correction, should return 1.0.dtype      ?Nnparrayfloat64r   r   selfrankscs      m/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/stats/tests/test_rank.py
test_emptyzTestTieCorrect.test_empty   s;    2:...uQ    c                     t          j        dgt           j                  }t          |          }t	          |d           dS )z;A single element requires no correction, should return 1.0.r   r   Nr   r   s      r   test_onezTestTieCorrect.test_one   s=    #bj111uQr   c                     t          j        d          }t          |          }t          |d           t          j        d          }t          |          }t          |d           dS )z*Arrays with no ties require no correction.       @r         @N)r   aranger   r   r   s      r   test_no_correctionz!TestTieCorrect.test_no_correction   s\    	#uQ	#uQr   c                    t          j        g d          }t          |          }d}|j        }d|dz  |z
  |dz  |z
  z  z
  }t	          ||           t          j        g d          }t          |          }d}|j        }d|dz  |z
  |dz  |z
  z  z
  }t	          ||           t          j        g d          }t          |          }d}|j        }d|dz  |z
  |dz  |z
  z  z
  }t	          ||           t          j        g d          }t          |          }d}d}|j        }d|dz  |z
  |dz  |z
  z   |dz  |z
  z  z
  }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expectedT1T2s           r   
test_basiczTestTieCorrect.test_basic!   s    ))uJ!Q$(q!tax00Q!!! ))uJ!Q$(q!tax00Q!!! ---..uJ!Q$(q!tax00Q!!! 22233uJ2q52:"a%"*5!Q$(CCQ!!!!!r   c           	         d\  }}t          j        t          j        |          |          }|j        }t	          t          |                    }t          |d||dz  |z
  z  t          |dz  |z
            z  z
             d S )N)i     r   r%   )r   repeatr!   r(   r   r   r   float)r   ntiekanouts         r   test_overflowzTestTieCorrect.test_overflowD   sy    aIbillD))F!%%S#T1Wt^ 4uQTAX FFGGGGGr   N)__name__
__module____qualname__r   r   r"   r.   r8    r   r   r   r   
   se              !" !" !"FH H H H Hr   r   c                      e Zd Zd;dZd Zd Zej                            ddg          ej                            dd	g e	d
                    d                         Z
d Zd Zed             Zd Zej                            dg d          d             Zd Zg dZej                            dddg          ej                            de          d                         Zej                            d e	d
                    ej                            de          d                         Zd Zd Z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 d0dg d1fg d0dg d2fg d0dg d3fg d0dg d4fg d0d g d5fd6gd7z  d  ej        d"d8          fR Zej                            d9e          d:             Zd	S )<TestRankDataaverageFc                    |r|                     d          j        S |dk    r|                     d          j        n|                     d          j        S )Nr   r?      )asarrayr   )r   methodhas_nansxps       r   desired_dtypezTestRankData.desired_dtypeO   sL     	(::b>>'''-y'8'8rzz"~~##bjjmm>QQr   c           	          |                     g |j                  }t          |          }t          ||                     g |                     |                               dS )z;stats.rankdata of empty array should return an empty array.r   rE   NrB   int64r   r	   rF   )r   rE   r5   rs       r   r   zTestRankData.test_emptyT   s[    JJrJ**QKK2::b0B0Bb0B0I0I:JJKKKKKr   c                     t          g           }t          |t          j        g                      t          g d          }t	          |g d           d S )N(   
      rO   2   r'   r&   r    r&         @)r   r   r   r   r   )r   rK   s     r   	test_listzTestRankData.test_listZ   sV    RLL1bhrll+++)))**Q11122222r   shape)r   rA      axisNr%   c           	          |                     ||j                  }t          ||          }|dn|}t          ||                     ||                     |                               d S )Nr   rW   )r   rH   )emptyrJ   r   r	   rF   )r   rU   rW   rE   r5   rK   expected_shapes          r   test_empty_multidimz TestRankData.test_empty_multidimb   sr     HHU"(H++QT"""!%5288N$:L:LPR:L:S:S8TTUUUUUr   c           	          dg}|                     ||j                  }t          |          }t          ||                     dg|                     |                               dS )z/Check stats.rankdata with an array of length 1.d   r   r   rH   NrI   )r   rE   datar5   rK   s        r   r   zTestRankData.test_onej   sd    uJJt28J,,QKK2::se43E3E3E3L3L:MMNNNNNr   c                    |                      |          }g d}|                    g d|          }|                    ||j                  }t          |          }t	          ||           g d}|                    g d|          }|                    ||j                  }t          |          }t	          ||           g d}|                    g d|          }|                    ||j                  }t          |          }t	          ||           |                    |d	          }t          |          }t	          ||           d
S )zBasic tests of stats.rankdata.rH   )r^   rO   rQ   )r    r   r   r   rM   rR   )   ra   ra   rO   rO   rO   )rS   rS   rS   r   r   r   )rV   r%   N)rF   rB   rJ   r   r	   reshape)r   rE   rF   r_   r+   r5   rK   a2ds           r   r.   zTestRankData.test_basicq   sT   **b*11}}::ooo]:CCJJt28J,,QKK8$$$###::777}:MMJJt28J,,QKK8$$$'''::<<<M:RRJJt28J,,QKK8$$$ jjF##SMM8$$$$$r   c                    d d fd}fd}d }t          |||          fd}g d} |t          j                            |d	                      |t          j                            |d	                              d
                     t          j        g dd
          } |t          j                            |d	                              d
                     d S )Nc                        fd D             S )Nc                 N    g | ] d t          fdD                       z   !S )rA   c              3   $   K   | ]
}|k     V  d S Nr<   .0ijs     r   	<genexpr>zXTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<listcomp>.<genexpr>   '      --aAE------r   sumrj   rl   r5   s    @r   
<listcomp>zNTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<listcomp>   <    999!A----1------999r   r<   r5   s   `r   min_rankz:TestRankData.test_rankdata_object_string.<locals>.min_rank   s    9999q9999r   c                        fd D             S )Nc                 H    g | ]t          fd D                       S )c              3   $   K   | ]
}|k    V  d S rh   r<   ri   s     r   rm   zXTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<listcomp>.<genexpr>   s'      **1Q******r   ro   rq   s    @r   rr   zNTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<listcomp>   s7    666qC*********666r   r<   rt   s   `r   max_rankz:TestRankData.test_rankdata_object_string.<locals>.max_rank   s    6666A6666r   c                 H     d t          |           D                       S )Nc                     g | ]	\  }}||f
S r<   r<   )rj   rk   xs      r   rr   zRTestRankData.test_rankdata_object_string.<locals>.ordinal_rank.<locals>.<listcomp>   s     ===1aV===r   )	enumerate)r5   ru   s    r   ordinal_rankz>TestRankData.test_rankdata_object_string.<locals>.ordinal_rank   s(    8==	!===>>>r   c                 \    d t           |            |                     D             S )Nc                 $    g | ]\  }}||z   d z  S )r   r<   ri   s      r   rr   zRTestRankData.test_rankdata_object_string.<locals>.average_rank.<locals>.<listcomp>   s$    LLLdaQUcMLLLr   )zip)r5   ry   ru   s    r   average_rankz>TestRankData.test_rankdata_object_string.<locals>.average_rank   s1    LLc((1++xx{{.K.KLLLLr   c                 H    t          j        |           fd| D             S )Nc                 N    g | ] d t          fdD                       z   !S )rA   c              3   $   K   | ]
}|k     V  d S rh   r<   ri   s     r   rm   zZTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>.<genexpr>   rn   r   ro   )rj   rl   bs    @r   rr   zPTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<listcomp>   rs   r   )r   unique)r5   r   s    @r   
dense_rankz<TestRankData.test_rankdata_object_string.<locals>.dense_rank   s*    	!A9999q9999r   )minmaxordinalr?   densec                 r    dD ]2}t          | |          }t          | |         |                      3d S )N)r   r   r   r   r?   rC   )r   r   )r5   rC   r7   rankfs      r   check_ranksz=TestRankData.test_rankdata_object_string.<locals>.check_ranks   sO    E : :q000"3fa(8(89999: :r   )	foobarquxxyzabcefgaceqweqaz   object)r   rA   rV   gX9v@r%   gT㥛 	@r   )dictr   randomchoiceastyper   )	r   r~   r   r   r   valry   ru   r   s	         @@@r   test_rankdata_object_stringz(TestRankData.test_rankdata_object_string   sZ   	: 	: 	:	7 	7 	7	? 	? 	? 	? 	?	M 	M 	M 	M 	M 	M	: 	: 	: x)= = =	: 	: 	: 	: 	:
 NMMBI$$S#..///BI$$S#..55h??@@@h111BBBBI$$S#..55h??@@@@@r   c           	         t          |d          rh|                    ddg|j                  }t          |          }t	          ||                    ddg|                     |                               |                    ddg|j                  }t          |          }t	          ||                    ddg|                     |                               |                    ddg|j                  }t          |          }t	          ||                    ddg|                     |                               d S )	Nuint64l            l           r   r   r   rH   l)hasattrrB   r   r   r	   rF   rJ   )r   rE   r_   rK   s       r   test_large_intzTestRankData.test_large_int   s0   2x   	X::ug.bi:@@DAArzz3*D<N<NRT<N<U<UzVVWWWzz5'*"(z;;TNN2::sCj8J8Jb8J8Q8Q:RRSSSzz5(+28z<<TNN2::sCj8J8Jb8J8Q8Q:RRSSSSSr   r6   )i'  i i@B c                     |                     |          }t          |          }d|dz   z  }|                    ||z  |                     |                    }t	          ||           d S )Ng      ?rA   rH   r   )onesr   rB   rF   r	   )r   r6   rE   r_   rK   expected_rankrefs          r   test_big_tiezTestRankData.test_big_tie   sj    wwqzzTNNq1ujj-T5G5G25G5N5NjOO3r   c                 ,   |                     g dg dg          }|                     g dg dg          }t          |d          }t          ||           |                     g dg dg          }t          |d	          }t          ||           d S )
N)r   rV   rA   )   rV   rV   )r   r&   r   )r   r&   r   r   rY   r   r    r   )r    r&   r&   rA   )rB   r   r	   )r   rE   r_   	expected0r0	expected1r1s          r   	test_axiszTestRankData.test_axis   s    zz999iii011JJ}}}=>>	d###I&&&JJnnn=>>	d###I&&&&&r   )r?   r   r   r   r   r   rA   rC   c                 $   d}|                      ||          }|                    |          }t          |||          }t          |j        |           t          |j        |           t          ||                    ||                     d S )N)r%   r   rH   )rC   rW   r   )rF   zerosr   r   rU   r   r	   rZ   )r   rW   rC   rE   rU   rF   r_   rK   s           r   test_size_0_axiszTestRankData.test_size_0_axis   s     **6b*99xxT&t444QWe$$$QWm,,,288E8??@@@@@r   c                    d}t           j                            d          }|                    |          }|                    |          dk     }|                    |          dk     }|                    |          dk     }t           j        ||<   t           j         ||<   ||         t           j        z
   d fd}	t          |||d	          }
 |	|||
          }t          |
|           d S )N)ra         im)r(   g?g?c                     t          j        |           }t          j        |           }| |          }t          ||          }||| <   t           j        ||<   |S rh   )r   
zeros_likeisnanr   nan)r5   rC   r7   rk   a_compressedress         r   rank_1d_omitz:TestRankData.test_nan_policy_omit_3d.<locals>.rank_1d_omit   sS    -""CAaR5L<00CCGVCFJr   c                 :    t          j        fd||           S )Nc                      |           S rh   r<   )r5   rC   r   s    r   <lambda>zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>   s    a1H1H r   )r   apply_along_axis)r5   rC   rW   r   s    ` r   	rank_omitz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omit   s-    &'H'H'H'H'H'+Q0 0 0r   omitrW   
nan_policyrY   )r   r   RandomStater   infr   r   )r   rW   rC   rU   rngr5   rk   rl   r4   r   r   res0r   s               @r   test_nan_policy_omit_3dz$TestRankData.test_nan_policy_omit_3d   s    i##H--JJEJ""JJEJ""S(JJEJ""S(JJEJ""S(v!w!	!rv	 	 		0 	0 	0 	0 	0 q&t???yF...3%%%%%r   c                    dt           j        dgddt           j        gg dg}t          t          |d d          dt           j        d	d
dt           j        dddg	           t          t          |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%   r   rV   rA   rV   rV   r   r   r   g      @g      @r'   r   	propagater   r   r   r   r   r_   s     r   test_nan_policy_2d_axis_nonez)TestRankData.test_nan_policy_2d_axis_none   s    BFAArv		 	8DtGGGBBFBBG	I 	I 	I8DtLLLFBFBFBFBFBFFBFBF4	5 	5 	5 	5 	5r   c                 4   ddddt           j        t           j        g}t          j        t          d          5  t          |d           d d d            n# 1 swxY w Y   dt           j        dgd	dt           j        gt           j        ddgg}t          j        t          d          5  t          |dd
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          |dd
           d d d            d S # 1 swxY w Y   d S )Nr   rV   r%   zThe input contains nan)matchraiser   r   r   rA   )r   r   pytestraises
ValueErrorr   r   s     r   test_nan_policy_raisez"TestRankData.test_nan_policy_raise  s   1aRVRV,]:-EFFF 	/ 	/Tg....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ BFAArvA  ]:-EFFF 	7 	7Tg6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ]:-EFFF 	7 	7Tg6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s5   AAA(CCC-DDDc           	         ddddt           j        t           j        g}t          t          |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
t           j        t           j        gdt           j        t           j        gdt           j        t           j        gg           t          t          |d
d	          t           j        t           j        t           j        gt           j        t           j        t           j        gg dg           d S )Nr   rV   r%   r   r   r   r   r   r   rA   )rA   r$   r$   r   r   s     r   test_nan_policy_propagatez&TestRankData.test_nan_policy_propagate  s-   1aRVRV,8D[AAAFBFBFBFBFBFK	M 	M 	M BFAArv		 	8Dq[III///1	2 	2 	2 	8Dq[IIIVRVRV4VRVRV4)MM+	, 	, 	, 	, 	,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   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^   )r&         @rS   r   r&   )r   r    rS   r    r   )r   r'   rS   r'   r   )r   r   r    r   r   )r   r    rS   r'   r   rO   rP   g      ?@casec                     |\  }}}t          |                    |          |          }|                    ||                     ||                    }t          ||           d S )Nr   rH   r   )r   rB   rF   r	   )r   r   rE   valuesrC   r+   rK   r   s           r   
test_caseszTestRankData.test_casesT  sj    #' RZZ''777jj););Fr);)J)JjKK3r   )r?   F)r9   r:   r;   rF   r   rT   r   markparametrizeranger\   r   r.   r   r   r   r   r   methodsr   r   r   r   r   r   r!   _rankdata_casesr   r<   r   r   r>   r>   L   sm       R R R R
L L L3 3 3 [Wyk22[Vd%6UU1XX%677V V 87 32VO O O% % %6 A A ABT T T [S":":":;;    <; 	' 	' 	' ;::G[VaV,,[Xw//A A 0/ -,A [VUU1XX..[Xw//& & 0/ /.&<	5 	5 	57 7 7", , ,&'	Y' 
UB' 
UB	'
 
Wb' 
Y' 	C5!' u' u' #' 	C5!' 
)___5' 
%1'  
%1!'" 
'???3#'$ 
)___5%'( 
)___5)'* 
%1+', 
%1-'. 
'???3/'0 
)___51'4 
		y*>*>*>?5'6 
		u&:&:&:;7'8 
		u&:&:&:;9': 
		w(<(<(<=;'< 
		y*>*>*>?='@ 
#	"	"I/H/H/HIA'B 
#	"	"E+D+D+DEC'D 
#	"	"E+D+D+DEE'F 
#	"	"G-F-F-FGG'H 
#	"	"I/H/H/HII'L Iyryd334M' 'OR [V_55    65     r   r>   )numpyr   numpy.testingr   r   r   scipyr   scipy.conftestr   scipy.statsr   r   scipy._lib._array_apir	   r
   r   r>   r<   r   r   <module>r      s       : : : : : : : :        . . . . . . , , , , , , , , D D D D D D D D?H ?H ?H ?H ?H ?H ?H ?HD 5>""L  L  L  L  L  L  L  #"L  L  L r   