U
    Hvfk                    @   sP  d dl m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 dd	lmZ d d
lmZ G dd dZG dd dZ G dd dZ!G dd de!Z"ej#j$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+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   )check_named_results)_TestPythranFuncc                   @   sD   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S )TestEppsSingletonc                 C   sj   t ddddddddd	d
g
}t ddddddddddg
}t||\}}t|ddd t|ddd d S )Ngffffffֿ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$   D/tmp/pip-unpacked-wheel-96ln3f52/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)   r-   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op|kn   t||  ko|kn   d S )N        )r   randomseedaranger	   listtupler   )	r   r    r!   Zw1p1Zw2p2Zw3Zp3r$   r$   r%   test_epps_singleton_array_like-   s    z0TestEppsSingleton.test_epps_singleton_array_likec                 C   s"   dt d }}ttt|| d S )Nr   r'   r   r(   r+   )r   r7   assert_raises
ValueErrorr	   r   r    r!   r$   r$   r%   test_epps_singleton_size8   s    z*TestEppsSingleton.test_epps_singleton_sizec                 C   s\   dddddt jft d }}ttt|| t ddddddt jf }}ttt|| d S )Nr   r'   r   r(   r)   r+   )r   infr7   r>   r?   r	   nanr@   r$   r$   r%   test_epps_singleton_nonfinite=   s    z/TestEppsSingleton.test_epps_singleton_nonfinitec                 C   s$   t ddd}ttt|| d S )Nd   r   )r   r7   reshaper>   r?   r	   r   r    r$   r$   r%   test_epps_singleton_1d_inputD   s    z.TestEppsSingleton.test_epps_singleton_1d_inputc                 C   s2   t dt d }}t||}d}t|| d S )N   r3   )	statisticpvalue)r   r7   r	   r   )r   r    r!   res
attributesr$   r$   r%   
test_namesH   s    
zTestEppsSingleton.test_namesN)
__name__
__module____qualname__r&   r1   r<   rA   rD   rI   rO   r$   r$   r$   r%   r      s   
r   c                   @   sd   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dS )TestCvmc                 C   s(   t tddddgddddd	gd
d d S )Ngy;i?g#^?gE>?gD
)?r(   {Gz?皙?      ?+?-C6?r/   r   r   r   r$   r$   r%   
test_cdf_4S   s
    
zTestCvm.test_cdf_4c                 C   s(   t tddddgddddd	gd
d d S )Ng8*5?g@߾?gHm?g%1 ?r+   rT   rU   rV   g333333?rX   r/   rY   rZ   r$   r$   r%   test_cdf_10Y   s
    
zTestCvm.test_cdf_10c                 C   s(   t tddddgddddd	gd
d d S )Ng}tg?g`?gI5o?gׁsF?  rT   rU   rV   rW   rX   r/   rY   rZ   r$   r$   r%   test_cdf_1000_   s
    
zTestCvm.test_cdf_1000c                 C   s&   t tddddgddddgd	d
 d S )Na+e?+?&pn?+MJA?rT   rU   rV   rW   rX   r/   rY   rZ   r$   r$   r%   test_cdf_infe   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   rZ   r$   r$   r%   test_cdf_supportk   s    zTestCvm.test_cdf_supportc                 C   s0   t tdddddgdtdddddgdd d S )	Nr_   r`   ra   rb   rE   '  rX   r/   rY   rZ   r$   r$   r%   test_cdf_large_np   s
    zTestCvm.test_cdf_large_nc                 C   sF   t dtdd  k odk n   t dtd  k o:dk n   d S )NgwJ?gt@r]         ?)r   r   rZ   r$   r$   r%   test_large_xw   s    "zTestCvm.test_large_xc                 C   s<   d}t t|d d}tt|j|dk t|jd d S )N   皙?normrh   r   )r
   r   onesr   r   rK   r   rL   )r   nrM   r$   r$   r%   
test_low_p   s    zTestCvm.test_low_pc                 C   s@   t dd}ttt|d tttdgd tttdd d S )Nr+   r'   r)   rl         ?r$   )r   r7   rG   r>   r?   r
   rH   r$   r$   r%   test_invalid_input   s    zTestCvm.test_invalid_inputc              
   C   s   t dddddddgd}t|jd	d
d t|jdd
d t dddddddgdd}t|jdd
d t|jdd
d t dddddddddg	d}t|jdd
d t|jdd
d d S )Ng333333r'   r   g?r(   皙?333333?rl   gZ	%q?ư>r/   gEж?)r   rq   g!O!W*?gz"W`?r   r)   ffffff?gQ?      ?      @exponge.?gnz\(r?)r
   r   rK   rL   )r   rM   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)   )rv   ffffff?r{   beta)
r   r7   r
   r   r{   cdfr   rK   rL   r~   )r   r    argsr1r2r$   r$   r%   test_callable_cdf   s    
zTestCvm.test_callable_cdfN)rP   rQ   rR   r[   r\   r^   rc   re   rg   ri   ro   rr   r|   r   r$   r$   r$   r%   rS   O   s   	rS   c                   @   st  e Zd Zdd Zdd Zdd Zddd	gZd
ddddddddddddg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/d0 Zd1d2 Zd3d4d5gd6d7d8d9gd:d6d7d;d4d<gd=Zd7d8d9gd>d?d@d8d9gdAdBdCd7dDdEdFgdGdHdBd6dIdJdKdLdMg	dNZdOdPd4dQgdRdSdTdUdEdFgdVdWdXdYdZdUd[d4d\g	d]d^d_d`dSdadbdcdddedfgdgd]d^dAdhdidjdkdldmdndod4dpgdqZdadUdrdFgdWdXdadsdtdEdFgdudvdhdwdxdTdmdydedfg
dzd{d|d}dBd~dddddddgddgdddddddddsdddddgdddgd]ddd_dRddddkdddd;dddgdZdd Zdd Zdd ZddddgddddgddddgddddgddddgddddggZe	j
dedd Zdd Ze	j
dddgdd Zdd ZddddgddddejddddddgddfddddgddddejejdddddgddfddejdgddddejddddddgddfddejdgddddejejdddddgddfdejejdgddddejejdddddgddfgZe	j
deddȄ Zd&dddgd&dddgd&dddgd+dddgd+dddgd+dddgd&dddgd&dddgd&dddgg	Z e	j
de ddԄ Z!ddք Z"dd؄ Z#dddgddgddgdddgddgddgdddgddgddgdddgdgddgdddgdgddgdddgdgddgddgddgddgddgddgddgddgddgddgg	Z$e	j
ddddge$dd Z%dd Z&dS )TestMannWhitneyUc                 C   s
   dt _d S )NTr   
_recursiverZ   r$   r$   r%   setup_method   s    zTestMannWhitneyU.setup_methodc              	   C   s   t ddg}t ddg}ttdd tg | W 5 Q R X ttdd t|g  W 5 Q R X ttdd t||dd	 W 5 Q R X ttd
d t||dd W 5 Q R X ttdd t||dd W 5 Q R X ttdd t||dd W 5 Q R X d S )Nr   r'   r   r(   `x` and `y` must be of nonzeromatchz`use_continuity` must be oneZekki)use_continuityz`alternative` must be one ofalternativez`axis` must be an integerrq   axisz`method` must be one ofmethod)r   r   r>   r?   r   r@   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sft|j|jksvtt j|d }t j|d }t||}t||dd}t||dd}|j|jkst|j|jkstt||}t||dd}t||dd}|j|jkst|j|jks&tt j|d }t j|d }t||}t||dd}t||dd}|j|jks~t|j|jkstt j|d }t j|d }|d |d< t||}t||dd}t||dd}|j|jkst|j|jkstd S )Nr   r-   
asymptoticr   exactr   )r   r5   r6   randr   rL   AssertionError)r   rn   r    r!   autor   r   r$   r$   r%   	test_auto   sH    




zTestMannWhitneyU.test_autogm9Aj@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|}t|| d S N)r   r    r!   r   r   r   r   rM   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_continuity,  s    z TestMannWhitneyU.test_continuityc           	      C   s   ddddg}t dddddg}t dddddgd }t dddddgd }|d || || ||| || |d g}t||dd	d
}dddddddg}dddddddg}t|j| t|j| d S )Nr   r'   r   r(   r)   r   rT   rF   r   )r   r   r+   	         !@r-   rz   r,   r*   g]U?g[?gi\?gZX<_?gx.?g 
?)r   r   r   r   rK   r   rL   )	r   r    Zy0ZdyZdy2r!   rM   Z
U_expectedZ
p_expectedr$   r$   r%   test_tie_correct:  s    *  z!TestMannWhitneyU.test_tie_correctg      ?rV   g      ?rs   皙?g?rt   rU   r   g?)r   r'   r   gx&?g/$?gJ+?gy&1?gv/?gv/?gjt?g~jt?gʡE?gy&1?gV-?gS?gv?gʡE?g'1Z?gm?r=   gK7A`?gZd;O?gMbX?gMb?gRQ?gRQ?gM?g;On?g;On?gV-?g      ?gJ+?gx&?gCl?gMb?gMb?gMb?gy&1?gM?g|?5^?gn?g\(\?g!rh?gK7?gMbp?g~jt?g333333?g"~j?gףp=
?gzG?gK7?gGz?gl?gI+?)r   r'   r   r(   r)   g1Zd?g1Zd?g%C?g~jt?g~jt?gsh|??gS㥛?g+?g{Gzt?rT   g~jt?gL7A`?gjt?gPn?gI+?gX9v?gQ?gMb?gsh|??gK7A`?gMb`?g;On?gQ?g9v?gˡE?gT㥛 ?gbX9ȶ?grh|?gQ?gx&?gv/?gMbX?g(\?gQ?r.   g9v?g/$?gL7A`?g
ףp=
?gQ?gK7?g`"?g7A`?gV-?gjt?gˡE?)r   r'   r   r(   r)   r*   c           
   	   C   s   | j | j| j| jd}| D ]\}}| D ]\}}tdt|}tt	j
|||d|dd td|| d }tt	j
|||dt	j|||d t	j|||d d t	j|||d}t||d d d  t	j|||d}	t||	 q.qd S )N)r   r(   r)   r*   r   )kmrn   r.   r/   r   rF   )pn3pn4pm5pm6itemsr   r7   lenr   r   r   Zsfpmf)
r   Zp_tablesrn   tabler   r#   uu2r   Zpmf2r$   r$   r%   test_exact_distributionj  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sPtt |j|j dksjtt jd}t jd}t||dd}t||dd}|j|jkstt |j|j dk std S )	Nr   r)   r   r   r   rT   (   r.   )	r   r5   r6   r   r   rK   r   absrL   )r   r    r!   res1res2r$   r$   r%   test_asymptotic_behavior  s    z)TestMannWhitneyU.test_asymptotic_behaviorc                 C   sx   t dddgddgddd}t dddgddgd	dd}t|j|j |jd
ksPtt dddgddgddd}t|d d S )Nr   r'   r   rq         @r   r   r   r   rV   r   )r   r   )r   r   rL   r   )r   Zres_lZres_grM   r$   r$   r%   test_exact_U_equals_mean  s    z)TestMannWhitneyU.test_exact_U_equals_meanr   r   )r   rV   )r   g郡E?)r   resultc                 C   s   t td|| 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   )rV   r   r   F)r   r   rV   )r   r   r   rC   rZ   r$   r$   r%   test_equal_scalar_data  s    
z'TestMannWhitneyU.test_equal_scalar_datar   c                 C   s|  t jd d}d\}}t j|dd}t jd|ddd }t||||d	}d
}|jj|ksbt|jj|ksrtt 	||dt 	||d }}|d }|j
|j
kstt |||f }t |||f }|jd d |kst|jd d |kstt |}	t |}
tdd |D  D ]8}|| }|| }t|||d}|j|	|< |j|
|< qt j|j|
 t j|j|	 d S )Nr   )r,   r+   r   r-   r*   r   rs   )r   r   )r*   r   r-   rF   )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   r5   r6   r   r   rL   shaper   rK   ZmoveaxisndimZbroadcast_tozerosr   Ztestingr   )r   r   r   r   rn   r    r!   rM   r   Z
statisticsZpvaluesindicesxiyitempr$   r$   r%   test_gh_12837_11113  s4    


z$TestMannWhitneyU.test_gh_12837_11113c                 C   s   ddddg}ddddddddddd	g}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(   r*   r,   r-   r   r)   )r   r   rB   r   rK   rL   rC   )r   r    r!   r   r   res3r$   r$   r%   test_gh_11355  s    




zTestMannWhitneyU.test_gh_11355r   r'   r   r(   r*   r,   r-   r)   r+   g+zQ?r   g}$k\?g     1@g!˛G*?r   g,s?     8@gFHQ?)r    r!   rK   rL   c                 C   s2   t ||dd}t|j|dd t|j|dd d S )Nr   r   -q=r/   )r   r   rK   rL   )r   r    r!   rK   rL   rM   r$   r$   r%   test_gh_11355b  s    zTestMannWhitneyU.test_gh_11355bg&?gO?gO?g9@VN!x?g9M>?g9M>?g?UV?gߺVJH?gVJH?)r   r   r   
pvalue_expc           	      C   s:   d}d}d}t |||||d}t|j| t|j| d S )N#   )
rk   g(\?g=
ףp=?gp=
ף?g333333?gGz?g(\?g=
ףp=?r   g\(\?)gffffff?g)\(?ry   gGz?g\(\?r   r   r   )r   r   rK   r   rL   )	r   r   r   r   r   Zstatistic_expr    r!   rM   r$   r$   r%   test_gh_9184'  s     zTestMannWhitneyU.test_gh_9184c              	   C   s&   t tdd tg g  W 5 Q R X d S )Nr   r   )r>   r?   r   rZ   r$   r$   r%   test_gh_6897F  s    zTestMannWhitneyU.test_gh_6897c                 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   rC   r   r   rK   rL   )r   abrM   r$   r$   r%   test_gh_4067K  s
    
zTestMannWhitneyU.test_gh_4067rq   r   )r   ga׀}?)r   rh   )rq   g?h?)rq   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   rM   r$   r$   r%   test_gh_2118c  s    
zTestMannWhitneyU.test_gh_2118c                 C   s
   d t _d S r   r   rZ   r$   r$   r%   teardown_methodk  s    z TestMannWhitneyU.teardown_methodN)'rP   rQ   rR   r   r   r   r    r!   Zcases_basicpytestmarkparametrizer   Zcases_continuityr   r   r   r   r   r   r   r   r   Zcases_scalarr   r   r   r   r   rB   Zcases_11355r   Z
cases_9184r   r   r   Z
cases_2118r   r   r$   r$   r$   r%   r      s  5
      


          

                         


+
 
    













r   c                   @   s   e Zd Zdd Zdd ZdS )TestMannWhitneyU_iterativec                 C   s
   dt _d S )NFr   rZ   r$   r$   r%   r   p  s    z'TestMannWhitneyU_iterative.setup_methodc                 C   s
   d t _d S r   r   rZ   r$   r$   r%   r   s  s    z*TestMannWhitneyU_iterative.teardown_methodN)rP   rQ   rR   r   r   r$   r$   r$   r%   r   o  s   r   c                  C   s   d t _td t _tjd} | d}| d}tj||dd t	t jdksXt
| d}tj||dd t	t jdkrt
d S )	N)r   r   r   l   7cE"r)   i  r   r   rF   i  )r   r   r   rm   Z_fmnksr5   Zdefault_rngstatsr   allr   )rngr    r!   r$   r$   r%   test_mann_whitney_u_switchw  s    


r   c                   @   sz   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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   idxrZ   r$   r%   r     s     z,TestSomersD.setup_method.<locals>.<listcomp>r   r   )ZALL_INTEGERZ	ALL_FLOATZdtypesr   r7   r   	functoolspartialr   somersdpartialfuncr   )r   Zinput_arrayr$   rZ   r%   r     s    

zTestSomersD.setup_methodc                 G   s6   | j | }t|j| jjdd t|j| jjdd d S )NV瞯<r/   )r   r   rK   r   rL   )r   r   rM   r$   r$   r%   pythranfunc  s    
zTestSomersD.pythranfuncc                 C   st   dddddgdddddgd	d
dddgg}t |}| t j}t j|f|}t|j|jdd t|j|jdd d S )Nrd         r,   r      r   rj   r   r   r'      r   r/   )r   r   Zget_optional_argsr   rK   rL   )r   r   r   Zoptional_argsr   r$   r$   r%   test_pythranfunc_keywords  s    (
z%TestSomersD.test_pythranfunc_keywordsc                 C   s  ddddddddg}ddddddddg}d	}t ||}t|j|d
 dd t|j|d dd d
ddddddddg	}ddd
ddddddg	}d	}t ||}t|j|d
 dd t|j|d dd dddddddg}dddddddg}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d
dddddddddg
}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dddddddddd
g
}d}t ||}t|j|d
 dd t|j|d dd dddddg}ddddd
g}d}t ||}t|j|d
 dd t|j|d dd t dddgdddg}t|jtj t|jtj t dd
dgdddg}t|jtj t|jtj t dddgdd
dg}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 )Nr)   r'   r   r   r*   r(   r,   r-           rh   r   r   r/   )g+$I$I¿g=/3n+?r+   rh   r   r   )gs'}'?r   rF   )g      r   )g}'}'r   rj   )      g.ʂ?g      $@g      4@)r   r   r   rK   rL   r   r7   r   rC   r>   r?   )r   r    r!   r   rM   x1x2r$   r$   r%   test_like_kendalltau  s    







z TestSomersD.test_like_kendalltauc                 C   s   ddddddddddddddddddddddddg}ddddddddddddddddddddddddg}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 )Nr   r'   r   gCE]t?g^_?gO((Ƿ?r   r/   rX   )r   r'   r'   r   )r   r   r   rK   rL   r   r   r   )r   r    r!   Zd_crZd_rcr#   rM   r$   r$   r%   test_asymmetry   sN                          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 )Nr-   r'   r*   r)   r   r(   r   gHHHHHH?r   r   U   r3   )gM&w?rh   gtE]t)r   r   Tr   r   r   rK   )r   r   ZdyxZdxyr$   r$   r%   test_somers_original9  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 )NrE   r(   r*   r   r#   r'   r   r   gayr   r/   gPj$?)r   prodr5   r6   r   multinomialrvsrm   rG   r   insertr   r   rK   rL   )r   Nr   sizesrM   s2r   Zs3r   Zs4Zres4r$   r$   r%   *test_contingency_table_with_zero_rows_colsO  s(    
 


 
z6TestSomersD.test_contingency_table_with_zero_rows_colsc           	   	   C   sB  d}d}t |}t jd tjj|t || d|}|d }d}t	t
|d t| W 5 Q R X |d }d	}t	t
|d t| W 5 Q R X d
}t	t
|d tg g W 5 Q R X t	t
|d tdgg W 5 Q R X t d}t	t
|d t| W 5 Q R X d|d< t	t
|d t| W 5 Q R X d S )NrE   r  r   r  r'   z:All elements of the contingency table must be non-negativer   rT   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  r5   r6   r   r  r  rm   rG   r>   r?   r   r   )	r   r	  r   r
  r  Zs5messageZs6Zs7r$   r$   r%   test_invalid_contingency_tablesn  s0    
 
z+TestSomersD.test_invalid_contingency_tablesc                 C   sf   dddg}ddt jg}dddg}ddt j g}t||}t||}t|j|j t|j|j d S )Nr   r'   r   rF   g @r   r   )r   rB   r   r   r   rK   rL   )r   r    r   r!   y2rM   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   r7   r   r   r   r   Zeye)r   r    r!   rM   r$   r$   r%   test_contingency_table_return  s    

z)TestSomersD.test_contingency_table_returnc              	   C   sV  dddddg}dddddg}t j||d	d
}|jdks:t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 st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 5 Q R X d S )Nr   r'   r   r(   r)   r*   r,   r-   r   r   r   r   r   zalternative must be 'less'...r   z	ekki-ekki)r   r   rK   r   r   r   rL   reverser   r   r?   )r   r   r   r   rM   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sFt|jdksTttj||dd}|j|ksrt|j|r~dndksttj||dd}|j|kst|j|rdndkstd S )	Nr+   r   rF   r   r   r   r   r   )r   r7   Zflipr   r   rK   r   rL   )r   r  r   r   Zexpected_statisticrM   r$   r$   r%    test_somersd_perfect_correlation  s    
z,TestSomersD.test_somersd_perfect_correlationN)rP   rQ   rR   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r  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?rE   r'   r]   r)   )gllgEA]0K?r,   r-   )*)1%g_  ?r   )g_c1?g= ?   rJ   )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   rK   rL   r   r   input_sampler   rM   rK   rL   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(	r  )gNXzr  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pooledNr  r   r$   r$   r%   test_pooled_param  s    z"TestBarnardExact.test_pooled_paramc              	   C   s   d}t t|d tddgddggdd W 5 Q R X d	}t t|d ttd
dd W 5 Q R X d}t t|d tddgddgg W 5 Q R X d}t t|d tddgddggd W 5 Q R X d S )N7Number of points `n` must be strictly positive, found 0r   r   r'   r   r(   r   rn   ,The input `table` must be of shape \(2, 2\).r*   *All values in `table` must be nonnegative.rF   zI`alternative` should be one of {'two-sided', 'less', 'greater'}, found .*not-correct)r>   r?   r   r   r7   rG   r   	error_msgr$   r$   r%   test_raises#  s    " zTestBarnardExact.test_raisesr   c                 C   s6   t |}|j|j }}t||d  t||d  d S Nr   r   r   rK   rL   r   r   r$   r$   r%   test_edge_cases=  s    z TestBarnardExact.test_edge_casesrh   c                 C   s6   t |}|j|j }}t||d  t||d  d S r,  r-  r   r$   r$   r%   test_row_or_col_zeroI  s    z%TestBarnardExact.test_row_or_col_zero)r  gE\/??   ,  )ggQ5r      r4   i  )g&X}>r   r   r   r   c           	      C   sf   |\}}|dkr2t |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   NrF   r   Hz>r/   )r   r   r   rK   rL   r   )	r   r!  r   r   Zexpected_statZless_pvalue_expectrM   rK   rL   r$   r$   r%   test_less_greaterV  s      z"TestBarnardExact.test_less_greaterN)rP   rQ   rR   __doc__r   r   r   r"  r#  r+  r.  r   rC   r/  r4  r$   r$   r$   r%   r    sp   



r  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.r3  r  r'   r,   r-   )<vB\?g/??r)   r   r+   )gM?gA>?r   rJ   r   )_VѶ?g֭?)u %?gc'?r   r(   r   r   r   )rV   g      ?rj   )+f?gXc}v?   %   )gZыD?ggi]?c                 C   s2   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   r/   Nr   rK   rL   r   ATOLr   r$   r$   r%   	test_less~  s    zTestBoschlooExact.test_lessr  r   r  )k\2?g0,%?)gKv?gN3?)r9  g'&5?r  )gw@_?g7?)gi{?gɑ)z?)օa?g1|?r*   )gY<;?gND?)ge?gG`?c                 C   s2   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="greater",
                       tsmethod="central", np.interval=TRUE, beta=1e-8)
        ```
        r   r   r/   Nr>  r   r$   r$   r%   test_greater  s    zTestBoschlooExact.test_greater)rA  gqQS,5?)r7  gG?/??)r9  gKE`?)r8  ghr1ֽ?)rB  grfb?)rV   g      ?)r;  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   rn   r/   Nr>  r   r$   r$   r%   test_two_sided  s    z TestBoschlooExact.test_two_sidedc              	   C   s   d}t t|d tddgddggdd W 5 Q R X d	}t t|d ttd
dd W 5 Q R X d}t t|d tddgddgg W 5 Q R X d}t t|d tddgddggd W 5 Q R X d S )Nr$  r   r   r'   r   r(   r   r%  r&  r*   r'  rF   zK`alternative` should be one of \('two-sided', 'less', 'greater'\), found .*r(  )r>   r?   r   r   r7   rG   r)  r$   r$   r%   r+    s    " zTestBoschlooExact.test_raisesc                 C   s6   t |}|j|j }}t||d  t||d  d S r,  )r   rK   rL   r   r   r$   r$   r%   r/    s    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sBtt |ddj}|d	ks\td S )
Nr   rx   rj   r   r   r   r'   r   rh   )r   rL   minr   )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,   r-   r   r   )r   rK   r   Zfisher_exactr   )r   r   rG  Zboschloo_statZfisher_pr$   r$   r%   test_against_fisher_exact  s    z+TestBoschlooExact.test_against_fisher_exactN)rP   rQ   rR   r5  r?  r   r   r   r@  rC  rE  r+  r   rC   r/  rJ  rK  r$   r$   r$   r%   r6  y  sp   




r6  c                   @   sb   e Zd Zdd Zdd Zdd Zejddd	d
dgdd Z	dd Z
dd Zdd Zdd ZdS )TestCvm_2sampc              	   C   s   t dd}t d}d}tjt|d t|| W 5 Q R X tjt|d t|| W 5 Q R X d}tjt|d tg | W 5 Q R X tjt|d t|dg W 5 Q R X d}tjt|d t||d	 W 5 Q R X d S )
Nr+   rp   r)   z#The samples must be one-dimensionalr   z/x and y must contain at least two observations.r   z/method must be either auto, exact or asymptoticZxyz)r   r7   rG   r   r   r?   r   )r   r    r!   msgr$   r$   r%   rr     s    
z TestCvm_2samp.test_invalid_inputc                 C   sX   dddddg}dddd	g}t ||}t t|t|}t|j|jf|j|jf d S )
Nr'   r   r(   r,   r*   r   r}   rj   r   )r   r   r   r   rK   rL   r   r    r!   r   r   r$   r$   r%   test_list_input$  s
    
zTestCvm_2samp.test_list_inputc                 C   sf   ddddddddd	g	}d
ddddddddddddddg}t ||}t|jddd t|jddd d S )Ngffffff@g @r   gffffff!@皙"@g#@g333333$@g333333%@gffffff&@g@g@g@      @333333@gffffff @g333333"@g#@g%@g&@g      '@g(@g      )@g*@g333333-@gS㥛?r.   r/   g
ףp=
?rT   )r   r   rK   rL   r   r    r!   rr$   r$   r%   test_example_conover+  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   rK   r   rn   Zpvalr$   r$   r%   test_exact_pvalue5  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 oHdk n   t||d }td|j  k otdk n   d S )Ni  i@B )r
  i r   r   rs   )	r   r5   r6   r   rl   r  r   r   rL   rS  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,   r-   r   r   r   rT   r/   )	r   r5   r6   r   r   r   rK   r   rL   rN  r$   r$   r%   test_exact_vs_asymptoticK  s    z&TestCvm_2samp.test_exact_vs_asymptoticc                 C   sv   t d}dddg}t||dd}t||dd}t|j|j t d}t||d	d}t||dd}t|j|j d S )
NrJ   rV   g@g333333*@r   r   r   r2  r   )r   r7   r   r   rL   rN  r$   r$   r%   test_method_autoT  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 )Nr  r   r(   )r   r7   r   r   rK   rL   )r   r    rM   r$   r$   r%   test_same_input`  s
    

zTestCvm_2samp.test_same_inputN)rP   rQ   rR   rr   rO  rU  r   r   r   rV  rW  rX  rY  rZ  r$   r$   r$   r%   rL    s   

	rL  c                   @   sv  e Zd Zdddddgdddd	d
gdddddgfZddddddd
d
gdddd	d
gdddddgfZdddgdddd	d
dddd	d
g
dddddg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dddg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
d0d1d2d3 Ze	j
d4d5d6d7d8gd9d: Zd;d< Zd=S )>TestTukeyHSDr   g     7@gffffff:@g;@gfffff=@gffffff<@gA@g     =@g@@g>@g:@gL<@gL8@g333333:@g;@gHzG:@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,atolrX   g|=zequal size samplezunequal sample sizezextreme sample size differences)idsc                 C   s   t j|dd dd tdd}tj| }| }|D ]\}}}	}
}}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   r/   rU   r   asarrayreplacesplitfloatrG   r   	tukey_hsdconfidence_intervalintr   lowrK   highrL   )r   datares_expect_strr0   
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   r3  zunequal size samplec                 C   s   t j| tdd}tj| }| }|D ]\}}}	}
}}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   r/   N)r   ra  rc  rd  rG   r   re  rf  rg  r   rh  rK   ri  rL   )r   rj  rk  r0   rl  rm  rn  r   ro  rp  r  rq  r#   r$   r$   r%   test_compare_matlab  s    

z TestTukeyHSD.test_compare_matlabc                 C   sH  d}t j|dd dd tdd}dd	d
dddddddddddddddgdddddddd	dddddd d!dd dgddd"dd#d$d!d%dddd"dd&d%d%dd!gf}tj| }| }|D ]\}}}}	}
}t	|d' t	|d'  }}t
|j||f |	d(d) t
|j||f |d*d) t
|j||f |
d+d) t
|j||f |d(d) qd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_  rt     r3   6   r   F   4   3   C   rd   r            )   rJ   ,   r   r2  r   rj   r   $   *   r   r  r4   r<  r+   r  r  rx   r   r3  r/   ru   gh㈵>r`  )r   Zstr_resrl  rj  rm  rn  r   ro  r  rp  rq  r#   r$   r$   r%   test_compare_r  s`                            
zTestTukeyHSD.test_compare_rc              	   C   s  dddddg}dddd	d
g}dddddg}dddddg}t ||||}| }tddddgddddgddddgddddgg}tddddgddddgddddgddddgg}d D ]H\}	}
t|j|	|
f ||	|
f d!d" t|j|	|
f ||	|
f d!d" qd#S )$zp
        Example sourced from:
        https://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm
        g@g@g333333@gffffff@g      @g @rR  g333333@gffffff"@rQ  g       @g      %@g333333 @rP  gffffff@gffffff@gffffff@g@r   g      g(\?gq=
ףpgp=
ף?gGz?g
ףp=
?gzG?gzG@g      ?g=
ףp=@g=
ףp=@g@)r   r   )r'   r   )r   r   )r   r'   r   rT   r/   N)r   re  rf  r   ra  r   rh  ri  )r   Zgroup1Zgroup2Zgroup3Zgroup4rM   rn  lowerupperr   ro  r$   r$   r%   test_engineering_stat_handbook  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 )Nr2   r   rE   r   r   r   r   )r   r5   r6   r   r   re  rf  r   rh  ri  r  ZdiagonalrK   rL   )r   rj  rM   rn  r$   r$   r%   test_rand_symm-  s    
zTestTukeyHSD.test_rand_symmc              	   C   s<   t tdd& tdddgdtjgdddg W 5 Q R X d S )Nz...must be finite.r   r   r'   r   r*   r,   )r>   r?   r   re  r   rB   rZ   r$   r$   r%   test_no_inf@  s    zTestTukeyHSD.test_no_infc              	   C   s@   t tdd* tddgddggddgdddg W 5 Q R X d S )	Nz...must be one-dimensionalr   r   r'   r   r)   r   r*   r>   r?   r   re  rZ   r$   r$   r%   
test_is_1dD  s    zTestTukeyHSD.test_is_1dc              	   C   s4   t tdd tg ddgdddg W 5 Q R X d S )Nz...must be greater than oner   r'   r)   r(   r*   r  rZ   r$   r$   r%   test_no_emptyH  s    zTestTukeyHSD.test_no_emptynargsr   c              	   C   s2   t tdd tjdddgg|   W 5 Q R X d S )Nz...more than 1 treatment.r   r   r,   r   r  )r   r  r$   r$   r%   test_not_enough_treatmentsL  s    z'TestTukeyHSD.test_not_enough_treatmentsclr   r   r   r'   c              	   C   sB   t tdd, tdddgddgddg}|| W 5 Q R X d S )Nzmust be between 0 and 1r   r   r,   r   r(   r   )r>   r?   r   re  rf  )r   r  rT  r$   r$   r%   test_conf_level_invalidQ  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   re  data_diff_sizeZ	ttest_indr   rL   )r   rm  Z	res_ttestr$   r$   r%   test_2_args_ttestW  s    zTestTukeyHSD.test_2_args_ttestN)rP   rQ   rR   Zdata_same_sizer  Zextreme_sizeZsas_same_sizeZsas_diff_sizeZsas_extremer   r   r   rs  Zmatlab_sm_sizZmatlab_diff_szru  r  r  r  r  r  r  r  r  r  r$   r$   r$   r%   r[  l  sd   



%
)

r[  c                   @   s   e Zd Zejddddddgdddddgfd	d
 Zejddddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgfd d! Zd"d# Zd$d% Z	d&d' Z
d(S ))TestPoissonMeansTestzc1, n1, c2, n2, p_expectr   rE   r   gea?r'   r*   g	c?c                 C   s$   t ||||}t|j|dd d S )NrX   r/   r   poisson_means_testr   rL   )r   c1n1c2n2p_expectrM   r$   r$   r%   test_paper_examples`  s    z(TestPoissonMeansTest.test_paper_examplesz c1, n1, c2, n2, p_expect, alt, drJ   r+   g{}?r   goPF?2   r  r   gae?rU   r1  g/V-=?rj   r(   g")?r   g_'Qm~?g|?r   g0ݷ?c           	      C   s,   t j||||||d}t|j|ddd d S )N)r   diffg>gؗҜ<)r0   r   r  )	r   r  r  r  r  r  ZaltdrM   r$   r$   r%   test_fortran_authorsi  s    z)TestPoissonMeansTest.test_fortran_authorsc                 C   s0   d\}}d\}}t ||||}t|jd d S )N)rf   rf   r   r  r   count1count2nobs1nobs2rM   r$   r$   r%   test_different_results~  s    z+TestPoissonMeansTest.test_different_resultsc                 C   s0   d\}}d\}}t ||||}t|jd d S )Nr  r:  r   r  r  r$   r$   r%   test_less_than_zero_lambda_hat2  s    z4TestPoissonMeansTest.test_less_than_zero_lambda_hat2c              	   C   sp  d\}}d\}}d}t t|d td||| W 5 Q R X t t|d t||d| W 5 Q R X d}t t|d td||| W 5 Q R X t t|d t||d| W 5 Q R X d}t t|d t|d|| W 5 Q R X t t|d t|||d W 5 Q R X d	}t t|d tj||||dd
 W 5 Q R X d}t t|d tjdddddd W 5 Q R X d S )Nr  r:  z`k1` and `k2` must be integers.r   r}   z1`k1` and `k2` must be greater than or equal to 0.rF   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   )r>   	TypeErrorr   r  r?   )r   r  r  r  r  r  r$   r$   r%   r     s.    z*TestPoissonMeansTest.test_input_validationN)rP   rQ   rR   r   r   r   r  r  r  r  r   r$   r$   r$   r%   r  _  s&   

	r  ),	itertoolsr   Znumpyr   r   r   Znumpy.testingr   r   r   r   r   r>   Zscipy.statsr   r   Zscipy.stats._hypotestsr	   r
   r   r   r   r   r   Zscipy.stats._mannwhitneyur   r   Zcommon_testsr   Zscipy._lib._testutilsr   r   rS   r   r   r   Zxslowr   r   r  r6  rL  r[  r  r$   r$   r$   r%   <module>   s>   $:\   G
  W  Z t