o
    Eb)n                    @   sr  d dl mZmZmZ 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mZmZ d dlmZm Z  d dl!m  m"Z" d	d
l#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,G dd dZ-G dd dZ.G dd dZ/dd Z0G dd dZ1G dd  d Z2dS )!    )divisionprint_functionabsolute_import)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permutation_test_all_partitions_concatenated)mannwhitneyu
_mwu_state   )check_named_results)special)_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 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   ZdecimalgQ,r?   )nparrayr   r	   selfxywp r)   B/usr/lib/python3/dist-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.      
   r0   r0   r0   )r0   r-   r   r.   r0   r0   r   r.   r/      r0   r    r   r1   r      r   r.   r2   r0   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w1Zp1Zw2Zp2Zw3Zp3r)   r)   r*   test_epps_singleton_array_like2   s   &z0TestEppsSingleton.test_epps_singleton_array_likec                 C   s"   dt d}}ttt|| d S )Nr   r,   r    r-   r0   )r!   r<   assert_raises
ValueErrorr   r$   r%   r&   r)   r)   r*   test_epps_singleton_size=   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.   r0   )r!   infr<   rA   rB   r   nanrC   r)   r)   r*   test_epps_singleton_nonfiniteB   s   z/TestEppsSingleton.test_epps_singleton_nonfinitec                 C   s$   t ddd}ttt|| d S )Nd   r   )r!   r<   reshaperA   rB   r   r$   r%   r)   r)   r*   test_epps_singleton_1d_inputI   s   z.TestEppsSingleton.test_epps_singleton_1d_inputc                 C   s2   t dt d}}t||}d}t|| d S )N   r8   )	statisticpvalue)r!   r<   r   r   )r$   r%   r&   resZ
attributesr)   r)   r*   
test_namesM   s   
zTestEppsSingleton.test_namesN)
__name__
__module____qualname__r+   r6   r?   rD   rG   rL   rQ   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       t tg ddg ddd d S )N)gy;i?g#^?gE>?gD
)?r-   {Gz?皙?      ?g+?-C6?r4   r   r   r$   r)   r)   r*   
test_cdf_4X   
   
zTestCvm.test_cdf_4c                 C   rV   )N)g8*5?g@߾?gHm?g%1 ?r0   )rX   rY   rZ   g333333?r[   r4   r\   r]   r)   r)   r*   test_cdf_10^   r_   zTestCvm.test_cdf_10c                 C   rV   )N)g}tg?g`?gI5o?gׁsF?  rW   r[   r4   r\   r]   r)   r)   r*   test_cdf_1000d   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[   r4   r\   r]   r)   r)   r*   test_cdf_infj   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_supportp   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   rH   i'  r[   r4   r\   r]   r)   r)   r*   test_cdf_large_nu   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_x|   s   "*zTestCvm.test_large_xc                 C   s<   d}t t|d d}tt|j|dk t|jd d S )N   皙?normrk   r   )r   r!   onesr   r   rN   r   rO   )r$   nrP   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 )Nr0   r,   r.   ro         ?r)   )r!   r<   rJ   rA   rB   r   rK   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?ro   gZ	%q?ư>r4   gEж?)r    rt   g!O!W*?gz"W`?)	r   r,   r.   ffffff?gQ?      ?      @exponge.?gnz\(r?)r   r   rN   rO   )r$   rP   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.   )ry   ffffff?r~   beta)
r!   r<   r   r   r~   cdfr   rN   rO   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   rj   rl   rr   ru   r   r   r)   r)   r)   r*   rU   T   s    	rU   c                   @   s,  e Z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 d*d+Zg d,g d-g d.g d/g d0d1Zg d2g d3g d4g d5g d6g d7d8Zd9d: Zd;d< Zd=d> Zddd	d?gddd	d@gddd	dAgddd	d?gddd	d@gddd	d?ggZej	
dBedCdD ZdEdF Zej	
dGddgdHdI ZdJdK Zg d+dLdMdNdOejdLdPdQdRdRdSgdTdUfg d+dLdMdNdOejejdPdQdRdRdSgdVdWfdQdPejdRgdLdMdNdOejdLdPdQdRdRdSgdXdYfdQdPejdRgdLdMdNdOejejdPdQdRdRdSgdZd[fdQejejdRgdLdMdNdOejejdPdQdRdRdSgd\d]fgZej	
d^ed_d` Zg dag dbg dcg ddg deg dfg dgg dhg dig	Zej	
djedkdl Z dmdn Z!dodp Z"g d&dqdrgddsgg d&dqdrgddsgg d&dqdrgddtgg d&dPgddugg d&dPgddugg d&dPgddvgdQdPgdQdPgddwgdQdPgdQdPgddwgdQdPgdQdPgddxgg	Z#ej	
g dye#dzd{ Z$d|S )}TestMannWhitneyUc                 C   sv  t ddg}t ddg}ttdd tg | W d    n1 s$w   Y  ttdd t|g  W d    n1 s?w   Y  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 syw   Y  ttdd t||dd W d    n1 sw   Y  ttdd t||dd W d    d S 1 sw   Y  d S )Nr   r,   r    r-   `x` and `y` must be of nonzeromatchz`use_continuity` must be oneekki)use_continuityz`alternative` must be one ofalternativez`axis` must be an integerrt   axisz`method` must be one ofmethod)r!   r"   rA   rB   r   rC   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   r2   
asymptoticr   exactr    )r!   r:   r;   randr   rO   )r$   rq   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   rP   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   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   rI   r   )r   r   )r0   	         !@r2   r}   r1   r/   )r   g]U?g[?gi\?gZX<_?gx.?g 
?)r!   r"   r   r   rN   r   rO   )	r$   r%   Zy0ZdyZdy2r&   rP   Z
U_expectedZ
p_expectedr)   r)   r*   test_tie_correct<  s   *z!TestMannWhitneyU.test_tie_correct)      ?rZ   g      ?)rv   皙?皙?rw   )rY   rv   r   r   rZ   g?r   r,   r    )r   r   rw   )gx&?g/$?gJ+?r   rw   )y&1?v/?gv/?r   gjt?~jt?ʡE?)	gy&1?gV-?r   rv   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?)r3   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   | j | j| j| jd}| D ]f\}}| 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mrq   r3   r4   r   rI   )pn3pn4pm5pm6itemsr!   r<   lenr   r   r   Zsfpmf)
r$   Zp_tablesrq   tabler   r(   uZu2r   Zpmf2r)   r)   r*   test_exact_distributionl  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   (   r3   )r!   r:   r;   r   r   rN   absrO   )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   rt         @r   r   r   r   rZ   r   )r    r   )r   r   rO   )r$   Zres_lZres_grP   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!   rF   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   )r1   r0   r    r2   r/   r   rv   )r   r   )r/   r    r2   rI   )N.c                 S      g | ]}t |qS r)   )range.0ir)   r)   r*   
<listcomp>      z8TestMannWhitneyU.test_gh_12837_11113.<locals>.<listcomp>r   )r!   r:   r;   r   r   rO   shaperN   moveaxisndimbroadcast_tozerosr   testingr   )r$   r   r   r   rq   r%   r&   rP   r   Z
statisticsZpvaluesindicesZxiyiZ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/   r1   r2   r   r    r,   r   r-   r-   r.   r-   )r   r!   rE   r   rN   rO   rF   )r$   r%   r&   r   r   res3r)   r)   r*   test_gh_11355  s   




zTestMannWhitneyU.test_gh_11355r    r/   r1   r2   r,   r   r-   r.   r0   g+zQ?r   g}$k\?g     1@g!˛G*?r   g,s?     8@gFHQ?)r%   r&   rN   rO   c                 C   s2   t ||dd}t|j|dd t|j|dd d S )Nr   r   -q=r4   )r   r   rN   rO   )r$   r%   r&   rN   rO   rP   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#   )
rn   g(\?g=
ףp=?gp=
ף?g333333?gGz?g(\?g=
ףp=?r   g\(\?)gffffff?g)\(?r|   gGz?g\(\?r   r   r   )r   r   rN   r   rO   )	r$   r   r   r   r   Zstatistic_expr%   r&   rP   r)   r)   r*   test_gh_9184)  s   zTestMannWhitneyU.test_gh_9184c                 C   s<   t tdd tg g  W d    d S 1 sw   Y  d S )Nr   r   )rA   rB   r   r]   r)   r)   r*   test_gh_6897H  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"   rF   r   r   rN   rO   )r$   abrP   r)   r)   r*   test_gh_4067M  s
   
zTestMannWhitneyU.test_gh_4067rt   r   )r    ga׀}?)r    rk   )rt   g?h?)rt   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   rP   r)   r)   r*   test_gh_2118e  s   
zTestMannWhitneyU.test_gh_2118N)%rR   rS   rT   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!   rE   Zcases_11355r   Z
cases_9184r   r   r   Z
cases_2118r   r)   r)   r)   r*   r      s   5




+



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 )Nr0   r   c                    s   g | ]	} j | d  qS r   )	arguments)r   idxr]   r)   r*   r   u  s    z,TestSomersD.setup_method.<locals>.<listcomp>r   r   )ZALL_INTEGERZ	ALL_FLOATZdtypesr!   r<   r  	functoolspartialstatssomersdpartialfuncr   )r$   Zinput_arrayr)   r]   r*   setup_methodo  s   

zTestSomersD.setup_methodc                 G   s6   | j | }t|j| jjdd t|j| jjdd d S )NV瞯<r4   )r
  r   rN   r   rO   )r$   r   rP   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         r1   r   )r1   r     r   rm   )r   r    r,   r1      r  r4   )r  r	  Zget_optional_argsr   rN   rO   )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-   r1   r2   )r.   r,   r/   r    r   r2   r1   r-           rk   r   r  r4   r   )	r   r.   r,   r   r    r/   r-   r1   r2   )	r.   r,   r   r/   r    r   r2   r1   r-   )r.   r,   r   r    r/   r-   r1   )r.   r,   r/   r    r   r1   r-   )g+$I$I¿g=/3n+?r0   rk   r   )
r   r,   r   r    r-   r/   r.   r1   r2   r   )gs'}'?r  rI   )g      r   )
r   r1   r2   r/   r.   r    r-   r,   r   r   )g}'}'r  )rm   r,   r   rm   r,   )r   r-   r1   r   r   )      g.ʂ?)r,   r,   r,   )r,   r   r,   g      $@g      4@)r  r	  r   rN   rO   r!   r<   r"   rF   rA   rB   )r$   r%   r&   r   rP   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  r4   r[   )r    r,   r,   r    )r  r	  r   rN   rO   r   r   r   )r$   r%   r&   Zd_crZd_rcr(   rP   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 )Nr2   r,   r/   r.   r    r-   r   gHHHHHH?r  r   U   r8   )gM&w?rk   gtE]t)r!   r"   Tr   r  r	  rN   )r$   r   ZdyxZdxyr)   r)   r*   test_somers_original  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 )NrH   r-   r/   r   r(   r,   r   r   gayr  r4   gPj$?)r!   prodr:   r;   r  multinomialrvsrp   rJ   r	  insertr   r   rN   rO   )r$   Nr   sizesrP   s2r   Zs3r   Zs4Zres4r)   r)   r*   *test_contingency_table_with_zero_rows_cols,  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 )NrH   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!  r:   r;   r  r"  r#  rp   rJ   rA   rB   r	  r   )	r$   r%  r   r&  r'  Zs5messageZs6Zs7r)   r)   r*   test_invalid_contingency_tablesK  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   rI   g @)r    r,   r   r   r  )r!   rE   r  r	  r   rN   rO   )r$   r%   r  r&   y2rP   r   r)   r)   r*   test_only_ranks_mattern  s   z"TestSomersD.test_only_ranks_matterc                 C   s6   t d}t d}t||}t|jt d d S )Nr0   )r!   r<   r  r	  r   r   Zeye)r$   r%   r&   rP   r)   r)   r*   test_contingency_table_returny  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/   r1   r2   r1   r   r   r   r   r   r,   r   zalternative must be 'less'...r   z	ekki-ekki)
r  r	  rN   r   r   rO   reverser   r
   rB   )r$   r  r  r   rP   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 )	Nr0   r   rI   r   r   r   r   r   )r!   r<   Zflipr  r	  rN   rO   )r$   r1  r  r  expected_statisticrP   r)   r)   r*    test_somersd_perfect_correlation  s   
z,TestSomersD.test_somersd_perfect_correlationN)rR   rS   rT   r  r  r  r  r  r  r)  r+  r-  r.  r0  r   r   r  r3  r)   r)   r)   r*   r  n  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   r0   '   )gXyq@g{2s&Q7?rH   r,   ra   r.   )gllgEA]0K?r1   r2   )*)1%g_  ?r   )g_c1?g= ?   rM   )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   rN   rO   r   r$   input_sampler   rP   rN   rO   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     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   rq   ,The input `table` must be of shape \(2, 2\).r/   *All values in `table` must be nonnegative.rI   zI`alternative` should be one of {'two-sided', 'less', 'greater'}, found .*not-correct)rA   rB   r   r!   r<   rJ   r$   Z	error_msgr)   r)   r*   test_raises   $   "zTestBarnardExact.test_raisesr  c                 C   6   t |}|j|j}}t||d  t||d  d S Nr   r   r   rN   rO   r   r=  r)   r)   r*   test_edge_cases  s   z TestBarnardExact.test_edge_casesrk   c                 C   rJ  rK  rL  r=  r)   r)   r*   test_row_or_col_zero&     z%TestBarnardExact.test_row_or_col_zero)r8  gE\/??   i,  )ggQ5r     r9   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   NrI   r   Hz>r4   )r!   r"   r   rN   rO   r   )	r$   r>  r   r   expected_statZless_pvalue_expectrP   rN   rO   r)   r)   r*   test_less_greater3  s   
z"TestBarnardExact.test_less_greaterN)rR   rS   rT   __doc__r   r   r  r?  r@  rH  rM  r!   rF   rN  rT  r)   r)   r)   r*   r4    sr    



r4  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d9S ):TestBoschlooExactz9Some tests to show that boschloo_exact() works correctly.rR  r5  r,   r1   r2   )<vB\?g/??r.   r   r0   )gM?gA>?r   rM   r  )_VѶ?g֭?)u %?gc'?r   r-   )r   r   r    )rZ   g      ?rm   )+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   r4   Nr   rN   rO   r   ATOLr=  r)   r)   r*   	test_less[  s   zTestBoschlooExact.test_lessr6  r   r7  )k\2?g0,%?)gKv?gN3?)rY  g'&5?r9  )gw@_?g7?)gi{?gɑ)z?)օa?g1|?r/   )gY<;?gND?)ge?gG`?c                 C   r]  )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   r4   Nr^  r=  r)   r)   r*   test_greaterx  s   zTestBoschlooExact.test_greater)ra  gqQS,5?)rW  gG?/??)rY  gKE`?)rX  ghr1ֽ?)rb  grfb?)rZ   g      ?)rZ  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   rq   r4   Nr^  r=  r)   r)   r*   test_two_sided  s   z TestBoschlooExact.test_two_sidedc                 C   rA  )NrB  r   r   r,   r    r-   r   rC  rD  r/   rE  rI   zK`alternative` should be one of \('two-sided', 'less', 'greater'\), found .*rF  )rA   rB   r   r!   r<   rJ   rG  r)   r)   r*   rH    rI  zTestBoschlooExact.test_raisesc                 C   rJ  rK  )r   rN   rO   r   r=  r)   r)   r*   rN    rO  z&TestBoschlooExact.test_row_or_col_zeroN)rR   rS   rT   rU  r_  r   r   r  r`  rc  re  rH  r!   rF   rN  r)   r)   r)   r*   rV  V  sl    


rV  c                   @   s^   e Zd Zdd Zdd Zdd Zejdg dd	d
 Z	dd Z
dd Zdd Zdd ZdS )TestCvm_2sampc                 C   sH  t dd}t d}d}tjt|d t|| W d    n1 s&w   Y  tjt|d t|| W d    n1 sBw   Y  d}tjt|d tg | W d    n1 s`w   Y  tjt|d t|dg W d    n1 s}w   Y  d}tjt|d t||d	 W d    d S 1 sw   Y  d S )
Nr0   rs   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!   r<   rJ   r   r
   rB   r   )r$   r%   r&   msgr)   r)   r*   ru     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-   r1   r/   )r   r   rm   r  )r   r!   r"   r   rN   rO   r$   r%   r&   r   r   r)   r)   r*   test_list_input  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㥛?r3   r4   g
ףp=
?rX   )r   r   rN   rO   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  r1   r1   gtE]t?)i@  r-   r/   g88?)i  r/   r1   gXwS?c                 C   s   t t|||| d S r   )r   r   )r$   rN   r   rq   Zpvalr)   r)   r*   test_exact_pvalue  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  i@B r&  i r   r   rv   )	r!   r:   r;   r   ro   r#  r   r   rO   rm  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   r1   r2   r   r   r   rX   r4   )	r!   r:   r;   r   r   r   rN   r   rO   rh  r)   r)   r*   test_exact_vs_asymptotic  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 )Nr0   )rZ   g@g333333*@r   r   r   rz   r   )r!   r<   r   r   rO   rh  r)   r)   r*   test_method_auto  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 )Nr9  r  r-   )r!   r<   r   r   rN   rO   )r$   r%   rP   r)   r)   r*   test_same_input*  s
   

zTestCvm_2samp.test_same_inputN)rR   rS   rT   ru   ri  ro  r   r   r  rp  rr  rs  rt  ru  r)   r)   r)   r*   rf    s    

	rf  c                     s   t jg dtd t  } t }d}t D ]}|d7 }t || d d }|tdd |D  qt 	 fddt
t d D }t|| tt|| d S )	N)r    r,   r-   Zdtyper   r   rI   c                 S   r   r)   )	frozensetr   r)   r)   r*   r   B  r   z4test_all_partitions_concatenated.<locals>.<listcomp>c              	      s4   g | ]}t t |d  t |d d  qS Nr   )r   binomsumr   rC  r)   r*   r   D  s    ,)r!   r"   intZcumsumsetr   splitaddr>   r   r   r   r   )ZncZall_partitionscounterZpartition_concatenatedZpartitioningr   r)   rC  r*    test_all_partitions_concatenated6  s   

r  c                
   @   s  e Zd ZdZdd Zejdg ddd Zejdd	e	
d
d fdde	dd
fgdd Zdd Zdd Zdd Zejddejddejdddd Zdd  Zejdd!d"d# Zejdd!d$d% Zd&d' Zej ejdd(d)d* Zejdd!d+d, Zejdd!d-d. Zd/d0 Zejdd!d1d2 Zej ejdd3d4d5 Zg d6g d7d8d9d:d;d<d=d>Zg d?g d@dAdBdCdDdEdFd>Zej ejdGeefdHdI ZejdJdKdLdM ZdNS )OTestPermutationTestg+=c                 C   s~  dd }d}t jt|d tg ddgf| W d    n1 s"w   Y  d}t jt|d td| W d    n1 s@w   Y  t jt|d td| W d    n1 s\w   Y  d	}t jt|d tg dg df|d
d W d    n1 sw   Y  d}t jt|d tg dg df|dd W d    n1 sw   Y  d}t jt|d tg dg df|d
d W d    n1 sw   Y  d}t jt|d tg dg df|dd W d    n1 sw   Y  d}t jt|d tg dg df|dd W d    n	1 sw   Y  d}t jt|d tg dg df|dd W d    n	1 sBw   Y  d}t jt|d tg dg df|dd W d    n	1 siw   Y  d}t jt|d tg dg df|dd W d    n	1 sw   Y  d}t jt|d tg dg df|dd W d    d S 1 sw   Y  d S )Nc                 S   s   t | |f|jS r   r  	ttest_indrN   r%   r&   r   r)   r)   r*   statS     z:TestPermutationTest.test_permutation_test_iv.<locals>.statz2each sample in `data` must contain two or more ...r   r   r   z6`data` must be a tuple containing at least two samples)r   z`axis` must be an integer.rt   r   z `permutation_type` must be in...r   )permutation_typez'`vectorized` must be `True` or `False`.)
vectorizedz)`n_resamples` must be a positive integer.i)n_resamplesg     D@z+`batch` must be a positive integer or None.)batchz`alternative` must be in...r   z"'herring' cannot be used to seed aZherring)random_state)r   r
   rB   r   	TypeError)r$   r  r*  r)   r)   r*   test_permutation_test_ivQ  sh   $z,TestPermutationTest.test_permutation_test_ivr  )pairingssamplesindependentc                    s  t jd t jd}t jd} fdd d _d _d|ddd}tj||f fdd	i|}t jd
 t jd	 d _tj||f fddi|}t jd t jd d _tj||f fddi|}t jd t jd t|j	|j	 t|j	|j	 d S )Nr   r0   c                    sN   | j dkrdnt| }t| j _  jd7  _tj| |dtj||d S )Nr   r   )r   r   max
batch_sizer  r!   mean)r%   r&   r   r  rN   r)   r*   rN     s   z1TestPermutationTest.test_batch.<locals>.statisticra   T)r  r  r  r  r  r   i  2   rQ  r,   )
r!   r:   r;   r   r  r  r  r   r   rO   )r$   r  r%   r&   r   r   r   r   r)   r  r*   
test_batch  s,   zTestPermutationTest.test_batchzpermutation_type, exact_sizer  r    r,   )r  r2   r  r/   c                 C   s   t jd t jd}t jd}dd }|ddd}tj||f|fddi|}t|jjd tj||f|fi |}t|jj| d S )Nr   r    c                 S      t j| |dt j||d S Nr   r!   r  r  r)   r)   r*   rN        z8TestPermutationTest.test_permutations.<locals>.statisticT)r  r  r  r  )	r!   r:   r;   r   r  r   r   null_distributionr&  )r$   r  Z
exact_sizer%   r&   rN   r   rP   r)   r)   r*   test_permutations  s   z%TestPermutationTest.test_permutationsc                 C   s   d\}}d\}}}t || ||ksJ tjj|d}tjj|d}||f}dd }	ddd||d	}
t||	fd
|i|
}t||	fd
tji|
}|j|jksRJ t	|j
|j
dd d S )N)r   r   )r2   r   i]  rq  c                 S   r  r  r  r  r)   r)   r*   rN     r  zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statisticTr  rH   r  r  r  r   r  r  rX   r4   )r   ry  r  ro   r#  r   r!   rE   rN   r   rO   r$   r   rngnxnypermutationsr%   r&   datarN   r   rP   r   r)   r)   r*   'test_randomized_test_against_exact_both  s    
z;TestPermutationTest.test_randomized_test_against_exact_bothc                 C   s   d\}}d\}}}d| |ksJ t jj|d}t jj|d}||f}dd }	ddd	||d
}
t||	fd|i|
}t||	fdtji|
}|j|jksNJ t|j|jdd d S )N)r   N)r9  r9  i }  r,   rq  c                 S   s   t j| | |dS r  r  r  r)   r)   r*   rN     r  zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statisticTr  rH   r  r  rX   r4   )	r  ro   r#  r   r!   rE   rN   r   rO   r  r)   r)   r*   *test_randomized_test_against_exact_samples  s    
z>TestPermutationTest.test_randomized_test_against_exact_samplesc                    s   d}zt jd}W n ty   t jd}Y nw d\}}}t||ks(J tjj	|d}tjj	|d |g} fdd}t
|}	ddd	||d
}
t||	fd|i|
}t||	fdt ji|
}|j|jkskJ t|j|jdd d S )Nr   r   )r2   r2   i@  rq  c                    s   t |  d S )Nr   )r  Zpearsonrr%   r&   r)   r*   statistic1d     zTTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic1dTr  rH   r  r  rX   r4   )r!   r:   Zdefault_rngAttributeErrorZRandomStater   	factorialr  ro   r#  
_bootstrap_vectorize_statisticr   rE   rN   r   rO   )r$   r   r  r  r  r  r%   r  r  rN   r   rP   r   r)   r  r*   +test_randomized_test_against_exact_pairings  s,   

z?TestPermutationTest.test_randomized_test_against_exact_pairingsr   )r   r   r  )r8   g    eAr   )r   r   r,   c           	   	   C   s   t dddd}t t dd d d d f d|}tj||||d|d}dd }t||f|d	|||dd
}t|j|j| j	d |dkrWt|j
d d d |j
| j	d d S t|j
|j
| j	d d S )N<   r    r-   r.   r   )r  r   r  r   c                 S      t j| ||djS r  r  r  r)   r)   r*   rN   *  r  zETestPermutationTest.test_against_permutation_ttest.<locals>.statisticT)r  r  r   r   r  r   r8   r      )r!   r<   rJ   r   r  r  r   r   rN   r   rO   )	r$   r   r  r   r%   r&   r   rN   r   r)   r)   r*   test_against_permutation_ttest  s   
"$z2TestPermutationTest.test_against_permutation_ttestc                    s   t jd tjjddd}tjjdddd}d tj|| d	d
} fdd}t||f|t j d}t	|j
|j
| jd t	|j|j| jd d S )Nr   r-   r   r&  scaler.   r    r&  locr  r   r   )r   modec                    s   t j| |d djS )NZasymp)r  r   )r  ks_2samprN   r%   r&   r   r)   r*   r  E  s
   
z<TestPermutationTest.test_against_kstest.<locals>.statistic1dr  r   r   )r!   r:   r;   r  ro   r#  r  r   rE   r   rN   r   rO   r$   r%   r&   r   r  rP   r)   r   r*   test_against_kstest=  s   z'TestPermutationTest.test_against_kstestr   r   r   c           	      C   s   t jd tjjddd}tjjddd}ddd	d
}|| }tj|||d}dd }t||f|t j|d}t	|j
|j
| jd t	|j|j| jd d S )Nr   r-   r   r  r.   r    r   r   r   r  r   c                 S      t | |jS r   r  ansarirN   r  r)   r)   r*   r  \     z<TestPermutationTest.test_against_ansari.<locals>.statistic1dr  r   )r!   r:   r;   r  ro   r#  r  r   rE   r   rN   r   rO   )	r$   r   r%   r&   Zalternative_correspondenceZalternative_scipyr   r  rP   r)   r)   r*   test_against_ansariO  s   z'TestPermutationTest.test_against_ansaric                 C   s   t jd tjjddd}tjjddd}tj||d|d}dd }t||f|d	t j|dd
}t	|j
|j
| jd t	|j|j| jd d S )Nr   )r    r.   r,   r&  r  rY   r   )r   r   c                 S   r  r  )r  r   rN   r  r)   r)   r*   rN   m  r  z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statisticT)r  r  r   r   r   )r!   r:   r;   r  uniformr#  r   r   rE   r   rN   r   rO   )r$   r   r%   r&   r   rN   rP   r)   r)   r*   test_against_mannwhitneyue  s   z-TestPermutationTest.test_against_mannwhitneyuc                 C   s   t jd tjjddd}tjjdddd}tj||dd	}d
d }t||f|t jdd}t	|j
|j
| jd t	|j|j| jd d S )Nr   r-   r   r  r.   r    r  r   r   c                 S      t j| |ddjS Nr   r   )r  r   rN   r  r)   r)   r*   r  ~  
   z9TestPermutationTest.test_against_cvm.<locals>.statistic1dr   r  r   )r!   r:   r;   r  ro   r#  r   r   rE   r   rN   r   rO   r  r)   r)   r*   test_against_cvmw  s   z$TestPermutationTest.test_against_cvm)rI   r,   c                 C   s4  t jd t jd}t jddd}t jddd}|||f}dd }dd	 }t|}t|}	t |d
}
t |d}t |d}||
|||d}|	|
|||d}d|dddd}t||fdt ji|}t||fddi|}t	|j
|| jd t	|j
|j
| jd t	|j|dd t	|j|jdd d S )Nr   r    r   r,   r-   c                  W      t j|  jS r   )r  kruskalrN   r  r)   r)   r*   r       zITestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistic1dc                  W   r  r   )r  r  rO   r  r)   r)   r*   pvalue1d  r  zFTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.pvalue1d)r,   r    r    )r,   r    r,   )r,   r    r-   r   Fr   r  r  r   r   r  r  r  ra   r   gQ?r4   Q?)r!   r:   r;   r   r  r  r   r   rE   r   rN   r   rO   )r$   r   r%   r&   zr  r  r  rN   rO   r  r,  Zz2r2  expected_pvaluer   rP   r   r)   r)   r*    test_vectorized_nsamp_ptype_both  s.   	


z4TestPermutationTest.test_vectorized_nsamp_ptype_bothc              	      s  t jd tjjddd}tjjddd}dd }dd } fd	d
}t|}|||dd}|d d dd d f }	|d d dd d f }
t|| f|ddt j	 dd}t||f|ddt j	 dd}t
|j|j| jd  dkrzt
|j|	| jd t
|j|
| jd t
|j|j| jd d S )Nr   )r    r/   r,   r  rY   c                 S   s   t j| ddjS Nr   r   r  wilcoxonrN   )r  r)   r)   r*   statistic_1samp_1d  s   zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_1samp_1dc                 S   r  r  r  r  r)   r)   r*   statistic_2samp_1d  r  zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_2samp_1dc                    s   t j| | dS )Nr   )r  r  r  r   r)   r*   test_1d  r  z:TestPermutationTest.test_against_wilcoxon.<locals>.test_1dr   r   Fr  )r  r  r  r   r   r   r   )r!   r:   r;   r  r  r#  r  r  r   rE   r   rN   r   rO   )r$   r   r%   r&   r  r  r  testr   rS  Z
expected_pr   r   r)   r   r*   test_against_wilcoxon  s.   
z)TestPermutationTest.test_against_wilcoxonc           	      C   s   t jd t jjdddd}d||dk< ddd}||dd}}}tj||||d	}tj|f|d
dt j|d}t|j	|j	| j
d d S )Nr   r,   r0   rq  rI   c                 S   s   t j| dk|dS )Nr   r   r!   rz  )r%   r   r)   r)   r*   rN     r  z=TestPermutationTest.test_against_binomtest.<locals>.statisticrZ   r   Tr  )r  r  r  r   r   r  )r!   r:   r;   Zrandintr  Z	binomtestr   rE   r   rO   r   )	r$   r   r%   rN   r   rq   r(   r   rP   r)   r)   r*   test_against_binomtest  s   
z*TestPermutationTest.test_against_binomtestc                    s   t jd tjjdd}|tjjdd  tj| dd} fdd}t|f|dt jd	}t	|j
|j| jd
 t	|j|j| jd
 d S )Nr   r/   rq  r   r   c                    s   t j|  ddjS r  )r  
kendalltaucorrelationr  r  r)   r*   r    r  z@TestPermutationTest.test_against_kendalltau.<locals>.statistic1dr  )r  r  r   )r!   r:   r;   r  ro   r#  r  r   rE   r   rN   r  r   rO   )r$   r%   r   r  rP   r)   r  r*   test_against_kendalltau  s   
z+TestPermutationTest.test_against_kendalltauc                    s    fdd}t jd t jddkt}t jdd|  dkt tj| d }t	|f|dt j
|d	}tj||d
}t|j|d  d S )Nc                    s   t | dk dk@ S rx  r  r  r  r)   r*   rN     s   z@TestPermutationTest.test_against_fisher_exact.<locals>.statisticr   r1   rw   r   r   r  r  r  r   r   )r!   r:   r;   r   Zastypefloatr  ZcontingencyZcrosstabr   rE   Zfisher_exactr   rO   )r$   r   rN   r%   ZtabrP   r   r)   r  r*   test_against_fisher_exact	  s   
z-TestPermutationTest.test_against_fisher_exact)r   c                 C   sP  t jd t jddd}t jddd}t jddd}tj||d}tj||d}tj||d}|d }|||f}dd }d	d
 }t|}t|}	|t j| d|i}
|	t j| d|i}d|dddd}t	||fdt j
i|}t	||fddi|}t|j|
| jd t|j|j| jd t|j|| jd t|j|jdd d S )Nr   r,   r-   r    r   r   c                  W      t j| dddjS )NTr   Zrankedr   )r  page_trend_testrN   r  r)   r)   r*   r  /  r  zLTestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.statistic1dc                  W   r  )NTr   r  )r  r  rO   r  r)   r)   r*   r  3  r  zITestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.pvalue1dr   Fr   r  r  r  i  r   r  r4   )r!   r:   r;   r   r  Zrankdatar  r  Zbroadcast_arraysr   rE   r   rN   r   rO   )r$   r   r%   r&   r  r  r  r  rN   rO   r2  r  r   rP   r   r)   r)   r*   #test_vectorized_nsamp_ptype_samples  s0   	


z7TestPermutationTest.test_vectorized_nsamp_ptype_samplesr@   )rt   r,   r   r   r   g&_?r}   gd~$I"@glu?)r%   r&   expected_lessexpected_2sidedexpected_Pr_gte_S_meanr2  expected_avgexpected_std)o   k   rH   c   f   j   m   l   )	r  r  r  b   i   g   n   r  h   gd?gd?gYo5 ?g     @@@g{C@gDmFA@casec                 C   sT  |d }|d }|d }|d }|d }|d }|d }|d }	d	d
 }
t j $}|td t||f|
t jdd}t||f|
t jdd}W d   n1 sPw   Y  t|j|| j	d t|j
|dd t|j
|dd t|j |dd t|j |	dd |j}|j }t|j}t t |j| t || k| }t|| dS )a  
        Results above from SAS PROC NPAR1WAY, e.g.

        DATA myData;
        INPUT X Y;
        CARDS;
        1 1
        1 2
        1 3
        1 4
        2 1.5
        2 2
        2 2.5
        ods graphics on;
        proc npar1way AB data=myData;
            class X;
            EXACT;
        run;
        ods graphics off;

        Note: SAS provides Pr >= |S-Mean|, which is different from our
        definition of a two-sided p-value.

        r%   r&   r2  r  r  r  r  r  c                 S   r  r   r  r  r)   r)   r*   r  }  r  z7TestPermutationTest.test_with_ties.<locals>.statistic1dz$Ties preclude use of exact statisticr   r  r   Nr   绽|=r4   rx   )r!   r   Zsuppress_warningsfilterUserWarningr   rE   r   rN   r   rO   r  r  Zstdr   rz  r   )r$   r  r%   r&   r2  r  r  r  r  r  r  suprP   r   Sr  rq   ZPr_gte_S_meanr)   r)   r*   test_with_tiesW  s@   

z"TestPermutationTest.test_with_tieszalternative, expected_pvalue))r   g?)r   gOO?)r   g<OO?c                    sx   t jd tjjdd}|tjjdd  d} fdd}t|f|dt j|d}t|j	|| j
d	 t|j|d
d dS )aU  
        Results above from R cor.test, e.g.

        options(digits=16)
        x <- c(1.76405235, 0.40015721, 0.97873798,
               2.2408932, 1.86755799, -0.97727788)
        y <- c(2.71414076, 0.2488, 0.87551913,
               2.6514917, 2.01160156, 0.47699563)
        cor.test(x, y, method = "spearm", alternative = "t")
        r   r/   rq  g?c                    s   t |  jS r   )r  Z	spearmanrr  r  r  r)   r*   r    r  zDTestPermutationTest.test_against_spearmanr_in_R.<locals>.statistic1dr  r  r   gvIh%<=r4   N)r!   r:   r;   r  ro   r#  r   rE   r   rN   r   rO   )r$   r   r  r%   r2  r  rP   r)   r  r*   test_against_spearmanr_in_R  s   
z/TestPermutationTest.test_against_spearmanr_in_RN) rR   rS   rT   r   r  r   r   r  r  r   r  ry  r  r  r  r  r  r  r  r  r  Zslowr  r  r  r  r  r  Z
tie_case_1Z
tie_case_2r   r  r)   r)   r)   r*   r  K  s|    6
"


.
'

,<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[   r  )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.   Nrv  )r/   r/   r   r4   rY   r!   asarrayreplacer}  r  rJ   r  	tukey_hsdconfidence_intervalr{  r   lowrN   highrO   )r$   r  res_expect_strr5   
res_expect	res_tukeyconfr   jlr'  hZ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   rR  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");
        rv  r    r/   r   r4   N)r!   r  r}  r  rJ   r  r  r  r{  r   r  rN   r  rO   )r$   r  r  r5   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.   Nrv  r  )   r8   6   r  F   4   3   r   C   rh   r        r&  r  )   rM   ,   )r  rQ  r&  r  rm   r  r   r8   $   *   r   r'  r   r7  r9   rQ  r7  r&  )r*  rQ  r[  r  r0   r6  r9   r9  r   rM   rQ  r[  r  r{   r9  r9  r   r9   r   rR  r4   rx   gh㈵>r  )r$   Zstr_resr  r  r  r  r   r  r'  r  r  r(   r)   r)   r*   test_compare_r2  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 @rl  g333333@gffffff"@rk  )g       @g      %@g333333 @r-  rj  )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   r4   N)r  r  r  r!   r  r   r  r  )r$   Zgroup1Zgroup2Zgroup3Zgroup4rP   r  lowerupperr   r  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 )Nr7   r    rH   )r   r   r   r   )r!   r:   r;   r   r  r  r  r   r  r  r  ZdiagonalrN   rO   )r$   r  rP   r  r)   r)   r*   test_rand_symmu  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/   r1   r    )rA   rB   r  r  r!   rE   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/   rA   rB   r  r  r]   r)   r)   r*   
test_is_1d  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/   r5  r]   r)   r)   r*   test_no_empty  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   r1   r    r5  )r$   r8  r)   r)   r*   test_not_enough_treatments  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   r9  r    r-   r   )rA   rB   r  r  r  )r$   r;  rn  r)   r)   r*   test_conf_level_invalid  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_sizer  r   rO   )r$   r  Z	res_ttestr)   r)   r*   test_2_args_ttest  s   zTestTukeyHSD.test_2_args_ttestN)rR   rS   rT   Zdata_same_sizer=  Zextreme_sizeZsas_same_sizeZsas_diff_sizeZsas_extremer   r   r  r  Zmatlab_sm_sizZmatlab_diff_szr  r,  r2  r3  r4  r6  r7  r:  r<  r>  r)   r)   r)   r*   r    s\    



%
)

r  )3Z
__future__r   r   r   	itertoolsr   Znumpyr!   r  r   Znumpy.testingr   r   r   r	   r
   rA   Zscipy.statsr  r   Zscipy.stats._hypotestsr   r   r   r   r   r   r   r   r   Zscipy.stats._mannwhitneyur   r   Zscipy.stats._bootstrapr  Zcommon_testsr   Zscipyr   Zscipy._lib._testutilsr   r   rU   r   r  r4  rV  rf  r  r  r  r)   r)   r)   r*   <module>   sH    ,:\   A  W  Z    m