o
    gn                    @   s*  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g dejdg ddd Zejdg ddd Zejdg dejdg dejdddgdd Zejdg d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,d- Z#ejdd.d/gejdd d0gd1d2 Z$ej%d3ejdg dejdd d0gd4d5 Z&ejdg dd6d7 Z'ejdg dd8d9 Z(d:d; Z)ejd<d d=gd>d? Z*d@dA Z+ejdBdCdDgdEdF Z,ejdGg dHejdg ddIdJ Z-dKdL Z.ejdg ddMdN Z/ej0 ejdg ddOdP Z1G dQdR dRZ2G dSdT dTZ3dUdV Z4ejdWg dXdYdZ Z5d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 d    n1 sw   Y  d} t jt| d tt tj W d    n1 s:w   Y  d} t jt| d tg ddgftj W d    n1 s^w   Y  d} t jt| d tg dg dftjd	d
 W d    n1 sw   Y  d} t jt| d tdtjdd W d    n1 sw   Y  d} t jt| d tg dftjdd W d    n1 sw   Y  d} t jt| d tg dftjdd W d    n1 sw   Y  d} t jt| d tg dftjdd W d    n	1 sw   Y  d} t jt| d tg dftjdd W d    n	1 s8w   Y  d} t jt| d tg dftjdd W d    n	1 s]w   Y  d} t jt| d tg dftjdd W d    n	1 sw   Y  d} t jt| d tg dftjdd W d    n	1 sw   Y  d} t jt| d tg dftjdd W d    n	1 sw   Y  d} t jt| d tg dftjd d W d    n	1 sw   Y  d!} t jt| d tg dftjd"d# W d    d S 1 sw   Y  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   r
      z=When `paired is True`, all samples must have the same length r   r
   r      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 r6   _/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/stats/tests/test_resampling.pytest_bootstrap_iv   sx   $r8   r(   )basic
percentileBCar   r   r   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"   )r2   randomseedrandr   r3   r   confidence_intervallowhighstandard_error)r(   r   xres1res2r6   r6   r7   test_bootstrap_batchK   s   rJ   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   r3   rG   yr   r6   r6   r7   my_statisticd   s   z+test_bootstrap_paired.<locals>.my_statisticc                    s   |  }|  } ||}|S Nr6   )ir   abresrO   rG   rN   r6   r7   my_paired_statisticg   s   
z2test_bootstrap_paired.<locals>.my_paired_statisticr-   T)r   r.   rK   )
r2   r@   rA   rB   arangelenr   r   rC   rF   )r(   nrV   rQ   rH   rI   r6   rU   r7   test_bootstrap_paired\   s   
r[   r   TFc              	   C   sj  |s| dkrt jdd 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sIJ g d}
||
|< 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;   z*BCa currently for 1-sample statistics only)reasonr   rK   c                 S   s$   | j |d|j |d |j |d S Nr   rL   )rG   rN   zr   r6   r6   r7   rO      s   $z/test_bootstrap_vectorized.<locals>.my_statistic)r)   r=   r>   r?   )r   r(   r.   r   r"   )r?   )r   r   r   rW   )r/   xfailr2   r@   rA   rB   r   bootstrap_distributionshaperF   broadcast_toreshaper   rC   rD   rE   listpopr   )r(   r   r   rO   ra   	n_samplesrG   rN   r^   rH   rc   rI   result_shaper6   r6   r7   test_bootstrap_vectorizedv   sF   


rh   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   )dfrk   rl   )
confidence)r"   r   r(   r.   gMb@?rtolga2U0*3?atol)r   normrvstrY   r2   r3   semintervalstdr   r   rC   rF   )r(   dataalphadistexpected_intervalexpected_serT   r6   r6   r7   test_bootstrap_against_theory   s   $r   )gQ7@gHzS@)g\(<@g=
ףpU@)gHz'@@gQV@zmethod, expectedc                 C   s8   t g d}t|ft jd| dd}t|j|dd d S )N)r)   r>         )@r   g+@            "   2   Q   Y   y         i@B r   )r"   r(   r.   g{Gzt?rq   )r2   arrayr   r3   r   rC   )r(   expectedrG   rT   r6   r6   r7   test_bootstrap_against_R   s
   r   i  i  c                  C   s   g d} g d}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 shJ |dksnJ t|dk svJ d S )N)g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   $   t j| |d}t j||d}|| S r]   )r   skew)rG   rN   r   s1s2r6   r6   r7   	statistic      z1test_multisample_BCa_against_R.<locals>.statisticl   tgy4r9   r?   )r(   r&   r.   r:   bcag1*g333333ÿg333333?Q?)r2   r@   default_rngr   r   r3   rC   abs)rG   rN   r   rng	res_basicres_percentres_bca	mid_basicmid_percentmid_bca	mid_wboot
diff_basicdiff_percentdiff_bcar6   r6   r7   test_multisample_BCa_against_R   s.   r   c                  C   st   t g d} t g d}d
dd}|| g}t||}d}d}|j}d}t||||||\}	}	}
t|
d	 d S )N)	r)         (   .   r   4   h      )   r   &   ^   c         r   c                 S      t j| |dt j||d S r]   r2   r3   )r^   rN   r   r6   r6   r7   r        z:test_BCa_acceleration_against_reference.<locals>.statisticrK   rn   r?   ge{?r   )r2   r   r   r   r`   r   _bca_intervalr   )rN   r^   r   r{   rT   r   r|   theta_hat_br&   _a_hatr6   r6   r7   '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sFJ t
|||j}|dksTJ d S )Nr   r?     ?ri   r   rk   rl   i  rm   r   rK   r   r   r"   r&   r(   r   皙?r2   r@   rA   r   ru   r3   rv   r   rC   sum	binomtestpvalue)r(   r   rZ   r"   r   r}   	stat_truen_replicationsr{   rT   cici_contains_truer   r6   r6   r7   #test_bootstrap_against_itself_1samp,  s2   r   i|  iz  )r9   r:   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`J t
||
|j}|dksnJ d S )Nr   r?   x   r   r   rK   c                 S   r   r]   r   )data1data2r   mean1mean2r6   r6   r7   my_statf  r   z4test_bootstrap_against_itself_2samp.<locals>.my_statr   r   r     r   r   r   rW   r   )r(   r   n1n2r"   r   r   dist1dist2r   r   r   r   rT   r   r   r   r6   r6   r7   #test_bootstrap_against_itself_2sampW  s:   
r   r9   r:   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                       t  fdd|D S )Nc                 3       | ]}|  V  qd S rP   rL   .0sampler   r6   r7   	<genexpr>      zEtest_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>r   r   r{   r6   r   r7   r        z2test_bootstrap_vectorized_3samp.<locals>.statisticc                     &   | D ]	}|j dksJ q | ddiS Nr   r   r   ndimr{   r   r   r6   r7   statistic_1d     z5test_bootstrap_vectorized_3samp.<locals>.statistic_1dr   ri   Tr?   )r   r   r"   r(   r.   Fr2   r@   rA   rB   r   r   rC   rF   )r(   r   r   rG   rN   r^   rH   rI   r6   r   r7   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 r]   rL   rG   r   r6   r6   r7   r     s   z2test_bootstrap_vectorized_1samp.<locals>.statisticc                    s   | j dksJ  | ddS )Nr   r   r   r   rG   r   r6   r7   r     s   z5test_bootstrap_vectorized_1samp.<locals>.statistic_1dr   ri   Tr?   )r   r   r"   r&   r(   r.   Fr)   r   r   )r(   r   r   rG   rH   rI   r6   r   r7   test_bootstrap_vectorized_1samp  s   
r   c              	   C   s   ddg }| dkrMt jdd5 d}tjtj|d t|gt j| d}t|j	t j
t j
f W d    n1 s8w   Y  W d    n1 sGw   Y  nt|gt j| d}t|j	d	 t|jd
 d S )N#        @r;   ignore)invalidz0The BCa confidence interval cannot be calculatedr   r'   )r   r   r   )r2   errstater/   warnsr   DegenerateDataWarningr   r3   r   rC   nanrF   )r(   r{   msgrT   r6   r6   r7   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sKJ d S )Nl   E<1

 r
   r   r   r?   rm   r.   i[%  r(   r"   r.   F)r(   r"   r.   r   )r2   r@   r   r   ru   rv   r   r   r   rC   rF   
isinstancefloat64)r(   r   r}   r{   rT   refr6   r6   r7   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s2J 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   r;   if  r   )r2   r@   r   r   ru   rv   minr   rC   rD   r   maxr   rE   )r   r}   r{   true_minrT   rI   r6   r6   r7   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 rn   r:   )r"   r.   r   r(   r   r;   )r"   r.   r   r(   r*   +=rq   )	r2   r@   r   r   r   r3   r   rF   rC   )r  r   rG   r   r   n3rT   r   r6   r6   r7   test_re_boostrap  s*   

r  c                  C   s   d} t jd t jj|  }tt|}t| d D ]}|d|d d f }t j||dd}t 	||s6J qt j
ttj|dddd}t 	||sMJ d S )	Nr   r   ri      r   rK   .r   r
   r%   )r2   r@   rA   rB   nextr   _jackknife_resamplerangedeletearray_equalconcatenaterd   )ra   rG   rN   rQ   slcr   y2r6   r6   r7   test_jackknife_resample  s   r  rng_nameRandomStater   c                 C   s   t tj| d }|d u rt|  d |d}|d}d}d}tjd tjj| }tj|||d}t	|D ]$}|d|d d f }	t
|d|d |d }
|d|
f }t|	|s[J q7d S )Nz not available.r   r)   r  r-   .rK   )getattrr2   r@   r/   skiprA   rB   r   _bootstrap_resampler  r   r  )r  r   rng1rng2r"   ra   rG   rN   rQ   r  jsr   r6   r6   r7   test_bootstrap_resample  s    r  score)r         ?r   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   rK   r   c                 S   s   t tj|| |S rP   )r2   apply_along_axisr   percentileofscore)rR   r  r   r6   r6   r7   vectorized_pos<     z0test_percentile_of_score.<locals>.vectorized_posr?   V瞯<)r2   r@   rA   rB   r   _percentile_of_scorer   )r  r   ra   rG   pr!  p2r6   r6   r7   test_percentile_of_score4  s   r'  c                  C   s   d} t jd t jj|  }t jj| d d  d }t||}t| d D ]}|| }t j|| || dd}t||d q&d S )N)r)   r  r   rK   r?   r   r#  )	r2   r@   rA   rB   r   _percentile_along_axisr  r:   r   )ra   rG   qrN   rQ   rT   r   r6   r6   r7   test_percentile_along_axisD  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                    r   )Nc                 3   r   rP   rL   r   r   r6   r7   r   [  r   z>test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>r   r   r6   r   r7   r   Y  r   z+test_vectorize_statistic.<locals>.statisticc                     r   r   r   r   r   r6   r7   r   ]  r   z.test_vectorize_statistic.<locals>.statistic_1dr   r   ri   r  r   r   )r   _vectorize_statisticr2   r@   rA   rB   r   )r   r   
statistic2rG   rN   r^   rH   rI   r6   r   r7   test_vectorize_statisticU  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s=J t |dksFJ |jj	jdksOJ |jjjdksXJ |jjdks`J |jjdkshJ d S )Nl   s: )r   r  )r?   r?   r   c                 S   s   t j| S rP   )r   ru   fitr{   r6   r6   r7   r        z/test_vector_valued_statistic.<locals>.statisticrK   F'  )r(   r   r   r"   r   r   Z   r?   )r
   r?   )r
   r?   r1  )r2   r@   r   r   ru   rv   r   r   rC   rD   TrE   allra   rF   r`   )r(   r   paramsr   r   rT   countsr6   r6   r7   test_vector_valued_statisticp  s$   r7  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.   r6   )argskwdsrsrvs_inr6   r7   <lambda>  s    z2TestMonteCarloHypothesisTest.rvs.<locals>.<lambda>r6   )selfr=  r<  r6   r;  r7   rv        z TestMonteCarloHypothesisTest.rvsc                 C   s  dd }d}t jt|d tg dtjj|dd W d    n1 s$w   Y  d}t jt|d tg dtjj|dd	 W d    n1 sIw   Y  d
}t jt|d tg dd | W d    n1 sjw   Y  d}t jt|d tg dtjjd  W d    n1 sw   Y  d}t jt|d tg dtjj|dd W d    n1 sw   Y  d}t jt|d tg dtjj|dd W d    n1 sw   Y  d}t jt|d tg dtjj|dd W d    n1 sw   Y  d}t jt|d tg dtjj|dd W d    n	1 s"w   Y  d}t jt|d tg dtjj|dd W d    d S 1 sIw   Y  d S )Nc                 S   s   t | jS rP   )r   skewnormr   r   r6   r6   r7   stat  r0  z@TestMonteCarloHypothesisTest.test_input_validation.<locals>.statr   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/   r0   r1   r   r   ru   rv   	TypeErrorr?  rB  r5   r6   r6   r7   test_input_validation  sV   $z2TestMonteCarloHypothesisTest.test_input_validationc                    s6  t jd}|d} fdd d _d _| ddd}| tjjt jd	|d
< tdddi|}t	 jd t	 jd | tjjt jd	|d
< d _tdddi|}t	 jd t	 jd | tjjt jd	|d
< d _tdi |}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   rY   r   
batch_sizecounterr   skewtestr   )rG   r   rK  r   r6   r7   r     s   z:TestMonteCarloHypothesisTest.test_batch.<locals>.statisticr   r   T)r   r   r"   r   i"rv   r&   r     r   r   r
   r6   )r2   r@   r   rL  rK  rv   r   ru   r   r   r   )r?  r   rG   r:  rH   rI   res3r6   r   r7   
test_batch  s0   
z'TestMonteCarloHypothesisTest.test_batchr   r   c           	      C   s   t jd}| tjj|}g d}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      t j| |djS r]   )r   rM  r   r   r6   r6   r7   r        z9TestMonteCarloHypothesisTest.test_axis.<locals>.statisticTi N  )r   r"   r   rs   )r2   r@   r   rv   r   ru   rM  r   r   r   r   rt   )	r?  r   r   norm_rvsrm   rG   r   r   rT   r6   r6   r7   	test_axis  s   

z&TestMonteCarloHypothesisTest.test_axisrF  lessgreaterrR   g      r  ri   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rHt
|j|j| jd d S  dkrZt
d|j |j| jd d S d S )Ni)r  rR   rm   r.   rE  c                    s   t j| t jjd djS Nasymp)moderF  )r   ks_1sampru   cdfr   r   rE  r6   r7   statistic1d  s
   zGTestMonteCarloHypothesisTest.test_against_ks_1samp.<locals>.statistic1dr   Fr"   r   rF  rY  rs   rX  r   )r2   r@   r   r   rA  rv   r^  ru   r_  r   r   r   r   rt   )	r?  rF  rR   r   rG   r   r`  rU  rT   r6   rE  r7   test_against_ks_1samp  s   z2TestMonteCarloHypothesisTest.test_against_ks_1samphypotestrX  rY  	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	   rZ  rE  c                    s    | |dj S r]   r   r   rc  r6   r7   r   !  r@  zLTestMonteCarloHypothesisTest.test_against_normality_tests.<locals>.statisticTr   rF  rs   )r2   r@   r   r   rA  rv   ru   r   r   r   r   rt   )
r?  rc  rF  rR   r   rG   r   r   rU  rT   r6   rg  r7   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 rf  rZ  c                 S   rS  r]   )r   
normaltestr   r   r6   r6   r7   r   3  rT  zGTestMonteCarloHypothesisTest.test_against_normaltest.<locals>.statisticTrY  rh  rs   )r2   r@   r   r   rA  rv   rj  ru   r   r   r   r   rt   )r?  rR   r   rG   r   r   rU  rT   r6   r6   r7   test_against_normaltest+  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  rZ  c                 S   s   t | t jjjS rP   )r   cramervonmisesru   r_  r   r   r6   r6   r7   r`  E  r"  zMTestMonteCarloHypothesisTest.test_against_cramervonmises.<locals>.statistic1dr   FrY  ra  rs   )r2   r@   r   r   rA  rv   rl  ru   r_  r   r   r   r   rt   )r?  rR   r   rG   r   r`  rU  rT   r6   r6   r7   test_against_cramervonmises=  s   z8TestMonteCarloHypothesisTest.test_against_cramervonmises	dist_name)ru   logisticrQ   c              	      s&   fdd}t  }|t t|dd}W d    n1 s w   Y  |js*J |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 d    n1 s{w   Y  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   )	r2   r@   r   r   tukeylambdarv   andersonr   critical_values)rR   r   rG   r   rn  rQ   r6   r7   fun[  s   z?TestMonteCarloHypothesisTest.test_against_anderson.<locals>.funr   )x0rp  r?   r   c                       t |  jS rP   )r   rr  r   r   )rn  r6   r7   r`  o  r@  zGTestMonteCarloHypothesisTest.test_against_anderson.<locals>.statistic1dr   FrY  ra  r
   rs   )r   filterRuntimeWarningr   successrG   r2   r@   r   r   rq  rv   rr  r   significance_levelr  r   r   r   rt   )r?  rn  rQ   ru  supsolrR   r   rG   r   expected_stat
expected_pr`  dist_rvsrT   r6   rt  r7   test_against_andersonP  s.   



z2TestMonteCarloHypothesisTest.test_against_andersonc                 C   s>   t jd}t d}t||jt jddd}|jdksJ d S )Nl   IL~QH(s r?   TrX  rh  g-C6?)r2   r@   r   zerosr   r3   r   )r?  r   rG   rT   r6   r6   r7   test_p_never_zero|  s   
z.TestMonteCarloHypothesisTest.test_p_never_zeroN)__name__
__module____qualname__rt   rv   rI  rP  r/   markparametrizer  rV  r2   linspacerb  r   rM  kurtosistestri  rX   rk  rm  r  r  r6   r6   r6   r7   r8    s,    -%


*r8  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g d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!g d9g d:d;d<d=d>d?d@dAZ"g dBg dCdDdEdFdGdHdIdAZ#ej ejdJe"e#fdKdL Z$ejdMdNdOdP Z%ejdQdRdSdT Z&e'dUdg fe'ddg dg dVgfe'dWdg dg dVddXggfgZ(ejdYe(dZd[ Z)d\d] Z*d^S )_TestPermutationTestr  c                 C   s   t jd| _d S )Nl   F )r2   r@   r   r   )r?  r6   r6   r7   setup_method  r"  z TestPermutationTest.setup_methodc                 C   s~  dd }d}t jt|d tg ddgf| W d    n1 s"w   Y  d}t jt|d td| W d    n1 s@w   Y  t jt|d td| W d    n1 s\w   Y  d	}t jt|d tg dg df|d
d W d    n1 sw   Y  d}t jt|d tg dg df|dd W d    n1 sw   Y  d}t jt|d tg dg df|d
d W d    n1 sw   Y  d}t jt|d tg dg df|dd W d    n1 sw   Y  d}t jt|d tg dg df|dd W d    n	1 sw   Y  d}t jt|d tg dg df|dd W d    n	1 sBw   Y  d}t jt|d tg dg df|dd W d    n	1 siw   Y  d}t jt|d tg dg df|dd W d    n	1 sw   Y  d}t jt|d tg dg df|dd W d    d S 1 sw   Y  d S )Nc                 S   s   t | |f|jS rP   r   	ttest_indr   rM   r6   r6   r7   rB    r"  z:TestPermutationTest.test_permutation_test_iv.<locals>.statz2each sample in `data` must contain two or more ...r   r   r   z6`data` must be a tuple containing at least two samples)r   r   r   r   z `permutation_type` must be in...r   )permutation_typer   r   rC  r    r!   r#   r$   r%   rD  rE  r+   r,   r-   )r/   r0   r1   r   rG  rH  r6   r6   r7   test_permutation_test_iv  sh   $z,TestPermutationTest.test_permutation_test_ivr.   r  )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 rJ  )r   rY   r   rK  rL  r2   r3   )rG   rN   r   rK  r   r6   r7   r     s   z1TestPermutationTest.test_batch.<locals>.statisticr   r   T)r"   r  r   r   )r&   r.   rN  r   r   r
   )r   r@   rL  rK  r   r   r   r   )	r?  r  r.   rG   rN   r:  rH   rI   rO  r6   r   r7   rP    sB   zTestPermutationTest.test_batchzpermutation_type, exact_sizer  r   r
   )r     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i |}t|jj| d S )Nr   c                 S   r   r]   r   rM   r6   r6   r7   r     r   z8TestPermutationTest.test_permutations.<locals>.statisticT)r  r   r   )r"   r.   )r   r@   r   r   r   null_distributionrm   )	r?  r  
exact_sizer.   rG   rN   r   r:  rT   r6   r6   r7   test_permutations  s   	z%TestPermutationTest.test_permutationsc                 C   s   d\}}d\}}}t || ||ksJ tjj|d}tjj|d}||f}dd }	ddd||d	}
t||	fd
|i|
}t||	fd
tji|
}|j|jksRJ t	|j
|j
dd d S )N)rX  r   )r  	   i]  r   c                 S   r   r]   r   rM   r6   r6   r7   r     r   zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statisticTr  r?   r   r  r&   rF  r.   r"   {Gz?rs   )r	   binomr   ru   rv   r   r2   infr   r   r   r?  rF  r   nxnypermutationsrG   rN   r{   r   r:  rT   rI   r6   r6   r7   'test_randomized_test_against_exact_both  s    
z;TestPermutationTest.test_randomized_test_against_exact_bothc                 C   s   d\}}d\}}}d| |ksJ t jj|d}t jj|d}||f}dd }	ddd	||d
}
t||	fd|i|
}t||	fdtji|
}|j|jksNJ t|j|jdd d S )N)rY  N)r   r   i }  r
   r   c                 S   s   t j| | |dS r]   r   rM   r6   r6   r7   r   4  r"  zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statisticTr  r?   r  r"   r  rs   )	r   ru   rv   r   r2   r  r   r   r   r  r6   r6   r7   *test_randomized_test_against_exact_samples&  s    
z>TestPermutationTest.test_randomized_test_against_exact_samplesc                    s   d| j }}d\}}}t||ksJ tjj|d}tjj|d |g} fdd}t|}	ddd||d	}
t||	fd
|i|
}t||	fd
t	j
i|
}|j|jksWJ t|j|jdd d S )Nre  )r  r  i@  r   c                    s   t |  d S Nr   r   pearsonrr   rN   r6   r7   r`  M  rT  zTTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic1dTr  r?   r  r"   r  rs   )r   r	   	factorialr   ru   rv   r   r+  r   r2   r  r   r   r   )r?  rF  r   r  r  r  rG   r{   r`  r   r:  rT   rI   r6   r  r7   +test_randomized_test_against_exact_pairings@  s"   

z?TestPermutationTest.test_randomized_test_against_exact_pairingsrF  rW  r  )r  g    eAr   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   ri   r   l   ;WNa )r  r   r.   rF  c                 S      t j| ||djS r]   r  rM   r6   r6   r7   r   l  r"  zETestPermutationTest.test_against_permutation_ttest.<locals>.statisticTr   r"   rF  r   r.   rq   )r2   rX   rc   moveaxisr@   r   r   r  r   r   r   rr   r   )r?  rF  r  r   rG   rN   r  rH   r   r  rI   r6   r6   r7   test_against_permutation_ttest[  s   
"z2TestPermutationTest.test_against_permutation_ttestrd  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   rm   rl   ri   r   )rm   rk   rl   exact)rF  r]  c                    s   t j| |d djS r[  )r   ks_2sampr   rG   rN   rE  r6   r7   r`    s
   
z>TestPermutationTest.test_against_ks_2samp.<locals>.statistic1drY  r"   rF  r.   rq   )r   normalr   r  r   r2   r  r   r   rr   r   )r?  rF  rG   rN   r   r`  rT   r6   rE  r7   test_against_ks_2sampz  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   r  ri   r   rY  rX  re  rd  rE  c                 S      t | |jS rP   r   ansarir   r  r6   r6   r7   r`    r@  z<TestPermutationTest.test_against_ansari.<locals>.statistic1dr  rq   )r   r  r   r  r   r2   r  r   r   rr   r   )	r?  rF  rG   rN   alternative_correspondencealternative_scipyr   r`  rT   r6   r6   r7   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   ri   r
   r   rm   rk   r.   皙?r   )r   rF  c                 S   r  r]   )r   mannwhitneyur   rM   r6   r6   r7   r     r"  z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statisticTr  rq   )r   uniformrv   r   r  r   r2   r  r   r   rr   r   )r?  rF  rG   rN   r   r   rT   r6   r6   r7   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   )rm   rl   r.   ri   r   )rm   rk   rl   r.   r  r'   c                 S      t j| |ddjS N
asymptoticr'   )r   cramervonmises_2sampr   r  r6   r6   r7   r`    
   z9TestPermutationTest.test_against_cvm.<locals>.statistic1drY  r  rq   )r   ru   rv   r   r  r   r2   r  r   r   rr   r   )r?  rG   rN   r   r`  rT   r6   r6   r7   test_against_cvm  s   z$TestPermutationTest.test_against_cvm)rK   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      t j|  jS rP   )r   kruskalr   r/  r6   r6   r7   r`    r0  zITestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistic1dc                  W   r  rP   )r   r  r   r/  r6   r6   r7   pvalue1d  r0  zFTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.pvalue1d)r
   r   r   )r
   r   r
   rR  r   FrY  r  r   r   rF  r  r.   r"   r   rq   gQ?rs   r   )r2   r@   r   r   r+  rb   r   r   r  r   r   rr   r   )r?  r   r   rG   rN   r^   r{   r`  r  r   r   x2r  z2expected_statisticexpected_pvaluer:  rT   rI   r6   r6   r7    test_vectorized_nsamp_ptype_both  s.   


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i |}t||f|fi |}t	|j
|j
| jd  dkrot	|j
|	| jd t	|j|
| jd t	|j|j| jd d S )N)r   r  r
   r   r  r  c                 S   s   t j| ddjS NrX  rE  r   wilcoxonr   )r^   r6   r6   r7   statistic_1samp_1d   s   zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_1samp_1dc                 S   r  r  r  r  r6   r6   r7   statistic_2samp_1d  r"  zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_2samp_1dc                    s   t j| | dS )NrE  )r   r  r  rE  r6   r7   test_1d  rT  z:TestPermutationTest.test_against_wilcoxon.<locals>.test_1dr   r   Fr  )r   r   rF  r  r.   r"   rq   re  )r   r  rv   r   r   r+  r2   r  r   r   r   rr   r   )r?  rF  rG   rN   r  r  r  testr   r~  r  r:  rH   rI   r6   rE  r7   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   rK   c                 S   s   t j| dk|dS )Nr   r   r2   r   r   r6   r6   r7   r   '  r"  z=TestPermutationTest.test_against_binomtest.<locals>.statisticr  rE  Tr  )r   r  r"   r.   rF  rq   r   )
r   integersr   r   r   r2   r  r   r   rr   )	r?  rF  rG   r   krZ   r%  r   rT   r6   r6   r7   test_against_binomtest  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   r  r'   c                    s   t j|  ddjS r  )r   
kendalltaur   r   r  r6   r7   r`  <  r"  z@TestPermutationTest.test_against_kendalltau.<locals>.statistic1dr  )r  r"   r.   rq   )r   r  r   r  r   r2   r  r   r   rr   r   )r?  rG   r   r`  rT   r6   r  r7   test_against_kendalltau5  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   r  r6   r7   r   I  s   z@TestPermutationTest.test_against_fisher_exact.<locals>.statisticl   	(yM4    g333333?g      ?r   r  )r  r"   rF  r.   rE  )r2   r@   r   astypefloatr   contingencycrosstabr   r  fisher_exactr   r   )r?  rF  r   r   rG   tabrT   rI   r6   r  r7   test_against_fisher_exactF  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      t j| dddjS )NTr  rankedr(   )r   page_trend_testr   r/  r6   r6   r7   r`  k  r  zLTestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.statistic1dc                  W   r  )NTr  r  )r   r  r   r/  r6   r6   r7   r  o  r  zITestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.pvalue1dr   FrY  r  r  r"   rj   rq   r   rs   )r   r@   r   rankdatar   r+  r2   broadcast_arraysr   r  r   r   rr   r   )r?  r   rG   rN   r^   r{   r`  r  r   r   r  r  r:  rT   rI   r6   r6   r7   #test_vectorized_nsamp_ptype_samplesY  s.   	


z7TestPermutationTest.test_vectorized_nsamp_ptype_samplesr   )r   r
   g      @g?g?g&_?g      @gd~$I"@glu?)rG   rN   expected_lessexpected_2sidedexpected_Pr_gte_S_meanr  expected_avgexpected_std)o   k   r?   r   f   j   m   l   )	r  r  r  b   i   g   n   r  r   gd?gd?gYo5 ?g     @@@g{C@gDmFA@casec                 C   sT  |d }|d }|d }|d }|d }|d }|d }|d }	d	d
 }
t j $}|td t||f|
t jdd}t||f|
t jdd}W d   n1 sPw   Y  t|j|| j	d t|j
|dd t|j
|dd t|j |dd t|j |	dd |j}|j }t|j}t t |j| t || k| }t|| dS )a  
        Results above from SAS PROC NPAR1WAY, e.g.

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

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

        rG   rN   r  r  r  r  r  r  c                 S   r  rP   r  r  r6   r6   r7   r`    r@  z7TestPermutationTest.test_with_ties.<locals>.statistic1dz$Ties preclude use of exact statisticrX  )r"   rF  re  Nrq   g|=rs   gư>)r2   testingr   rx  UserWarningr   r  r   r   rr   r   r  r3   rz   rY   r   r   )r?  r  rG   rN   r  r  r  r  r  r  r`  r|  rT   rI   Sr3   rZ   Pr_gte_S_meanr6   r6   r7   test_with_ties  s@   

z"TestPermutationTest.test_with_tieszalternative, expected_pvalue))rX  g?)rY  gOO?)re  g<OO?c                    s\   g d}g d d} fdd}t |f|dtj|d}t|j|| jd t|j|d	d
 dS )aU  
        Results above from R cor.test, e.g.

        options(digits=16)
        x <- c(1.76405235, 0.40015721, 0.97873798,
               2.2408932, 1.86755799, -0.97727788)
        y <- c(2.71414076, 0.2488, 0.87551913,
               2.6514917, 2.01160156, 0.47699563)
        cor.test(x, y, method = "spearm", alternative = "t")
        )g@9?gY,?gOQ?g[iY@g|?g鈶BE)gQGn@gU?gz˱@?gmGA6@gB @g˭?g?c                    rw  rP   )r   	spearmanrr   r   r  r6   r7   r`    r@  zDTestPermutationTest.test_against_spearmanr_in_R.<locals>.statistic1dr  )r  r"   rF  rq   gvIh%<=rs   N)r   r2   r  r   r   rr   r   )r?  rF  r  rG   r  r`  rT   r6   r  r7   test_against_spearmanr_in_R  s   
z/TestPermutationTest.test_against_spearmanr_in_Rr&   )rK   r   c                 C   sH   t jtdd ttg d| W d    d S 1 sw   Y  d S )Nz`batch` must be positive.r   r   )r/   r0   r1   rd   r   _batch_generator)r?  r&   r6   r6   r7   test_batch_generator_iv  s   "z+TestPermutationTest.test_batch_generator_ivr   )r   r   ri   r  r  ziterable, batch, expectedc                 C   s    t t||}||ksJ d S rP   )rd   r   r  )r?  iterabler&   r   gotr6   r6   r7   test_batch_generator  s   z(TestPermutationTest.test_batch_generatorc           	      C   s   g d}g d}dd }t j||f|ddd}|j|j|j}}}dt||d	 k t| }||  kr<d
ks?J  J d S )N)r   r
   r   r   )r
   r   r  r  c                 S   s   t | |d S r  r  r  r6   r6   r7   r   
  rT  zFTestPermutationTest.test_finite_precision_statistic.<locals>.statisticFr  )r   r  r
   r  gUUUUUU?)r   r   r   r   r  r2   r   rY   )	r?  rG   rN   r   rT   rr   null	correct_pr6   r6   r7   test_finite_precision_statistic  s    z3TestPermutationTest.test_finite_precision_statisticN)+r  r  r  rr   r  r  r/   r  r  r2   r@   r  r   rP  r	   r  r  r  r  slowr  r  r  r  r  r  r  xslowr  r  r  r  r  r  
tie_case_1
tie_case_2r  r  r  r  batch_generator_casesr  r  r6   r6   r6   r7   r    s    6$



.
%

+<


r  c                     s   t jg dtd t  } t }d}t D ]}|d7 }t || d d }|t	dd |D  qt 
 fddtt d D }t|| tt|| d S )	N)r   r
   r   )dtyper   r   rK   c                 S   s   g | ]}t |qS r6   )	frozensetr   rQ   r6   r6   r7   
<listcomp>'  s    z4test_all_partitions_concatenated.<locals>.<listcomp>c              	      s4   g | ]}t t |d  t |d d  qS r  )r	   r  r   r  rZ   r6   r7   r  )  s    ,)r2   r   intcumsumsetr   _all_partitions_concatenatedsplitaddr4   productr  rY   r   )ncall_partitionsrL  partition_concatenatedpartitioningr   r6   r  r7    test_all_partitions_concatenated  s   

r"  fun_namer   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}|d|d d| |d|dd| dd }|d|d d| |d|dd| d S )Nl   r: r)   r   c                    s   t jj|  dS )Nr   )r   ru   rv   r   )r   r6   r7   rv   8  rT  z&test_parameter_vectorized.<locals>.rvsr:   )r{   r.   r(   r  )r{   r.   r  )r   rv   r$  r"   r?   c                    s(   | j dkst|  sJ tj| |dS rJ  )r   r2   r  r3   r   )r   r6   r7   r   F  s   z,test_parameter_vectorized.<locals>.statistic)r   r   Tc                 S   s   | j dksJ t| S r  )r   r2   r3   r   r6   r6   r7   r   L  s   
Fr6   )r2   r@   r   r  r   update)r#  rv   fun_optionscommon_optionsru  optionsr   r6   )r   r   r7   test_parameter_vectorized0  s*   

r)  )6numpyr2   r/   scipy.statsr   r   r   numpy.testingr   r   r   scipyr   r	    r   scipy._lib._utilr   scipy.optimizer   r8   r  r  rJ   r[   rh   r   tests_Ritemsr   tests_against_itself_1sampr   r   r   tests_against_itself_2sampr   r   xfail_on_32bitr   r   r   r  r  r  r  r'  r*  r-  r  r7  r8  r  r"  r)  r6   r6   r6   r7   <module>   s    ?
.

:
%
.





  u     