
    S_f-                        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      Z G 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$z  d ej                  dd%      fZd& Zy)'    N)assert_equalassert_array_equal)rankdata
tiecorrect)np_longc                   *    e Zd Zd Zd Zd Zd Zd Zy)TestTieCorrectc                 |    t        j                  g t         j                        }t        |      }t	        |d       y)z9An empty array requires no correction, should return 1.0.dtype      ?Nnparrayfloat64r   r   selfrankscs      ;lib/python3.12/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       y)z;A single element requires no correction, should return 1.0.r   r   Nr   r   s      r   test_onezTestTieCorrect.test_one   s,    #bjj1uQr   c                     t        j                  d      }t        |      }t        |d       t        j                  d      }t        |      }t        |d       y)z*Arrays with no ties require no correction.       @r         @N)r   aranger   r   r   s      r   test_no_correctionz!TestTieCorrect.test_no_correction   sD    		#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	        ||       y	)
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    sZ    )uJJ!Q$(q!tax00Q! )uJJ!Q$(q!tax00Q! -.uJJ!Q$(q!tax00Q! 23uJJ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
         y )N)i     r   r"   )r   repeatr   r%   r   r   r   float)r   ntiekanouts         r   test_overflowzTestTieCorrect.test_overflowC   sg    aIIbiilD)FF!%S#T1Wt^ 4uQTAX FFGr   N)__name__
__module____qualname__r   r   r   r+   r5    r   r   r	   r	   	   s    !"FHr   r	   c                   0   e Zd Zd Zej
                  j                  ddg      ej
                  j                  ddg ed            d               Zd Z	d	 Z
d
 Zd Zd Zd Zg dZej"                  gegdz  z   Zej
                  j                  dddg      ej
                  j                  d eee            d               Zej
                  j                  d ed            ej
                  j                  de      d               Zd Zd Zd Zy)TestRankDatac                 "   t        j                  g t              }t        |      }t	        |t        j                  g t         j
                               t        g       }t	        |t        j                  g t         j
                               y)z0stats.rankdata([]) should return an empty array.r   Nr   r   intr   r   r   )r   r2   rs      r   r   zTestRankData.test_emptyM   sV    HHRs#QK1bhhr<=RL1bhhr<=r   shape)r         axisNr"   c                     t        j                  |t              }t        ||      }|dn|}t	        |j
                  |       t	        |j                  t         j                         y )Nr   rC   )r   )r   emptyr>   r   r   r@   r   r   )r   r@   rC   r2   r?   expected_shapes         r   test_empty_multidimz TestRankData.test_empty_multidimU   sK     HHU#&QT"!%5QWWn-QWWbjj)r   c                 ,   dg}t        j                  |t              }t        |      }t	        |t        j                  dgt         j
                               t        |      }t	        |t        j                  dgt         j
                               y)z/Check stats.rankdata with an array of length 1.d   r   r   Nr=   )r   datar2   r?   s       r   r   zTestRankData.test_one^   sa    uHHT%QK1bhhuBJJ?@TN1bhhuBJJ?@r   c                    g d}t        j                  g dt         j                        }t        j                  |t              }t	        |      }t        ||       t	        |      }t        ||       g d}t        j                  g dt         j                        }t        j                  |t              }t	        |      }t        ||       t	        |      }t        ||       g d}t        j                  g dt         j                        }t        j                  |t              }t	        |      }t        ||       t	        |      }t        ||       |j                  dd	      }t	        |      }t        ||       y
)zBasic tests of stats.rankdata.)rJ   
   2   )r   r   r   r   )(   rM      rM   rN   )r$   r#   r   r#         @)   rR   rR   rM   rM   rM   )rQ   rQ   rQ   r   r   r   rB   r"   N)r   r   r   r>   r   r   reshape)r   rK   r(   r2   r?   a2ds         r   r+   zTestRankData.test_basicg   s   88O2::>HHT%QK1h'TN1h'#885RZZHHHT%QK1h'TN1h''88:"**MHHT%QK1h'TN1h'ii1oSM1h'r   c                    d d fd}fd}d }t        |||      fd}g d} |t        j                  j                  |d	              |t        j                  j                  |d	      j	                  d
             t        j
                  g dd
      } |t        j                  j                  |d	      j	                  d
             y )Nc                 Z    | D cg c]  dt        fd| D              z    c}S c c}w )NrA   c              3   (   K   | ]	  }|k    y wNr9   .0ijs     r   	<genexpr>zMTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<genexpr>        -aAE-   sumr2   r\   s    `r   min_rankz:TestRankData.test_rankdata_object_string.<locals>.min_rank   s'    789!A-1---999s   (c                 T    | D cg c]  t        fd| D               c}S c c}w )Nc              3   (   K   | ]	  }|k    y wrX   r9   rY   s     r   r]   zMTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<genexpr>   s     *1Q*r_   r`   rb   s    `r   max_rankz:TestRankData.test_rankdata_object_string.<locals>.max_rank   s"    456qC***666s   %c                 \     t        |       D cg c]	  \  }}||f c}}      S c c}}w rX   )	enumerate)r2   r[   xrc   s      r   ordinal_rankz>TestRankData.test_rankdata_object_string.<locals>.ordinal_rank   s(    	!=1aV=>>=s   (
c                 r    t         |        |             D cg c]  \  }}||z   dz   c}}S c c}}w )Nr   )zip)r2   r[   r\   rf   rc   s      r   average_rankz>TestRankData.test_rankdata_object_string.<locals>.average_rank   s2    .1(1+x{.KLdaQUcMLLLs   3c                     t        j                  |       }| D cg c]  dt        fd|D              z    c}S c c}w )NrA   c              3   (   K   | ]	  }|k    y wrX   r9   rY   s     r   r]   zOTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<genexpr>   r^   r_   )r   uniquera   )r2   br\   s     `r   
dense_rankz<TestRankData.test_rankdata_object_string.<locals>.dense_rank   s4    		!A789!A-1---999s   =)minmaxordinalaveragedensec                 X    dD ]$  }t        | |      }t        | |   |              & y )N)rs   rt   rw   ru   rv   methodr   r   )r2   rz   r4   rankfs      r   check_ranksz=TestRankData.test_rankdata_object_string.<locals>.check_ranks   s3    E :q0"3fa(89:r   )	foobarquxxyzabcefgaceqweqaz   object)r   rA   rB   gX9v@r"   gT㥛 	@r   )dictr   randomchoiceastyper   )	r   rj   rm   rr   r}   valrf   rc   r|   s	         @@@r   test_rankdata_object_stringz(TestRankData.test_rankdata_object_string   s    	:	7	?	M	: x)=	:
 NBII$$S#./BII$$S#.55h?@hh1BBII$$S#.55h?@r   c                    t        j                  ddgt         j                        }t        |      }t	        |ddg       t        j                  ddgt         j
                        }t        |      }t	        |ddg       t        j                  ddgt         j
                        }t        |      }t	        |ddg       y )Nl            l           r   r   r   l)r   r   uint64r   r   int64)r   rK   r?   s      r   test_large_intzTestRankData.test_large_int   s    xx(		:TN1sCj)xx(9TN1sCj)xx):TN1sCj)r   c                     dD ]C  }t        j                  |t              }t        |      }d|dz   z  }t	        |||z  d|z         E y )N)i'  i i@B r   g      ?rA   ztest failed with n=%d)r   onesr>   r   r   )r   r3   rK   r?   expected_ranks        r   test_big_tiezTestRankData.test_big_tie   sP    ) 	<A771C(DA1q5MMq-$"66:<		<r   c                     g dg dg}g dg dg}t        |d      }t        ||       g dg dg}t        |d	      }t        ||       y )
N)r   rB   rA   )   rB   rB   )r   r#   r   )r   r#   r   r   rE   r   r   r   )r   r#   r#   rA   r{   )r   rK   	expected0r0	expected1r1s         r   	test_axiszTestRankData.test_axis   sU    ""$	d#2y)!#%	d#2y)r   )rv   rs   rt   rw   ru   r   r   rA   zmethod, dtypec                     d}t        j                  |      }t        |||      }t        |j                  |       t        |j
                  |       y )N)r"   r   )rz   rC   )r   zerosr   r   r@   r   )r   rC   rz   r   r@   rK   r?   s          r   test_size_0_axiszTestRankData.test_size_0_axis   s@     xxT&t4QWWe$QWWe$r   rz   c                    d}t         j                  j                  d      }|j                  |      }|j                  |      dk  }|j                  |      dk  }|j                  |      dk  }t         j                  ||<   t         j                   ||<   ||   t         j                  z
   d fd}	t        |||d	      }
 |	|||
      }t        |
|       y )N)rR         im)r%   g?g?c                     t        j                  |       }t        j                  |       }| |    }t        ||      }||| <   t         j                  ||<   |S rX   )r   
zeros_likeisnanr   nan)r2   rz   r4   r[   a_compressedress         r   rank_1d_omitz:TestRankData.test_nan_policy_omit_3d.<locals>.rank_1d_omit   sQ    --"CAaR5L<0CCGVVCFJr   c                 <    t        j                  fd||       S )Nc                      |       S rX   r9   )r2   rz   r   s    r   <lambda>zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>   s    a1H r   )r   apply_along_axis)r2   rz   rC   r   s    ` r   	rank_omitz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omit   s    &&'H'+Q0 0r   omitrC   
nan_policyrE   )r   r   RandomStater   infr   r   )r   rC   rz   r@   rngr2   r[   r\   r1   r   r   res0r   s               @r   test_nan_policy_omit_3dz$TestRankData.test_nan_policy_omit_3d   s     ii##H-JJEJ"JJEJ"S(JJEJ"S(JJEJ"S(vv!w!	!rvv		0 q&t?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	       y )Nr   r"   r   rB   rA   rB   rB   r   r   r   g      @g      @r$   r   	propagater   r   r   r   r   rK   s     r   test_nan_policy_2d_axis_nonez)TestRankData.test_nan_policy_2d_axis_none   s    BFFAArvv 	8DtGBBFFBBG	I8DtLFFBFFBFFBFFBFFBFFFFBFFBFF4	5r   c                 .   ddddt         j                  t         j                  g}t        j                  t        d      5  t        |d       d d d        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        t        j                  t        d      5  t        |dd
       d d d        y # 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   y xY w)Nr   rB   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RVVRVV,]]:-EF 	/Tg.	/ BFFAArvvA  ]]:-EF 	7Tg6	7 ]]:-EF 	7Tg6	7 	7	/ 	/	7 	7	7 	7s$    C3)C?D3C<?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       y )Nr   rB   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RVVRVV,8D[AFFBFFBFFBFFBFFBFFK	M BFFAArvv 	8Dq[I///1	2 	8Dq[IVVRVVRVV4VVRVVRVV4)+	,r   )r6   r7   r8   r   r   markparametrizerangerH   r   r+   r   r   r   r   methodsr   r   r   dtypesrl   r   r   r   r   r   r9   r   r   r;   r;   K   s*   > [[Wyk2[[Vd%6U1X%67* 8 3*A(<AB*<
* <Gjj\WIaK'F[[VaV,[[_c'6.BC% D -% [[VU1X.[[Xw/& 0 /&<	57",r   r;   rv   rs   rt   rw   ru   rJ   r   )rJ   rJ   rJ   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )rJ   ,  r   r   )rJ   r   r   r   )r   r!   r$   r!   )r   r   r$   r   )r   r   r$   r   )r   r   r   r   )r   r   r$   r   )rJ   r   r   r   rJ   )r#         @rQ   r   r#   )r   r   rQ   r   r   )r   r$   rQ   r$   r   )r   r   r   r   r   )r   r   rQ   r$   r   rM   rP   g      ?@c                  T    t         D ]  \  } }}t        | |      }t        ||       ! y )Nry   )_casesr   r   )valuesrz   r(   r?   s       r   
test_casesr   M  s.    $* ( VF+1h'(r   )numpyr   numpy.testingr   r   r   scipy.statsr   r   scipy._lib._utilr   r	   r;   r   r   r   r9   r   r   <module>r      s    :  , $?H ?HDU, U,p'
B'
 O'
 O	'

 "'
 B'
 
UIu'
 
UEC5'
 
UEC5'
 
UGcU'
 
UIu'
 i1'
 e_-'
  e_-!'
" g/#'
$ i1%'
( i1)'
* e_-+'
, e_--'
. g//'
0 i11'
4 9&:;5'
6 5"677'
8 5"679'
: 7$89;'
< 9&:;='
@ 	+DEA'
B '@AC'
D '@AE'
F )BCG'
H 	+DEI'
L 	TBY	9299S$/0M'
T(r   