
    xf9,                     |   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      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
tiecorrectc                   *    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      =/usr/lib/python3/dist-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_overflowB   sg    aIIbiilD)FF!%S#T1Wt^ 4uQTAX FFGr   N)__name__
__module____qualname__r   r   r   r*   r4    r   r   r   r      s    !"FHr   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	g dZ
ej                  gej                  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   r1   rs      r   r   zTestRankData.test_emptyL   sV    HHRs#QK1bhhr<=RL1bhhr<=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   datar1   r>   s       r   r   zTestRankData.test_oneT   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.)r@   
   2   )r   r   r   r
   )(   rC      rC   rD   )r#   r"   r   r"         @)   rH   rH   rC   rC   rC   )rG   rG   rG   r   r   r      r!   N)r   r   r   r=   r   r   reshape)r   rA   r'   r1   r>   a2ds         r   r*   zTestRankData.test_basic]   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 )N   c              3   (   K   | ]	  }|k    y wNr8   .0ijs     r   	<genexpr>zMTestRankData.test_rankdata_object_string.<locals>.min_rank.<locals>.<genexpr>~        -aAE-   sumr1   rT   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rP   r8   rQ   s     r   rU   zMTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<genexpr>   s     *1Q*rW   rX   rZ   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 rP   )	enumerate)r1   rS   xr[   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)r1   rS   rT   r^   r[   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 )NrN   c              3   (   K   | ]	  }|k    y wrP   r8   rQ   s     r   rU   zOTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<genexpr>   rV   rW   )r   uniquerY   )r1   brT   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)rk   rl   ro   rm   rn   methodr   r   )r1   rr   r3   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   rN   rI   gX9v@r!   gT㥛 	@r
   )dictr   randomchoiceastyper   )	r   rb   re   rj   ru   valr^   r[   rt   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   rA   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      ?rN   ztest failed with n=%d)r   onesr=   r   r   )r   r2   rA   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   rI   rN   )   rI   rI   )r   r"   r   )r   r"   r   r   axisr   r   r   )r   r"   r"   rN   rs   )r   rA   	expected0r0	expected1r1s         r   	test_axiszTestRankData.test_axis   sU    ""$	d#2y)!#%	d#2y)r   )rn   rk   rl   ro   rm   r   r   r   rN   zmethod, dtypec                     d}t        j                  |      }t        |||      }t        |j                  |       t        |j
                  |       y )N)r!   r   )rr   r   )r   zerosr   r   shaper   )r   r   rr   r   r   rA   r>   s          r   test_size_0_axiszTestRankData.test_size_0_axis   s@     xxT&t4QWWe$QWWe$r   r!   rr   c                    d}t         j                  j                  t        t	        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)rH         falafel)r$   g?g?c                     t        j                  |       }t        j                  |       }| |    }t        ||      }||| <   t         j                  ||<   |S rP   )r   
zeros_likeisnanr   nan)r1   rr   r3   rS   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 rP   r8   )r1   rr   r   s    r   <lambda>zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>   s    a1H r   )r   apply_along_axis)r1   rr   r   r   s    ` r   	rank_omitz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omit   s    &&'H'+Q0 0r   omitr   
nan_policyr   )	r   r   default_rngabshashr   infr   r   )r   r   rr   r   rngr1   rS   rT   r0   r   r   res0r   s               @r   test_nan_policy_omit_3dz$TestRankData.test_nan_policy_omit_3d   s     ii##CY$89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   rI   rN   rI   rI   r   r   r   g      @g      @r#   r   	propagater   r   r   r   r   rA   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   rI   r!   zThe input contains nan)matchraiser   r   r   rN   )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   rI   r!   r   r   r   r   r   r   rN   )rN   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   N)r5   r6   r7   r   r   r*   r   r   r   r   methodsr   r   int_dtypesr   markparametrizerd   r   ranger   r   r   r   r8   r   r   r:   r:   J   s    >A(<AB*<
* <Gjj\RWWIaK'F[[VaV,[[_c'6.BC% D -% [[VU1X.[[Xw/& 0 /&<	57",r   r:   rn   rk   rl   ro   rm   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"         @rG   r   r"   )r   r   rG   r   r   )r   r#   rG   r#   r   )r   r   r   r   r   )r   r   rG   r#   r   rC   rF   g      ?@c                  T    t         D ]  \  } }}t        | |      }t        ||       ! y )Nrq   )_casesr   r   )valuesrr   r'   r>   s       r   
test_casesr   C  s.    $* ( VF+1h'(r   )numpyr   numpy.testingr   r   scipy.statsr   r   r   r   r:   r   r   r   r8   r   r   <module>r      s    : , ?H ?HDL, L,^'
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   