U
    »mœdd ã                   @   sX  d dl Zd dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ ddlmZ d dlmZ d d	lmZ d
d„ Zej ddddg¡ej dd ddg¡dd„ ƒƒZej ddddg¡dd„ ƒZej ddddg¡ej dd ddg¡ej dddg¡dd„ ƒƒƒZej ddddg¡dd„ ƒZdddd œZej d!e ¡ ¡d"d#„ ƒZd$d%d%d œZd&d'„ Zd(d)„ Z ej d!e ¡ ¡d*d+„ ƒZ!d,d-d.œZ"ej d!e" ¡ ¡d/d0„ ƒZ#ej dddg¡ej dd dg¡d1d2„ ƒƒZ$ej %d3¡ej ddddg¡ej dd dg¡d4d5„ ƒƒƒZ&ej ddddg¡d6d7„ ƒZ'ej ddddg¡d8d9„ ƒZ(d:d;„ Z)ej d<d d=g¡d>d?„ ƒZ*d@dA„ Z+ej dBdCdDg¡dEdF„ ƒZ,ej dGd dHdg¡ej dd ddg¡dIdJ„ ƒƒZ-dKdL„ Z.ej dd ddg¡dMdN„ ƒZ/ej ddddg¡dOdP„ ƒZ0ejj1ej 2dQ¡dRdS„ ƒƒZ3G dTdU„ dUƒZ4G dVdW„ dWƒZ5dXdY„ Z6ej dZd[d\d]g¡d^d_„ ƒZ7dS )`é    N)Ú	bootstrapÚmonte_carlo_testÚpermutation_test)Úassert_allcloseÚassert_equalÚsuppress_warnings)Ústats)Úspecialé   )Ú_resampling)Úrng_integers)Úrootc               	   C   s  d} t jt| d�� tdtjƒ W 5 Q R X d} t jt| d�� ttƒ tjƒ W 5 Q R X d} t jt| d�� tdddgdgftjƒ W 5 Q R X d} t jt| d��( tdddgdddd	gftjd
d� W 5 Q R X d} t jt| d�� tdtjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d} t jt| d�� tdddgftjdd� W 5 Q R X d } t jt| d�� tdddgftjd!d� W 5 Q R X d"} t jt| d�� tdddgftjd#d$� W 5 Q R X d S )%Nz%`data` must be a sequence of samples.©Úmatché   z(`data` must contain at least one sample.z>each sample in `data` must contain two or more observations...r
   é   z=When `paired is True`, all samples must have the same length é   T)Úpairedú0`vectorized` must be `True`, `False`, or `None`.Úekki©Ú
vectorizedú`axis` must be an integer.ç      ø?©Úaxisz!could not convert string to floatÚni)Úconfidence_levelz-`n_resamples` must be a non-negative integer.éüÿÿ©Ún_resamplesç     D�@ú+`batch` must be a positive integer or None.©Úbatchz`method` must be in©Úmethodz?`bootstrap_result` must have attribute `bootstrap_distribution'é
   )Úbootstrap_resultz5Either `bootstrap_result.bootstrap_distribution.size`r   ú"'herring' cannot be used to seed aÚherring©Úrandom_state)ÚpytestÚraisesÚ
ValueErrorr   ÚnpÚmeanÚtuple)Úmessage© r4   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_resampling.pyÚtest_bootstrap_iv   sZ    ","""""""""r6   r&   ÚbasicÚ
percentileÚBCar   r   c              	   C   s†   t j d¡ t j ddd¡}t|ft jd | d|dd�}t|ft jd| d|dd�}t|jj|jjƒ t|jj	|jj	ƒ t|j
|j
ƒ d S )Nr   r'   é   é   éd   )r$   r&   r,   r   r    )r0   ÚrandomÚseedÚrandr   r1   r   Úconfidence_intervalÚlowÚhighÚstandard_error)r&   r   ÚxÚres1Úres2r4   r4   r5   Útest_bootstrap_batchK   s      ÿ  ÿrG   c                    s–   t j d¡ d}t j |¡‰t j |¡‰ddd„‰ d‡ ‡‡fdd„	}t  tˆƒ¡}t|f|dd�}tˆˆfˆ d	dd
�}t|j|jƒ t|j	|j	ƒ d S )Nr   r<   éÿÿÿÿc                 S   s   | | d j |d�S )Nr
   r   ©r1   ©rD   Úyr   r4   r4   r5   Úmy_statisticd   s    z+test_bootstrap_paired.<locals>.my_statisticc                    s   ˆ|  }ˆ|  }ˆ ||ƒ}|S ©Nr4   )Úir   ÚaÚbÚres©rL   rD   rK   r4   r5   Úmy_paired_statisticg   s    
z2test_bootstrap_paired.<locals>.my_paired_statisticr+   T)r   r,   )rH   )rH   )
r0   r=   r>   r?   ÚarangeÚlenr   r   r@   rC   )r&   ÚnrS   rN   rE   rF   r4   rR   r5   Útest_bootstrap_paired\   s    
rW   r   TFc              	   C   sT  t j d¡ d
dd„}d}|| }t j |¡}t j |¡}t j |¡}t|||f||| dddd�}	|	jj|	jjd kszt‚d	d	d	g}
||
|< t  	| 
|
¡|¡}t  	| 
|
¡|¡}t  	| 
|
¡|¡}t|||f||| d|dd�}t|jj|	jjƒ t|jj|	jjƒ t|j|	jƒ t|ƒ}| |¡ t|jjj|ƒ t|jjj|ƒ t|jj|ƒ d S )Nr   rH   c                 S   s$   | j |d�|j |d� |j |d� S ©Nr   rI   )rD   rK   Úzr   r4   r4   r5   rL   €   s    z/test_bootstrap_vectorized.<locals>.my_statistic)r'   r:   r;   r<   )r   r&   r,   r   r    )r<   r   )rH   )r0   r=   r>   r?   r   Úbootstrap_distributionÚshaperC   ÚAssertionErrorÚbroadcast_toÚreshaper   r@   rA   rB   ÚlistÚpopr   )r&   r   r   rL   r[   Z	n_samplesrD   rK   rY   rE   r^   rF   Zresult_shaper4   r4   r5   Útest_bootstrap_vectorizedv   sJ    
  ÿ
ÿ
  ÿÿÿ
ra   c                 C   sŒ   t jjddddd�}d}t jt|ƒd t |¡t  |¡d�}|j|d	�}| 	¡ }t
|ftjd|| dd
�}t|j|dd� t|j|dd� d S )Né   r
   éˆ  r   )ÚlocÚscaleÚsizer,   çffffffî?r   )Zdfrd   re   )Ú
confidence)r    r   r&   r,   gü©ñÒMb@?©Úrtolga2U0*©3?©Úatol)r   ÚnormÚrvsÚtrU   r0   r1   ZsemÚintervalÚstdr   r   r@   rC   )r&   ÚdataÚalphaÚdistZexpected_intervalZexpected_serQ   r4   r4   r5   Útest_bootstrap_against_theory¤   s    $ þru   )g…ëQ¸Å7@gHáz®ÇS@)g\�Âõ(Ü<@g=
×£pU@)gHáz®'@@gìQ¸…ÛV@)r7   r8   r9   zmethod, expectedc                 C   sT   t  dddddddddd	d
dddddg¡}t|ft jd| dd�}t|j|dd� d S )Nr'   r;   g      )@gÍÌÌÌÌÌ+@é   é   é   é   é"   é2   éQ   éY   éy   é†   éÕ   i@B r   )r    r&   r,   g{®Gázt?ri   )r0   Úarrayr   r1   r   r@   )r&   ÚexpectedrD   rQ   r4   r4   r5   Útest_bootstrap_against_R¹   s           ÿÿrƒ   iô  iø  c                  C   s  dddddddg} dd	d
dddddg}dd„ }t j d¡}tj| |f|dd|d�}tj| |f|dd|d�}tj| |f|dd|d�}t  |j¡}t  |j¡}t  |j¡}	d}
||
 t|
ƒ }||
 t|
ƒ }|	|
 t|
ƒ }|dk sæt‚|dksòt‚t|ƒdk �st‚d S )Ng’‘ÛbFè?gžpÀø³éâ?g—ò|ÂHÜ¿gxy[e}u×¿g*gÖï_Ö?ggiŸ·6ö¿gŒÎ2Žè?gü´ÝFû–ö?gý÷àµKÛß?gØÕ&F}/µ?gŸ±« ÔÎ?g¦Ë(·iC¢?g}¿$×¥à?g »ØhuÔ?gfjŽƒ}!õ?c                 S   s$   t j| |d�}t j||d�}|| S rX   )r   Úskew)rD   rK   r   Ús1Ús2r4   r4   r5   Ú	statisticã   s    z1test_multisample_BCa_against_R.<locals>.statisticl   tgßy4r7   r<   )r&   r$   r,   r8   Zbcag1™*•Ôø¿g333333Ã¿g333333Ã?ç¸…ëQ¸ž?)	r0   r=   Údefault_rngr   r   r1   r@   Úabsr\   )rD   rK   r‡   ÚrngZ	res_basicZres_percentZres_bcaZ	mid_basicZmid_percentZmid_bcaZ	mid_wbootZ
diff_basicZdiff_percentZdiff_bcar4   r4   r5   Útest_multisample_BCa_against_RÖ   sF      ÿ   ÿ ÿ ÿ ÿrŒ   c                  C   sŒ   t  ddddddddd	g	¡} t  d
ddddddg¡}ddd„}|| g}t ||¡}d}d}|j}d}t ||||||¡\}	}	}
t|
dƒ d S )Nr'   é   é   é(   é.   r{   é4   éh   é’   é   ry   é&   é^   éc   é�   éÅ   r   c                 S   s   t j| |d�t j||d� S rX   ©r0   r1   )rY   rK   r   r4   r4   r5   r‡     s    z:test_BCa_acceleration_against_reference.<locals>.statisticrH   rg   r<   gÄËe{‹†?)r   )r0   r�   r   r   rZ   r   Z_bca_intervalr   )rK   rY   r‡   rr   rQ   r   rs   Ztheta_hat_br$   Ú_Za_hatr4   r4   r5   Ú'test_BCa_acceleration_against_reference  s    
 ÿ
rœ   c              	   C   s¬   t j d¡ d}d}d}tjddd�}| ¡ }d}|j||fd	�}t|ft j||d
| dd�}	|	j}
t  	|
d |k ||
d k @ ¡}||ksŒt
‚t |||¡j}|dks¨t
‚d S )Nr   r<   éç  çÍÌÌÌÌÌì?rb   r   ©rd   re   iÐ  ©rf   r{   rH   ©r‡   r   r    r$   r&   r   çš™™™™™¹?©r0   r=   r>   r   rm   r1   rn   r   r@   Úsumr\   Ú	binomtestÚpvalue)r&   r‚   rV   r    r   rt   Ú	stat_trueÚn_replicationsrr   rQ   ÚciÚci_contains_truer¦   r4   r4   r5   Ú#test_bootstrap_against_itself_1samp)  s.    úÿr«   i|  iz  )r7   r8   c              	   C   sà   t j d¡ d}d}d}d}ddd„}tjdd	d
�}tjdd	d
�}| ¡ | ¡  }	d}
|j|
|fd�}|j|
|fd�}t||f|||d| dd�}|j}t  	|d |	k |	|d	 k @ ¡}||ksÀt
‚t ||
|¡j}|dksÜt
‚d S )Nr   r<   éx   r�   rž   rH   c                 S   s$   t j| |d�}t j||d�}|| S rX   rš   )Údata1Údata2r   Zmean1Zmean2r4   r4   r5   Úmy_statc  s    z4test_bootstrap_against_itself_2samp.<locals>.my_statr   rŸ   r¢   éè  r    r{   r¡   )rH   r£   )r&   r‚   Ún1Ún2r    r   r¯   Zdist1Zdist2r§   r¨   r­   r®   rQ   r©   rª   r¦   r4   r4   r5   Ú#test_bootstrap_against_itself_2sampT  s6    
úÿr³   c              	      s¨   ddœdd„‰ ‡ fdd„}t j d¡ t j dd¡}t j dd¡}t j dd¡}t|||fˆ d	|d
| dd�}t|||f|d|d
| dd�}t|j|jƒ t|j|jƒ d S )Nr   r   c                    s   t ‡ fdd„|D ƒƒS )Nc                 3   s   | ]}|  ˆ ¡V  qd S rM   rI   ©Ú.0Úsampler   r4   r5   Ú	<genexpr>‰  s     zEtest_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>©r¤   ©r   rr   r4   r   r5   r‡   ‡  s    z2test_bootstrap_vectorized_3samp.<locals>.statisticc                     s&   | D ]}|j dkst‚qˆ | ddiŽS ©Nr   r   r   ©Úndimr\   ©rr   r¶   ©r‡   r4   r5   Ústatistic_1d‹  s    z5test_bootstrap_vectorized_3samp.<locals>.statistic_1dr   rb   Tr<   )r   r   r    r&   r,   F©r0   r=   r>   r?   r   r   r@   rC   )r&   r   r¿   rD   rK   rY   rE   rF   r4   r¾   r5   Útest_bootstrap_vectorized_3samp„  s(       ÿ   ÿrÁ   z'Failure is not concerning; see gh-14107c              
      s„   ddd„‰ ‡ fdd„}t j d¡ t j dd¡}t|fˆ d|d	d | dd
�}t|f|d|d	d| dd
�}t|j|jƒ t|j|jƒ d S )Nr   c                 S   s   | j |d�S rX   rI   ©rD   r   r4   r4   r5   r‡   ¡  s    z2test_bootstrap_vectorized_1samp.<locals>.statisticc                    s   | j dkst‚ˆ | dd�S )Nr   r   r   r»   ©rD   r¾   r4   r5   r¿   ¥  s    z5test_bootstrap_vectorized_1samp.<locals>.statistic_1dr   rb   Tr<   )r   r   r    r$   r&   r,   Fr'   )r   rÀ   )r&   r   r¿   rD   rE   rF   r4   r¾   r5   Útest_bootstrap_vectorized_1samp�  s$    
  þ  þrÄ   c              
   C   s    ddg }| dkrrt jdd��L d}tjtj|d��, t|gt j| d�}t|j	t j
t j
fƒ W 5 Q R X W 5 Q R X nt|gt j| d�}t|j	d	ƒ t|jd
ƒ d S )Né#   ç     ˆÃ@r9   Úignore)Úinvalidz0The BCa confidence interval cannot be calculatedr   r%   )rÆ   rÆ   r   )r0   Zerrstater-   Zwarnsr   ZDegenerateDataWarningr   r1   r   r@   ÚnanrC   )r&   rr   ÚmsgrQ   r4   r4   r5   Útest_bootstrap_degenerate¶  s    
*rË   c                 C   sš   t j d¡}tjddd�}|jd|d�}|f}t|tj| dt j d¡d�}t|tj| dt j d¡d	d
�}t|j	|j	ƒ t|j
|j
ƒ t|j
t jƒs–t‚d S )Nl   E<1

 r
   r   rŸ   r<   ©rf   r,   i[%  ©r&   r    r,   F)r&   r    r,   r   )r0   r=   r‰   r   rm   rn   r   r„   r   r@   rC   Ú
isinstanceZfloat64r\   )r&   r‹   rt   rr   rQ   Úrefr4   r4   r5   Útest_bootstrap_gh15678Å  s    
ÿ
 ÿrÐ   c                  C   s´   t j d¡} tjddd�}|jd| d�}t  |¡}|f}t|t jddt j d¡d	�}||jj	ksdt
‚tt  |¡ t jddt j d¡d	�}t|jj	 |jjƒ t|jj |jj	ƒ d S )
Nl   n!|'x`5 r
   r   rŸ   r<   rÌ   r9   if  rÍ   )r0   r=   r‰   r   rm   rn   Úminr   r@   rA   r\   r�   Úmaxr   rB   )r‹   rt   rr   Ztrue_minrQ   rF   r4   r4   r5   Útest_bootstrap_min×  s$    

ÿ
ÿ
ÿ
ÿrÓ   Úadditional_resamplesr°   c              	   C   s¸   t j d¡}|jdd�}d}| }||  }t j d¡}tj|ft j||ddd�}tj|ft j||d	d
|d�}t j d¡}tj|ft j||d	d
d�}t|j|jdd� t|j|jdd� d S )Nl    ]ƒ4’Mþ r<   r    r°   l   Émdpi4ð rg   r8   )r    r,   r   r&   rž   r9   )r    r,   r   r&   r(   ç›+¡†›„=ri   )	r0   r=   r‰   r   r   r1   r   rC   r@   )rÔ   r‹   rD   r±   r²   Zn3rQ   rÏ   r4   r4   r5   Útest_re_boostrapê  s0     ÿ þ ÿ
ÿrÖ   c                  C   sž   d} t j d¡ t jj| Ž }tt |¡ƒ}t| d ƒD ]6}|d|d d …f }t j||dd�}t  	||¡s6t
‚q6t jttj|dd�ƒdd�}t  	||¡sšt
‚d S )	N©r   r   rb   é   r   rH   .r   r
   r#   éþÿÿÿ)r0   r=   r>   r?   Únextr   Z_jackknife_resampleÚrangeÚdeleteÚarray_equalr\   Zconcatenater_   )r[   rD   rK   rN   Úslcr‚   Úy2r4   r4   r5   Útest_jackknife_resample  s    ÿrà   Úrng_nameÚRandomStater‰   c                 C   s¼   t tj| d ƒ}|d kr&t | › d�¡ |dƒ}|dƒ}d}d}tj d¡ tjj|Ž }tj|||d�}t	|ƒD ]H}|d|d d …f }	t
|d|d |d ƒ}
|d|
f }t |	|¡snt‚qnd S )Nz not available.r   r'   r×   r+   .rH   )Úgetattrr0   r=   r-   Úskipr>   r?   r   Z_bootstrap_resamplerÛ   r   rÝ   r\   )rá   r‹   Úrng1Úrng2r    r[   rD   rK   rN   rÞ   Újsr‚   r4   r4   r5   Útest_bootstrap_resample  s    rè   Úscoreç      à?c                 C   sV   d}t j d¡ t jj|Ž }tj|| dd�}dd„ }||| dd�d }t||dƒ d S )	N)r'   é   é   r   rH   r   c                 S   s   t  tj|| |¡S rM   )r0   Zapply_along_axisr   Zpercentileofscore)rO   ré   r   r4   r4   r5   Úvectorized_pos9  s    z0test_percentile_of_score.<locals>.vectorized_posr<   çVçž¯Ò<)r0   r=   r>   r?   r   Z_percentile_of_scorer   )ré   r   r[   rD   Úprí   Úp2r4   r4   r5   Útest_percentile_of_score1  s    rñ   c                  C   s‚   d} t j d¡ t jj| Ž }t jj| d d… Ž d }t ||¡}t| d ƒD ]0}|| }t j|| || dd�}t||dƒ qLd S )N)r'   rë   r   rH   r<   r   rî   )	r0   r=   r>   r?   r   Z_percentile_along_axisrÛ   r8   r   )r[   rD   ÚqrK   rN   rQ   r‚   r4   r4   r5   Útest_percentile_along_axisA  s    ró   c                    sˆ   dd„ ‰ ‡ fdd„}t  |¡}tj d¡ tj ddd¡}tj dd	d¡}tj d	dd¡}ˆ |||| d
�}||||| d
�}t||ƒ d S )Nc                    s   t ‡ fdd„|D ƒƒS )Nc                 3   s   | ]}|  ˆ ¡V  qd S rM   rI   r´   r   r4   r5   r·   X  s     z>test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>r¸   r¹   r4   r   r5   r‡   V  s    z+test_vectorize_statistic.<locals>.statisticc                     s&   | D ]}|j dkst‚qˆ | ddiŽS rº   r»   r½   r¾   r4   r5   r¿   Z  s    z.test_vectorize_statistic.<locals>.statistic_1dr   r   rb   rØ   r   r   )r   Ú_vectorize_statisticr0   r=   r>   r?   r   )r   r¿   Z
statistic2rD   rK   rY   rE   rF   r4   r¾   r5   Útest_vectorize_statisticR  s    
rõ   c                 C   sÔ   t j d¡}d}tjj|d|dœŽ}dd„ }t|f|| ddd	d
�}t j|jj	j
|k |jjj
|k@ dd�}t  |dk¡szt‚t  |dk¡sŒt‚|jj	jdksžt‚|jjjdks°t‚|jjdksÀt‚|jjdksÐt‚d S )Nl   s:â )r   rê   )r<   r<   rÌ   c                 S   s"   t  t  | |¡t j| |dd�g¡S )Nr   )Zddof)r0   Zasarrayr1   rq   )rr   r   r4   r4   r5   r‡   {  s    ÿz/test_vector_valued_statistic.<locals>.statisticrH   é'  éÈ   )r&   r   r    r$   r   r   éZ   r<   )r
   r<   )r
   r<   rö   )r0   r=   r‰   r   rm   rn   r   r¤   r@   rA   ÚTrB   Úallr\   r[   rC   rZ   )r&   r‹   Úparamsr¶   r‡   rQ   Úcountsr4   r4   r5   Útest_vector_valued_statisticm  s&    
 ÿÿþrý   zignore::RuntimeWarningc                     sÆ   t j d¡} dd„ ‰ ‡ fdd„‰‡fdd„}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}t  |¡j}t||| dd�}t|ˆ| dd�}t|jjd	 |jjdd� t|jj	d	 |jj	dd� d S )Nl   \˜QÁc                 S   sZ   |   |¡}|  |¡}| |d  ||d     |¡}d| |  |¡| |¡ || d   S )N).Nr
   )r1   Úvar)rD   rK   r   ZxmZymZcovr4   r4   r5   Úconcordance–  s    

z9test_vector_valued_statistic_gh17715.<locals>.concordancec                    s"   | | }| | }t  ˆ |||ƒ¡S rM   )r0   Z
nan_to_num)ÚtpÚtnÚfpÚfnr   Úactualr‚   )rÿ   r4   r5   r‡   œ  s    z7test_vector_valued_statistic_gh17715.<locals>.statisticc                    s   ˆ || fžŽ t jdf S )N.)r0   Znewaxis)r   Úargsr¾   r4   r5   Ústatistic_extradim¡  s    z@test_vector_valued_statistic_gh17715.<locals>.statistic_extradimr   r   r
   r   rØ   r   é   T)r,   r   rî   rk   )
r0   r=   r‰   r�   rù   r   r   r@   rA   rB   )r‹   r  rr   rQ   rÏ   r4   )rÿ   r‡   r5   Ú$test_vector_valued_statistic_gh17715�  s*    




ü ÿ ÿr  c                
   @   s$  e Zd ZdZdd„ Zdd„ Zdd„ Zej 	de
d	d
ƒ¡dd„ ƒZej 	dd¡ej 	de ddd¡¡dd„ ƒƒZej 	dejejf¡ej 	dd¡ej 	de ddd¡¡dd„ ƒƒƒZej 	de dd
¡¡dd„ ƒZej 	de ddd¡¡dd„ ƒZej 	dd ¡ej 	d!e
dƒ¡d"d#„ ƒƒZd$d%„ Zd&S )'ÚTestMonteCarloHypothesisTestgš™™™™™™?c                    s   ‡ ‡fdd„S )Nc                     s   ˆ| dˆ i|—ŽS )Nr,   r4   )r  Úkwds©ÚrsÚrvs_inr4   r5   Ú<lambda>¹  ó    z2TestMonteCarloHypothesisTest.rvs.<locals>.<lambda>r4   )Úselfr  r  r4   r  r5   rn   ¸  s    z TestMonteCarloHypothesisTest.rvsc              	   C   sø  dd„ }d}t jt|d��  tdddgtjj|dd	� W 5 Q R X d
}t jt|d��  tdddgtjj|dd� W 5 Q R X d}t jt|d�� tdddgd |ƒ W 5 Q R X d}t jt|d�� tdddgtjjd ƒ W 5 Q R X d}t jt|d��  tdddgtjj|dd� W 5 Q R X d}t jt|d��  tdddgtjj|dd� W 5 Q R X d}t jt|d��  tdddgtjj|dd� W 5 Q R X d}t jt|d��  tdddgtjj|dd� W 5 Q R X d}t jt|d��  tdddgtjj|dd� W 5 Q R X d S )Nc                 S   s   t  | ¡jS rM   )r   Úskewnormr‡   rÃ   r4   r4   r5   Ústat¾  s    z@TestMonteCarloHypothesisTest.test_input_validation.<locals>.statr   r   r   r
   r   r   r   r   r   z`rvs` must be callable.z`statistic` must be callable.ú)`n_resamples` must be a positive integer.r   r   r!   r"   r#   ú`alternative` must be in...r   ©Úalternative)r-   r.   r/   r   r   rm   rn   Ú	TypeError©r  r  r3   r4   r4   r5   Útest_input_validation»  sD    $$ ÿÿ$$ÿz2TestMonteCarloHypothesisTest.test_input_validationc                    s2  t j d¡}| d¡}‡ fdd„‰ dˆ _dˆ _|ˆ dddœ}|  tjjt j d	¡¡|d
< tf ddi|—Ž}t	ˆ jdƒ t	ˆ jdƒ |  tjjt j d	¡¡|d
< dˆ _tf ddi|—Ž}t	ˆ jdƒ t	ˆ jdƒ |  tjjt j d	¡¡|d
< dˆ _tf |Ž}t	ˆ jdƒ t	ˆ jdƒ t	|j
|j
ƒ t	|j
|j
ƒ d S )Nl   á)�p r'   c                    sB   | j dkrdnt| ƒ}t|ˆ jƒˆ _ˆ  jd7  _tj| |d�jS ©Nr   r   )r¼   rU   rÒ   Ú
batch_sizeÚcounterr   Úskewtestr‡   )rD   r   r  r¾   r4   r5   r‡   î  s    z:TestMonteCarloHypothesisTest.test_batch.<locals>.statisticr   r°   T)r¶   r‡   r    r   iž"õrn   r$   r   éé  r{   rw   r
   )r0   r=   r‰   r  r  rn   r   rm   r   r   r¦   )r  r‹   rD   r
  rE   rF   Úres3r4   r¾   r5   Ú
test_batchè  s2    
 ÿ
z'TestMonteCarloHypothesisTest.test_batchr   éýÿÿÿr   c           	      C   sˆ   t j d¡}|  tjj|¡}dddg}d||< ||d�}tj||d�}dd	„ }t|||d
d|d�}t|j	|j	ƒ t|j
|j
| jd� d S )Niòt$ r
   r   r   r<   r    r   c                 S   s   t j| |d�jS rX   )r   r  r‡   rÂ   r4   r4   r5   r‡     s    z9TestMonteCarloHypothesisTest.test_axis.<locals>.statisticTi N  )r   r    r   rk   )r0   r=   r‰   rn   r   rm   r  r   r   r‡   r¦   rl   )	r  r   r‹   Únorm_rvsrf   rD   r‚   r‡   rQ   r4   r4   r5   Ú	test_axis  s    


 ÿz&TestMonteCarloHypothesisTest.test_axisr  ©ÚlessÚgreaterrO   g      à¿rê   rb   c           	         s²   t j d¡}tjj|d|d�}tj|tjjˆ d�}‡ fdd„}|  tjj|¡}t	|||ddˆ d	�}t
|j|jƒ ˆ d
krŽt
|j|j| jd� n ˆ dkr®t
d|j |j| jd� d S )Ni)Üêrì   ©rO   rf   r,   r  c                    s   t j| t jjdˆ d�jS ©NÚasymp)Úmoder  )r   Úks_1samprm   Úcdfr‡   rÃ   r  r4   r5   Ústatistic1d+  s    ÿzGTestMonteCarloHypothesisTest.test_against_ks_1samp.<locals>.statistic1dr°   F©r    r   r  r&  rk   r%  r   )r0   r=   r‰   r   r  rn   r+  rm   r,  r   r   r‡   r¦   rl   )	r  r  rO   r‹   rD   r‚   r-  r"  rQ   r4   r  r5   Útest_against_ks_1samp"  s     þz2TestMonteCarloHypothesisTest.test_against_ks_1sampÚhypotest©r%  r&  ú	two-sidedrÙ   r
   c           
         s~   t j d¡}tjj|d|d�}ˆ ||d�}‡ fdd„}|  tjj|¡}t|||d|d�}	t|	j	|j	ƒ t|	j
|j
| jd	� d S )
Ni	é–   r'  r  c                    s   ˆ | |d�j S rX   r¾   rÂ   ©r0  r4   r5   r‡   D  s    zLTestMonteCarloHypothesisTest.test_against_normality_tests.<locals>.statisticT©r   r  rk   )r0   r=   r‰   r   r  rn   rm   r   r   r‡   r¦   rl   )
r  r0  r  rO   r‹   rD   r‚   r‡   r"  rQ   r4   r4  r5   Útest_against_normality_tests:  s    
ÿz9TestMonteCarloHypothesisTest.test_against_normality_testsc                 C   sx   t j d¡}tjj|d|d�}t |¡}dd„ }|  tjj|¡}t|||ddd�}t	|j
|j
ƒ t	|j|j| jd	� d S )
Ni!M¼ r3  r'  c                 S   s   t j| |d�jS rX   )r   Ú
normaltestr‡   rÂ   r4   r4   r5   r‡   V  s    zGTestMonteCarloHypothesisTest.test_against_normaltest.<locals>.statisticTr&  r5  rk   )r0   r=   r‰   r   r  rn   r7  rm   r   r   r‡   r¦   rl   )r  rO   r‹   rD   r‚   r‡   r"  rQ   r4   r4   r5   Útest_against_normaltestN  s    

ÿz4TestMonteCarloHypothesisTest.test_against_normaltestc                 C   s€   t j d¡}tjj|d|d�}t |tjj¡}dd„ }|  tjj|¡}t	|||dddd	�}t
|j|jƒ t
|j|j| jd
� d S )Niåÿrì   r'  c                 S   s   t  | t jj¡jS rM   )r   Úcramervonmisesrm   r,  r‡   rÃ   r4   r4   r5   r-  h  s    zMTestMonteCarloHypothesisTest.test_against_cramervonmises.<locals>.statistic1dr°   Fr&  r.  rk   )r0   r=   r‰   r   r  rn   r9  rm   r,  r   r   r‡   r¦   rl   )r  rO   r‹   rD   r‚   r-  r"  rQ   r4   r4   r5   Útest_against_cramervonmises`  s     þz8TestMonteCarloHypothesisTest.test_against_cramervonmisesÚ	dist_name)rm   ZlogisticrN   c              	      sþ   ‡ ‡fdd„}t ƒ �}| t¡ t|dd�}W 5 Q R X |js@t‚|jd }tj 	d¡}t
jj|d|d�}t
 |ˆ ¡}	|	j}
|	jˆ d }‡ fdd	„}|  tt
ˆ ƒj|¡}t ƒ �$}| t¡ t|||d
ddd�}W 5 Q R X t|j|
ƒ t|j|d| j d� d S )Nc                    s:   t j d¡}tjj| d|d�}t |ˆ ¡}|j|jˆ  S )Né«x€r<   rÌ   )	r0   r=   r‰   r   Útukeylambdarn   Úandersonr‡   Zcritical_values)rO   r‹   rD   r‚   ©r;  rN   r4   r5   Úfun~  s    z?TestMonteCarloHypothesisTest.test_against_anderson.<locals>.funr   )Zx0r<  r<   rÌ   c                    s   t  | ˆ ¡jS rM   )r   r>  r‡   rÃ   )r;  r4   r5   r-  ’  s    zGTestMonteCarloHypothesisTest.test_against_anderson.<locals>.statistic1dr°   Fr&  r.  r
   rk   )r   ÚfilterÚRuntimeWarningr   Úsuccessr\   rD   r0   r=   r‰   r   r=  rn   r>  r‡   Zsignificance_levelrã   r   r   r¦   rl   )r  r;  rN   r@  ÚsupZsolrO   r‹   rD   r‚   Úexpected_statÚ
expected_pr-  Zdist_rvsrQ   r4   r?  r5   Útest_against_andersons  s.    



  þz2TestMonteCarloHypothesisTest.test_against_andersonc                 C   s>   t j d¡}t  d¡}t||jt jddd�}|jdks:t‚d S )Nl   IL‘~QH(s r<   Tr%  r5  g-Cëâ6?)r0   r=   r‰   Zzerosr   r1   r¦   r\   )r  r‹   rD   rQ   r4   r4   r5   Útest_p_never_zeroŸ  s    
 ÿz.TestMonteCarloHypothesisTest.test_p_never_zeroN)Ú__name__Ú
__module__Ú__qualname__rl   rn   r  r   r-   ÚmarkÚparametrizerÛ   r#  r0   Zlinspacer/  r   r  Zkurtosistestr6  rT   r8  r:  rG  rH  r4   r4   r4   r5   r	  µ  s*   -%


*r	  c                   @   sæ  e Zd ZdZdd„ Zdd„ Zej de	j
je	j
jg¡ej ddd	d
g¡dd„ ƒƒZej de	j
je	j
jg¡ej dde d¡d fdd
e dd¡fg¡dd„ ƒƒZdd„ Zej ¡ dd„ ƒZdd„ Zej dd¡ej dd¡ej dd¡d d!„ ƒƒƒZej dd"¡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"¡d0d1„ ƒZd2d3„ Zej dd"¡d4d5„ ƒZ ej ¡ ej dd6¡d7d8„ ƒƒZ!d9ddd:gd;dd<gd=d>d?d@dAdBdCœZ"dDdEdFdGdHdIdJdKgdEdKdIdLdMdNdOdMdPg	dQdRdSdTdUdVdCœZ#ej ¡ ej dWe"e#f¡dXdY„ ƒƒZ$ej dZd[¡d\d]„ ƒZ%ej d^d_¡d`da„ ƒZ&e'dbƒdg fe'dƒddbd9dgdd:dcggfe'ddƒddbd9dgdd:dcgddeggfgZ(ej dfe(¡dgdh„ ƒZ)didj„ Z*dkS )lÚTestPermutationTestrÕ   c                 C   s   t j d¡| _d S )Nl   áF )r0   r=   r‰   r‹   )r  r4   r4   r5   Úsetup_method­  s    z TestPermutationTest.setup_methodc              	   C   s¨  dd„ }d}t jt|d�� tdddgdgf|ƒ W 5 Q R X d}t jt|d�� td	|ƒ W 5 Q R X t jt|d�� td|ƒ W 5 Q R X d
}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d}t jt|d��$ tdddgdddgf|dd� W 5 Q R X d S )Nc                 S   s   t  | |f|¡jS rM   ©r   Ú	ttest_indr‡   rJ   r4   r4   r5   r  ´  s    z:TestPermutationTest.test_permutation_test_iv.<locals>.statz2each sample in `data` must contain two or more ...r   r   r
   r   z6`data` must be a tuple containing at least two samples)r   r   r   r   z `permutation_type` must be in...r   )Úpermutation_typer   r   r  r   r   r!   r"   r#   r  r  r)   r*   r+   )r-   r.   r/   r   r  r  r4   r4   r5   Útest_permutation_test_iv²  sP     (ÿ((((((ÿz,TestPermutationTest.test_permutation_test_ivr,   rR  ÚpairingsÚsamplesÚindependentc           	         s  | j  d¡}| j  d¡}‡ fdd„‰ dˆ _dˆ _d|ddœ}tj||fˆ fd|dƒd	œ|—Ž}tˆ jd
ƒ tˆ jdƒ dˆ _tj||fˆ fd|dƒd	œ|—Ž}tˆ jdƒ tˆ jdƒ dˆ _tj||fˆ fd|dƒd	œ|—Ž}tˆ jdƒ tˆ jdƒ t|j|jƒ t|j|jƒ d S )Nr'   c                    sN   | j dkrdnt| ƒ}t|ˆ jƒˆ _ˆ  jd7  _tj| |d�tj||d� S r  )r¼   rU   rÒ   r  r  r0   r1   )rD   rK   r   r  r¾   r4   r5   r‡   ò  s    z1TestPermutationTest.test_batch.<locals>.statisticr   r°   T)r    rR  r   r   )r$   r,   r  r{   rw   r
   )r‹   r=   r  r  r   r   r   r¦   )	r  rR  r,   rD   rK   r
  rE   rF   r  r4   r¾   r5   r   è  sB    ÿÿÿÿÿÿÿzTestPermutationTest.test_batchzpermutation_type, exact_sizer   r
   )rU  r  rØ   c           	      C   s€   | j  d¡}| j  d¡}dd„ }|ddœ}tj||f|fd|dƒdœ|—Ž}t|jjdƒ tj||f|f|Ž}t|jj|ƒ d S )Nr   c                 S   s   t j| |d�t j||d� S rX   rš   rJ   r4   r4   r5   r‡     s    z8TestPermutationTest.test_permutations.<locals>.statisticT)rR  r   r   )r    r,   )r‹   r=   r   r   r   Únull_distributionrf   )	r  rR  Z
exact_sizer,   rD   rK   r‡   r
  rQ   r4   r4   r5   Útest_permutations  s    	ÿÿÿz%TestPermutationTest.test_permutationsc                 C   sº   d\}}d\}}}t  || |¡|ks*t‚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s¤t‚t
|j|jdd� d S )N)r%  r   )r  é	   iÀ]  r    c                 S   s   t j| |d�t j||d� S rX   rš   rJ   r4   r4   r5   r‡   =  s    zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statisticTrV  r<   ©r   rR  r$   r  r,   r    ç{®Gáz„?rk   )r	   Úbinomr\   r   rm   rn   r   r0   Úinfr‡   r   r¦   ©r  r  r‹   ÚnxÚnyÚpermutationsrD   rK   rr   r‡   r
  rQ   rF   r4   r4   r5   Ú'test_randomized_test_against_exact_both0  s$    
  ÿÿz;TestPermutationTest.test_randomized_test_against_exact_bothc                 C   s²   d\}}d\}}}d| |ks"t ‚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sœt ‚t|j	|j	dd� d S )N)r&  N)rv   rv   i }  r
   r    c                 S   s   t j| | |d�S rX   rš   rJ   r4   r4   r5   r‡   W  s    zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statisticTrU  r<   rZ  r    r[  rk   )
r\   r   rm   rn   r   r0   r]  r‡   r   r¦   r^  r4   r4   r5   Ú*test_randomized_test_against_exact_samplesI  s$    
  ÿÿz>TestPermutationTest.test_randomized_test_against_exact_samplesc                    sÄ   d| j  }}d\}}}t |¡|ks(t‚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s®t‚t|j|jdd� d S )Nr2  )r  r  i@œ  r    c                    s   t  | ˆ ¡d S ©Nr   ©r   ZpearsonrrÃ   ©rK   r4   r5   r-  p  s    zTTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic1dTrU  r<   rZ  r    r[  rk   )r‹   r	   Ú	factorialr\   r   rm   rn   r   rô   r   r0   r]  r‡   r   r¦   )r  r  r‹   r_  r`  ra  rD   rr   r-  r‡   r
  rQ   rF   r4   rf  r5   Ú+test_randomized_test_against_exact_pairingsc  s&    

  ÿÿz?TestPermutationTest.test_randomized_test_against_exact_pairingsr  r$  ra  )rì   g    eÍÍAr   )r   r   r
   c              	   C   s²   t  d¡ ddd¡}t  t  d¡d d …d d f d|¡}t j d¡}tj||||||d�}dd	„ }t j d¡}	t||f|d
||||	d�}
t	|j
|
j
| jd� t	|j|
j| jd� d S )Né<   r   r   rb   r   l   ;WýN‡a )ra  r   r,   r  c                 S   s   t j| ||d�jS rX   rP  rJ   r4   r4   r5   r‡   �  s    zETestPermutationTest.test_against_permutation_ttest.<locals>.statisticT©r   r    r  r   r,   ri   )r0   rT   r^   Zmoveaxisr=   r‰   r   rQ  r   r   r‡   rj   r¦   )r  r  ra  r   rD   rK   rå   rE   r‡   ræ   rF   r4   r4   r5   Útest_against_permutation_ttest~  s"    
" ÿ ýz2TestPermutationTest.test_against_permutation_ttestr1  c                    s†   | j jddd�}| j jdddd�}tj||ˆ dd�}‡ fd	d
„}t||f|tjd| j d�}t|j|j| j	d� t|j
|j
| j	d� d S )Nr   r   ©rf   re   rb   r   )rf   rd   re   Úexact)r  r*  c                    s   t j| |dˆ d�jS r(  )r   Úks_2sampr‡   ©rD   rK   r  r4   r5   r-  ¥  s    
ÿz>TestPermutationTest.test_against_ks_2samp.<locals>.statistic1dr&  ©r    r  r,   ri   )r‹   Únormalr   rn  r   r0   r]  r   r‡   rj   r¦   )r  r  rD   rK   r‚   r-  rQ   r4   r  r5   Útest_against_ks_2samp�  s     ÿz)TestPermutationTest.test_against_ks_2sampc           	      C   s’   | j jddd�}| j jddd�}dddd	œ}|| }tj|||d
�}dd„ }t||f|tj|| j d�}t|j|j| j	d� t|j
|j
| j	d� d S )Nr   r   rl  rb   r   r&  r%  r2  r1  r  c                 S   s   t  | |¡jS rM   ©r   Úansarir‡   ro  r4   r4   r5   r-  ¾  s    z<TestPermutationTest.test_against_ansari.<locals>.statistic1drp  ri   )r‹   rq  r   rt  r   r0   r]  r   r‡   rj   r¦   )	r  r  rD   rK   Zalternative_correspondenceZalternative_scipyr‚   r-  rQ   r4   r4   r5   Útest_against_ansari±  s    þ ÿz'TestPermutationTest.test_against_ansaric              	   C   sŒ   t jjdd| jd�}t jjdd| jd�}t j||d|d�}dd„ }t||f|d	tj|d| jd
�}t|j	|j	| j
d� t|j|j| j
d� d S )N)r   rb   r
   r   ©rf   rd   r,   çš™™™™™©?r   )r   r  c                 S   s   t j| ||d�jS rX   )r   Úmannwhitneyur‡   rJ   r4   r4   r5   r‡   Ï  s    z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statisticTrj  ri   )r   Úuniformrn   r‹   rx  r   r0   r]  r   r‡   rj   r¦   )r  r  rD   rK   r‚   r‡   rQ   r4   r4   r5   Útest_against_mannwhitneyuÇ  s      þz-TestPermutationTest.test_against_mannwhitneyuc                 C   sˆ   t jjdd| jd�}t jjddd| jd�}t j||dd�}d	d
„ }t||f|tjd| jd�}t|j	|j	| j
d� t|j|j| j
d� d S )Nr   r   )rf   re   r,   rb   r   )rf   rd   re   r,   rm  r%   c                 S   s   t j| |dd�jS ©NÚ
asymptoticr%   )r   Úcramervonmises_2sampr‡   ro  r4   r4   r5   r-  à  s    ÿz9TestPermutationTest.test_against_cvm.<locals>.statistic1dr&  rp  ri   )r   rm   rn   r‹   r}  r   r0   r]  r   r‡   rj   r¦   )r  rD   rK   r‚   r-  rQ   r4   r4   r5   Útest_against_cvmÙ  s     ÿz$TestPermutationTest.test_against_cvm)rH   r
   c                 C   s.  t j d¡}|jdd�}|jdd�}|jdd�}|||f}dd„ }dd	„ }t |¡}	t |¡}
t  |d
¡}t  |d¡}t  |d¡}|	||||d�}|
||||d�}d|dd| j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 )Nl   Y}y!üdàh r   r    )r   r   r
   )r
   r   r   c                  W   s   t j| Ž jS rM   )r   Úkruskalr‡   ©rr   r4   r4   r5   r-  ý  s    zITestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistic1dc                  W   s   t j| Ž jS rM   )r   r  r¦   r€  r4   r4   r5   Úpvalue1d   s    zFTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.pvalue1d)r
   r   r   )r
   r   r
   )r
   r   r   r   Fr&  rV  ©r   r   r  rR  r,   r    r°   ri   g¸…ëQ¸®?rk   rˆ   )r0   r=   r‰   r   rô   r]   r‹   r   r]  r   r‡   rj   r¦   )r  r   r‹   rD   rK   rY   rr   r-  r�  r‡   r¦   Zx2rß   Zz2Úexpected_statisticÚexpected_pvaluer
  rQ   rF   r4   r4   r5   Ú test_vectorized_nsamp_ptype_bothë  s0    


 ÿz4TestPermutationTest.test_vectorized_nsamp_ptype_bothc                    s   t jjdd| jd�}t jjdd| jd�}dd„ }dd„ }‡ fd	d
„}t |¡}|||dd�}|d }	|d }
ddˆ d| jtjdœ}t|| f|f|Ž}t||f|f|Ž}t	|j
|j
| jd� ˆ dkrÖt	|j
|	| jd� t	|j|
| jd� t	|j|j| jd� d S )N)r   rØ   r
   r   rv  rw  c                 S   s   t j| dd�jS ©Nr%  r  ©r   Úwilcoxonr‡   )rY   r4   r4   r5   Ústatistic_1samp_1d#  s    zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_1samp_1dc                 S   s   t j| |dd�jS r†  r‡  ro  r4   r4   r5   Ústatistic_2samp_1d'  s    zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_2samp_1dc                    s   t j| |ˆ d�S )Nr  )r   rˆ  ro  r  r4   r5   Útest_1d*  s    z:TestPermutationTest.test_against_wilcoxon.<locals>.test_1dr   r   FrU  )r   r   r  rR  r,   r    ri   r2  )r   ry  rn   r‹   r   rô   r0   r]  r   r   r‡   rj   r¦   )r  r  rD   rK   r‰  rŠ  r‹  Útestr‚   rE  rF  r
  rE   rF   r4   r  r5   Útest_against_wilcoxon  s*    
 þz)TestPermutationTest.test_against_wilcoxonc           	   	   C   s„   | j jdddd�}d||dk< ddd„}||ƒdd  }}}tj||||d	�}tj|f|d
dtj| j |d�}t|j|j| j	d� d S )Nr   r
   r'   r    rH   c                 S   s   t j| dk|d�S )Nr   r   ©r0   r¤   rÂ   r4   r4   r5   r‡   J  s    z=TestPermutationTest.test_against_binomtest.<locals>.statisticrê   r  TrU  )r   rR  r    r,   r  ri   )r   )
r‹   Zintegersr   r¥   r   r0   r]  r   r¦   rj   )	r  r  rD   r‡   ÚkrV   rï   r‚   rQ   r4   r4   r5   Útest_against_binomtestA  s    
 ýz*TestPermutationTest.test_against_binomtestc                    s€   | j jdd�}|| j jdd� ‰ tj|ˆ dd�}‡ fdd„}t|f|dtj| j d�}t|j|j| j	d	� t|j
|j
| j	d	� d S )
NrØ   r    rm  r%   c                    s   t j| ˆ dd�jS r{  )r   Ú
kendalltaur‡   rÃ   rf  r4   r5   r-  _  s    z@TestPermutationTest.test_against_kendalltau.<locals>.statistic1drT  )rR  r    r,   ri   )r‹   rq  r   r‘  r   r0   r]  r   r‡   rj   r¦   )r  rD   r‚   r-  rQ   r4   rf  r5   Útest_against_kendalltauX  s    
 ÿz+TestPermutationTest.test_against_kendalltauc                    s”   ‡ fdd„}t j d¡}| d¡dk t¡}| 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 ©Nr   rŽ  rÃ   rf  r4   r5   r‡   l  s    z@TestPermutationTest.test_against_fisher_exact.<locals>.statisticl   	ý(yM4 é   g333333ã?g      Ð?r   rT  )rR  r    r  r,   r  )r0   r=   r‰   ZastypeÚfloatr   ZcontingencyZcrosstabr   r]  Zfisher_exactr   r¦   )r  r  r‡   r‹   rD   ÚtabrQ   rF   r4   rf  r5   Útest_against_fisher_exacti  s    
 þz-TestPermutationTest.test_against_fisher_exact)rÙ   r   c                 C   s>  | j jdd�}| j jdd�}| j j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 )N)r
   r   r   r    )r   r   r   )r
   r   r   r   r   c                  W   s   t j| ddd�jS )NTr|  ©Zrankedr&   )r   Úpage_trend_testr‡   r€  r4   r4   r5   r-  Ž  s    ÿzLTestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.statistic1dc                  W   s   t j| ddd�jS )NTrm  r˜  )r   r™  r¦   r€  r4   r4   r5   r�  ’  s    ÿzITestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.pvalue1dr   Fr&  rT  r‚  r    rc   ri   rˆ   rk   )r‹   r=   r   Zrankdatar   rô   r0   Zbroadcast_arraysr   r]  r   r‡   rj   r¦   )r  r   rD   rK   rY   rr   r-  r�  r‡   r¦   rƒ  r„  r
  rQ   rF   r4   r4   r5   Ú#test_vectorized_nsamp_ptype_samples|  s0    	


 ÿz7TestPermutationTest.test_vectorized_nsamp_ptype_samplesr   r   r   g      @gš™™™™™É?gš™™™™™Ù?gä&ý_ñÕ?g      @gd~�$I"@glâuý‚ö?)rD   rK   Úexpected_lessÚexpected_2sidedÚexpected_Pr_gte_S_meanrƒ  Úexpected_avgÚexpected_stdéo   ék   r<   r—   éf   éj   ém   él   éb   éi   ég   én   r’   gðdòð×éÃ?gðdòð×éÓ?gYoã5 Ó?g     @@@g{¼�C@gDmFA°@Úcasec              	   C   s@  |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 5 Q R X 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.

        rD   rK   rƒ  r›  rœ  r�  rž  rŸ  c                 S   s   t  | |¡jS rM   rs  ro  r4   r4   r5   r-  Ý  s    z7TestPermutationTest.test_with_ties.<locals>.statistic1dz$Ties preclude use of exact statisticr%  )r    r  r2  ri   g»½×Ùß|Û=rk   g�íµ ÷Æ°>N)r0   Útestingr   rA  ÚUserWarningr   r]  r   r‡   rj   r¦   rW  r1   rq   rU   r¤   rŠ   )r  rª  rD   rK   rƒ  r›  rœ  r�  rž  rŸ  r-  rD  rQ   rF   ÚSr1   rV   ZPr_gte_S_meanr4   r4   r5   Útest_with_ties·  s>    ÿÿ

ÿÿz"TestPermutationTest.test_with_tieszalternative, expected_pvalue))r%  gåï?)r&  gš¥Oú¤Oª?)r2  g<«Oú¤Oº?c                    sl   ddddddg}ddd	d
ddg‰ 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")
        g@éúôŽ9ü?gÅY�ü,œÙ?gÐîOÒQï?g[¡þiYí@g˜ï¦|„áý?géˆ¶BÜEï¿gQ†Gn�¶@g›UŸ«­ØÏ?gzêË±@ì?gmìÈGA6@gºB�Â @g¬ÕË­‡Þ?gùŠ¯øŠ¯è?c                    s   t  | ˆ ¡jS rM   )r   Z	spearmanrr‡   rÃ   rf  r4   r5   r-    s    zDTestPermutationTest.test_against_spearmanr_in_R.<locals>.statistic1drT  )rR  r    r  ri   g‚vIhÂ%<=rk   N)r   r0   r]  r   r‡   rj   r¦   )r  r  r„  rD   rƒ  r-  rQ   r4   rf  r5   Útest_against_spearmanr_in_Rõ  s$      ÿ  ÿ
 ÿz/TestPermutationTest.test_against_spearmanr_in_Rr$   )rH   r   c              	   C   s4   t jtdd�� tt dddg|¡ƒ W 5 Q R X d S )Nz`batch` must be positive.r   r   r
   r   )r-   r.   r/   r_   r   Ú_batch_generator)r  r$   r4   r4   r5   Útest_batch_generator_iv  s    z+TestPermutationTest.test_batch_generator_ivr   rb   r  r”  ziterable, batch, expectedc                 C   s    t t ||¡ƒ}||kst‚d S rM   )r_   r   r°  r\   )r  Úiterabler$   r‚   Úgotr4   r4   r5   Útest_batch_generator   s    z(TestPermutationTest.test_batch_generatorc           	      C   sˆ   ddddg}ddddg}dd„ }t j||f|d	d
d�}|j|j|j  }}}dt ||d k¡ t|ƒ }||  kr~dks„n t‚d S )Nr   r
   r   r   rØ   r  c                 S   s   t  | |¡d S rd  re  ro  r4   r4   r5   r‡   -  s    zFTestPermutationTest.test_finite_precision_statistic.<locals>.statisticFrT  )r   rR  rÕ   gUUUUUUÕ?)	r   r   r‡   r¦   rW  r0   r¤   rU   r\   )	r  rD   rK   r‡   rQ   Úrr¦   ÚnullZ	correct_pr4   r4   r5   Útest_finite_precision_statistic&  s    ÿz3TestPermutationTest.test_finite_precision_statisticN)+rI  rJ  rK  rj   rO  rS  r-   rL  rM  r0   r=   râ   r‰   r   r	   rg  r\  rX  rb  Úslowrc  rh  rk  rr  ru  rz  r~  Zxslowr…  r�  r�  r’  r—  rš  Z
tie_case_1Z
tie_case_2r®  r¯  r±  rÛ   Zbatch_generator_casesr´  r·  r4   r4   r4   r5   rN  ©  s¦   6ÿÿ$ÿþÿ



.
%

+ û ú<ÿ

"þÿ
rN  c                     s¬   t jdddgtd�‰ t  ˆ ¡} tƒ }d}t ˆ ¡D ]8}|d7 }t  || d d… ¡}| t	dd	„ |D ƒƒ¡ q2t  
‡ fd
d	„ttˆ ƒd ƒD ƒ¡}t||ƒ tt|ƒ|ƒ d S )Nr   r
   r   )Zdtyper   r   rH   c                 S   s   g | ]}t |ƒ‘qS r4   )Ú	frozenset©rµ   rN   r4   r4   r5   Ú
<listcomp>J  s     z4test_all_partitions_concatenated.<locals>.<listcomp>c              	      s4   g | ],}t  tˆ |d … ƒtˆ |d d … ƒ¡‘qS r“  )r	   r\  r¤   rº  ©rV   r4   r5   r»  L  s   ÿ)r0   r�   ÚintZcumsumÚsetr   Z_all_partitions_concatenatedÚsplitÚaddr2   ÚproductrÛ   rU   r   )ÚncZall_partitionsr  Zpartition_concatenatedZpartitioningr‚   r4   r¼  r5   Ú test_all_partitions_concatenated>  s    
ÿ
rÃ  Úfun_namer   r   r   c                    sÖ   t j d¡‰ ˆ jdd�‰‡ fdd„}ˆfˆ ddœˆfˆ dd	œˆ|d
œdœ}ddi}tt| ƒ}||  }| |¡ ‡fdd„}|f |d dœ|—Ž |f |ddœ|—Ž dd„ }|f |d dœ|—Ž |f |ddœ|—Ž d S )Nl   àr³:½ r'   r    c                    s   t jj| ˆ d�S )NrÌ   )r   rm   rn   r    )r‹   r4   r5   rn   [  s    z&test_parameter_vectorized.<locals>.rvsr8   )rr   r,   r&   rU  )rr   r,   rR  )r¶   rn   )r   r   r   r    r<   c                    s(   | j dkst | ˆ ¡st‚tj| |d�S r  )r¼   r0   rÝ   r\   r1   rÂ   )r¶   r4   r5   r‡   i  s    z,test_parameter_vectorized.<locals>.statistic)r‡   r   Tc                 S   s   | j dkst‚t | ¡S r“  )r¼   r\   r0   r1   rÃ   r4   r4   r5   r‡   o  s    F)r0   r=   r‰   rã   r   Úupdate)rÄ  rn   Zfun_optionsZcommon_optionsr@  Úoptionsr‡   r4   )r‹   r¶   r5   Útest_parameter_vectorizedS  s*    ÿÿü

rÇ  )8Únumpyr0   r-   Zscipy.statsr   r   r   Znumpy.testingr   r   r   Zscipyr   r	   Ú r   Zscipy._lib._utilr   Zscipy.optimizer   r6   rL  rM  rG   rW   ra   ru   Ztests_RÚitemsrƒ   Ztests_against_itself_1samprŒ   rœ   r«   Ztests_against_itself_2sampr³   rÁ   Zxfail_on_32bitrÄ   rË   rÐ   rÓ   rÖ   rà   rè   rñ   ró   rõ   rý   r¸  Úfilterwarningsr  r	  rN  rÃ  rÇ  r4   r4   r4   r5   Ú<module>   s¨   ?
+
þ
þ:ÿ
%ÿÿ
.







& u     ÿ