o
    `^h#                     @   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   ^/home/air/shanriGPT/back/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|=)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)np_onlyreasonc                 C   s*   | d}|j|d< tt||d| d S )N      $@	   
nan_policy)r   nanr   r   )r   r5   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raiser4   )r   r6   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 ofr8   r   r%   r&   foobarr4   )r;   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   )rC   r   
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)rC   r   r   r8   TrD   )zerosr;   warnsr   r
   r   r   )r   rE   r)   r   r   rK   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)rE   r   rF   )r%   r   rN   )r   r   shaper   full)r   increxpected_fillr   r   rK   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   rM   r   r.   rE   r5         ?      ?gV瞯<)atol)rH   r   floatr6   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&   rE   r\   r]   )r   r   r   r   )r   r   rK   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   rC      rB   rb   )r   r;   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)r2         r!         rh   g      $r   rb   )r   r   r   infstack)r   r   r   rK   x2y2r   r   r   test_mean_zerot   s   zTestVariation.test_mean_zeror   r+   rC   r%   r3   c                 C   s.   | |}t|}t||j |j|jd d S )NrY   )r   r   r   r6   rZ   )r   r   r   rK   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...r8   rb   )emptyr   filterUserWarningr   r;   rQ   r   r   r   r   )r   rE   r)   r   r   suprK   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 )Nrg   g      r%   r   )r   r   r   ri   )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/   rE   r   r5   )r   r6   r   r   ri   )r   r   rk   r   r   r   test_neg_inf_nan   s   zTestVariation.test_neg_inf_nanr5   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   rB   r   r%   r&   r/   r8   r[   gUUUUUU?)rJ   r6   r;   rQ   r   r	   r   r   ri   r   r   )r   r5   r   r   rK   r   r   r   test_combined_edge_cases   s   &z&TestVariation.test_combined_edge_caseszddof, expectedgUUUUUU?g      ?      ?g?r\   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      r{   r   )r#   r#   r#   r#   )r+   r+   r+   r+   r8   r   r/   rw   )r6   r   r;   rQ   r   r	   r   r   )r   r   r)   r   r6   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   rC   r   r/   )r5   r   g      @)r   r6   r   r   r   r   )r   r   r`   nan_arK   nan_yr   r   r   test_variation_ddof   s   z!TestVariation.test_variation_ddof)"__name__
__module____qualname____doc__r   r;   markparametrizer*   r-   rI   r6   r   r   r7   r>   rA   rL   ro   rT   rR   ri   rW   ra   rc   rf   rm   rn   rs   ru   rx   rz   r|   r   r   r   r   r   r      s    



	


 


& (r   )r   numpyrI   r;   numpy.testingr   scipy.statsr   scipy._lib._utilr   scipy.conftestr   scipy._lib._array_apir   scipy._lib._array_api_no_0dr   r   scipy.stats._axis_nan_policyr	   r
   r   r   usefixtures
pytestmarkr   r   r   r   r   r   <module>   s    