
    bi$                         d dl Z d dl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 d dlmZmZmZ ej$                  j&                  Z e	e       G d d             Zy)	    N	variation)	AxisError)make_xp_test_caseeager_warns)xp_assert_equalxp_assert_close)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      fd ej&                  de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 e	dd	      d         Zd! Zej                  j5                  d"      d#        Zej                  j5                  d$      ej                  j                  d%d&gd'z  dd(ej*                  d)gg      d*               Zej                  j5                  d+      ej                  j                  ddg fdej                  gd,z  fd-ej                  fg      d.               Zej                  j5                  d"      d/        Z e	dd	      d0        Z e	dd	      ej                  j                  d1ddg      d2               Z  e	dd	      ej                  j                  d3d ej                  d4       ej                  d5      ej*                  dej                  d&ej                  gfdd6 ej                  d7      ej*                  dej                  dej                  gfd( ej                  d6       ej                  d8      ej*                  ej                  ej                  dej                  gfg      d9               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      [/home/cdr/jupyterlab/.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(`nan_policy` only supports NumPy backendc                 r    |j                  d      }|j                  |d<   t        t        ||      |       y )N      $@	   
nan_policy)r   nanr	   r   )r   r:   r,   r   r   s        r   test_variation_nanz TestVariation.test_variation_nan'   s/     IIcNvv!	!
;XFr   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raiser9   )r   r;   pytestraises
ValueErrorr   r   s      r   test_nan_policy_raisez#TestVariation.test_nan_policy_raise1   sM     JJS"&&#./]]:-AB 	-aG,	- 	- 	-s   AAc                     t        j                  t        d      5  t        g dd       d d d        y # 1 sw Y   y xY w)Nzmust be one ofr>   r   r(   r)   foobarr9   )rA   rB   rC   r   r2   s     r   test_bad_nan_policyz!TestVariation.test_bad_nan_policy8   s2     ]]:-=> 	6iH5	6 	6 	6s   5>z&`keepdims` only supports NumPy backendc                    |j                  |j                  d      d      }t        |dd      }t        j                  t        j
                  d      dz  gt        j
                  d      dz  gg      }t        ||       y )N
   )r(      r   Taxiskeepdimsr(      )reshaper   r   nparrayr   r	   )r   r   r   yr,   s        r   test_keepdimszTestVariation.test_keepdims>   sh     JJryy}f-aa$/88bggajl^ ggajl^- .8$r   zaxis, expectedr   r   r   )rK   r   
fill_valuec                     |j                  d      }|dk(  r7t        j                  t        t              5  t        ||d      }d d d        nt        ||d      }t        |       y # 1 sw Y   xY w)N)rK   r   r   r>   TrL   )zerosrA   warnsr   r   r   r   r   rM   r,   r   r   rS   s         r   test_keepdims_size0z!TestVariation.test_keepdims_size0G   sk     HHV1908MN ;adT:; ; !$6A8$	; ;s   A))A2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)rM   r   rN   )r(   r   rV   )r   r   shaper   full)r   increxpected_fillr   r   rS   s         r   'test_keepdims_and_ddof_eq_len_plus_incrz5TestVariation.test_keepdims_and_ddof_eq_len_plus_incrU   sK     JJl34aaaggaj4&7$G2776m7DEr   c                     |j                  |j                  dt              d      }|j                  |d<   t	        |dd      }t        |t        j                  d      d	z  |j                  gd
       y )N   dtype)r(   r!   rU   r   r4   rM   r:         ?      ?gV瞯<)atol)rP   r   floatr;   r   r	   r   r   )r   r   ar+   s       r   test_propagate_nanz TestVariation.test_propagate_nan]   s^    
 JJryy%y0':&&$aaK8DIIcN3.7eDr   z$Python list input uses NumPy backendc                 n    t        ddgddggd       }t        |t        j                  d      dz         y )Nr   r   r(   r)   rM   rh   ri   )r   r	   r   r   )r   r   rS   s      r   test_axis_nonezTestVariation.test_axis_noneg   s4     1v1v&T2499S>#-.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)NrF   )r   rK      rJ   ro   )r   rA   rB   r   
IndexErrorr   r   s      r   test_bad_axiszTestVariation.test_bad_axisn   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)r7         r$         rw   g      $r   ro   )r   r   r   infstack)r   r   r   rS   x2y2s         r   test_mean_zerozTestVariation.test_mean_zerot   su     JJ/0aL2::bff-.XXq$q&k"r"BJJ'789r   z4ignore:invalid value encountered:RuntimeWarning:daskr   r1   rK   r(   r8   c                     |j                  |      }t        |      }t        ||j                  |j                  |j                               y )Nre   )r   r   r   r;   rf   )r   r   r   rS   s       r   test_return_nanzTestVariation.test_return_nan   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   ro   )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 )Nrv   g      r(   r   )r   r   r   rx   )r   r   x1s      r   test_neg_infzTestVariation.test_neg_inf   s6     ZZc
#	"1-rzz266'/BCr   c                     |j                  |j                  dd|j                  gdd|j                  |j                  gg      }t        t        |ddd      |j                   |j                   g       y )Nr   iir(   r5   rM   r   r:   )r   r;   r   r   rx   )r   r   rz   s      r   test_neg_inf_nanzTestVariation.test_neg_inf_nan   sg     ZZ"&&!S"&&1r26626624 5	"11H&&266'*	,r   r:   c           	         |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                  t        j                  d
      dz  g       y # 1 sw Y   NxY w)Nr   rJ   r   r(   r)   r5   r>   rg   gUUUUUU?)r   r;   rA   rZ   r   r
   r   r	   rx   r   r   )r   r:   r   r   rS   s        r   test_combined_edge_casesz&TestVariation.test_combined_edge_cases   s     JJB*B*B*, - 08IJ @aaJ?@ @ !!
;ABFFBFFBFFDIIcN14DEF	@ @s   #CCzddof, expectedgUUUUUU?g      ?      ?g?rh   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&   )r1   r'   r&   r$   g      r   r   )r&   r&   r&   r&   )r1   r1   r1   r1   r>   r   r5   r   )r;   r   rA   rZ   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        |t	        j
                  d
      dz         ||k(  sJ y )Nr#   r   r(   r)   r   rK   r   r5   )r:   r   g      @)r   r;   r   r	   r   r   )r   r   rl   nan_arS   nan_ys         r   test_variation_ddofz!TestVariation.test_variation_ddof   su    
 JJ+,

Aq!RVVQ266:;aa %F;499S>!+,Ezzr   )#__name__
__module____qualname____doc__r   rA   markparametrizer-   skip_xp_backendsr3   rQ   r;   r   r<   rD   rH   rT   r   r_   r\   rx   rb   rm   rp   rt   filterwarningsr|   r~   r   r   r   r   r   r    r   r   r   r      s   M [[UQG,1 -1 d+KL% M% [[3*BFF3%wrwwt}Q79: dGIGI:
G
 dGI-I-
 dGI6I6 dEG%G% dEG[[- ("((6"23 '"''&RVV"DEGH%HG
% dEG[[2a[1bff+4NOF PGF
 dGIEIE d+QR/ S/" [[ 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GI,I, dGI[[\K+@A	G BI	G dGI[[
gbggclGBGGCL"&&!RVVS"&&I	J
c72773<BFFArvv>	?
gbggclGBGGCL"&&"&&"&&!RVVL	M	O%I%" dGIIr   r   )r   numpyrQ   rA   scipy.statsr   scipy._lib._utilr   scipy._lib._array_apir   r   scipy._lib._array_api_no_0dr   r	   scipy.stats._axis_nan_policyr
   r   r   r   r   r   r   r   r   <module>r      sW       ! & @ H> > ;;//  9D D Dr   