
    >qj#                         d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ egZej2                  j4                  Z ee       G d	 d
             Zy)    N)	AxisError)make_xp_test_caseeager_warnsis_numpy)xp_assert_equalxp_assert_close)array_api_extra)stats	variation)too_small_nd_omittoo_small_nd_not_omitSmallSampleWarningc                      e Zd ZdZd Zej                  j                  dddg      d        Z e	dd	      d
        Z
ej                  j                  ddej                  fd ej                  d      dz  fg       e	dd      d               Z e	dd      d        Z e	dd      d        Z e	dd      d        Z e	dd      ej                  j                  dd ej&                  d      j)                         fd ej*                  dej                        j)                         fg      d               Z e	dd      ej                  j                  ddej.                  fdej                  fg      d                Z e	dd      d!        Zd" Zd# Zej                  j9                  d$      d%        Zej                  j9                  d&      ej                  j                  d'd(gd)z  dd*ej.                  d+gg      d,               Zej                  j9                  d-      ej                  j                  ddg fdej                  gd.z  fd/ej                  fg      d0               Zej                  j9                  d$      d1        Z  e	dd2	      d3        Z!ej                  j                  d4ddg      d5        Z" e	dd2	      ej                  j                  d6d ej                  d7       ej                  d8      ej.                  dej                  d(ej                  gfdd9 ej                  d:      ej.                  dej                  dej                  gfd* ej                  d9       ej                  d;      ej.                  ej                  ej                  dej                  gfg      d<               Z# e	dd      d=        Z$y/)>TestVariationz.
    Test class for scipy.stats.variation
    c                     |j                  d      }t        t        |d      |j                  t	        j
                  d      dz               y )N      "@   ddofg      @   )aranger   r   asarraymathsqrtselfxpxs      _/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/stats/tests/test_variation.py	test_ddofzTestVariation.test_ddof   s6    IIcN	!!,bjj49J.KL    sgnr   c                     |j                  g d      }t        ||z        }|j                  |t        j                  d      z  dz        }t	        ||d       y )N      ?       @      @      @g      @      g|=)rtol)r   r   r   r   r   )r   r#   r   r   vexpecteds         r    	test_signzTestVariation.test_sign   sK    JJ+,c!e::c$))A,.q018%0r"   Tztest plain python scalar input)np_onlyreasonc                 $    t        d      dk(  sJ y )Nr*           r   r   r   s     r    test_scalarzTestVariation.test_scalar%   s     ~$$$r"   znan_policy, expected	propagateomitg@r   z"lazy -> limited nan_policy support)
eager_onlyr2   c                     |j                  d      }|j                  |d<   t        t        ||      |j	                  |             y )N      $@	   
nan_policy)r   nanr   r   r   )r   r>   r/   r   r   s        r    test_variation_nanz TestVariation.test_variation_nan*   s8    
 IIcNvv!	!
;RZZ=QRr"   c                     |j                  dd|j                  dg      }t        j                  t        d      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr'   r(   r)   zinput contains nanmatchraiser=   )r   r?   pytestraises
ValueErrorr   r   s      r    test_nan_policy_raisez#TestVariation.test_nan_policy_raise3   sK    JJS"&&#./]]:-AB 	-aG,	- 	- 	-s   AAz
dask.arrayzneeds `_axis_nan_policy`)r2   c                     t        j                  t        d      5  t        |j	                  g d      d       d d d        y # 1 sw Y   y xY w)Nzmust be one ofrB   r   r+   r,   foobarr=   )rE   rF   rG   r   r   r5   s     r    test_bad_nan_policyz!TestVariation.test_bad_nan_policy9   s=    ]]:-=> 	Bbjj+A	B 	B 	Bs   AAc                     |j                  |j                  d      d      }t        |dd      }d|j                  dgdgg      z  }t	        ||       y )	N
   )r+      r   Taxiskeepdimsg;f?r(   g      @)reshaper   r   r   r   )r   r   r   yr/   s        r    test_keepdimszTestVariation.test_keepdims>   sM    JJryy}f-aa$/BJJrd|448$r"   zaxis, expectedr   r   r   )rO   r   
fill_valuec                    |j                  d      }|dk(  r7t        j                  t        t              5  t        ||d      }d d d        nt        ||d      }t        |j                  |             y # 1 sw Y   %xY w)N)rO   r   r   rB   TrP   )zerosrE   warnsr   r   r   r   r   r   rQ   r/   r   r   rT   s         r    test_keepdims_size0z!TestVariation.test_keepdims_size0E   st    
 HHV1908MN ;adT:; ; !$6A2::h/0	; ;s   A88Bzincr, expected_fillc                     |j                  g dg dg      }t        |d|j                  d   |z   d      }t        ||j	                  d|             y )N)r   r   r+   r+   )r   r+   r,   r,   r   T)rQ   r   rR   )r+   r   rW   )r   r   shaper   full)r   increxpected_fillr   r   rT   s         r    'test_keepdims_and_ddof_eq_len_plus_incrz5TestVariation.test_keepdims_and_ddof_eq_len_plus_incrR   sK     JJl34aaaggaj4&7$G2776m7DEr"   c                 >   |j                  |j                  d      d      }t        j                  |      d   j	                  |j
                        }t        |dd      }t        ||j                  t        j                  d      dz  |j
                  g             y )	Ng       @)r+   r$   rV   r   r7   rQ   r>         ?      ?)rS   r   xpxatsetr?   r   r   r   r   r   )r   r   ar.   s       r    test_propagate_nanz TestVariation.test_propagate_nanY   ss     JJryy}g.FF1IdO'aaK82::tyy~c'9266&BCDr"   c                     t        |j                  ddgddgg      d       }t        ||j                  t        j                  d      dz               y )Nr   r   r+   r,   rQ   rf   rg   )r   r   r   r   r   )r   r   rT   s      r    test_axis_nonezTestVariation.test_axis_noneb   sF     bjj1a&1a&!12>2::diinS&89:r"   c                     |j                  g dg dg      }t        j                  t        t        f      5  t        |d       d d d        y # 1 sw Y   y xY w)NrJ   )r   rO      rN   rn   )r   rE   rF   r   
IndexErrorr   r   s      r    test_bad_axiszTestVariation.test_bad_axish   sE    JJ	9-.]]Iz23 	"ab!	" 	" 	"s   AAz5ignore:divide by zero encountered:RuntimeWarning:daskc                 2   |j                  g d      }t        |      }t        ||j                  |j                               |j	                  |d|z  g      }t        |d      }t        ||j                  |j                  |j                  g             y )N)r;         r'         rv   g      $r   rn   )r   r   r   infstack)r   r   r   rT   x2y2s         r    test_mean_zerozTestVariation.test_mean_zeron   su     JJ/0aL2::bff-.XXq$q&k"r"BJJ'789r"   z4ignore:invalid value encountered:RuntimeWarning:daskr   r4   rO   r+   r<   c                     |j                  |      }t        |      }t        ||j                  |j                  |j                               y )N)dtype)r   r   r   r?   r}   )r   r   r   rT   s       r    test_return_nanzTestVariation.test_return_nanz   s9     JJqMaL2::bffAGG:<=r"   z4ignore:Invalid value encountered:RuntimeWarning:daskr,   Nc                     |j                  d      }|dk7  r(t        t        |      5  t        ||      }d d d        nt        ||      }t	        |j                  |             y # 1 sw Y   %xY w)N)r,   r   r   )r   rn   )emptyr   r   r   r   r   r\   s         r    test_2d_size_zero_with_axisz)TestVariation.test_2d_size_zero_with_axis   sm     HHV19 /B7 ,ad+, , !$'A2::h/0	, ,s   A((A1c                     |j                  ddg      }t        t        |d      |j                  |j                                y )Nru   g      r+   r   )r   r   r   rw   )r   r   x1s      r    test_neg_infzTestVariation.test_neg_inf   s6     ZZc
#	"1-rzz266'/BCr"   z(only NumPy supports ND nan_policy="omit"c                 
   |j                  |j                  dd|j                  gdd|j                  |j                  gg      }t        t        |ddd      |j                  |j                   |j                   g             y )Nr   iir+   r8   rQ   r   r>   )r   r?   r   r   rw   )r   r   ry   s      r    test_neg_inf_nanzTestVariation.test_neg_inf_nan   sn    ZZ"&&!S"&&1r26626624 5	"11H

RVVGbffW#56	8r"   r>   c                    t        |      st        j                  d       |j                  dd|j                  dgdd|j                  dgdd|j                  dgg      }|dk(  r7t        j
                  t        t        	      5  t        |d|
      }d d d        nt        |d|
      }t        |j                  |j                  |j                  |j                  t        j                  d      dz  g             y # 1 sw Y   ]xY w)Nz(Only NumPy supports ND nan_policy='omit'r   rN   r   r+   r,   r8   rB   re   gUUUUUU?)r   rE   skipr   r?   r[   r   r   r   r   rw   r   r   )r   r>   r   r   rT   s        r    test_combined_edge_casesz&TestVariation.test_combined_edge_cases   s    |KKBCJJB*B*B*, - 08IJ @aaJ?@ @ !!
;A2::rvvrvvrvvtyy~a?O&PQR	@ @s   C==Dzddof, expectedgUUUUUU?g      ?      ?g?rf   c           
         |j                   }|j                  dd|dgg d|dd|g|dd|g||||gg dg d	g      }t        j                  t        t
        
      5  t        |d|d      }d d d        t        |       y # 1 sw Y   xY w)Nr'   r(   r)   )r4   r*   r)   r'   g      r   r   )r)   r)   r)   r)   )r4   r4   r4   r4   rB   r   r8   r   )r?   r   rE   r[   r   r   r   r   )r   r   r/   r   r?   r   r.   s          r    test_more_nan_policy_omit_testsz-TestVariation.test_more_nan_policy_omit_tests   s     ffJJc3,,c3,c3,c3,,,. / \\,4EF 	C!!$6BA	C8$	C 	Cs   A??Bc           	      (   |j                  g d      }|j                  ddd|j                  dd|j                  g      }t        |d      }t        |dd	      }t        ||j                  t	        j
                  d
      dz               ||k(  sJ y )Nr&   r   r+   r,   r   rO   r   r8   )r>   r   g      @)r   r?   r   r   r   r   )r   r   rk   nan_arT   nan_ys         r    test_variation_ddofz!TestVariation.test_variation_ddof   s~     JJ+,

Aq!RVVQ266:;aa %F;2::diinQ&678Ezzr"   )%__name__
__module____qualname____doc__r!   rE   markparametrizer0   skip_xp_backendsr6   npr?   r   r   r@   rH   rL   rU   r   tolistr`   r]   rw   rc   rl   ro   rs   filterwarningsr{   r~   r   r   r   r   r   r    r"   r    r   r      sN   M [[UQG,1 -1 d+KL% M% [[3*BFF3%ytyyq'89;< .RSS T<S
 .RS- T-
 l+EFB GB l+EF% G% l+EF[[- ("((6"2"9"9";< '"''&RVV"D"K"K"MNPQ1Q G1 l+EF[[2a[1bff+4NOF P GF
 l+EFE GE;" [[ WX	: Y	: [[ VW[[SB46Aq"&&!+<"=>> ? X> [[ VW[[- "gBFF8A:rvvGI	1I X	1 [[ WXD YD d+UV8 W8 [[\K+@AS BS d+UV[[
gbggclGBGGCL"&&!RVVS"&&I	J
c72773<BFFArvv>	?
gbggclGBGGCL"&&"&&"&&!RVVL	M	O% W%" .RS Tr"   r   )r   numpyr   rE   scipy._lib._utilr   scipy._lib._array_apir   r   r   scipy._lib._array_api_no_0dr   r   scipy._externalr	   rh   scipyr
   scipy.statsr   scipy.stats._axis_nan_policyr   r   r   lazy_xp_modulesr   r   r   r   r"   r    <module>r      sg       & J J H 2  !> > ';;//  9x x xr"   