o
    ij8                    @   sZ  d dl mZ d dlZd dlZd dlZd dlZd dlmZm	Z	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mZmZmZmZ d dlmZmZmZ dd	lmZ d d
lm Z  d dl!m"Z"m#Z# G dd dZ$G dd dZ%G dd dZ&G dd de Z'G dd dZ(G dd dZ)G dd dZ*G dd dZ+G dd dZ,G dd dZ-dS )     )productN)assert_assert_equalassert_allcloseassert_almost_equal)raises)distributions)epps_singleton_2sampcramervonmises_cdf_cvmcramervonmises_2samp_pval_cvm_2samp_exactbarnard_exactboschloo_exact)mannwhitneyu
_mwu_state_MWU   )check_named_results)_TestPythranFunc)SmallSampleWarningtoo_small_1d_not_omitc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestEppsSingletonc                 C   sJ   t g d}t g d}t||\}}t|ddd t|ddd d S )N)
gffffffֿgffffff@gGz?\(\?ffffff?gQ@gq=
ףp?gGzgGz׿gp=
#(@)
gffffffg333333ÿgףp=
@g      
@gGz@g)\(@g      @g(\@g(\ @333333!@gHzG.@r   decimalgQ,r?   )nparrayr	   r   selfxywp r'   Z/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/stats/tests/test_hypotests.pytest_statistic_1   s
   z"TestEppsSingleton.test_statistic_1c                 C   sB   t d}t d}t||\}}t|ddd t|ddd d S )	N)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,   r0   r.   g!@MbP?atolg&J?r   r   )r   r    r	   r   r   r!   r'   r'   r(   test_statistic_2%   s
   

z"TestEppsSingleton.test_statistic_2c           	      C   s   t jd t dt d}}tt|t|\}}tt|t|\}}t||\}}t||  ko8|kn   t||  koI|k d S    d S )N        )r   randomseedaranger	   listtupler   )	r"   r#   r$   Zw1p1Zw2Zp2Zw3Zp3r'   r'   r(   test_epps_singleton_array_like/   s   &z0TestEppsSingleton.test_epps_singleton_array_likec                 C   sj   dt d}}tjttd t||}t|jt j	 t|j
t j	 W d    d S 1 s.w   Y  d S )Nr   r*   r   r+   r.   match)r   r:   pytestwarnsr   r   r	   r   	statisticnanpvaluer"   r#   r$   resr'   r'   r(   test_epps_singleton_size:   s   
"z*TestEppsSingleton.test_epps_singleton_sizec                 C   s0   dddddt jft d}}ttt|| d S )Nr   r*   r   r+   r,   r.   )r   infr:   assert_raises
ValueErrorr	   r"   r#   r$   r'   r'   r(   test_epps_singleton_nonfiniteB   s   z/TestEppsSingleton.test_epps_singleton_nonfinitec                 C   s2   t dt d}}t||}d}t|| d S )N   r6   )rD   rF   )r   r:   r	   r   )r"   r#   r$   rH   
attributesr'   r'   r(   
test_namesG   s   
zTestEppsSingleton.test_namesN)	__name__
__module____qualname__r)   r4   r>   rI   rN   rQ   r'   r'   r'   r(   r      s    
r   c                   @   sx   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejdddggdd Zdd Zdd ZdS )TestCvmc                 C       t tg ddg ddd d S )N)gy;i?g#^?gE>?gD
)?r+   {Gz?皙?      ?g+?-C6?r2   r   r   r"   r'   r'   r(   
test_cdf_4R   
   
zTestCvm.test_cdf_4c                 C   rV   )N)g8*5?g@߾?gHm?g%1 ?r.   )rX   rY   rZ   g333333?r[   r2   r\   r]   r'   r'   r(   test_cdf_10X   r_   zTestCvm.test_cdf_10c                 C   rV   )N)g}tg?g`?gI5o?gׁsF?  rW   r[   r2   r\   r]   r'   r'   r(   test_cdf_1000^   r_   zTestCvm.test_cdf_1000c                 C   s   t tg dg ddd d S )N)a+e?+?&pn?+MJA?rW   r[   r2   r\   r]   r'   r'   r(   test_cdf_infd   s
   

zTestCvm.test_cdf_infc                 C   s4   t tddgdddg t tddgdddg d S )	NgX(~$?gUUUUU5f@i  r   r   gaah?g"@   )r   r   r]   r'   r'   r(   test_cdf_supportj   s   zTestCvm.test_cdf_supportc                 C   s$   t tg ddtg ddd d S )N)rc   rd   re   rf   d   '  r[   r2   r\   r]   r'   r'   r(   test_cdf_large_no   s
   

zTestCvm.test_cdf_large_nc                 C   sL   t dtdd  k odk n   t dtd  k o dk  d S    d S )NgwJ?gt@ra         ?)r   r   r]   r'   r'   r(   test_large_xv   s   "*zTestCvm.test_large_xc                 C   s<   d}t t|d d}tt|j|dk t|jd d S )N   皙?normrm   r   )r
   r   onesr   r   rD   r   rF   )r"   nrH   r'   r'   r(   
test_low_p   s   zTestCvm.test_low_pr#   r'         ?c                 C   sZ   t jttd t|d}t|jtj t|j	tj W d    d S 1 s&w   Y  d S )Nr@   rq   )
rB   rC   r   r   r
   r   rD   r   rE   rF   r"   r#   rH   r'   r'   r(   test_invalid_input   s
   
"zTestCvm.test_invalid_inputc                 C   s   t g dd}t|jddd t|jddd t g ddd}t|jddd t|jd	dd t g d
d}t|jddd t|jddd d S )N)g333333r*   r   g?r+   皙?333333?rq   gZ	%q?ư>r2   gEж?)r   ru   g!O!W*?gz"W`?)	r   r*   r,   ffffff?gQ?      ?      @exponge.?gnz\(r?)r
   r   rD   rF   )r"   rH   r'   r'   r(   test_values_R   s   zTestCvm.test_values_Rc                 C   s|   t dd}}t|tjj}t|d}t|j|jf|j|jf t|tj	j|}t|d|}t|j|jf|j|jf d S )Nr,   )r{   ffffff?r   beta)
r   r:   r
   r   r   cdfr   rD   rF   r   )r"   r#   argsr1r2r'   r'   r(   test_callable_cdf   s   
zTestCvm.test_callable_cdfN)rR   rS   rT   r^   r`   rb   rg   ri   rl   rn   rt   rB   markparametrizerw   r   r   r'   r'   r'   r(   rU   N   s    	
rU   c                   @   sp  e Zd Zejddg idg ig g dgdd Zdd Zd	d
 Zg dZ	g dZ
ddddgddddgddddgddddgddddgddddggZejdedd Zddddgddddgdddd gdd!dd"gdd!dd#gdd!dd$ggZejded%d& Zd'd( Zg d)g d*g d+d,Zg d-g d.g d/g d0d1Zg d2g d3g d4g d5g d6d7Zg d8g d9g d:g d;g d<g d=d>Zd?d@ ZdAdB ZdCdD ZddddEgddddFgddddGgddddEgddddFgddddEggZejdHedIdJ ZdKdL ZejdMddgdNdO ZdPdQ Zg d1dRdSdTdUejdRdVdWdXdXdYgdZd[fg d1dRdSdTdUejejdVdWdXdXdYgd\d]fdWdVejdXgdRdSdTdUejdRdVdWdXdXdYgd^d_fdWdVejdXgdRdSdTdUejejdVdWdXdXdYgd`dafdWejejdXgdRdSdTdUejejdVdWdXdXdYgdbdcfgZejddededf Zg dgg dhg dig djg dkg dlg dmg dng dog	Z ejdpe dqdr Z!dsdt Z"g d,dudvgddwgg d,dudvgddwgg d,dudvgddxgg d,dVgddygg d,dVgddygg d,dVgddzgdWdVgdWdVgdd{gdWdVgdWdVgdd{gdWdVgdWdVgdd|gg	Z#ejg d}e#d~d Z$dd Z%ejdg ddd Z&dS )TestMannWhitneyUkwargs_updater#   r$   r#   r$   c                 C   s   t ddg}t ddg}t||d}|| tjttd tdi |}t	|j
t j t	|jt j W d    d S 1 sAw   Y  d S )Nr   r*   r   r+   r   r@   r'   )r   r    dictupdaterB   rC   r   r   r   r   rD   rE   rF   )r"   r   r#   r$   kwargsrH   r'   r'   r(   
test_empty   s   
"zTestMannWhitneyU.test_emptyc                 C   s
  t ddg}t ddg}ttdd t||dd W d    n1 s&w   Y  ttd	d t||dd
 W d    n1 sCw   Y  ttdd t||dd W d    n1 s`w   Y  ttdd t||dd W d    d S 1 s~w   Y  d S )Nr   r*   r   r+   z`use_continuity` must be oner@   Zekki)use_continuityz`alternative` must be one ofalternativez`axis` must be an integerru   axisz`method` must be one ofmethod)r   r    rK   rL   r   rM   r'   r'   r(   test_input_validation   s   "z&TestMannWhitneyU.test_input_validationc                 C   s  t jd d}t j|d }t j|d }t||}t||dd}t||dd}|j|jks3J |j|jks;J t j|d }t j|d }t||}t||dd}t||dd}|j|jksfJ |j|jksnJ t||}t||dd}t||dd}|j|jksJ |j|jksJ t j|d }t j|d }t||}t||dd}t||dd}|j|jksJ |j|jksJ t j|d }t j|d }|d |d< t||}t||dd}t||dd}|j|jksJ |j|jksJ d S )Nr   r0   
asymptoticr   exactr   )r   r8   r9   randr   rF   )r"   rs   r#   r$   autor   r   r'   r'   r(   	test_auto   sH   




zTestMannWhitneyU.test_auto)gm9Aj@g+H3[@gi>s@)g#hA{@glz@gcDf@gǳ*h@gZA@gI9^YQa@g`@g՞p@g:q@g&@gZ|@g`r@gMc3g@	two-sidedr   r   r   )   
+?less)r   
+?greater)r   缌%c?r   )r   g9:?)r   g9:?)r   g*::?)kwdsexpectedc                 C   s$   t | j| jfi |}t|| d S N)r   r#   r$   r   r"   r   r   rH   r'   r'   r(   
test_basic   s   zTestMannWhitneyU.test_basicT)r   r   )   r   )r   r   )r   r   F)r   gl,KNh?)r   giژ?)r   gl,KNh?c                 C   s(   t | j| jfddi|}t|| d S )Nr   r   )r   r$   r#   r   r   r'   r'   r(   test_continuity2  s   z TestMannWhitneyU.test_continuityc           	      C   s   g d}t g d}t g dd }t g dd }|d || || ||| || |d g}t||ddd}g d	}g d
}t|j| t|j| d S )Nr?   r   r*   r   r+   r,   )r   r   r   r   r   rX   )r   r   r   r   r   r   )r   r   )r.   	         !@r0   r   r/   r-   )r   g]U?g[?gi\?gZX<_?gx.?g 
?)r   r    r   r   rD   r   rF   )	r"   r#   Zy0ZdyZdy2r$   rH   Z
U_expectedZ
p_expectedr'   r'   r(   test_tie_correct@  s   *z!TestMannWhitneyU.test_tie_correct)g      ?rZ   g      ?)rx   皙?皙?ry   )rY   rx   r   r   rZ   g?r   r*   r   )r   r   ry   )gx&?g/$?gJ+?r   ry   )y&1?v/?gv/?r   gjt?~jt?ʡE?)	gy&1?gV-?r   rx   gS?gv?gʡE?g'1Z?gm?r?   )gK7A`?gZd;O?rZ   gMbX?)Mb?RQ?RQ?M?r   r   )	g;On?;On?V-?g      ?gJ+?r   gx&?rZ   gCl?)Mb?Mb?Mb?gy&1?r   M?g|?5^?gn?g\(\?!rh?K7?)Mbp?r   r   r   ~jt?g333333?g"~j?ףp=
?gzG?K7?gGz?gl?rZ   gI+?r   )r   r   g1Zd?r   )r   r   r   1Zd?g%C?r   r   )
g~jt?g~jt?r   gsh|??gS㥛?r   r   g+?r   r   )g{Gzt?rX   g~jt?gL7A`?r   gjt?gPn?gI+?gX9v?gQ?gMb?gsh|??gK7A`?)Mb`?r   g;On?gQ?g9v?gˡE?gT㥛 ?gbX9ȶ?grh|?gQ?r   gx&?gv/?gMbX?g(\?gQ?)r1   r   r   r   g9v?g/$?r   r   gL7A`?g
ףp=
?gQ?r   gK7?g`"?g7A`?r   gV-?gjt?gˡE?)r   r*   r   r+   r,   r-   c           
      C   s  t tdtdd | j| j| j| jd}| D ]n\}}| D ]e\}}t	dt
|}tj|| ttjj|d|dd t	d|| d }ttjj|dtjj|d tjj|d d tjj|d}t||d d d  tj|| tjj|d}	t||	 q qd S )	Nsr   )r   r+   r,   r-   kr1   r2   r   r   )setattrr   r   pn3pn4pm5pm6itemsr   r:   lenr   Z
set_shapesr   r   Zsfpmf)
r"   Zp_tablesrs   tablemr&   uu2r   Zpmf2r'   r'   r(   test_exact_distributionp  s,   z(TestMannWhitneyU.test_exact_distributionc                 C   s   t jd t jd}t jd}t||dd}t||dd}|j|jks(J t |j|j dks5J t jd}t jd}t||dd}t||dd}|j|jksWJ t |j|j dk sdJ d S )	Nr   r,   r   r   r   rX   (   r1   )r   r8   r9   r   r   rD   absrF   )r"   r#   r$   res1res2r'   r'   r(   test_asymptotic_behavior  s   z)TestMannWhitneyU.test_asymptotic_behaviorc                 C   sr   t g dddgddd}t g dddgddd}t|j|j |jdks&J t g dddgd	dd}t|d
 d S )Nr   ru         @r   r   r   r   rZ   r   )r   r   )r   r   rF   )r"   Zres_lZres_grH   r'   r'   r(   test_exact_U_equals_mean  s   z)TestMannWhitneyU.test_exact_U_equals_meanr   r   )r   rZ   )r   g郡E?)r   resultc                 C   s   t tdi || d S )Nr   r*   r   r*   )r   r   )r"   r   r   r'   r'   r(   test_scalar_data  s   z!TestMannWhitneyU.test_scalar_datac                 C   sH   t tddddd t tddddd t tddddddtjf d S )	Nr   r   r   )rZ   r   r   F)r   r   rZ   )r   r   r   rE   r]   r'   r'   r(   test_equal_scalar_data  s   
z'TestMannWhitneyU.test_equal_scalar_datar   c                 C   sz  t jd d}d\}}t j|dd}t jd|ddd }t||||d	}d
}|jj|ks1J |jj|ks9J t ||dt ||d}}|d }|j	|j	ksTJ t 
|||f }t 
|||f }|jd d |ksqJ |jd d |ks|J t |}	t |}
tdd |D  D ]}|| }|| }t|||d}|j|	|< |j|
|< qt j|j|
 t j|j|	 d S )Nr   )r/   r.   r   r0   r-   r   rx   )r   r   )r-   r   r0   r   )N.c                 S   s   g | ]}t |qS r'   )range).0ir'   r'   r(   
<listcomp>  s    z8TestMannWhitneyU.test_gh_12837_11113.<locals>.<listcomp>r   )r   r8   r9   r   r   rF   shaperD   ZmoveaxisndimZbroadcast_tozerosr   Ztestingr   )r"   r   r   r   rs   r#   r$   rH   r   
statisticsZpvaluesindicesxiyitempr'   r'   r(   test_gh_12837_11113  s4   


z$TestMannWhitneyU.test_gh_12837_11113c                 C   s~   g d}g d}t ||}tj|d< t ||}t|j|j t|j|j tj|d< t ||}t|jtj t|jtj d S )Nr?   )r   r-   r/   r0   r   r   r*   r   r+   r+   r,   r+   )r   r   rJ   r   rD   rF   rE   )r"   r#   r$   r   r   res3r'   r'   r(   test_gh_11355  s   




zTestMannWhitneyU.test_gh_11355r   r-   r/   r0   r*   r   r+   r,   r.   g+zQ?r   g}$k\?g     1@g!˛G*?r   g,s?     8@gFHQ?)r#   r$   rD   rF   c                 C   s2   t ||dd}t|j|dd t|j|dd d S )Nr   r   -q=r2   )r   r   rD   rF   )r"   r#   r$   rD   rF   rH   r'   r'   r(   test_gh_11355b   s   zTestMannWhitneyU.test_gh_11355b)Tr   r   g&?)Tr   r   gO?)Tr   r   gO?)Fr   r   g9@VN!x?)Fr   r   g9M>?)Fr   r   g9M>?)Tr   r   g?UV?)Tr   r   gߺVJH?)Tr   r   gVJH?)r   r   r   
pvalue_expc           	      C   s:   d}d}d}t |||||d}t|j| t|j| d S )N#   )
rp   g(\?g=
ףp=?gp=
ף?g333333?gGz?g(\?g=
ףp=?r   g\(\?)gffffff?g)\(?r~   gGz?g\(\?r   r   r   )r   r   rD   r   rF   )	r"   r   r   r   r   Zstatistic_expr#   r$   rH   r'   r'   r(   test_gh_91841  s   zTestMannWhitneyU.test_gh_9184c                 C   sf   t t jt jt jt jt jg}t t jt jt jt jt jg}t||}t|jt j t|jt j d S r   )r   r    rE   r   r   rD   rF   )r"   abrH   r'   r'   r(   test_gh_4067P  s
   
zTestMannWhitneyU.test_gh_4067ru   r   )r   ga׀}?)r   rm   )ru   g?h?)ru   r   )r*   g5&#\?)r*   r   )r#   r$   r   r   c                 C   s$   t ||d|dd}t||dd d S )NTr   r   r   rtol)r   r   )r"   r#   r$   r   r   rH   r'   r'   r(   test_gh_2118h  s   
zTestMannWhitneyU.test_gh_2118c                 C   s  t jd}d\}}|j|d}|j|d}ttdtdd tj  tj	||dd}tjj
j}|d t|j|| |j d	 ksDJ tj	||dd |tjj
jksUJ tj  tj	|d| dd
d tjj
j}|d d	ksrJ tj	d| |dd
d |tjj
jksJ d S )N   g>mjK )r,   r|   sizer   r   r   r   r   r   r   )r   r   )r   r8   default_rngr   r   r   r   resetstatsr   Zconfigurationsr   minrD   )r"   rngr   rs   r#   r$   rH   r   r'   r'   r(   test_gh19692_smaller_tablep  s"   

&

z+TestMannWhitneyU.test_gh19692_smaller_tabler   )r   r   r   c                 C   sx   t jd}|jdd}|jdd}tj||t |dd}tj||d|dd}t|j|jdd	 t|j|jdd	 d S )
Nr  )r*   r,   r  )r*   r-   r   )r   r   r   r   V瞯<r  )	r   r8   r  r
  r   PermutationMethodr   rD   rF   )r"   r   r  r#   r$   rH   r   r'   r'   r(   test_permutation_method  s   
z(TestMannWhitneyU.test_permutation_methodN)'rR   rS   rT   rB   r   r   r   r   r   r#   r$   Zcases_basicr   Zcases_continuityr   r   r   r   r   r   r   r   r   Zcases_scalarr   r   r   r   r   rJ   Zcases_11355r   Z
cases_9184r   r  Z
cases_2118r  r  r  r'   r'   r'   r(   r      s&   

5




+




r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zejdddd Zdd ZdS )TestSomersDc                    st    j  j  _td j  j ftd j  j fd _ fdd jD }tjtj	dd _
 j
|  _d S )Nr.   r   c                    s   g | ]	} j | d  qS )r   )	arguments)r   idxr]   r'   r(   r     s    z,TestSomersD.setup_method.<locals>.<listcomp>r   r   )ZALL_INTEGERZ	ALL_FLOATZdtypesr   r:   r  	functoolspartialr
  somersdpartialfuncr   )r"   Zinput_arrayr'   r]   r(   setup_method  s   

zTestSomersD.setup_methodc                 G   s6   | j | }t|j| jjdd t|j| jjdd d S )Nr  r2   )r  r   rD   r   rF   r"   r   rH   r'   r'   r(   pythranfunc  s   
zTestSomersD.pythranfuncc                 C   sf   g dg dg dg}t |}| t j}t j|fi |}t|j|jdd t|j|jdd d S )N)rh         r/   r   )r/   r     r   ro   )r   r   r*   r/      r  r2   )r
  r  Zget_optional_argsr   rD   rF   )r"   r   r   Zoptional_argsr   r'   r'   r(   test_pythranfunc_keywords  s   
z%TestSomersD.test_pythranfunc_keywordsc                 C   sn  g d}g d}d}t ||}t|j|d dd t|j|d dd g d}g d	}d}t ||}t|j|d dd t|j|d dd g d
}g d}d}t ||}t|j|d dd t|j|d dd td}td}d}t ||}t|j|d dd t|j|d dd td}tg d}d}t ||}t|j|d dd t|j|d dd td}tdd d d }d}t ||}t|j|d dd t|j|d dd td}tg d}d}t ||}t|j|d dd t|j|d dd g d}g d}d}t ||}t|j|d dd t|j|d dd t g dg d}t|jtj t|jtj t g dg d}t|jtj t|jtj t g dg d}t|jtj t|jtj t dgdg}t|jtj t|jtj t g g }t|jtj t|jtj td}td}t	t
t j|| d S )N)r,   r*   r   r   r-   r+   r/   r0   )r,   r*   r-   r   r   r0   r/   r+           rm   r   r  r2   r   )	r   r,   r*   r   r   r-   r+   r/   r0   )	r,   r*   r   r-   r   r   r0   r/   r+   )r,   r*   r   r   r-   r+   r/   )r,   r*   r-   r   r   r/   r+   )g+$I$I¿g=/3n+?r.   rm   r   )
r   r*   r   r   r+   r-   r,   r/   r0   r   )gs'}'?r!  r   )g      r   )
r   r/   r0   r-   r,   r   r+   r*   r   r   )g}'}'r!  )ro   r*   r   ro   r*   )r   r+   r/   r   r   )      g.ʂ?)r*   r*   r*   )r*   r   r*   g      $@g      4@)r
  r  r   rD   rF   r   r:   r    rE   rK   rL   )r"   r#   r$   r   rH   x1x2r'   r'   r(   test_like_kendalltau  s   







z TestSomersD.test_like_kendalltauc                 C   s   g d}g d}d}d}d}t ||}t|j|dd t|j|dd t|jjd	 t ||}t|j|dd t|j|dd t|jjd
 d S )N)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*   gCE]t?g^_?gO((Ƿ?r  r2   r[   )r   r*   r*   r   )r
  r  r   rD   rF   r   r   r   )r"   r#   r$   Zd_crZd_rcr&   rH   r'   r'   r(   test_asymmetry)  s   zTestSomersD.test_asymmetryc                 C   s   t ddgddgddgddgddgg}|j}d}tt|j| t d	d
gdd
gd
dgg}d\}}tt|j| tt|jj| t d	d
gd
dgdd
gg}d}tt|jj| d S )Nr0   r*   r-   r,   r   r+   r   gHHHHHH?r  r   U   r6   )gM&w?rm   gtE]t)r   r    Tr   r
  r  rD   )r"   r   ZdyxZdxyr'   r'   r(   test_somers_originalB  s   (z TestSomersD.test_somers_originalc                 C   s6  d}d}t |}t jd tjj|t || d|}t	|}t j
|dt |d dd}t	|}t j
|dt |d dd}t	|}	t j
|dt |d d dd}
t	|
}t|jdd	d
 t|j|j t|j|	j t|j|j t|jdd	d
 t|j|j t|j|	j t|j|j d S )Nrj   r+   r-   r   r&   r*   r   r   gayr  r2   gPj$?)r   prodr8   r9   r
  multinomialrvsrr   reshaper  insertr   r   rD   rF   )r"   Nr   r  r   rH   s2r   Zs3r   Zs4Zres4r'   r'   r(   *test_contingency_table_with_zero_rows_colsX  s(   
 


 
z6TestSomersD.test_contingency_table_with_zero_rows_colsc           	      C   s  d}d}t |}t jd tjj|t || d|}|d }d}t	t
|d t| W d    n1 s;w   Y  |d }d	}t	t
|d t| W d    n1 s\w   Y  d
}t	t
|d tg g W d    n1 szw   Y  t	t
|d tdgg W d    n1 sw   Y  t d}t	t
|d t| W d    n1 sw   Y  d|d< t	t
|d t| W d    d S 1 sw   Y  d S )Nrj   r,  r   r-  r*   z:All elements of the contingency table must be non-negativer@   rX   z5All elements of the contingency table must be integerz?At least two elements of the contingency table must be nonzero.r   )r   r   r   )r   r.  r8   r9   r
  r/  r0  rr   r1  rK   rL   r  r   )	r"   r3  r   r  r   Zs5messageZs6Zs7r'   r'   r(   test_invalid_contingency_tablesw  s<   
 
"z+TestSomersD.test_invalid_contingency_tablesc                 C   sb   g d}ddt jg}g d}ddt j g}t||}t||}t|j|j t|j|j d S )Nr   r   g @)r   r*   r   r   r#  )r   rJ   r
  r  r   rD   rF   )r"   r#   r%  r$   y2rH   r   r'   r'   r(   test_only_ranks_matter  s   z"TestSomersD.test_only_ranks_matterc                 C   s6   t d}t d}t||}t|jt d d S )Nr.   )r   r:   r
  r  r   r   eyerG   r'   r'   r(   test_contingency_table_return  s   

z)TestSomersD.test_contingency_table_returnc                 C   s`  g d}g d}t j||dd}|jdksJ t j||dd}t|j|j t|jd|jd   t j||d	d}t|j|j t|j|jd  |  t j||dd}|jdk s\J t j||d	d}t|j|j t|jd|jd   t j||dd}t|j|j t|j|jd  tjt	d
d t j||dd W d    d S 1 sw   Y  d S )Nr   )r,   r-   r/   r0   r/   r   r   r   r   r   r*   r   z`alternative` must be...r@   	ekki-ekki)
r
  r  rD   r   r   rF   reverserB   r   rL   )r"   r$  r%  r   rH   r'   r'   r(   test_somersd_alternative  s,   "z$TestSomersD.test_somersd_alternativepositive_correlation)FTc                 C   s   t d}|r	|nt |}|rdnd}tj||dd}|j|ks#J |jdks*J tj||dd}|j|ks9J |j|r?dndksDJ tj||dd}|j|ksSJ |j|rYdndks^J d S )	Nr.   r   r   r   r   r   r   r   )r   r:   flipr
  r  rD   rF   )r"   r?  r$  r%  Zexpected_statisticrH   r'   r'   r(    test_somersd_perfect_correlation  s   
z,TestSomersD.test_somersd_perfect_correlationc                 C   sV   ddg}d}t d t j||d}t j||d}d}t||j}t||dd d S )	Nr   r*   @B i_ r   g Hz	Yr  r2   )r8   r9   choicesr
  r  rD   r   )r"   classesZ	n_samplesr#   r$   Zval_sklearnZ	val_scipyr'   r'   r(   !test_somersd_large_inputs_gh18132  s   
z-TestSomersD.test_somersd_large_inputs_gh18132N)rR   rS   rT   r  r  r  r&  r(  r+  r5  r7  r9  r;  r>  rB   r   r   rA  rE  r'   r'   r'   r(   r    s    o#)
r  c                   @   s  e Zd ZdZejdddgddggdfdd	gd
dggdfd	dgdd	ggdfddgddggdfddgddggdfddgddggdfddgddggdfddgddggdfddgdd	ggdfdd	gddggdfd	dgdd	ggdfgd d! Zejdddgddggd"fdd	gd
dggd#fd	dgdd	ggd$fddgddggd%fddgddggd&fddgddggd'fddgddggd(fddgddggd)fddgdd	ggd*fdd	gddggd+fd	dgdd	ggd$fgd,d- Zd.d/ Z	ejdddgddggd0fgd1d2 Z
ejdddgddggd3ejffddgddggd3ejffgd4d5 Zejdd	dgdd	ggd6fdd7gd8dggd9fd:d;gd<dggd=fgejd>d?d@gdAdB ZdCS )DTestBarnardExactz8Some tests to show that barnard_exact() works correctly.input_sample,expected+   r   r.   '   )gXyq@g{2s&Q7?rj   r*   ra   r,   )gllgEA]0K?r/   r0   )*)1%g_  ?r   )g_c1?g= ?   rO   )g5PyQgQ@2?r   r  )ggJ"?)g_c1gwݝل?r   r+   )g7@g      ?r   )g~t,?3O?r-   )gr?~CY7?c                 C   s(   t |}|j|j}}t||g| dS )zThe expected values have been generated by R, using a resolution
        for the nuisance parameter of 1e-6 :
        ```R
        library(Barnard)
        options(digits=10)
        barnard.test(43, 40, 10, 39, dp=1e-6, pooled=TRUE)
        ```
        Nr   rD   rF   r   r"   input_sampler   rH   rD   rF   r'   r'   r(   test_precise
  s   zTestBarnardExact.test_precise)g7\@gA2?)gXS;gh?)g>!Ɏg6  ?)gSy@?g^F?)g-gXI#?)gaЍgo?)gb]?gFugH	?)g6ҭ@g      ?)gi(	rL  )gNXzrM  c                 C   s,   t |dd}|j|j}}t||g| dS )zThe expected values have been generated by R, using a resolution
        for the nuisance parameter of 1e-6 :
        ```R
        library(Barnard)
        options(digits=10)
        barnard.test(43, 40, 10, 39, dp=1e-6, pooled=FALSE)
        ```
        F)ZpooledNrN  rO  r'   r'   r(   test_pooled_param'  s   z"TestBarnardExact.test_pooled_paramc                 C     d}t t|d tddgddggdd W d    n1 sw   Y  d	}t t|d ttd
dd W d    n1 sBw   Y  d}t t|d tddgddgg W d    n1 sdw   Y  d}t t|d tddgddggd W d    d S 1 sw   Y  d S )N7Number of points `n` must be strictly positive, found 0r@   r   r*   r   r+   r   rs   ,The input `table` must be of shape \(2, 2\).r-   *All values in `table` must be nonnegative.r   zI`alternative` should be one of {'two-sided', 'less', 'greater'}, found .*not-correct)rK   rL   r   r   r:   r1  r"   	error_msgr'   r'   r(   test_raisesD  $   "zTestBarnardExact.test_raisesr"  c                 C   6   t |}|j|j}}t||d  t||d  d S Nr   r   r   rD   rF   r   rO  r'   r'   r(   test_edge_cases^  s   z TestBarnardExact.test_edge_casesrm   c                 C   r]  r^  r_  rO  r'   r'   r(   test_row_or_col_zeroj     z%TestBarnardExact.test_row_or_col_zero)rJ  gE\/??   ,  )ggQ5r!     r7   i  )g&X}>r!  r   r   r   c           	      C   sf   |\}}|dkrt |dddddf }| }t||d}|j|j}}t||g||gdd dS )a  
        "The expected values have been generated by R, using a resolution
        for the nuisance parameter of 1e-6 :
        ```R
        library(Barnard)
        options(digits=10)
        a = barnard.test(2, 7, 8, 2, dp=1e-6, pooled=TRUE)
        a$p.value[1]
        ```
        In this test, we are using the "one-sided" return value `a$p.value[1]`
        to test our pvalue.
        r   Nr   r   Hz>r2   )r   r    r   rD   rF   r   )	r"   rP  r   r   Zexpected_statZless_pvalue_expectrH   rD   rF   r'   r'   r(   test_less_greaterw  s   
z"TestBarnardExact.test_less_greaterN)rR   rS   rT   __doc__rB   r   r   rQ  rR  r[  r`  r   rE   ra  rg  r'   r'   r'   r(   rF    sr    



rF  c                   @   s  e Zd ZdZdZejdddgddggdfdd	gd
d
ggdfddgddggdfd
dgd
d	ggdfddgd	dggdfdd	gddggdfddgddggdfddgddggdfd
dgddggdfg	dd Zejdddgd
dggd fddgddggd!fdd	gd
d
ggd"fdd#gddggd$fddgddggd%fddgd	dggd&fdd	gddggdfddgd'dggdfddgddggd!fddgddggd(fd
dgddggd)fgd*d+ Z	ejdddgd
dggd,fddgddggd-fdd	gd
d
ggd.fddgddggd/fddgd	dggd0fdd	gddggd1fddgddggd-fddgddggd2fgd3d4 Z
d5d6 Zejdddgdd
ggejejffddgd
dggejejffgd7d8 Zd9d: Zejd;d<d=d> Zd?S )@TestBoschlooExactz9Some tests to show that boschloo_exact() works correctly.rf  rG  r*   r/   r0   )<vB\?g/??r,   r   r.   )gM?gA>?r   rO   r  )_VѶ?g֭?)u %?gc'?r   r+   r   r   r   )rZ   g      ?ro   )+f?gXc}v?   %   )gZыD?ggi]?c                 C   2   t |dd}|j|j}}t||g|| jd dS )a  The expected values have been generated by R, using a resolution
        for the nuisance parameter of 1e-8 :
        ```R
        library(Exact)
        options(digits=10)
        data <- matrix(c(43, 10, 40, 39), 2, 2, byrow=TRUE)
        a = exact.test(data, method="Boschloo", alternative="less",
                       tsmethod="central", np.interval=TRUE, beta=1e-8)
        ```
        r   r   r2   Nr   rD   rF   r   ATOLrO  r'   r'   r(   	test_less  s   zTestBoschlooExact.test_lessrH  r   rI  )k\2?g0,%?)gKv?gN3?)rl  g'&5?rK  )gw@_?g7?)gi{?gɑ)z?)օa?g1|?r-   )gY<;?gND?)ge?gG`?c                 C   rq  )a  The expected values have been generated by R, using a resolution
        for the nuisance parameter of 1e-8 :
        ```R
        library(Exact)
        options(digits=10)
        data <- matrix(c(43, 10, 40, 39), 2, 2, byrow=TRUE)
        a = exact.test(data, method="Boschloo", alternative="greater",
                       tsmethod="central", np.interval=TRUE, beta=1e-8)
        ```
        r   r   r2   Nrr  rO  r'   r'   r(   test_greater  s   zTestBoschlooExact.test_greater)ru  gqQS,5?)rj  gG?/??)rl  gKE`?)rk  ghr1ֽ?)rv  grfb?)rZ   g      ?)rn  gP:pRv?c                 C   s4   t |ddd}|j|j}}t||g|| jd dS )a  The expected values have been generated by R, using a resolution
        for the nuisance parameter of 1e-8 :
        ```R
        library(Exact)
        options(digits=10)
        data <- matrix(c(43, 10, 40, 39), 2, 2, byrow=TRUE)
        a = exact.test(data, method="Boschloo", alternative="two.sided",
                       tsmethod="central", np.interval=TRUE, beta=1e-8)
        ```
        r   @   )r   rs   r2   Nrr  rO  r'   r'   r(   test_two_sided  s   z TestBoschlooExact.test_two_sidedc                 C   rS  )NrT  r@   r   r*   r   r+   r   rU  rV  r-   rW  r   zK`alternative` should be one of \('two-sided', 'less', 'greater'\), found .*rX  )rK   rL   r   r   r:   r1  rY  r'   r'   r(   r[    r\  zTestBoschlooExact.test_raisesc                 C   r]  r^  )r   rD   rF   r   rO  r'   r'   r(   ra    rb  z&TestBoschlooExact.test_row_or_col_zeroc                 C   s`   ddgddgg}t |ddj}t |ddj}dt|| dks!J t |ddj}|d	ks.J d S )
Nr   r}   ro   r   r   r   r*   r   rm   )r   rF   r  )r"   tblplZpgptr'   r'   r(   test_two_sided_gt_1  s   z%TestBoschlooExact.test_two_sided_gt_1r   )r   r   c                 C   s>   ddgddgg}t ||dj}tj||dd }t|| d S )Nr*   r/   r0   r   r   )r   rD   r
  Zfisher_exactr   )r"   r   rz  Zboschloo_statZfisher_pr'   r'   r(   test_against_fisher_exact)  s   z+TestBoschlooExact.test_against_fisher_exactN)rR   rS   rT   rh  rs  rB   r   r   rt  rw  ry  r[  r   rE   ra  r}  r~  r'   r'   r'   r(   ri    sr    




ri  c                   @   s   e Zd Zejdg edfeddgfgdd Zdd Z	dd	 Z
d
d Zejdg ddd Zejjdd Zdd Zdd Zdd ZdS )TestCvm_2sampr   r,   r   c                 C   sX   t jttd t| }t|jtj t|j	tj W d    d S 1 s%w   Y  d S )Nr@   )
rB   rC   r   r   r   r   rD   r   rE   rF   r  r'   r'   r(   test_too_small_input4  s
   "z"TestCvm_2samp.test_too_small_inputc                 C   sN   t d}d}tjt|d t||d W d    d S 1 s w   Y  d S )Nr,   z/method must be either auto, exact or asymptoticr@   Zxyz)r   r:   rB   r   rL   r   )r"   r$   msgr'   r'   r(   rw   <  s
   
"z TestCvm_2samp.test_invalid_inputc                 C   sN   g d}g d}t ||}t t|t|}t|j|jf|j|jf d S )N)r*   r   r+   r/   r-   )r   r   ro   r  )r   r   r    r   rD   rF   r"   r#   r$   r   r   r'   r'   r(   test_list_inputB  s
   
zTestCvm_2samp.test_list_inputc                 C   s>   g d}g d}t ||}t|jddd t|jddd d S )N)	gffffff@g @r   gffffff!@皙"@g#@g333333$@g333333%@gffffff&@)g@g@g@      @333333@gffffff @g333333"@g#@g%@g&@g      '@g(@g      )@g*@g333333-@gS㥛?r1   r2   g
ףp=
?rX   )r   r   rD   rF   r"   r#   r$   rr'   r'   r(   test_example_conoverI  s
   
z"TestCvm_2samp.test_example_conoverzstatistic, m, n, pval))i  r,   r-   gcj`?)ii  r/   r/   gtE]t?)i@  r+   r-   g88?)i  r-   r/   gXwS?c                 C   s   t t|||| d S r   )r   r   )r"   rD   r   rs   Zpvalr'   r'   r(   test_exact_pvalueS  s   	zTestCvm_2samp.test_exact_pvaluec                 C   s   t jd tjjdd}tjjdd}t||}td|j  k o$dk n   t||d }td|j  k o=dk  d S    d S )Ni  rB  r  i r   r   rx   )	r   r8   r9   r   rq   r0  r   r   rF   r  r'   r'   r(   test_large_sample^  s   
(zTestCvm_2samp.test_large_samplec                 C   sd   t jd t jd}t jd}t||dd}t||dd}t|j|j t|j|jdd d S )	Nr   r/   r0   r   r   r   rX   r2   )	r   r8   r9   r   r   r   rD   r   rF   r  r'   r'   r(   test_exact_vs_asymptoticj  s   z&TestCvm_2samp.test_exact_vs_asymptoticc                 C   st   t d}g d}t||dd}t||dd}t|j|j t d}t||dd}t||dd}t|j|j d S )NrO   )rZ   g@g333333*@r   r   r   re  r   )r   r:   r   r   rF   r  r'   r'   r(   test_method_autos  s   

zTestCvm_2samp.test_method_autoc                 C   sV   t d}t||}t|j|jfd t|d d |d d }t|j|jfd d S )NrK  r   r+   )r   r:   r   r   rD   rF   rv   r'   r'   r(   test_same_input  s
   

zTestCvm_2samp.test_same_inputN)rR   rS   rT   rB   r   r   r   r:   r  rw   r  r  r  Zxslowr  r  r  r  r'   r'   r'   r(   r  3  s"    



	r  c                   @   s.  e Zd Zg dg dg dfZg dg dg dfZg dg dg dfZdZdZd	Ze	j
jd
eedfeedfeedffg dddd ZdZdZe	j
jd
eedfeedffddgddd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Ze	j
d%d&d'd( Ze	j
d)g d*d+d, Zd-d. Zd/S )0TestTukeyHSD)r        7@ffffff:@皙;@fffff=@)ffffff<@皙A@     =@皙@@皙>@)g:@gL<@gL8@g333333:@g;@)r   r  gHzG:@r  r  r  r  r  )r   r  r  )
r  r  r  r  r  r  r  r  r  r  aK  
    Comparison LowerCL Difference UpperCL Significance
    2 - 3	0.6908830568	4.34	7.989116943	    1
    2 - 1	0.9508830568	4.6 	8.249116943 	1
    3 - 2	-7.989116943	-4.34	-0.6908830568	1
    3 - 1	-3.389116943	0.26	3.909116943	    0
    1 - 2	-8.249116943	-4.6	-0.9508830568	1
    1 - 3	-3.909116943	-0.26	3.389116943	    0
    aS  
    Comparison LowerCL Difference UpperCL Significance
    2 - 1	0.2679292645	3.645	7.022070736	    1
    2 - 3	0.5934764007	4.34	8.086523599	    1
    1 - 2	-7.022070736	-3.645	-0.2679292645	1
    1 - 3	-2.682070736	0.695	4.072070736	    0
    3 - 2	-8.086523599	-4.34	-0.5934764007	1
    3 - 1	-4.072070736	-0.695	2.682070736	    0
    aS  
    Comparison LowerCL Difference UpperCL Significance
    2 - 3	1.561605075	    4.34	7.118394925	    1
    2 - 1	2.740784879	    6.08	9.419215121	    1
    3 - 2	-7.118394925	-4.34	-1.561605075	1
    3 - 1	-1.964526566	1.74	5.444526566	    0
    1 - 2	-9.419215121	-6.08	-2.740784879	1
    1 - 3	-5.444526566	-1.74	1.964526566	    0
    zdata,res_expect_str,atolr[   g|=)equal size samplezunequal sample sizezextreme sample size differences)Zidsc                 C   s   t j|dd dd tdd}tj| }| }|D ]G\}}}	}
}}t	|d t	|d }}t
|j||f |	|d t
|j||f |
|d t
|j||f ||d t
|j||f d	k|dk qdS )
a  
        SAS code used to generate results for each sample:
        DATA ACHE;
        INPUT BRAND RELIEF;
        CARDS;
        1 24.5
        ...
        3 27.8
        ;
        ods graphics on;   ODS RTF;ODS LISTING CLOSE;
           PROC ANOVA DATA=ACHE;
           CLASS BRAND;
           MODEL RELIEF=BRAND;
           MEANS BRAND/TUKEY CLDIFF;
           TITLE 'COMPARE RELIEF ACROSS MEDICINES  - ANOVA EXAMPLE';
           ods output  CLDiffs =tc;
        proc print data=tc;
            format LowerCL 17.16 UpperCL 17.16 Difference 17.16;
            title "Output with many digits";
        RUN;
        QUIT;
        ODS RTF close;
        ODS LISTING;
         -  r,   NZdtype)r-   r-   r   r2   rY   r   asarrayreplacesplitfloatr1  r
  	tukey_hsdconfidence_intervalintr   lowrD   highrF   )r"   datares_expect_strr3   
res_expect	res_tukeyconfr   jlr   hsigr'   r'   r(   test_compare_sas  s   !
zTestTukeyHSD.test_compare_sasz
        1	2	-8.2491590248597	-4.6	-0.9508409751403	0.0144483269098
        1	3	-3.9091590248597	-0.26	3.3891590248597	0.9803107240900
        2	3	0.6908409751403	4.34	7.9891590248597	0.0203311368795
        z
        1	2	-7.02207069748501	-3.645	-0.26792930251500 0.03371498443080
        1	3	-2.68207069748500	0.695	4.07207069748500 0.85572267328807
        2	3	0.59347644287720	4.34	8.08652355712281 0.02259047020620
        r   rf  r  zunequal size samplec                 C   s   t j| tdd}tj| }| }|D ]E\}}}	}
}}t|d t|d }}t	|j
||f |	|d t	|j||f |
|d t	|j||f ||d t	|j||f ||d qdS )an  
        vals = [24.5, 23.5,  26.4, 27.1, 29.9, 28.4, 34.2, 29.5, 32.2, 30.1,
         26.1, 28.3, 24.3, 26.2, 27.8]
        names = {'zero', 'zero', 'zero', 'zero', 'zero', 'one', 'one', 'one',
         'one', 'one', 'two', 'two', 'two', 'two', 'two'}
        [p,t,stats] = anova1(vals,names,"off");
        [c,m,h,nms] = multcompare(stats, "CType","hsd");
        r  r   r-   r   r2   N)r   r  r  r  r1  r
  r  r  r  r   r  rD   r  rF   )r"   r  r  r3   r  r  r  r   r  r  r   r  r&   r'   r'   r(   test_compare_matlab  s   

z TestTukeyHSD.test_compare_matlabc                 C   s   d}t j|dd dd tdd}g dg d	g d
f}tj| }| }|D ]E\}}}}	}
}t	|d t	|d }}t
|j||f |	dd t
|j||f |dd t
|j||f |
dd t
|j||f |dd q,dS )a+  
        Testing against results and p-values from R:
        from: https://www.rdocumentation.org/packages/stats/versions/3.6.2/
        topics/TukeyHSD
        > require(graphics)
        > summary(fm1 <- aov(breaks ~ tension, data = warpbreaks))
        > TukeyHSD(fm1, "tension", ordered = TRUE)
        > plot(TukeyHSD(fm1, "tension"))
        Tukey multiple comparisons of means
        95% family-wise confidence level
        factor levels have been ordered
        Fit: aov(formula = breaks ~ tension, data = warpbreaks)
        $tension
        z
                diff        lwr      upr     p adj
        2 - 3  4.722222 -4.8376022 14.28205 0.4630831
        1 - 3 14.722222  5.1623978 24.28205 0.0014315
        1 - 2 10.000000  0.4401756 19.55982 0.0384598
        r  r  r,   Nr  r  )   r6   6   r  F   4   3   r  C   rh   r        r     )   rO   ,   )r  re  r  r  ro   r  r   r6   $   *   r  r  r   rI  r7   re  rI  r  )r  re  ro  r  r.   rH  r7   rK  r  rO   re  ro  r  r}   rK  rK  r   r7   r   rf  r2   rz   gh㈵>r  )r"   Zstr_resr  r  r  r  r   r  r   r  r  r&   r'   r'   r(   test_compare_r	  s&   
zTestTukeyHSD.test_compare_rc                 C   s   g d}g d}g d}g d}t ||||}| }tg dg dg dg dg}tg d	g d
g dg dg}dD ]$\}	}
t|j|	|
f ||	|
f dd t|j|	|
f ||	|
f dd q@dS )zp
        Example sourced from:
        https://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm
        )皙@g@333333@gffffff@g      @)g @r  g333333@gffffff"@r  )g       @g      %@g333333 @r  r  )r  gffffff@gffffff@gffffff@g@)r   r   r   g      )g(\?r   gq=
ףpgp=
ף?)gGz?r   r   g
ףp=
?)r   r   r   r   )r   r   r   gzG?)gzG@r   g      ?g=
ףp=@)g=
ףp=@r   r   g@)r   r   )r*   r   )r   r   r   r'  rX   r2   N)r
  r  r  r   r  r   r  r  )r"   Zgroup1Zgroup2Zgroup3Zgroup4rH   r  lowerupperr   r  r'   r'   r(   test_engineering_stat_handbook2  s,    "z+TestTukeyHSD.test_engineering_stat_handbookc                 C   s   t jd t jdd}tj| }| }t|j|j	j
  tt |j	|j	d  tt |j|jd  t|j|jj
  tt |jd t|j|jj
 tt |jd d S )Nr5   r   rj   r   r   r   r   )r   r8   r9   r   r
  r  r  r   r  r  r*  ZdiagonalrD   rF   )r"   r  rH   r  r'   r'   r(   test_rand_symmL  s   
zTestTukeyHSD.test_rand_symmc                 C   sN   t tdd tg ddtjgg d W d    d S 1 s w   Y  d S )Nz...must be finite.r@   r   r*   )r-   r/   r   )rK   rL   r
  r  r   rJ   r]   r'   r'   r(   test_no_inf_  s   "zTestTukeyHSD.test_no_infc                 C   sT   t tdd tddgddggddgg d W d    d S 1 s#w   Y  d S )Nz...must be one-dimensionalr@   r   r*   r   r,   )r,   r   r-   rK   rL   r
  r  r]   r'   r'   r(   
test_is_1dc  s   $"zTestTukeyHSD.test_is_1dc                 C   sH   t tdd tg ddgg d W d    d S 1 sw   Y  d S )Nz...must be greater than oner@   r*   r,   )r+   r,   r-   r  r]   r'   r'   r(   test_no_emptyg  s   "zTestTukeyHSD.test_no_emptynargsr   c                 C   sF   t tdd tjg dg|   W d    d S 1 sw   Y  d S )Nz...more than 1 treatment.r@   r   r/   r   r  )r"   r  r'   r'   r(   test_not_enough_treatmentsk  s   "z'TestTukeyHSD.test_not_enough_treatmentscl)r#  r   r   r*   c                 C   sV   t tdd tg dddgddg}|| W d    d S 1 s$w   Y  d S )Nzmust be between 0 and 1r@   r  r   r+   r   )rK   rL   r
  r  r  )r"   r  r  r'   r'   r(   test_conf_level_invalidp  s   "z$TestTukeyHSD.test_conf_level_invalidc                 C   sP   t j| jd d  }t j| jd d  }t|j|jd  t|j|jd  d S )Nr*   r   r  )r
  r  data_diff_sizeZ	ttest_indr   rF   )r"   r  Z	res_ttestr'   r'   r(   test_2_args_ttestv  s   zTestTukeyHSD.test_2_args_ttestN)rR   rS   rT   Zdata_same_sizer  Zextreme_sizeZsas_same_sizeZsas_diff_sizeZsas_extremerB   r   r   r  Zmatlab_sm_sizZmatlab_diff_szr  r  r  r  r  r  r  r  r  r  r'   r'   r'   r(   r    s\    



%
)

r  c                   @   s   e Zd Zejdg dg dfdd Zejdg dg dg d	g d
g dg dg dg dfdd Zdd Zdd Z	dd Z
dS )TestPoissonMeansTestzc1, n1, c2, n2, p_expect)r   rj   r   rj   gea?)r*   rj   r-   rj   g	c?c                 C   s$   t ||||}t|j|dd d S )Nr[   r2   r
  poisson_means_testr   rF   )r"   c1n1c2n2p_expectrH   r'   r'   r(   test_paper_examples  s   z(TestPoissonMeansTest.test_paper_examplesz c1, n1, c2, n2, p_expect, alt, d)rO   r.   rO   r.   g{}?r   r   )r.   r.   r.   r.   goPF?r   r   )2   rK  r   r   gae?r   rY   )r   rj   rO   rd  g/V-=?r   r   )r   ro   r+   rO   g")?r   r   )r+   rO   r   rj   g_'Qm~?r   r   )r+   rO   r   r.   g|?r   r   )r   r   r  rK  g0ݷ?r   r   c           	      C   s,   t j||||||d}t|j|ddd d S )N)r   diffg>gؗҜ<r3   r  r  )	r"   r  r  r  r  r  ZaltdrH   r'   r'   r(   test_fortran_authors  s   z)TestPoissonMeansTest.test_fortran_authorsc                 C   s0   d\}}d\}}t ||||}t|jd d S )N)rk   rk   r   r  r"   count1count2nobs1nobs2rH   r'   r'   r(   test_different_results  s   z+TestPoissonMeansTest.test_different_resultsc                 C   s0   d\}}d\}}t ||||}t|jd d S )Nr  rm  r   r  r  r'   r'   r(   test_less_than_zero_lambda_hat2  s   z4TestPoissonMeansTest.test_less_than_zero_lambda_hat2c                 C   s  d\}}d\}}d}t t|d td||| W d    n1 s#w   Y  t t|d t||d| W d    n1 sAw   Y  d}t t|d td||| W d    n1 saw   Y  t t|d t||d| W d    n1 sw   Y  d}t t|d t|d|| W d    n1 sw   Y  t t|d t|||d W d    n1 sw   Y  d	}t t|d tj||||dd
 W d    n1 sw   Y  d}t t|d tjdddddd W d    d S 1 sw   Y  d S )Nr  rm  z`k1` and `k2` must be integers.r@   r   z1`k1` and `k2` must be greater than or equal to 0.r   z%`n1` and `n2` must be greater than 0.z(diff must be greater than or equal to 0.)r  zAlternative must be one of ...r   r*   errorr   )rK   	TypeErrorr
  r  rL   )r"   r  r  r  r  r6  r'   r'   r(   r     s>   $z*TestPoissonMeansTest.test_input_validationN)rR   rS   rT   rB   r   r   r  r  r  r  r   r'   r'   r'   r(   r  ~  s(    

	r  c                   @   s`   e Zd Zdd Zdd Zejdg ddd Zejdg d	d
d Z	dd Z
dd ZdS )TestBWSTestc                 C   sl  t jd}|jdd\}}d}tjt|d t||g||g W d    n1 s,w   Y  d}tjt|d tt jg| W d    n1 sMw   Y  d}tjt|d t|g  W d    n1 slw   Y  d}tjt|d tj||d	d
 W d    n1 sw   Y  d}tjt|d tj||dd W d    d S 1 sw   Y  d S )N   <ovT{ r*   r/   r  z,`x` and `y` must be exactly one-dimensional.r@   z"`x` and `y` must not contain NaNs.z$`x` and `y` must be of nonzero size.zalternative` must be one of...r<  r   z!method` must be an instance of...r  r   )	r   r8   r  rB   r   rL   r
  bws_testrE   )r"   r  r#   r$   r6  r'   r'   r(   test_bws_input_validation  s,   "z%TestBWSTest.test_bws_input_validationc                 C   s@   g d}g d}t j||dd}t|jddd t|jd d S )	N)r   r*   r   r+   r-   r/   r0   )r,   r   r.   r|   ro   r}   r  r   r   gI+@r1   r2   gf$/g?)r
  r  r   rD   r   rF   rG   r'   r'   r(    test_against_published_reference  s
   z,TestBWSTest.test_against_published_reference)r   rD   rF   ))r   g
-?g4B/?)r   
-g0&v?)r   r  g(?c                 C   sR   t jd}|jdd\}}tj|||d}t|j|dd t|j|ddd	 d S )
Nr  r  r  r   vIh%<=r  rX   rx   r  r   r8   r  r
  r  r   rD   rF   r"   r   rD   rF   r  r#   r$   rH   r'   r'   r(   test_against_R  s
   zTestBWSTest.test_against_R))r   gD5H?gdԕ?)r   `ч?gȲךX?)r   r  g4)?c                 C   sZ   t jd}|jdd}|jdd}tj|||d}t|j|dd t|j|dd	d
 d S )Nl   .sZ r   r  r0   r   r  r  rX   rx   r  r  r  r'   r'   r(   test_against_R_imbalanced	  s   z%TestBWSTest.test_against_R_imbalancedc                 C   s   t jd}|jdd\}}t jd}tjd|d}tj|||d}t|jdks,J t jd}tjd|d}tj|||d}t|j|j t jd}tjd|d}tj|||d}t 	|j|jrgJ d S )N   /HN( )r*   r.   r  r.   )Zn_resamplesr  r   l   VC	A )
r   r8   r  r
  r  r  r   null_distributionr   Zallclose)r"   r  r#   r$   r   r   r   r   r'   r'   r(   test_method  s   zTestBWSTest.test_methodc                 C   s   t jd}|jdd}|d }tj||dd}|jdksJ t|jdt|j	  tj||dd}|jdks9J t|jd tj||dd}|jdk sNJ t|jdt|j	  tj||dd}|jdk shJ t|jd d S )	Nr  r,   r  r   r   r   r   r   )
r   r8   r  r
  r  rD   r   rF   r   r  )r"   r  r#   r$   rH   r'   r'   r(   test_directions2  s   zTestBWSTest.test_directionsN)rR   rS   rT   r  r  rB   r   r   r  r  r  r  r'   r'   r'   r(   r    s    


r  ).	itertoolsr   numpyr   r8   r  rB   Znumpy.testingr   r   r   r   r   rK   Zscipy.statsr
  r   Zscipy.stats._hypotestsr	   r
   r   r   r   r   r   Zscipy.stats._mannwhitneyur   r   r   Zcommon_testsr   Zscipy._lib._testutilsr   Zscipy.stats._axis_nan_policyr   r   r   rU   r   r  rF  ri  r  r  r  r  r'   r'   r'   r(   <module>   s@    $7]   r  o  X tT