o
    i#                     @   s   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	 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 eejd	gZejjZG d
d dZdS )    N)suppress_warnings)	variation)	AxisError)array_api_compatible)is_numpy)xp_assert_equalxp_assert_close)too_small_nd_omittoo_small_nd_not_omitSmallSampleWarningskip_xp_backendsc                   @   s  e Zd ZdZdd Zejdddgdd Zd	d
 Z	ejdde
jfde
dd fgeddddd Zeddddd Zeddddd Zeddddd Zedddejdde
dfde
jde
jd fgd!d" Zedddejd#de
jfde
jfgd$d% Zedddd&d' Zedd(dd)d* Zd+d, Zd-d. Zejd/d0gd1 dd2e
jd3ggd4d5 Zejddg fde
jgd6 fd7e
jfgd8d9 Zd:d; Zedddd<d= Zedddejd>ddgd?d@ ZedddejdAde
dBe
dCe
jde
jd0e
jgfddDe
dEe
jde
jde
jgfd2e
dDe
dFe
je
je
jde
jgfgdGdH Z eddddIdJ Z!d7S )KTestVariationz.
    Test class for scipy.stats.variation
    c                 C   s0   | d}tt|dd|tdd  d S )N      "@   ddofg      @   )aranger   r   asarraymathsqrtselfxpx r   Z/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/stats/tests/test_variation.py	test_ddof   s   
&zTestVariation.test_ddofsgnr   c                 C   sD   | g d}t|| }| |td d }t||dd d S )N      ?       @      @      @g      @      g|=)Zrtol)r   r   r   r   r   )r   r   r   r   vexpectedr   r   r   	test_sign   s   zTestVariation.test_signc                 C   s   t tdd d S )Nr$           )r   r   r   r   r   r   r   test_scalar#   s   zTestVariation.test_scalarznan_policy, expected	propagateomitg@r   Tz(`nan_policy` only supports NumPy backend)Znp_onlyreasonc                 C   s*   | d}|j|d< tt||d| d S )N      $@	   
nan_policy)r   nanr   r   )r   r3   r(   r   r   r   r   r   test_variation_nan'   s   

z TestVariation.test_variation_nanc                 C   sT   | dd|jdg}tjtdd t|dd W d    d S 1 s#w   Y  d S )Nr!   r"   r#   zinput contains nanmatchraiser2   )r   r4   pytestraises
ValueErrorr   r   r   r   r   test_nan_policy_raise1   s   "z#TestVariation.test_nan_policy_raisec                 C   sD   t jtdd tg ddd W d    d S 1 sw   Y  d S )Nzmust be one ofr6   r   r%   r&   Zfoobarr2   )r9   r:   r;   r   r+   r   r   r   test_bad_nan_policy8   s   "z!TestVariation.test_bad_nan_policyz&`keepdims` only supports NumPy backendc                 C   sT   | |dd}t|ddd}ttdd gtdd gg}t|| d S )N
   )r%      r   Taxiskeepdimsr%      )reshaper   r   nparrayr   r   )r   r   r   yr(   r   r   r   test_keepdims>   s   zTestVariation.test_keepdimszaxis, expectedr   r   r   )r@   r   Z
fill_valuec                 C   sl   | d}|dkr(tjttd t||dd}W d    n1 s"w   Y  nt||dd}t|| d S )N)r@   r   r   r6   TrA   )Zzerosr9   warnsr   r
   r   r   )r   rB   r(   r   r   rH   r   r   r   test_keepdims_size0G   s   
z!TestVariation.test_keepdims_size0zincr, expected_fillc                 C   sH   | g dg dg}t|d|jd | dd}t||jd|d d S )N)r   r   r%   r%   )r   r%   r&   r&   r   T)rB   r   rC   )r%   r   rK   )r   r   shaper   full)r   incrZexpected_fillr   r   rH   r   r   r   'test_keepdims_and_ddof_eq_len_plus_incrU   s   z5TestVariation.test_keepdims_and_ddof_eq_len_plus_incrc                 C   sP   | |jdtdd}|j|d< t|ddd}t|tdd	 |jgd
d d S )N   dtype)r%   r   rJ   r   r-   rB   r3         ?      ?gV瞯<)Zatol)rE   r   floatr4   r   r   r   r   )r   r   ar'   r   r   r   test_propagate_nan]   s   
"z TestVariation.test_propagate_nanz$Python list input uses NumPy backendc                 C   s0   t ddgddggd d}t|tdd  d S )Nr   r   r%   r&   rB   rV   rW   )r   r   r   r   )r   r   rH   r   r   r   test_axis_noneg   s   zTestVariation.test_axis_nonec                 C   sV   | g dg dg}tttf t|dd W d    d S 1 s$w   Y  d S )Nr=   )r   r@      r?   r[   )r   r9   r:   r   
IndexErrorr   r   r   r   r   test_bad_axisn   s   "zTestVariation.test_bad_axisc                 C   sb   | g d}t|}t|| |j ||d| g}t|dd}t|| |j|jg d S )N)r0         r!         ra   g      $r   r[   )r   r   r   infstack)r   r   r   rH   x2y2r   r   r   test_mean_zerot   s   zTestVariation.test_mean_zeror   r*   r@   r%   r1   c                 C   s.   | |}t|}t||j |j|jd d S )NrS   )r   r   r   r4   rT   )r   r   r   rH   r   r   r   test_return_nan   s   
zTestVariation.test_return_nanr&   Nc              	   C   s   | d}t A}|td |dkr<t|r5tjtdd t||d}W d    n1 s/w   Y  nt||d}nt||d}W d    n1 sLw   Y  t	||
| d S )N)r&   r   zstd*r   zSee documentation...r6   r[   )emptyr   filterUserWarningr   r9   rL   r   r   r   r   )r   rB   r(   r   r   suprH   r   r   r   test_2d_size_zero_with_axis   s   
z)TestVariation.test_2d_size_zero_with_axisc                 C   s.   | ddg}tt|dd| |j  d S )Nr`   g      r%   r   )r   r   r   rb   )r   r   x1r   r   r   test_neg_inf   s    zTestVariation.test_neg_infc                 C   sL   | |jdd|jgdd|j|jgg}tt|dddd|j |j g d S )Nr   iir%   r.   rB   r   r3   )r   r4   r   r   rb   )r   r   rd   r   r   r   test_neg_inf_nan   s   zTestVariation.test_neg_inf_nanr3   c                 C   s   | dd|jdgdd|jdgdd|jdgg}|dkr:tjttd t|d|d	}W d    n1 s4w   Y  nt|d|d	}t||j|j|jt	
d
d g d S )Nr   r?   r   r%   r&   r.   r6   rU   gUUUUUU?)rG   r4   r9   rL   r   r	   r   r   rb   r   r   )r   r3   r   r   rH   r   r   r   test_combined_edge_cases   s   &z&TestVariation.test_combined_edge_caseszddof, expectedgUUUUUU?g      ?      ?g?rV   c              
   C   s   |j }|dd|dgg d|dd|g|dd|g||||gg dg d	g}tjttd
 t|d|dd}W d    n1 s?w   Y  t|| d S )Nr!   r"   r#   )r*   r$   r#   r!   g      rt   r   )r#   r#   r#   r#   )r*   r*   r*   r*   r6   r   r.   rp   )r4   r   r9   rL   r   r	   r   r   )r   r   r(   r   r4   r   r'   r   r   r   test_more_nan_policy_omit_tests   s   


z-TestVariation.test_more_nan_policy_omit_testsc              	   C   sh   | g d}| ddd|jdd|jg}t|dd}t|ddd	}t|td
d  ||ks2J d S )Nr    r   r%   r&   r   r@   r   r.   )r3   r   g      @)r   r4   r   r   r   r   )r   r   rY   Znan_arH   Znan_yr   r   r   test_variation_ddof   s   z!TestVariation.test_variation_ddof)"__name__
__module____qualname____doc__r   r9   markZparametrizer)   r,   rF   r4   r   r   r5   r<   r>   rI   rh   rO   rM   rb   rQ   rZ   r\   r_   rf   rg   rl   rn   rq   rs   ru   rv   r   r   r   r   r      s    



	


 


& (r   )r   numpyrF   r9   Znumpy.testingr   Zscipy.statsr   Zscipy._lib._utilr   Zscipy.conftestr   Zscipy._lib._array_apir   Zscipy._lib._array_api_no_0dr   r   Zscipy.stats._axis_nan_policyr	   r
   r   r{   ZusefixturesZ
pytestmarkr   r   r   r   r   r   <module>   s    