U
    »mœdk ã                   @   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@g®Gáz®û?ç\�Âõ(\ç?çffffffÖ?g…ëQ¸…@gq=
×£pÝ?g®Gázî¿g®Gáz®×¿g¤p=
×#(@gffffffò¿g333333Ã¿g×£p=
×@g      
@g®Gáz®@g)\�Âõ(@g      @gö(\�Âõ@gÃõ(\�Â @ç333333!@gHáz®G.@r   ©Údecimalg˜Q,·´r?é   )ÚnpÚarrayr	   r   ©ÚselfÚxÚyÚwÚp© r$   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_hypotests.pyÚtest_statistic_1   s"        ÿ    ÿz"TestEppsSingleton.test_statistic_1c                 C   sB   t  d¡}t  d¡}t||ƒ\}}t|ddd� t|ddd� d S )	N)r   r   é   r'   r'   r'   r   r   r   r   é   é   r)   r)   r)   é   é
   r+   r+   r+   )r+   r(   r   r)   r+   r+   r   r)   r*   é   r+   r   r   r,   r   é   r   r)   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 )Néd   éÿÿÿÿ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(   ç{®Gáz„?çš™™™™™©?ç      à?ç+‡ÙÎ÷ï?ç-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€}têÊg™?g˜`�º¢?gäIÒ5“o¾?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™?ç+û®þ·¢?çÉ&pën¾?ç+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ëÿï?gÍÌÌÌÌÔt@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 )Ng333333û¿r'   r   gÍÌÌÌÌÌô?r(   çš™™™™™¹?ç333333ã?rl   góZ	Ý%qÒ?ç�íµ ÷Æ°>r/   g®EÐ¶šÂ?)r   rq   g!O!W*î?gz"ÇW´™`?r   r)   çffffffö?gìQ¸…ëÁ?é   é   çÍÌÌÌÌÌì?ç      @ÚexpongÐeÅË.óê?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d€d�d‚dƒd„d…gd†dgd‡dˆd‰dŠd‹dŒd�dŽdsd�d�d‘d’d“gd”d†dgd]d•d–d_dRd—d˜d™dkdšd›dœd;d�dždŸgd œZd¡d¢„ Zd£d¤„ Z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e	j
 d¯ddg¡d°d±„ ƒZd²d³„ Zd´dµd¶d·gd¶d¸d¹dºejd¶dµd´d·d·d»gd¼d½fd´dµd¶d·gd¶d¸d¹dºejejdµd´d·d·d»gd¾d¿fd´dµejd·gd¶d¸d¹dºejd¶dµd´d·d·d»gdÀdÁfd´dµejd·gd¶d¸d¹dºejejdµd´d·d·d»gdÂdÃfd´ejejd·gd¶d¸d¹dºejejdµd´d·d·d»gdÄdÅf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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"d×dØ„ Z#d´dµd¶gdÙdÚgddÛgd´dµd¶gdÙdÚgddÛgd´dµd¶gdÙdÚgddÜgd´dµd¶gdµgddÝgd´dµd¶gdµgddÝgd´dµd¶gdµgddÞgd´dµgd´dµgddßgd´dµgd´dµgddßgd´dµgd´dµgddàgg	Z$e	j
 dádâdãdäge$¡dådæ„ ƒZ%dçdè„ Z&déS )êÚ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sÌt‚|j|jksÜt‚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�s�t‚t j |d ¡}t j |d ¡}|d |d< t||ƒ}t||dd�}t||dd�}|j|jk�sôt‚|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_autogm9—âªAj@g¼è+H3Œ[@gi¢²>s@g›#ëhA{@gð±lËûz@gcžÚDf@gÇ³*âú¹h@gZ¬£ÿõA@gI9^¿YQa@g­ò§Ü`@g©î£ÞÕžp@gÑ¥Š–:q@gõó&º‚‚@g§Zµ|@g’`À×ÖÉr@gM‡cä3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,KÎNhä?)r¦   gÊiÚ˜ØËå?)r¦   gl,KÎNhÔ?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œ…\­æ?g°ZX<_Õã?gãžxº.á?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   gôýÔxé&±?g /Ý$Á?gJ+‡Ñ?gyé&1¬œ?gÉv¾Ÿ/­?gÉv¾Ÿ/½?gj¼t“Ô?gÛù~j¼tÛ?gƒÀÊ¡Eâ?gyé&1¬Œ?gV-²�?gÙÎ÷SãÅ?g´Èv¾ŸÏ?gÁÊ¡E¶óÕ?g'1¬ZÜ?gmçû©ñÒá?r=   gÇK7‰A`Å?gZd;ßOÕ?gòÒMbXå?gªñÒMb¨?gR¸…ëQ¸?gR¸…ëQÈ?gçû©ñÒMÒ?g;ßO�—n’?g;ßO�—n¢?g“V-²?g      À?gJ+‡É?gôýÔxé&Ù?g�•C‹lã?gü©ñÒMb€?gü©ñÒMb�?gü©ñÒMb ?gyé&1¬¬?gçû©ñÒMÂ?g‘í|?5^Ê?g˜nƒÀÊÑ?g\�Âõ(\×?g!°rh‘íÜ?gð§ÆK7‰á?gü©ñÒMbp?gú~j¼t“¨?g333333³?gÑ"Ûù~j¼?g×£p=
×Ã?gáz®GáÊ?gð§ÆK7‰Ñ?g®GázÖ?g‹lçû©ñÚ?gºI+‡â?)r   r'   r   r(   r)   g1¬ZdÛ?g1¬ZdË?g%�•C‹Ô?gú~j¼t“ˆ?gú~j¼t“˜?gsh‘í|?µ?gøSã¥›ÄÀ?g+‡ÙÖ?g{®Gázt?rT   gÛù~j¼t“?gL7‰A`å ?gj¼t“¶?gP�—nƒÀ?gºI+‡Æ?gX9´ÈvÎ?g…ëQ¸…Ó?gü©ñÒMbØ?gsh‘í|?Ý?gÇK7‰A`á?gü©ñÒMb`?g;ßO�—n‚?g¸…ëQ¸Ž?g9´Èv¾Ÿš?gË¡E¶óý¤?gTã¥›Ä °?gbX9´È¶?g°rh‘í|¿?g…ëQ¸Å?gôýÔxé&Ñ?gÉv¾Ÿ/Õ?gòÒMbXÙ?gÃõ(\�ÂÝ?g…ëQ¸á?r.   g9´Èv¾ŸŠ?g/Ý$�•?gL7‰A`å°?g
×£p=
·?g¸…ëQ¸¾?gžï§ÆK7É?g`åÐ"ÛùÎ?g7‰A`åÐÒ?g“V-Ú?gj¼t“Þ?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s®t‚t  |j|j ¡dk sÈt‚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s¨t‚t  |||f ¡}t  |||f ¡}|jd d… |ksât‚|jd d… |ksøt‚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   Útestingr   )r   r‘   r�   r­   rn   r    r!   rM   rÉ   Ú
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+z’¿QœÀ?r©   g}$kù\¶?g     €1@g!Ë›G*ã?r›   g›Á,ÖsÿÝ?ç     €8@gêFÏHïQé?)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¾ˆ²Ò&Óì?g„Ïì‡ÓO¿?g„Ïì‡ÓOÏ?g9@VN!xì?g9þM�õ>¼?g9þM�õ>Ì?g ?UÈV²ì?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=þ?g¤p=
×£ð?g333333÷?g®Gázö?g�Âõ(\�þ?g=
×£p=ú?r   g\�Âõ(\÷?)gffffffò?g)\�Âõ(ì?ry   g®Gáz®ç?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'   gæ5&#\å?)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¡r†t
‚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   gCÑE]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   )gœÜMî&wã?rh   gtÑE]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aƒ¸yò½¿rò   r/   gP—j¹$Ä?)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µ   Ú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 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	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sˆt‚tj||dd�}|j|ks¦t‚|j|r²dndks¼t‚d S )	Nr+   r   rF   r™   rŒ   r   r�   rŸ   )r   r7   Ú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+   é'   )gÏXyq@g{2s&QÇ7?rE   r'   r]   r)   )gøl¯€lü¿gEA]0×KÁ?r,   r-   )ç*õ)1Ö%ÀgØ_  ¬“?r   )g_½Òc1÷?gèß=ç Ä?é   rJ   )g5PyQ ý¿g�Q@Ì2ý°?r›   rô   )g»ÔÌÑÁù¿g¼ÂJ"¸ò½?)g_½Òc1÷¿gwÝ�Ù„¹Æ?r   r(   )gý7ŠËé§@g      Œ?r   )gš~øtñ†ñ¿ç,À�?3Oà?r*   )gÝr?ô~Éø¿çCæ°Yð7É?c                 C   s(   t |ƒ}|j|j }}t||g|ƒ dS )zþThe 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)gµ’¹7ç\@gAÞÄƒø2?)gXS‘ç;ò¿gÙŽþ hî?)g>!ÉŽ¢Àg6¦  ¨”?)gS¡y@õù?gúÒ^¶ÛFÃ?)g‘ª-º©˜ÿ¿g¼X«I#°?)g°a£ÑÐ�û¿goÇÜðÁ?)gbø]?ü¿gFug¹H	Ð?)g§6Ò­è@g      €?)gi(	Ž˜ó¿r!  )gÓNXèz¶û¿r"  c                 C   s,   t |dd�}|j|j }}t||g|ƒ dS )zÿThe 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 )Nú7Number 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 r0  r1  r$  r$   r$   r%   Útest_row_or_col_zeroI  s    z%TestBarnardExact.test_row_or_col_zero)r  gEç\/?„?éÈ   é,  )gÐgÑìíQ5Àrú   é   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Œ   çH¯¼šò×z>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/  r2  r   rC   r3  r8  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.r7  r  r'   r,   r-   )ç<vB\÷’?gèÁ–„/?„?r)   r   r+   )g¬“ŽÍéMï?gßÏA>î?r›   rJ   rô   )ç_¬VÃÑ¶?gÂñ¥…Ö­?)ç‘uÝ Ø%Å?gc'�íµ?r   r(   ©r   r   r   )rV   g      Ö?rj   )çß+Âf°?gXc}Áv¡?é   é%   )gZÑ‹D¸É?g‰¦¢gi]Ã?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?g–ìà0í,%?)gKïvî÷ï?gâN3î½ï?)r=  g‡'&5Õ·?r   )gÏw@_„ï?g™•7Ñøï?)gµ‹i¦{ï?g€ÁÉ‘)zî?)ç˜ïÖ…a˜?g³1×ëÛ|?r*   )gYðì<;ªï?g¨ýÖN”Dï?)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/   NrB  r$  r$   r$   r%   Útest_greater›  s    zTestBoschlooExact.test_greater)rE  gôqQSé,5?)r;  gG’Þ?/?”?)r=  gKE`ÕÇ?)r<  gÓhr1Ö½?)rF  grÒfbÛŒ?)rV   g      æ?)r?  gP:pRÁv±?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/   NrB  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 r0  )r   rK   rL   r   r$  r$   r$   r%   r3  ñ  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�   rK  Zboschloo_statZfisher_pr$   r$   r%   Útest_against_fisher_exact  s    z+TestBoschlooExact.test_against_fisher_exactN)rP   rQ   rR   r9  rC  rã   rä   rå   rD  rG  rI  r/  r   rC   r3  rN  rO  r$   r$   r$   r%   r:  y  sp   ÷þ
õþ
øþ
þþ

r:  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-@gøSã¥›ÄÐ?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*   g¾cj`ï˜º?)ii  r,   r,   gtÑE]t±?)i@  r(   r*   g8�8�ƒ?)iä  r*   r,   g¶ëéXw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   rW  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   rR  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—   r6  r“   )r   r7   r   r   rL   rR  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   rS  rY  rã   rä   rå   rZ  r[  r\  r]  r^  r$   r$   r$   r%   rP    s   
ýÿ
	rP  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š™™™™:@gÍÌÌÌÌL<@gÍÌÌÌÌL8@g333333:@gÍÌÌÌÌÌ;@gHáz®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)Z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Ö   r7  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");
        rb  ©r   r*   r   r/   N)r   rd  rf  rg  rG   rç   rh  ri  rj  r   rk  rK   rl  rL   )r   rm  rn  r0   ro  rp  rq  rÇ   rr  rs  r  rt  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)� 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`  ra  r)   Nrb  rw  é   r3   é6   rô   éF   é4   é3   éC   rd   rõ   é   é   é   é)   rJ   é,   rö   r6  r÷   rj   rÙ   é$   é*   r›   r  r4   r@  r+   r  r   rx   r   r7  r/   ru   gñhãˆµøä>rc  )r   Zstr_resro  rm  rp  rq  rÇ   rr  r  rs  rt  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"� q¸d#S )$zp
        Example sourced from:
        https://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm
        gš™™™™™@gš™™™™™@g333333@gffffff@g      @gš™™™™™ @rV  g333333@gffffff"@rU  g       @g      %@g333333 @rT  gffffff@gffffff@gffffff@gÍÌÌÌÌÌ@r   g      Àg�Âõ(\�Ò?gq=
×£pÀg¤p=
×£À?g®Gázò?g
×£p=
ï?gáz®Gáþ?gáz®Gá@g      ô?g=
×£p=@g=
×£p=@gš™™™™™@)©r   r   )r'   r   )r   r   )r   r'   r   rT   r/   N)rç   rh  ri  r   rd  r   rk  rl  )r   Zgroup1Zgroup2Zgroup3Zgroup4rM   rq  ÚlowerÚupperrÇ   rr  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ç   rh  ri  r   rk  rl  r  ZdiagonalrK   rL   )r   rm  rM   rq  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ç   rh  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ç   rh  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ç   rh  ri  )r   r“  rX  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ç   rh  Údata_diff_sizeZ	ttest_indr   rL   )r   rp  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å   rv  Zmatlab_sm_sizZmatlab_diff_szrx  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   gþe÷äa¡¶?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   r5  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   Ú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  r:  rP  r_  r—  r$   r$   r$   r%   Ú<module>   s>   $:\   G
  W  Z t