a
    /'a@                     @   s>  d dl Zd dlZd dl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d0d1 Zejd2d3d4gd5d6 Z ejd7g d8ejdg dd9d: Z!d;d< Z"ejdg dd=d> Z#dS )?    N)	bootstrap)assert_allcloseassert_equal)stats   )
_bootstrap)rng_integersc                  C   s  d} t jt| d tdtj W d    n1 s40    Y  d} t jt| d tt tj W d    n1 st0    Y  d} t jt| d& tg ddgftj W d    n1 s0    Y  d} t jt| d, tg dg dftjd	d
 W d    n1 s0    Y  d} t jt| d  tdtjdd W d    n1 sP0    Y  d} t jt| d& tg dftjdd W d    n1 s0    Y  d} t jt| d& tg dftjdd W d    n1 s0    Y  d} t jt| d& tg dftjdd W d    n1 s.0    Y  d} t jt| d& tg dftjdd W d    n1 sx0    Y  d} t jt| d& tg dftjdd W d    n1 s0    Y  d} t jt| d& tg dftjdd W d    n1 s0    Y  d} t jt| d& tg dftjdd W d    n1 sV0    Y  d} dd }t jt| d* tg dg df|d d W d    n1 s0    Y  d!} t jt| d& tg dftjd"d# W d    n1 s0    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   ?lib/python3.9/site-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
   sV    *,4<06666666: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    r9   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   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:   )
r   r0   r1   r2   Zarangelenr   r   r3   r6   )r   nrB   r=   r7   r8   r   rA   r   test_bootstrap_paired\   s    
rE   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-   r.   r/   )r   r   r$   r   r   )r
   r
   r
   )r:   )r%   Zxfailr   r0   r1   r2   r   Zbroadcast_toreshaper   r3   r4   r5   r6   listpopr   shape)r   r   r   r<   rL   Z	n_samplesr   r   rH   r7   rI   r8   Zresult_shaper   r   r   test_bootstrap_vectorizedv   s@    

rM   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dfrO   rP   )alpha)r   r   r   r$   gMb@?Zrtolga2U0*3?)Zatol)r   normrvstrC   r   r   ZsemZintervalZstdr   r   r3   r6   )r   datarR   distZexpected_intervalZexpected_ser@   r   r   r   test_bootstrap_against_theory   s    $rY   )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.         )@rZ   g+@            "   2   Q   Y   y         i@B r   )r   r   r$   g{Gzt?rS   )r   Zarrayr   r   r   r3   )r   expectedr   r@   r   r   r   test_bootstrap_against_R   s
    rg   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sJ t
|||j}|dksJ d S )Nr   r/     ?rN   r
   rO   rP   i  rQ   r`   r:   r    r   r   r   r   r   r!   r   r0   r1   r   rT   r   rU   r   r3   sumZ	binomtestpvalue)r   rf   rD   r   r   rX   	stat_truen_replicationsrW   r@   cici_contains_truero   r   r   r   #test_bootstrap_against_itself_1samp   s.    rt   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sJ t
||
|j}|dksJ d S )Nr   r/   x   rh   ri   r:   c                 S   s$   t j| |d}t j||d}|| S rG   r   )data1data2r   r   r   r   r   r   my_stat  s    z4test_bootstrap_against_itself_2samp.<locals>.my_statr
   rj   r!   i  rk   r`   rl   )r:   rm   )r   rf   Zn1Zn2r   r   rx   Zdist1Zdist2rp   rq   rv   rw   r@   rr   rs   ro   r   r   r   #test_bootstrap_against_itself_2samp  s6    
ry   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                    s   t  fdd|D S )Nc                 3   s   | ]}|  V  qd S r   r;   .0sampler   r   r   	<genexpr>7      zEtest_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>rn   r   rW   r   r   r   r    5  s    z2test_bootstrap_vectorized_3samp.<locals>.statisticc                     s&   | D ]}|j dksJ q | ddiS Nr
   r   r   ndimrW   r|   r    r   r   statistic_1d9  s    z5test_bootstrap_vectorized_3samp.<locals>.statistic_1dr   rN   Tr/   )r   r   r   r   r$   Fr   r0   r1   r2   r   r   r3   r6   )r   r   r   r   r   rH   r7   r8   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 rG   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   rN   Tr/   )r   r   r   r   r   r$   Fr,   )r   r   )r   r   r   r   r7   r8   r   r   r   test_bootstrap_vectorized_1sampK  s    
r   c                  C   s   d} t jd t jj|  }tt|}t| d D ]6}|d|d d f }t j||dd}t 	||s6J q6t j
ttj|dddd}t 	||sJ d S )	Nr   r   rN      r   r:   .r   r   r   )r   r0   r1   r2   nextr   Z_jackknife_resamplerangedeletearray_equalZconcatenaterJ   )rL   r   r   r=   slcrf   Zy2r   r   r   test_jackknife_resampled  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 ]H}|d|d d f }	t
|d|d |d }
|d|
f }t|	|snJ qnd S )Nz not available.r   r,   r   r#   .r:   )getattrr   r0   r%   skipr1   r2   r   Z_bootstrap_resampler   r   r   )r   rngZrng1Zrng2r   rL   r   r   r=   r   Zjsrf   r   r   r   test_bootstrap_resamplew  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_posr/   V瞯<)r   r0   r1   r2   r   Z_percentile_of_scorer   )r   r   rL   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 ]0}|| }t j|| || dd}t||d qLd S )N)r,   r   r   r:   r/   r   r   )	r   r0   r1   r2   r   Z_percentile_along_axisr   r+   r   )rL   r   qr   r=   r@   rf   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                    s   t  fdd|D S )Nc                 3   s   | ]}|  V  qd S r   r;   rz   r   r   r   r}     r~   z>test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>r   r   r   r   r   r      s    z+test_vectorize_statistic.<locals>.statisticc                     s&   | D ]}|j dksJ q | ddiS r   r   r   r   r   r   r     s    z.test_vectorize_statistic.<locals>.statistic_1dr   r   rN   r   r
   r   )r   Z_vectorize_statisticr   r0   r1   r2   r   )r   r   Z
statistic2r   r   rH   r7   r8   r   r   r   test_vectorize_statistic  s    
r   )$Znumpyr   r%   Zscipy.statsr   Znumpy.testingr   r   Zscipyr    r   Zscipy._lib._utilr   r)   ZmarkZparametrizer9   rE   rM   rY   Ztests_Ritemsrg   Ztests_against_itself_1samprt   Ztests_against_itself_2sampry   r   Zxfail_on_32bitr   r   r   r   r   r   r   r   r   r   <module>   sn   A
,


%
.

