o
    EbC                     @   s\  d dl Zd dl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 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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 d*gd+d, Zejd-ejd
g dejdd d*gd.d/ Zejd
g dd0d1 Z d2d3 Z!ejd4d5d6gd7d8 Z"ejd9g d:ejdg dd;d< Z#d=d> Z$ejdg dd?d@ Z%dS )A    N)	bootstrap&BootstrapDegenerateDistributionWarning)assert_allcloseassert_equal)stats   )
_bootstrap)rng_integersc                  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} d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ftjd"d# W d    d S 1 sw   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)pairedz'`vectorized` must be `True` or `False`.Zekki)
vectorizedz`axis` must be an integer.g      ?axisz!could not convert string to floatZni)confidence_levelz)`n_resamples` must be a positive integer.i)n_resamplesg     D@z+`batch` must be a positive integer or None.batchz`method` must be inmethodz;`method = 'BCa' is only available for one-sample statisticsc                 S   s    t | |}t ||}|| S Nnpmean)xyr   mean1mean2 r    B/usr/lib/python3/dist-packages/scipy/stats/tests/test_bootstrap.py	statistic>   s   z$test_bootstrap_iv.<locals>.statistic)皙?g?g333333?BCaz"'herring' cannot be used to seed aZherringrandom_state)pytestZraises
ValueErrorr   r   r   tuple)messager"   r    r    r!   test_bootstrap_iv
   sr   $r+   r   )basic
percentiler$   r   )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   
         d   )r   r   r&   r   r   )r   randomseedrandr   r   r   confidence_intervallowhighstandard_error)r   r   r   res1res2r    r    r!   test_bootstrap_batchK   s   r;   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   r1   c                 S   s   | | d j |dS )Nr   r   r   )r   r   r   r    r    r!   my_statisticd   s   z+test_bootstrap_paired.<locals>.my_statisticc                    s   |  }|  } ||}|S r   r    )ir   abresr>   r   r   r    r!   my_paired_statisticg   s   
z2test_bootstrap_paired.<locals>.my_paired_statisticr%   T)r   r&   r<   )
r   r2   r3   r4   Zarangelenr   r   r5   r8   )r   nrD   r?   r9   r:   r    rC   r!   test_bootstrap_paired\   s   
rH   r   TFc              	   C   sR  |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
}	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   r<   c                 S   s$   | j |d|j |d |j |d S Nr   r=   )r   r   zr   r    r    r!   r>      s   $z/test_bootstrap_vectorized.<locals>.my_statistic)r.   r/   r0   r1   )r   r   r&   r   r   )r   r   r   rE   )r'   Zxfailr   r2   r3   r4   r   Zbroadcast_toreshaper   r5   r6   r7   r8   listpopr   shape)r   r   r   r>   rO   Z	n_samplesr   r   rK   r9   rL   r:   Zresult_shaper    r    r!   test_bootstrap_vectorizedv   s@   

rP   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   i  r   )locscalesizer&   gffffff?r   )ZdfrR   rS   )alpha)r   r   r   r&   gMb@?Zrtolga2U0*3?)Zatol)r   normrvstrF   r   r   ZsemintervalZstdr   r   r5   r8   )r   datarU   distZexpected_intervalZexpected_serB   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.   r0         )@r^   g+@            "   2   Q   Y   y         i@B r   )r   r   r&   g{Gzt?rV   )r   Zarrayr   r   r   r5   )r   expectedr   rB   r    r    r!   test_bootstrap_against_R   s
   rk   i  i  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   r1     ?rQ   r   rR   rS   i  rT   rd   r<   r"   r   r   r   r   r   r#   r   r2   r3   r   rW   r   rX   r   r5   sumZ	binomtestpvalue)r   rj   rG   r   r   r\   	stat_truen_replicationsr[   rB   cici_contains_truers   r    r    r!   #test_bootstrap_against_itself_1samp   s2   rx   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   r1   x   rl   rm   r<   c                 S   s$   t j| |d}t j||d}|| S rJ   r   )data1data2r   r   r   r    r    r!   my_stat  s   z4test_bootstrap_against_itself_2samp.<locals>.my_statr   rn   r#   i  ro   rd   rp   rE   rq   )r   rj   Zn1Zn2r   r   r|   Zdist1Zdist2rt   ru   rz   r{   rB   rv   rw   rs   r    r    r!   #test_bootstrap_against_itself_2samp  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 r   r=   .0sampler   r    r!   	<genexpr>7      zEtest_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>rr   r   r[   r    r   r!   r"   5     z2test_bootstrap_vectorized_3samp.<locals>.statisticc                     &   | D ]	}|j dksJ q | ddiS Nr   r   r   ndimr[   r   r"   r    r!   statistic_1d9     z5test_bootstrap_vectorized_3samp.<locals>.statistic_1dr   rQ   Tr1   )r   r   r   r   r&   Fr   r2   r3   r4   r   r   r5   r8   )r   r   r   r   r   rK   r9   r:   r    r   r!   test_bootstrap_vectorized_3samp2  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 rJ   r=   )r   r   r    r    r!   r"   O  s   z2test_bootstrap_vectorized_1samp.<locals>.statisticc                    s   | j dksJ  | ddS )Nr   r   r   r   )r   r   r    r!   r   S  s   z5test_bootstrap_vectorized_1samp.<locals>.statistic_1dr   rQ   Tr1   )r   r   r   r   r   r&   Fr.   )r   r   )r   r   r   r   r9   r:   r    r   r!   test_bootstrap_vectorized_1sampK  s   
r   c              	   C   s   ddg }| dkrHt jdd0 tt t|gt j| d}t|jt j	t j	f W d    n1 s3w   Y  W d    n1 sBw   Y  nt|gt j| d}t|jd t|j
d d S )	N#        @r$   ignore)Zinvalidr   )r   r   r   )r   Zerrstater'   Zwarnsr   r   r   r   r5   nanr8   )r   r[   rB   r    r    r!   test_bootstrap_degenerated  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   rQ      r   r<   .r   r   r   )r   r2   r3   r4   nextr   Z_jackknife_resamplerangedeletearray_equalZconcatenaterM   )rO   r   r   r?   slcrj   Zy2r    r    r!   test_jackknife_resampler  s   r   rng_nameZRandomStateZdefault_rngc                 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%   .r<   )getattrr   r2   r'   skipr3   r4   r   Z_bootstrap_resampler   r	   r   )r   rngZrng1Zrng2r   rO   r   r   r?   r   Zjsrj   r    r    r!   test_bootstrap_resample  s    r   score)r   g      ?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   r<   r   c                 S   s   t tj|| |S r   )r   Zapply_along_axisr   Zpercentileofscore)r@   r   r   r    r    r!   vectorized_pos  s   z0test_percentile_of_score.<locals>.vectorized_posr1   V瞯<)r   r2   r3   r4   r   Z_percentile_of_scorer   )r   r   rO   r   pr   Z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.   r   r   r<   r1   r   r   )	r   r2   r3   r4   r   Z_percentile_along_axisr   r-   r   )rO   r   qr   r?   rB   rj   r    r    r!   test_percentile_along_axis  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   r   r=   r   r   r    r!   r     r   z>test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>r   r   r    r   r!   r"     r   z+test_vectorize_statistic.<locals>.statisticc                     r   r   r   r   r   r    r!   r     r   z.test_vectorize_statistic.<locals>.statistic_1dr   r   rQ   r   r   r   )r   Z_vectorize_statisticr   r2   r3   r4   r   )r   r   Z
statistic2r   r   rK   r9   r:   r    r   r!   test_vectorize_statistic  s   
r   )&Znumpyr   r'   Zscipy.statsr   r   Znumpy.testingr   r   Zscipyr    r   Zscipy._lib._utilr	   r+   ZmarkZparametrizer;   rH   rP   r]   Ztests_Ritemsrk   Ztests_against_itself_1samprx   Ztests_against_itself_2sampr}   r   Zxfail_on_32bitr   r   r   r   r   r   r   r    r    r    r!   <module>   st    A
,


%
.


