
    Џkhh1                         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y)    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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      W/var/www/teggl/fontify/venv/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_overflowD   sg    aIIbiilD)FF!%S#T1Wt^ 4uQTAX FFGr   N)__name__
__module____qualname__r   r   r"   r.   r8    r   r   r   r   
   s    !"FHr   r   c                      e Zd Zd:d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ed        Zd Zej                  j                  dg d      d        Zd Zg dZej                  j                  dddg      ej                  j                  de      d               Zej                  j                  d e	d	            ej                  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 d/dg d0fg d/dg d1fg d/dg d2fg d/dg d3fg d/dg d4fd5gd6z  d ej2                  d!d7      fZej                  j                  d8e      d9        Zy);TestRankDataaveragec                    |r|j                  d      j                  S |dk(  r|j                  d      j                  S |j                  d      j                  S )Nr   r?      )asarrayr   )r   methodhas_nansxps       r   desired_dtypezTestRankData.desired_dtypeO   sG    ::b>''''-y'8rzz"~##Qbjjm>Q>QQr   c           	          |j                  g |j                        }t        |      }t        ||j                  g | j	                  |                   y)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   sF    JJrJ*QK2::b0B0Bb0B0I:JKr   c                     t        g       }t        |t        j                  g              t        g d      }t	        |g d       y )N(   
      rO   2   r'   r&   r    r&         @)r   r   r   r   r   )r   rK   s     r   	test_listzTestRankData.test_listZ   s3    RL1bhhrl+)*Q12r   shape)r   rA      axisNr%   c           	          |j                  ||j                        }t        ||      }|dn|}t        ||j                  || j	                  |                   y )Nr   rW   )r   rH   )emptyrJ   r   r	   rF   )r   rU   rW   rE   r5   rK   expected_shapes          r   test_empty_multidimz TestRankData.test_empty_multidimb   sW     HHU"((H+QT"!%5288N$:L:LPR:L:S8TUr   c           	          dg}|j                  ||j                        }t        |      }t        ||j                  dg| j	                  |                   y)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   sO    uJJt288J,QK2::se43E3E3E3L:MNr   c                 H   | j                  |      }g d}|j                  g d|      }|j                  ||j                        }t        |      }t	        ||       g d}|j                  g d|      }|j                  ||j                        }t        |      }t	        ||       g d}|j                  g d|      }|j                  ||j                        }t        |      }t	        ||       |j                  |d	      }t        |      }t	        ||       y
)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   s    **b*1::o]:CJJt288J,QK8$#::7}:MJJt288J,QK8$'::<M:RJJt288J,QK8$ jjF#SM8$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Nr<   .0ijs     r   	<genexpr>zMTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<genexpr>        -aAE-   sumr5   rk   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rg   r<   rh   s     r   rl   zMTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<genexpr>   s     *1Q*rn   ro   rq   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 rg   )	enumerate)r5   rj   xrr   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)r5   rj   rk   ru   rr   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rg   r<   rh   s     r   rl   zOTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<genexpr>   rm   rn   )r   uniquerp   )r5   brk   s     `r   
dense_rankz<TestRankData.test_rankdata_object_string.<locals>.dense_rank   s4    		!A789!A-1---999s   =)minmaxordinalr?   densec                 X    dD ]$  }t        | |      }t        | |   |              & y )N)r   r   r   r   r?   rC   )r   r   )r5   rC   r7   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   rV   gX9v@r%   gT㥛 	@r   )dictr   randomchoiceastyper   )	r   ry   r|   r   r   valru   rr   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           	      2   t        |d      rY|j                  ddg|j                        }t        |      }t	        ||j                  ddg| j                  |                   |j                  ddg|j                        }t        |      }t	        ||j                  ddg| j                  |                   |j                  ddg|j                        }t        |      }t	        ||j                  ddg| j                  |                   y )	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   s    2x ::ug.bii:@DAArzz3*D<N<NRT<N<UzVWzz5'*"((z;TN2::sCj8J8Jb8J8Q:RSzz5(+288z<TN2::sCj8J8Jb8J8Q:RSr   r6   )i'  i i@B c                     |j                  |      }t        |      }d|dz   z  }|j                  ||z  | j                  |            }t	        ||       y )Ng      ?rA   rH   r   )onesr   rB   rF   r	   )r   r6   rE   r_   rK   expected_rankrefs          r   test_big_tiezTestRankData.test_big_tie   sT    wwqzTNq1ujj-T5G5G25G5NjO3r   c                     |j                  g dg dg      }|j                  g dg dg      }t        |d      }t        ||       |j                  g dg dg      }t        |d	      }t        ||       y )
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   sg    zz9i01JJ}=>	d#I&JJn=>	d#I&r   )r?   r   r   r   r   r   rA   rC   c                     d}| j                  ||      }|j                  |      }t        |||      }t        |j                  |       t        |j
                  |       t        ||j                  ||             y )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   sl     **6b*9xxT&t4QWWe$QWWm,288E8?@r   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)ra         im)r(   g?g?c                     t        j                  |       }t        j                  |       }| |    }t        ||      }||| <   t         j                  ||<   |S rg   )r   
zeros_likeisnanr   nan)r5   rC   r7   rj   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 rg   r<   )r5   rC   r   s    r   <lambda>zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>   s    a1H r   )r   apply_along_axis)r5   rC   rW   r   s    ` r   	rank_omitz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omit   s    &&'H'+Q0 0r   omitrW   
nan_policyrY   )r   r   RandomStater   infr   r   )r   rW   rC   rU   rngr5   rj   rk   r4   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   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    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   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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   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RVVRVV,8D[AFFBFFBFFBFFBFFBFFK	M BFFAArvv 	8Dq[I///1	2 	8Dq[IVVRVVRVV4VVRVVRVV4)+	,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        |j                  |      |      }|j                  || j                  ||            }t        ||       y )Nr   rH   r   )r   rB   rF   r	   )r   r   rE   valuesrC   r+   rK   r   s           r   
test_caseszTestRankData.test_casesT  sO    #' RZZ'7jj););Fr);)Jj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   s   R
L3 [[Wyk2[[Vd%6U1X%67V 8 3VO%6 A ABT [[S":;  < 	' ;G[[VaV,[[Xw/A 0 -A [[VU1X.[[Xw/& 0 /&<	5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IA'B 
#E+DEC'D 
#E+DEE'F 
#G-FGG'H 
#I/HII'L Iyryyd34M'OR [[V_5  6 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      sL     :   . , D?H ?HD 5>>"L  L  #L r   