
    >qj52                         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mZmZ ej$                  j&                  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_casexp_result_typexp_default_dtypec                   *    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      Z/opt/rentech/trading_bot/.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_overflowG   sg    aIIbiilD)FF!%S#T1Wt^ 4uQTAX FFGr   N)__name__
__module____qualname__r   r   r$   r0   r:    r   r   r   r      s    !"FHr   r   c                      e Zd Z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ej                  j                  dd      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 d0fg d-d"g d1fg d-d#g d2fg d3dg d4fg d3d g d5fg d3d!g d6fg d3d"g d7fg d3d#g d8fd9gd:z  d# ej6                  d%d;      fZej                  j                  d<e      d=        Zy)>TestRankDatac                    t        |d|      S )NT)force_floatingxp)r   )r   xrC   s      r   desired_dtypezTestRankData.desired_dtypeR   s    a<<r   c           
          |j                  g |j                        }t        |      }t        ||j                  g | j	                  ||                   y)z;stats.rankdata of empty array should return an empty array.r   rC   Nasarrayint64r   r	   rE   )r   rC   r7   rs       r   r   zTestRankData.test_emptyU   sH    JJrJ*QK2::b0B0B10B0L:MNr   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_list[   s3    RL1bhhrl+)*Q12r   shape)r         axisNr'   c           
          |j                  ||j                        }t        ||      }|dn|}t        ||j                  || j	                  ||                   y )Nr   rX   )r   rG   )emptyrJ   r   r	   rE   )r   rU   rX   rC   r7   rK   expected_shapes          r   test_empty_multidimz TestRankData.test_empty_multidimc   sY     HHU"((H+QT"!%5288N$:L:LQSU:L:V8WXr   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   rG   NrH   )r   rC   datar7   rK   s        r   r   zTestRankData.test_onek   sQ    uJJt288J,QK2::se43E3EaB3E3O:PQr   c                 :   t        |      }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.)r_   rO   rQ   )r"   r   r!   r   rM   rR   )   rb   rb   rO   rO   rO   )rS   rS   rS   r!   r!   r!   )rW   r'   N)r   rI   rJ   r   r	   reshape)r   rC   rE   r`   r-   r7   rK   a2ds           r   r0   zTestRankData.test_basicr   s    (,::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 )NrV   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r7   rl   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rh   r>   ri   s     r   rm   zMTestRankData.test_rankdata_object_string.<locals>.max_rank.<locals>.<genexpr>   s     *1Q*ro   rp   rr   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 rh   )	enumerate)r7   rk   rD   rs   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)r7   rk   rl   rv   rs   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 )NrV   c              3   (   K   | ]	  }|k    y wrh   r>   ri   s     r   rm   zOTestRankData.test_rankdata_object_string.<locals>.dense_rank.<locals>.<genexpr>   rn   ro   )r   uniquerq   )r7   brl   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)r   r   r   r   r   method)r   r   )r7   r   r9   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   rV   rW   gX9v@r'   gT㥛 	@r   )dictr   randomchoiceastyper   )	r   ry   r|   r   r   valrv   rs   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   torchz#`take_along_axis` fails with uint64)reasonc                     |j                  ddg|j                        }t        |      }| j                  ||      }t	        ||j                  ddg|             y )N                       r   rG   r   r!   )rI   uint64r   rE   r	   r   rC   r`   rK   rE   s        r   test_large_uintzTestRankData.test_large_uint   sV    zz5'*"))z<TN**4B*72::sCj:FGr   c                 N   |j                  ddg|j                        }t        |      }| j                  ||      }t	        ||j                  ddg|             |j                  ddg|j                        }t        |      }t	        ||j                  ddg|             y )Nr   r   r   rG   r   r!   l)rI   rJ   r   rE   r	   r   s        r   test_large_intzTestRankData.test_large_int   s    zz5'*"((z;TN**4B*72::sCj:FGzz5(+288z<TN2::sCj:FGr   r8   )i'  i i@B c                     |j                  |      }t        |      }d|dz   z  }|j                  ||z  | j                  ||            }t	        ||       y )Ng      ?rV   rG   r   )onesr   rI   rE   r	   )r   r8   rC   r`   rK   expected_rankrefs          r   test_big_tiezTestRankData.test_big_tie   sW    wwqzTNq1ujj-T5G5GQS5G5TjU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   rW   rV   )   rW   rW   )r   r(   r   )r!   r(   r!   r   rZ   r   r"   r!   )r"   r(   r(   rV   )rI   r   r	   )r   rC   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   rV   r   c                     d}|j                  |      }| j                  ||      }t        |||      }t        |j                  |       t        |j
                  |       t        ||j                  ||             y )N)r'   r   rG   )r   rX   r   )zerosrE   r   r   rU   r   r	   r[   )r   rX   r   rC   rU   r`   rE   rK   s           r   test_size_0_axiszTestRankData.test_size_0_axis   sl     xx**4B*7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)rb         im)r*   g?g?c                     t        j                  |       }t        j                  |       }| |    }t        ||      }||| <   t         j                  ||<   |S rh   )r   
zeros_likeisnanr   nan)r7   r   r9   rk   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 rh   r>   )r7   r   r   s    r   <lambda>zITestRankData.test_nan_policy_omit_3d.<locals>.rank_omit.<locals>.<lambda>   s    a1H r   )r   apply_along_axis)r7   r   rX   r   s    ` r   	rank_omitz7TestRankData.test_nan_policy_omit_3d.<locals>.rank_omit   s    &&'H'+Q0 0r   omitrX   
nan_policyrZ   )r   r   RandomStater   infr   r   )r   rX   r   rU   rngr7   rk   rl   r6   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   rW   rV   rW   rW   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   rW   r'   zThe input contains nan)matchraiser   r   r   rV   )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   rW   r'   r   r   r   r   r   r   rV   )rV   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_   )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                     |\  }}}|j                  |      }t        |j                  |      |      }|j                  || j                  ||            }t        ||       y )Nr   rG   r   )rI   r   rE   r	   )r   r   rC   valuesr   r-   rK   r   s           r   
test_caseszTestRankData.test_casesX  s]    #' F#RZZ'7jj););Fr);)JjK3r   )r;   r<   r=   rE   r   rT   r   markparametrizeranger]   r   r0   r   r   skip_xp_backendsr   r   r   r   methodsr   r   r   r   r   r   r#   _rankdata_casesr   r>   r   r   r@   r@   O   s   =O3 [[Wyk2[[Vd%6U1X%67Y 8 3YR%6 A AB [[!!'2W!XH YHH [[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   r@   r>   r   r   <module>r      se     :   . ,5 5 ;;// ?H ?HD 5>>"N  N  #N r   