o
    ?HhA                    @   s  d dl Z d dl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mZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZmZmZmZ d dlm  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j#e j$d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j#e jde)' d(d) Z,d*d+d,Z-e jj#e jde-' d-d. Z.e jdd/d0ge jdd d1gd2d3 Z/e j$d4e jdg de jdd d1gd5d6 Z0e jdg dd7d8 Z1e jdg dd9d: Z2d;d< Z3e jd=d d>gd?d@ Z4e j$dAe jdg ddBdC Z5dDdE Z6e jdFdGdHgdIdJ Z7e jdKg dLe jdg ddMdN Z8dOdP Z9e jdg ddQdR Z:e jj#e jdg ddSdT Z;e jj#e j<dUdVdW Z=dXdY Z>G dZd[ d[Z?G d\d] d]Z@G d^d_ d_ZAd`da ZBe jdbg dcddde ZCG dfdg dgZDdS )h    N)assert_allcloseassert_equalsuppress_warnings)array_api_compatible)rng_integers)array_namespaceis_numpy)xp_assert_closexp_assert_equal)statsspecial)root)	bootstrapmonte_carlo_testpermutation_testpowerc                  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         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   ,SeedSequence expects int or sequence of intsherringrng)pytestraises
ValueErrorr   npmeantuple	TypeError)message r<   a/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/stats/tests/test_resampling.pytest_bootstrap_iv   sx   $r>   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 jd t|ft jd| |dd}t|jj|jj t|jj	|jj	 t|j
|j
 d S )Nr   r.         d   )r+   r-   random_stater"   r'   )r+   r-   r"   r'   )r7   randomseedrandr   r8   r   confidence_intervallowhighstandard_error)r-   r"   xres1res2r<   r<   r=   test_bootstrap_batchP   s   rQ   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   rE   c                 S   s   | | d j |dS )Nr   r!   r8   rN   yr"   r<   r<   r=   my_statistick      z+test_bootstrap_paired.<locals>.my_statisticc                    s   |  }|  } ||}|S Nr<   )ir"   abresrV   rN   rU   r<   r=   my_paired_statisticn   s   
z2test_bootstrap_paired.<locals>.my_paired_statisticr2   T)r   r3   rR   )
r7   rG   rH   rI   arangelenr   r   rJ   rM   )r-   nr^   rY   rO   rP   r<   r]   r=   test_bootstrap_pairedc   s   
rc   r   TFc              	   C   sR  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s=J 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   rR   c                 S   s$   | j |d|j |d |j |d S Nr!   rS   )rN   rU   zr"   r<   r<   r=   rV      s   $z/test_bootstrap_vectorized.<locals>.my_statistic)r.   rC   rD   rE   )r   r-   r3   r"   r'   )rE   )r   r   r   r_   )r7   rG   rH   rI   r   bootstrap_distributionshaperM   broadcast_toreshaper   rJ   rK   rL   listpopr   )r-   r"   r   rV   rg   	n_samplesrN   rU   re   rO   ri   rP   result_shaper<   r<   r=   test_bootstrap_vectorized}   sB   


rn   z#MemoryError with BCa observed in CIc           	      C   s4  t jd}tjjddd|d}d}tjt|d t |t	|d}|j
|d	}| }t|ft jd| |d
}tdi |d|i}t|j|dd t|j|dd |td|d tdi ||dd}t|jj||dd |td|d tdi ||dd}t|jj|d| dd d S )Nl   )ICbX     r     )locscalesizerF   ffffff?r   )dfrq   rr   )
confidence)data	statisticr'   r-   r3   r$   gMb@?rtolga2U0*3?atolr   r'   r/   lessr$   alternativegreaterr<   )r7   rG   default_rngr   normrvstra   r8   semintervalstddictr   r   rJ   rM   updaterL   ppfrK   )	r-   r3   rw   alphadistexpected_intervalexpected_seconfigr\   r<   r<   r=   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.   rD         )@r   g+@            "   2   Q   Y   y         i@B r   )r'   r-   r3   g{Gzt?ry   )r7   arrayr   r8   r   rJ   )r-   expectedrN   r\   r<   r<   r=   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 rd   )r   skew)rN   rU   r"   s1s2r<   r<   r=   rx         z1test_multisample_BCa_against_R.<locals>.statisticl   tgy4r?   rE   )r-   r+   r3   r@   bcag1*g333333ÿg333333?Q?)r7   rG   r   r   r   r8   rJ   abs)rN   rU   rx   r3   	res_basicres_percentres_bca	mid_basicmid_percentmid_bca	mid_wboot
diff_basicdiff_percentdiff_bcar<   r<   r=   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 rd   r7   r8   )re   rU   r"   r<   r<   r=   rx   ,     z:test_BCa_acceleration_against_reference.<locals>.statisticrR   rt   rE   ge{?r   )r7   r   r   r   rf   _resampling_bca_intervalr   )rU   re   rx   rw   r\   r"   r   theta_hat_br+   _a_hatr<   r<   r=   '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   rE     ?ro   r   rq   rr   i  rs   r   rR   rx   r$   r'   r+   r-   r"   皙?r7   rG   rH   r   r   r8   r   r   rJ   sum	binomtestpvalue)r-   r   rb   r'   r$   r   	stat_truen_replicationsrw   r\   cici_contains_truer   r<   r<   r=   #test_bootstrap_against_itself_1samp;  s2   r   i|  iz  )r?   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   rE   x   r   r   rR   c                 S   r   rd   r   )data1data2r"   mean1mean2r<   r<   r=   my_statw  r   z4test_bootstrap_against_itself_2samp.<locals>.my_statr   r   r     r   r   r   r_   r   )r-   r   n1n2r'   r$   r   dist1dist2r   r   r   r   r\   r   r   r   r<   r<   r=   #test_bootstrap_against_itself_2sampg  s:   
r   r?   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 rX   rS   .0sampler!   r<   r=   	<genexpr>      zEtest_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>r   r"   rw   r<   r!   r=   rx        z2test_bootstrap_vectorized_3samp.<locals>.statisticc                     &   | D ]	}|j dksJ q | ddiS Nr   r"   r   ndimrw   r   rx   r<   r=   statistic_1d     z5test_bootstrap_vectorized_3samp.<locals>.statistic_1dr   ro   TrE   )r   r"   r'   r-   r3   Fr7   rG   rH   rI   r   r   rJ   rM   )r-   r"   r   rN   rU   re   rO   rP   r<   r   r=   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 rd   rS   rN   r"   r<   r<   r=   rx     s   z2test_bootstrap_vectorized_1samp.<locals>.statisticc                    s   | j dksJ  | ddS Nr   r   r!   r   rN   r   r<   r=   r     s   z5test_bootstrap_vectorized_1samp.<locals>.statistic_1dr   ro   TrE   )r   r"   r'   r+   r-   r3   Fr.   r   r   )r-   r"   r   rN   rO   rP   r<   r   r=   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#        @rA   ignore)invalidz0The BCa confidence interval cannot be calculatedr   r,   )r   r   r   )r7   errstater4   warnsr   DegenerateDataWarningr   r8   r   rJ   nanrM   )r-   rw   msgr\   r<   r<   r=   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   rE   rs   rF   i[%  r-   r'   r3   F)r-   r'   r3   r   )r7   rG   r   r   r   r   r   r   r   rJ   rM   
isinstancefloat64)r-   r3   r   rw   r\   refr<   r<   r=   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   rE   r  rA   if  r	  )r7   rG   r   r   r   r   minr   rJ   rK   r   maxr   rL   )r3   r   rw   true_minr\   rP   r<   r<   r=   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 rE   r   r   l   mdpi4 rt   r@   )r'   r3   r$   r-   r   rA   )r'   r3   r$   r-   r/   +=ry   )	r7   rG   r   r   r   r8   r   rM   rJ   )r  r3   rN   r   r   n3r\   r  r<   r<   r=   test_re_bootstrap  s*   

r  zSensible to machine precisionc                 C   s6  t jd}tjddd}|jd|df}t|t j|dd}tjdi |d	d
i}|	td|d tjdi |ddd}tjdi |ddd}t
|jj|jjdd t
|jj|jjdd t |jjslJ t |jjsuJ tjtdd tjdi |ddi W d    d S 1 sw   Y  d S )Nl   @Qixt r   r   r   rE   r  rR   )rw   rx   r3   r"   r$   r   r   r}   rt   r~   r   r   r  ry   z`alternative` must be one ofr   r   z	ekki-ekkir<   )r7   rG   r   r   r   r   r   r   r   r   r   rJ   rL   rK   isneginfisposinfr4   r5   r6   )r-   r3   r   rw   r   r   lgr<   r<   r=   test_bootstrap_alternative  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   ro      r   rR   .r!   r   r*   )r7   rG   rH   rI   nextr   _jackknife_resamplerangedeletearray_equalconcatenaterj   )rg   rN   rU   rY   slcr   y2r<   r<   r=   test_jackknife_resample1  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  r2   .rR   )getattrr7   rG   r4   skiprH   rI   r   _bootstrap_resampler   r   r"  )r'  r3   rng1rng2r'   rg   rN   rU   rY   r$  jsr   r<   r<   r=   test_bootstrap_resampleD  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   rR   r!   c                 S   s   t tj|| |S rX   )r7   apply_along_axisr   percentileofscore)rZ   r0  r"   r<   r<   r=   vectorized_posf     z0test_percentile_of_score.<locals>.vectorized_posrE   V瞯<)r7   rG   rH   rI   r   _percentile_of_scorer   )r0  r"   rg   rN   pr6  p2r<   r<   r=   test_percentile_of_score^  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.   r2  r   rR   rE   r!   r8  )	r7   rG   rH   rI   r   _percentile_along_axisr   r@   r   )rg   rN   qrU   rY   r\   r   r<   r<   r=   test_percentile_along_axisn  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   rX   rS   r   r!   r<   r=   r     r   z>test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>r   r   r<   r!   r=   rx     r   z+test_vectorize_statistic.<locals>.statisticc                     r   r   r   r   r   r<   r=   r     r   z.test_vectorize_statistic.<locals>.statistic_1dr   r   ro   r  r   r!   )r   _vectorize_statisticr7   rG   rH   rI   r   )r"   r   
statistic2rN   rU   re   rO   rP   r<   r   r=   test_vectorize_statistic  s   
rB  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   r1  )rE   rE   r  c                 S   s"   t t | |t j| |ddgS )Nr   )ddof)r7   asarrayr8   r   )rw   r"   r<   r<   r=   rx     s   z/test_vector_valued_statistic.<locals>.statisticrR   '     )r-   r"   r'   r+   r   r!   Z   rE   r   rE   )r   rE   rE  )r7   rG   r   r   r   r   r   r   rJ   rK   TrL   allrg   rM   rf   )r-   r3   paramsr   rx   r\   countsr<   r<   r=   test_vector_valued_statistic  s$   rM  zignore::RuntimeWarningc                     s   t jd} dd   fddfdd}g dg d	g d
g dg d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   )r8   var)rN   rU   r"   xmymcovr<   r<   r=   concordance  s   

(z9test_vector_valued_statistic_gh17715.<locals>.concordancec                    s"   | | }| | }t  |||S rX   )r7   
nan_to_num)tptnfpfnr"   actualr   )rR  r<   r=   rx     s   z7test_vector_valued_statistic_gh17715.<locals>.statisticc                    s    g || R  t jdf S )N.)r7   newaxisr"   argsr   r<   r=   statistic_extradim  r   z@test_vector_valued_statistic_gh17715.<locals>.statistic_extradim)r   r   r   r   )r   r   r   r   )r   r  r   r   )r   r  r   r   )r      r   r   T)r3   r   r   r8  r{   )
r7   rG   r   r   rI  r   r   rJ   rK   rL   )r3   r\  rw   r\   r  r<   )rR  rx   r=   $test_vector_valued_statistic_gh17715  s&   
r^  c                  C   sH  t jd} | d}| d}dd }t||f| tj|j|jf|dd d}tjt|d	 t||d d
df f| W d    n1 sJw   Y  tjt|d	 t||d d
ddf f| W d    n1 sqw   Y  tjt|d	 tj|j|jddd d
f f|dd W d    d S 1 sw   Y  d S )NiF|)r.   r   )rC   r   c                 S      t j| ||djS rd   r   	ttest_indrx   rT   r<   r<   r=   rx     r7  z test_gh_20850.<locals>.statisticr   r!   z-Ignoring the dimension specified by `axis`...r   r.   r   )	r7   rG   r   r   r   rI  r4   r  FutureWarning)r3   rN   rU   rx   r;   r<   r<   r=   test_gh_20850  s    

"*"rc  c                
   @   s  e Zd ZdZdefddZdd Zedd Zed	d
 Z	e
jjedd Zee
jdedddd Zee
jdddd Ze
jj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je
jdedddd%d& Ze
jje
jd'd(e
jd)edd*d+ Zd,d- Zd.d/ Zd0d1 Ze
j d e
j!d2d3d4 Z"dS )5TestMonteCarloHypothesisTest皙?Nc                    s    fddS )Nc                     s   j | di| dS )NrF   dtype)rD  )r[  kwdsrg  rsrvs_inxpr<   r=   <lambda>  s    z6TestMonteCarloHypothesisTest.get_rvs.<locals>.<lambda>r<   )selfrk  rj  rg  rl  r<   ri  r=   get_rvs  r7  z$TestMonteCarloHypothesisTest.get_rvsc                    s    fdd}|S )Nc                    s8    j | |d} j| |dd}| j| }||| d  S )Nr!   r   )r"   
correctionr1  )r8   rN  rg   )rN   r"   mvrb   rl  r<   r=   rx      s   
z=TestMonteCarloHypothesisTest.get_statistic.<locals>.statisticr<   )rn  rl  rx   r<   rs  r=   get_statistic  s   z*TestMonteCarloHypothesisTest.get_statisticc              
      s    g d}d% fdd	}d} d df}tjjtjjf}tjt|d t||dd	 d
d W d    n1 s>w   Y  d}tjt|d t|tjj|dd W d    n1 saw   Y  d}tjt|d t|tjj|dd W d    n1 sw   Y  d}tjt	|d t|d | W d    n1 sw   Y  tjt	|d   ddgddgg}t|dd	 d g| W d    n1 sw   Y  d}tjt|d   g dg}t|dd	 dd	 g| W d    n1 sw   Y  d}tjt	|d t|tjjd  W d    n	1 sw   Y  d}tjt|d t|tjj|dd W d    n	1 sBw   Y  d}tjt|d t|tjj|dd W d    n	1 sfw   Y  d}tjt|d t|tjj|dd W d    n	1 sw   Y  d}tjt|d t|tjj|dd W d    n	1 sw   Y  d}tjt|d t|tjj|d d! W d    n	1 sw   Y  d"} fd#d$}z
t|| j
 W d S  ty } zt||sJ W Y d }~d S d }~ww )&N      ?       @      @c                    s    j | |dS rd   rS   r   rs  r<   r=   stat     z@TestMonteCarloHypothesisTest.test_input_validation.<locals>.statz/Array shapes are incompatible for broadcasting.r   ro   )r   ro   r   c                 S   s   dS Nr   r<   rT   r<   r<   r=   rm        zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>rR   r!   r   r    r   r   0`rvs` must be callable or sequence of callables.rv  rw  rx  g      @c                 S      | S rX   r<   r   r<   r<   r=   rm  #  r}  If `rvs` is a sequence...c                 S   r  rX   r<   r   r<   r<   r=   rm  (  r}  z`statistic` must be callable.)`n_resamples` must be a positive integer.r%   r&   r(   r)   r*   `alternative` must be in...r   r   z!Signature inspection of statisticc                    s     tjj| dS )Nr   )rD  r   r   r   r   rs  r<   r=   r   D  rW   z?TestMonteCarloHypothesisTest.test_input_validation.<locals>.rvsrX   )rD  zerosr   r   r   r4   r5   r6   r   r:   r8   str
startswith)rn  rl  rw   ry  r;   tempr   er<   rs  r=   test_input_validation  sz   "z2TestMonteCarloHypothesisTest.test_input_validationc                    s    fdd}d}  g d}t rt|tjj| d S tjt|d t|tjj| W d    n1 s7w   Y  tjt|d t|tjj j	dd W d    d S 1 sZw   Y  d S )Nc                    s
     | S rX   rS   r   rs  r<   r=   non_vectorized_statisticM  s   
zWTestMonteCarloHypothesisTest.test_input_validation_xp.<locals>.non_vectorized_statisticz!`statistic` must be vectorized...ru  r   Fr   )
rD  r   r   r   r   r   r4   r5   r6   r8   )rn  rl  r  r;   r   r<   rs  r=   test_input_validation_xpK  s   "z5TestMonteCarloHypothesisTest.test_input_validation_xpc                    sV  t jd}||jdd}t| fddd_d_|ddd	} jt	j
jt jd
|d|d< tdddi|}tjd tjd  jt	j
jt jd
|d|d< d_tdddi|}tjd tjd  jt	j
jt jd
|d|d< d_tdi |}tjd tjd t|j|j t|j|j d S )N   )p r.   r   c                    sF   | j dkrdn| jd }t|j_ jd7  _ | |dS r   )r   rg   r  
batch_sizecounterrt  rN   r"   r  rn  rx   xp_testr<   r=   rx   d  s   z:TestMonteCarloHypothesisTest.test_batch.<locals>.statisticr   r   T)r   rx   r'   r   i rs  r   r+   r     r   r   r   r<   )r7   rG   r   rD  standard_normalr   r  r  ro  r   r   r   r   r   r
   r   )rn  rl  r3   rN   rh  rO   rP   res3r<   r  r=   
test_batch[  s2      z'TestMonteCarloHypothesisTest.test_batchr"   r   c                 C   s   t jd}g d}d||< |dj}dt|v rdnd}tt |}t||}|j||d}	tj	|	d	|d
}
|j|	|d}	t
|	}| |}| jtjj|||d}t|	||dd|d}|j|
j|d}|j|
j|d}t|j| t|j|| jd d S )Nit$ r   r   r   rE   rv  64float32r  )rs   rg          )popmeanr"   rf  )rg  rl  Ti N  )r   r'   r"   r{   )r7   rG   r   rD  rg  r  r)  r  r   ttest_1sampr   rt  ro  r   r   r   rx   r   r	   r|   )rn  r"   rl  r3   rs   dtype_default	dtype_strdtype_nprg  rN   r   r  rx   r   r\   ref_statistic
ref_pvaluer<   r<   r=   test_axis_dtype  s(   



z,TestMonteCarloHypothesisTest.test_axis_dtyper   )	two-sidedr~   r   c           
      C   s   t jd}|jdd}tj|d|d}||}t|}| |}| j	tj
j||d}t||||d}	t|	j||j t|	j||j| jd d S )N)r3  r   r  r  rs  r{   )r7   rG   r   r  r   r  rD  r   rt  ro  r   r   r   r	   rx   r   r|   )
rn  r   rl  r3   rN   r  r  rx   r   r\   r<   r<   r=   test_alternative  s   

z-TestMonteCarloHypothesisTest.test_alternative)r~   r   rZ   g      r1  ro   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 )Nr  r3  rZ   rs   rF   r  c                    s   t j| t jjd djS Nasymp)moder   )r   ks_1sampr   cdfrx   r   r  r<   r=   statistic1d  s
   zGTestMonteCarloHypothesisTest.test_against_ks_1samp.<locals>.statistic1dr   Fr'   r   r   r   r{   r~   r   )r7   rG   r   r   skewnormr   r  r   r  ro  r   r   rx   r   r|   )	rn  r   rZ   r3   rN   r   r  norm_rvsr\   r<   r  r=   test_against_ks_1samp  s   z2TestMonteCarloHypothesisTest.test_against_ks_1samphypotestr~   r   r  r  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 rd   r   r   r  r<   r=   rx     rz  zLTestMonteCarloHypothesisTest.test_against_normality_tests.<locals>.statisticTr   r   r{   )r7   rG   r   r   r  r   ro  r   r   r   rx   r   r|   )
rn  r  r   rZ   r3   rN   r   rx   r  r\   r<   r  r=   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 r  r  c                 S   s   t j| |djS rd   )r   
normaltestrx   r   r<   r<   r=   rx        zGTestMonteCarloHypothesisTest.test_against_normaltest.<locals>.statisticTr   r  r{   )r7   rG   r   r   r  r   r  ro  r   r   r   rx   r   r|   )rn  rZ   r3   rN   r   rx   r  r\   r<   r<   r=   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r3  r  c                 S   s   t | t jjjS rX   )r   cramervonmisesr   r  rx   r   r<   r<   r=   r    r7  zMTestMonteCarloHypothesisTest.test_against_cramervonmises.<locals>.statistic1dr   Fr   r  r{   )r7   rG   r   r   r  r   r  r   r  ro  r   r   rx   r   r|   )rn  rZ   r3   rN   r   r  r  r\   r<   r<   r=   test_against_cramervonmises  s   z8TestMonteCarloHypothesisTest.test_against_cramervonmises	dist_name)r   logisticrY   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rE   r  )	r7   rG   r   r   tukeylambdar   andersonrx   critical_values)rZ   r3   rN   r   r  rY   r<   r=   fun  s   z?TestMonteCarloHypothesisTest.test_against_anderson.<locals>.funr   )x0r  rE   r  c                       t |  jS rX   )r   r  rx   r   )r  r<   r=   r  /  rz  zGTestMonteCarloHypothesisTest.test_against_anderson.<locals>.statistic1dr   Fr   r  r   r{   )r   filterRuntimeWarningr   successrN   r7   rG   r   r   r  r   r  rx   significance_levelro  r)  r   r   r   r|   )rn  r  rY   r  supsolrZ   r3   rN   r   expected_stat
expected_pr  dist_rvsr\   r<   r  r=   test_against_anderson  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 rE   Tr~   r  g-C6?)r7   rG   r   r  r   r8   r   )rn  r3   rN   r\   r<   r<   r=   test_p_never_zero<  s   
z.TestMonteCarloHypothesisTest.test_p_never_zeroc                 C   s   t jd}|jdd|jddf}|j|jf}dd }tj|||dd}tj|d	 |d
 gdd}t|j|j t|j	|j	dd d S )N   F:fmPr{  r      c                 S   r_  rd   r`  rT   r<   r<   r=   rx   J  r7  zFTestMonteCarloHypothesisTest.test_against_ttest_ind.<locals>.statisticrR   r!   r   r   {Gz?ry   )
r7   rG   r   normalr   r   ra  r   rx   r   rn  r3   rw   r   rx   r\   r  r<   r<   r=   test_against_ttest_indE  s   z3TestMonteCarloHypothesisTest.test_against_ttest_indc                 C   s   t jd}|jdd|jdd|jdd|jddf}|j|j|j|jf}dd }tj|||d	d
d}tj|dd	i}t|j|j t|j	|j	dd d S )Nr  rH  r   )r   e   )r   f   )r   g   c                 W   s   t j|d| ijS )Nr"   )r   f_onewayrx   rZ  r<   r<   r=   rx   Y  r7  zETestMonteCarloHypothesisTest.test_against_f_oneway.<locals>.statisticrR   r   r"   r   r"   {Gz?r{   )
r7   rG   r   r  r   r   r  r   rx   r   r  r<   r<   r=   test_against_f_onewayR  s   z2TestMonteCarloHypothesisTest.test_against_f_onewayz2Statistic may not depend on sample order on 32-bitc                    s   t jd d} fdd}|d}tj||t jd|d}t |j|jk}t |j|jd k}||ks7J |j	|d	 |d	  ksDJ d S )
Nl   U5<H rE  c                    s   dt jddj|  d S )Nrv  gZd;O?)r:  r  )r   	bernoullir   r   r2   r<   r=   r   k  s   zITestMonteCarloHypothesisTest.test_finite_precision_statistic.<locals>.rvsrE   r~   )r   r'   g     ?r   )
r7   rG   r   r   r   rN  r   null_distributionrx   r   )rn  r'   r   rN   r\   c0c1r<   r2   r=   test_finite_precision_statisticc  s   z<TestMonteCarloHypothesisTest.test_finite_precision_statistic)#__name__
__module____qualname__r|   r7   ro  rt  r   r  r  r4   markxslowr  parametrizer   r  r  slowlinspacer  r   skewtestkurtosistestr  r`   r  r  r  r  r  r  	fail_slowxfail_on_32bitr  r<   r<   r<   r=   rd    sP    	
B
&!
*	

rd  c                   @   sD   e Zd Zdd Zejjdd Zejjdd Zdd Z	d	d
 Z
dS )	TestPowerc              	   C   s  t jd}tj}|j|jf}d}d}tjt|d t	|||dd W d    n1 s-w   Y  d}tjt
|d t	|d | W d    n1 sLw   Y  tjt
|d t	||jdf| W d    n1 slw   Y  d	}tjt|d t	||jf| W d    n1 sw   Y  tjt|d t	||d
 W d    n1 sw   Y  d}tjt|d t	|||dd W d    n1 sw   Y  tjt|d t	|||t ddd W d    n1 sw   Y  d}tjt
|d t	|||dd W d    n	1 sw   Y  d}tjt|d t	||ddgg df W d    n	1 s6w   Y  tjt|d t	||ddgddgfdg did W d    n	1 s`w   Y  d}tjt
|d t	d || W d    n	1 sw   Y  d}tjt|d t	|||dd W d    n	1 sw   Y  tjt|d t	|||dd W d    n	1 sw   Y  d}tjt|d t	|||dd  W d    n	1 sw   Y  tjt|d t	|||dd  W d    d S 1 sw   Y  d S )!Nl   yB0 1 )r.   rD   r   r   r    r   r~  r   r  )r.   z3`significance` must contain floats between 0 and 1.r   significancerR   r   z`kwargs` must be a dictionaryr   )kwargsz+shape mismatch: objects cannot be broadcastr.   rC   )rD         rD   r  rN   z`test` must be callablez(`n_resamples` must be a positive integerir&   g      %@z"`batch` must be a positive integerr*   )r7   rG   r   r   ra  r  r4   r5   r6   r   r:   r  )rn  r3   testr   n_observationsr;   r<   r<   r=   r  y  st   &$zTestPower.test_input_validationc                    s  t jd} fdd d _d _t ddd}t jd}tdi ||jdd	}t jd t jd t jd}d _tdi ||jd
d	}t jd t jd
 t jd}d _tdi ||jdd	}t jd t jd t|j|j t|j|j d S )Nr  c                    sD   | j dkrdnt| }t| j _  jd7  _tj| d|djS r   )r   ra   r  r  r  r   r  r   r  r  r<   r=   r    s   z"TestPower.test_batch.<locals>.testr   r.   r   )r  r  r'   r   )r   r+   r   r2  r<   )	r7   rG   r   r  r  r   r   r  r   )rn  r3   rh  rO   rP   r  r<   r  r=   r    s*   zTestPower.test_batchc              
      s   t jd}t ddgdfdd	}t g dd d t jf }dg d	i}t g d
}tj||j|||d}g }|D ]+}|D ]&}	|d D ] D ]d fdd	}
tj|
|j|	|d}|	|j qLqHqBq>t 
||jj}t|j|ddd d S )Nl   x7'\r   皙?rR   c                    s.   t  ttd| jd }tj| |||dS )Nr   )r   r"   )r7   expand_dimsr9   r   r   r   r  )rN   r   r"   popmeans_expanded)popmeansr<   r=   r    s   
z*TestPower.test_vectorization.<locals>.test)r.   r   r2  r   rE   r   r  )r  re  皙?r   r  r  c                    s   t j| | dS )Nr  )r   r  r   )alternative_i	popmean_ir<   r=   test2  s   
z+TestPower.test_vectorization.<locals>.test2r  r  r  )rz   r|   r_   )r7   rG   r   r   rD  rY  r   r   r  appendri   rg   r   )rn  r3   r  nxr  r  r\   r  significance_inx_ir   tmpr<   )r  r  r  r=   test_vectorization  s0   
zTestPower.test_vectorizationc                 C   s   t jd}tj}|jdddd}|j|jf}t g d}tj||||d}t 	|d d t j
f |jj}t|j|dd	 d S )
N   &( r.   rE   )r   r.   r   )r  r  r   r  r  r{   )r7   rG   r   r   ra  integersr  rD  r   rh   rY  rg   r   )rn  r3   r  r  r   r  r\   r<   r<   r=   test_ttest_ind_null  s   zTestPower.test_ttest_ind_nullc                 C   sx   t jd}g dg dgg dg dgg}dg di}dgd	gg}d
dg}tjtj|j|||d}t|j|d
d d S )Nr  )gv?g]NbJ?g6;?)gOt]?g7gLڷ?g0Dҗ?)gVL[?g;c?g.H&?)g#*3)?glk?g5i ?r  )r   r1  r   r.   r2  r  r  r  r{   )r7   rG   r   r   r   r  r  r   )rn  r3   r  r  r  r  r\   r<   r<   r=   test_ttest_1samp_power
  s   z TestPower.test_ttest_1samp_powerN)r  r  r  r  r4   r  r  r  r  r	  r
  r<   r<   r<   r=   r  x  s    8
#
'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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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jejddd(d) Zejddd*d+ Zd,d- Zejddd.d/ Zej ejd$d0d1d2 Z g d3g d4d5d6d7d8d9d:d;Z!g d<g d=d>d?d@dAdBdCd;Z"ej ejdDe!e"fdEdF Z#ejjejdGdHdIdJ Z$ejdKdLdMdN Z%e&dOdg fe&ddg dPg dQgfe&dRdg dPg dQddSggfgZ'ejdTe'dUdV Z(ej)ddWdX Z*dYS )ZTestPermutationTestr  c                 C   s   t jd| _d S )Nl   F )r7   rG   r   r3   )rn  r<   r<   r=   setup_method$  r7  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 rX   r`  rT   r<   r<   r=   ry  +  r7  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   r  r%   r&   r(   r)   r*   r  r  r0   r1   r2   )r4   r5   r6   r   r:   )rn  ry  r;   r<   r<   r=   test_permutation_test_iv)  sd   $z,TestPermutationTest.test_permutation_test_ivrF   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 Nr   r!   )r   ra   r  r  r  r7   r8   )rN   rU   r"   r  r   r<   r=   rx   i  s   z1TestPermutationTest.test_batch.<locals>.statisticr   r   T)r'   r  r   r   )r+   rF   r  r   r   r   )r3   rG   r  r  r   r   r   r   )	rn  r  rF   rN   rU   rh  rO   rP   r  r<   r   r=   r  _  sB   zTestPermutationTest.test_batchzpermutation_type, exact_sizer  r   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   rd   r   rT   r<   r<   r=   rx     r   z8TestPermutationTest.test_permutations.<locals>.statisticT)r  r   r   )r'   rF   )r3   rG   r   r   r   r  rs   )	rn  r  
exact_sizerF   rN   rU   rx   rh  r\   r<   r<   r=   test_permutations  s   	z%TestPermutationTest.test_permutationsc                 C   s   d\}}d\}}}t || ||ksJ tjj|d}tjj|d}||f}dd }	ddd||d	}
t||	fd
|i|
}t||	fd
tji|
}|j|jksRJ t	|j
|j
dd d S )N)r~   r   )r]  	   i]  r   c                 S   r   rd   r   rT   r<   r<   r=   rx     r   zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statisticTr  rE   r   r  r+   r   r3   r'   r  r{   )r   binomr   r   r   r   r7   infrx   r   r   rn  r   r3   r  nypermutationsrN   rU   rw   rx   rh  r\   rP   r<   r<   r=   'test_randomized_test_against_exact_both  s    
z;TestPermutationTest.test_randomized_test_against_exact_bothc                 C   s   d\}}d\}}}d| |ksJ t jj|d}t jj|d}||f}dd }	ddd	||d
}
t||	fd|i|
}t||	fdtji|
}|j|jksNJ t|j|jdd d S )N)r   N)r   r   i }  r   r   c                 S   s   t j| | |dS rd   r   rT   r<   r<   r=   rx     r7  zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statisticTr  rE   r  r'   r  r{   )	r   r   r   r   r7   r  rx   r   r   r  r<   r<   r=   *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 )Nr  )r]  r]  i@  r   c                    s   t |  d S Nr   r   pearsonrr   rU   r<   r=   r    r  zTTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic1dTr  rE   r  r'   r  r{   )r3   r   	factorialr   r   r   r   r@  r   r7   r  rx   r   r   )rn  r   r3   r  r  r  rN   rw   r  rx   rh  r\   rP   r<   r!  r=   +test_randomized_test_against_exact_pairings  s"   

z?TestPermutationTest.test_randomized_test_against_exact_pairingsr   r  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   rs   rr   ro   r   )rs   rq   rr   exact)r   r  c                    s   t j| |d djS r  )r   ks_2samprx   rN   rU   r  r<   r=   r     s
   
z>TestPermutationTest.test_against_ks_2samp.<locals>.statistic1dr   r'   r   r3   ry   )r3   r  r   r&  r   r7   r  r   rx   rz   r   )rn  r   rN   rU   r   r  r\   r<   r  r=   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   r$  ro   r   r   r~   r  r  r  c                 S      t | |jS rX   r   ansarirx   r'  r<   r<   r=   r    rz  z<TestPermutationTest.test_against_ansari.<locals>.statistic1dr(  ry   )r3   r  r   r,  r   r7   r  r   rx   rz   r   )	rn  r   rN   rU   alternative_correspondencealternative_scipyr   r  r\   r<   r<   r=   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   ro   r   r   rs   rq   rF   r  r   r  c                 S   r_  rd   )r   mannwhitneyurx   rT   r<   r<   r=   rx   *  r7  z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statisticT)r   r'   r   r"   r3   ry   )r   uniformr   r3   r1  r   r7   r  r   rx   rz   r   )rn  r   rN   rU   r   rx   r\   r<   r<   r=   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   )rs   rr   rF   ro   r   )rs   rq   rr   rF   r%  r,   c                 S      t j| |ddjS N
asymptoticr,   )r   cramervonmises_2samprx   r'  r<   r<   r=   r  ;  
   z9TestPermutationTest.test_against_cvm.<locals>.statistic1dr   r(  ry   )r   r   r   r3   r7  r   r7   r  r   rx   rz   r   )rn  rN   rU   r   r  r\   r<   r<   r=   test_against_cvm4  s   z$TestPermutationTest.test_against_cvmr"   )rR   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 rX   )r   kruskalrx   rw   r<   r<   r=   r  X     zITestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistic1dc                  W   r:  rX   )r   r;  r   r<  r<   r<   r=   pvalue1d[  r=  zFTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.pvalue1d)r   r   r   )r   r   r   r  r!   Fr   r  r   r"   r   r  r3   r'   r   ry   gQ?r{   r   )r7   rG   r   r   r@  rh   r3   r   r  r   rx   rz   r   )rn  r"   r3   rN   rU   re   rw   r  r>  rx   r   x2r%  z2expected_statisticexpected_pvaluerh  r\   rP   r<   r<   r=    test_vectorized_nsamp_ptype_bothF  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   r0  r  c                 S   s   t j| ddjS Nr~   r  r   wilcoxonrx   )re   r<   r<   r=   statistic_1samp_1d  s   zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_1samp_1dc                 S   r4  rE  rF  r'  r<   r<   r=   statistic_2samp_1d  r7  zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_2samp_1dc                    s   t j| | dS )Nr  )r   rG  r'  r  r<   r=   test_1d  r  z:TestPermutationTest.test_against_wilcoxon.<locals>.test_1dr   r!   Fr  )r   r"   r   r  r3   r'   ry   r  )r   r2  r   r3   r   r@  r7   r  r   r   rx   rz   r   )rn  r   rN   rU   rH  rI  rJ  r  r   r  r  rh  rO   rP   r<   r  r=   test_against_wilcoxonv  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   rR   c                 S   s   t j| dk|dS )Nr   r!   r7   r   r   r<   r<   r=   rx     r7  z=TestPermutationTest.test_against_binomtest.<locals>.statisticr1  r  Tr  )r   r  r'   r3   r   ry   r   )
r3   r  r   r   r   r7   r  r   r   rz   )	rn  r   rN   rx   krb   r:  r   r\   r<   r<   r=   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 r5  )r   
kendalltaurx   r   r!  r<   r=   r    r7  z@TestPermutationTest.test_against_kendalltau.<locals>.statistic1dr  )r  r'   r3   ry   )r3   r  r   rO  r   r7   r  r   rx   rz   r   )rn  rN   r   r  r\   r<   r!  r=   test_against_kendalltau  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 r|  rL  r   r!  r<   r=   rx     s   z@TestPermutationTest.test_against_fisher_exact.<locals>.statisticl   	(yM4 r  g333333?g      ?r   r  )r  r'   r   r3   r  )r7   rG   r   astypefloatr   contingencycrosstabr   r  fisher_exactr   r   )rn  r   rx   r3   rN   tabr\   rP   r<   r!  r=   test_against_fisher_exact  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 )NTr6  rankedr-   )r   page_trend_testrx   r<  r<   r<   r=   r    r8  zLTestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.statistic1dc                  W   rX  )NTr%  rY  )r   r[  r   r<  r<   r<   r=   r>    r8  zITestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.pvalue1dr"   Fr   r  r?  r'   rp   ry   r   r{   )r3   rG   r   rankdatar   r@  r7   broadcast_arraysr   r  r   rx   rz   r   )rn  r"   rN   rU   re   rw   r  r>  rx   r   rB  rC  rh  r\   rP   r<   r<   r=   #test_vectorized_nsamp_ptype_samples  s.   	


z7TestPermutationTest.test_vectorized_nsamp_ptype_samplesr   )r    r   g      @r  g?g&_?g      @gd~$I"@glu?)rN   rU   expected_lessexpected_2sidedexpected_Pr_gte_S_meanrB  expected_avgexpected_std)o   k   rE   r   r  j   m   l   )	re  rh  rf  b   i   r  n   rj  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.

        rN   rU   rB  r_  r`  ra  rb  rc  c                 S   r*  rX   r+  r'  r<   r<   r=   r  9  rz  z7TestPermutationTest.test_with_ties.<locals>.statistic1dz$Ties preclude use of exact statisticr~   )r'   r   r  Nry   g|=r{   gư>)r7   testingr   r  UserWarningr   r  r   rx   rz   r   r  r8   r   ra   r   r   )rn  rl  rN   rU   rB  r_  r`  ra  rb  rc  r  r  r\   rP   Sr8   rb   Pr_gte_S_meanr<   r<   r=   test_with_ties  s@   

z"TestPermutationTest.test_with_tieszalternative, expected_pvalue))r~   g?)r   gOO?)r  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                    r  rX   )r   	spearmanrrx   r   r!  r<   r=   r  k  rz  zDTestPermutationTest.test_against_spearmanr_in_R.<locals>.statistic1dr  )r  r'   r   ry   gvIh%<=r{   N)r   r7   r  r   rx   rz   r   )rn  r   rC  rN   rB  r  r\   r<   r!  r=   test_against_spearmanr_in_RQ  s   
z/TestPermutationTest.test_against_spearmanr_in_Rr+   )rR   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   )r4   r5   r6   rj   r   _batch_generator)rn  r+   r<   r<   r=   test_batch_generator_ivt  s   "z+TestPermutationTest.test_batch_generator_ivr   rB   )r   r   ro   r]  r  ziterable, batch, expectedc                 C   s    t t||}||ksJ d S rX   )rj   r   rt  )rn  iterabler+   r   gotr<   r<   r=   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'  r<   r<   r=   rx     r  zFTestPermutationTest.test_finite_precision_statistic.<locals>.statisticFr  )r   r  r   r  gUUUUUU?)r   r   rx   r   r  r7   r   ra   )	rn  rN   rU   rx   r\   rr   null	correct_pr<   r<   r=   r    s    z3TestPermutationTest.test_finite_precision_statisticN)+r  r  r  rz   r  r  r4   r  r  r7   rG   r(  r   r  r   r"  r  r  r  r  r  r#  r)  r/  r3  r9  r  rD  rK  rN  rP  rW  r^  
tie_case_1
tie_case_2rq  rs  ru  r   batch_generator_casesrx  r  r  r<   r<   r<   r=   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   rf  r   r   rR   c                 S   s   g | ]}t |qS r<   )	frozensetr   rY   r<   r<   r=   
<listcomp>  s    z4test_all_partitions_concatenated.<locals>.<listcomp>c              	      s4   g | ]}t t |d  t |d d  qS r|  )r   r  r   r  rb   r<   r=   r    s    ,)r7   r   intcumsumsetr   _all_partitions_concatenatedsplitaddr9   prodr   ra   r   )ncall_partitionsr  partition_concatenatedpartitioningr   r<   r  r=    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   r   r   r   r2   r<   r=   r     r  z&test_parameter_vectorized.<locals>.rvsr@   )rw   r3   r-   r  )rw   r3   r  )r   r   r  r'   rE   c                    s(   | j dkst|  sJ tj| |dS r  )r   r7   r"  r8   r   )r   r<   r=   rx     s   z,test_parameter_vectorized.<locals>.statistic)rx   r   Tc                 S   s   | j dksJ t| S r|  )r   r7   r8   r   r<   r<   r=   rx     s   
Fr<   )r7   rG   r   r)  r   r   )r  r   fun_optionscommon_optionsr  optionsrx   r<   )r3   r   r=   test_parameter_vectorized  s*   

r  c                   @   s   e Zd Zdd ZdS )TestMonteCarloMethodc                 C   sT   d}t jd}tjt|d tj|j|d W d    d S 1 s#w   Y  d S )Nz.Use of `rvs` and `rng` are mutually exclusive.ir   )r   r3   )r7   rG   r   r4   r5   r6   r   MonteCarloMethod)rn  r;   r3   r<   r<   r=   test_rvs_and_random_state  s
   "z.TestMonteCarloMethod.test_rvs_and_random_stateN)r  r  r  r  r<   r<   r<   r=   r    s    r  )Er4   numpyr7   numpy.testingr   r   r   scipy.conftestr   scipy._lib._utilr   scipy._lib._array_apir   r   scipy._lib._array_api_no_0dr	   r
   scipyr   r   scipy.optimizer   scipy.statsr   r   r   r   scipy.stats._resamplingr   r>   r  r  rQ   rc   rn   r  r  r   tests_Ritemsr   tests_against_itself_1sampr   r   r   tests_against_itself_2sampr   r   r   r  r  r  r  r  r&  r/  r<  r?  rB  rM  filterwarningsr^  rc  rd  r  r  r  r  r  r<   r<   r<   r=   <module>   s    ?
+

:%.







$    )     
!