U
    Hvfd                    @   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)paired0`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   E/tmp/pip-unpacked-wheel-96ln3f52/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,   gMb@?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   )gQ7@gHzS@)g\(<@g=
ףpU@)gHz'@@gQ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{Gzt?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 st|dkstt|dk std S )NgbF?gp?g|Hܿgxy[e}u׿g*g_?ggi6g2?gF?gK?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st
t|||j}|dkst
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st
t||
|j}|dkst
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st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    ]4M 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 	||st
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   Z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st|jj	jdkst|jjjdkst|jjdkst|jjdkst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 )Nit$ 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rt
|j|j| jd n  dkrt
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   r/  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  r/  r  rO   r   rD   r   r   r!  rQ   r4   r3  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 r2  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%  r4  rk   )r0   r=   r   r   r  rn   r6  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   r8  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 )Nx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$  r4  g-C6?)r0   r=   r   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kurtosistestr5  rT   r7  r9  rF  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st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    {Gz?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st 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stt|j|jdd d S )Nr1  )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    eAr   )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   ;WNa )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_ttestr0  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$  r1  r0  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!dh 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rt	|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   r1  )r   ry  rn   r   r   r   r0   r]  r   r   r   rj   r   )r  r  rD   rK   r  r  r  testr   rD  rE  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_stdo   k   r<   r   f   j   m   l   b   i   g   n   r   gd?gd?gYo5 ?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  r1  ri   g|=rk   gư>N)r0   Ztestingr   r@  UserWarningr   r]  r   r   rj   r   rW  r1   rq   rU   r   r   )r  r  rD   rK   r  r  r  r  r  r  r,  rC  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%  gOO?)r1  g<OO?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?gY,?gOQ?g[iY@g|?g鈶BEgQGn@gU?gz˱@?gmGA6@gB @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   gvIh%<=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sn 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   )Z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  )8Z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     