o
    5ήc                     @   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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d0d1 Z$ejdg dd2d3 Z%ejdg dd4d5 Z&d6d7 Z'ejd8d9d:gd;d< Z(ejd=g d>ejdg dd?d@ Z)dAdB Z*ejdg ddCdD Z+ej, ejdg ddEdF Z-G dGdH dHZ.G dIdJ dJZ/dKdL Z0dS )M    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} 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)paired'`vectorized` must be `True` or `False`.ekki
vectorized`axis` must be an integer.      ?axisz!could not convert string to floatni)confidence_level)`n_resamples` must be a positive integer.n_resamples     D@+`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 r2   H/tmp/pip-target-vg8gfxp4/lib/python/scipy/stats/tests/test_resampling.py	statistic@   s   z$test_bootstrap_iv.<locals>.statistic)皙?皙?g333333?BCa"'herring' cannot be used to seed aherringrandom_state)pytestraises
ValueErrorr   r,   r-   tuple)messager4   r2   r2   r3   test_bootstrap_iv   sr   $rA   r)   )basic
percentiler7   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res2r2   r2   r3   test_bootstrap_batchM   s   rR   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   rH   c                 S   s   | | d j |dS )Nr
   r   r-   r.   r/   r   r2   r2   r3   my_statisticf   s   z+test_bootstrap_paired.<locals>.my_statisticc                    s   |  }|  } ||}|S r*   r2   )ir   abresrV   r.   r/   r2   r3   my_paired_statistici   s   
z2test_bootstrap_paired.<locals>.my_paired_statisticr:   T)r   r;   rS   )
r,   rI   rJ   rK   arangelenr   r   rL   rO   )r)   nr\   rW   rP   rQ   r2   r[   r3   test_bootstrap_paired^   s   
ra   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 )Nr7   z*BCa currently for 1-sample statistics only)reasonr   rS   c                 S   s$   | j |d|j |d |j |d S Nr   rT   )r.   r/   zr   r2   r2   r3   rV      s   $z/test_bootstrap_vectorized.<locals>.my_statistic)rE   rF   rG   rH   )r   r)   r;   r   r#   )r   r   r   r]   )r<   xfailr,   rI   rJ   rK   r   broadcast_toreshaper   rL   rM   rN   rO   listpopr   shape)r)   r   r   rV   rj   	n_samplesr.   r/   rd   rP   rg   rQ   result_shaper2   r2   r3   test_bootstrap_vectorizedx   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
     r   )locscalesizer;   gffffff?r   )dfrp   rq   )
confidence)r#   r   r)   r;   gMb@?rtolga2U0*3?atol)r   normrvstr_   r,   r-   semintervalstdr   r   rL   rO   )r)   dataalphadistexpected_intervalexpected_serZ   r2   r2   r3   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)rE   rG         )@r   g+@            "   2   Q   Y   y         i@B r   )r#   r)   r;   g{Gzt?ru   )r,   arrayr   r-   r   rL   )r)   expectedr.   rZ   r2   r2   r3   test_bootstrap_against_R   s
   r   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   rH     ?rn   r   rp   rq   i  rr   r   rS   r4   r   r#   r'   r)   r   r5   r,   rI   rJ   r   ry   r-   rz   r   rL   sum	binomtestpvalue)r)   r   r`   r#   r   r   	stat_truen_replicationsr   rZ   cici_contains_truer   r2   r2   r3   #test_bootstrap_against_itself_1samp   s2   r   i|  iz  )rB   rC   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   rH   x   r   r   rS   c                 S   s$   t j| |d}t j||d}|| S rc   r+   )data1data2r   r0   r1   r2   r2   r3   my_stat  s   z4test_bootstrap_against_itself_2samp.<locals>.my_statr   r   r5     r   r   r   r]   r   )r)   r   n1n2r#   r   r   dist1dist2r   r   r   r   rZ   r   r   r   r2   r2   r3   #test_bootstrap_against_itself_2samp  s:   
r   rB   rC   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*   rT   .0sampler   r2   r3   	<genexpr>9      zEtest_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>r   r   r   r2   r   r3   r4   7     z2test_bootstrap_vectorized_3samp.<locals>.statisticc                     &   | D ]	}|j dksJ q | ddiS Nr   r   r   ndimr   r   r4   r2   r3   statistic_1d;     z5test_bootstrap_vectorized_3samp.<locals>.statistic_1dr   rn   TrH   )r   r   r#   r)   r;   Fr,   rI   rJ   rK   r   r   rL   rO   )r)   r   r   r.   r/   rd   rP   rQ   r2   r   r3   test_bootstrap_vectorized_3samp4  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 rc   rT   r.   r   r2   r2   r3   r4   Q  s   z2test_bootstrap_vectorized_1samp.<locals>.statisticc                    s   | j dksJ  | ddS )Nr   r   r   r   r.   r   r2   r3   r   U  s   z5test_bootstrap_vectorized_1samp.<locals>.statistic_1dr   rn   TrH   )r   r   r#   r'   r)   r;   FrE   r   r   )r)   r   r   r.   rP   rQ   r2   r   r3   test_bootstrap_vectorized_1sampM  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#        @r7   ignore)invalidz(The bootstrap distribution is degenerater   r(   )r   r   r   )r,   errstater<   warnsr   DegenerateDataWarningr   r-   r   rL   nanrO   )r)   r   msgrZ   r2   r2   r3   test_bootstrap_degeneratef  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   rH   rr   r;   i[%  )r)   r#   r;   F)r)   r#   r;   r   )r,   rI   default_rngr   ry   rz   r   skewr   rL   rO   
isinstancefloat64)r)   rngr   r   rZ   refr2   r2   r3   test_bootstrap_gh15678u  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   rn      r   rS   .r   r
   r&   )r,   rI   rJ   rK   nextr   _jackknife_resamplerangedeletearray_equalconcatenaterh   )rj   r.   r/   rW   slcr   y2r2   r2   r3   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   rE   r   r:   .rS   )getattrr,   rI   r<   skiprJ   rK   r   _bootstrap_resampler   r   r   )r   r   rng1rng2r#   rj   r.   r/   rW   r   jsr   r2   r2   r3   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)rE         r   rS   r   c                 S   s   t tj|| |S r*   )r,   apply_along_axisr   percentileofscore)rX   r   r   r2   r2   r3   vectorized_pos     z0test_percentile_of_score.<locals>.vectorized_posrH   V瞯<)r,   rI   rJ   rK   r   _percentile_of_scorer   )r   r   rj   r.   pr   p2r2   r2   r3   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)rE   r   r   rS   rH   r   r   )	r,   rI   rJ   rK   r   _percentile_along_axisr   rC   r   )rj   r.   qr/   rW   rZ   r   r2   r2   r3   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*   rT   r   r   r2   r3   r     r   z>test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>r   r   r2   r   r3   r4     r   z+test_vectorize_statistic.<locals>.statisticc                     r   r   r   r   r   r2   r3   r     r   z.test_vectorize_statistic.<locals>.statistic_1dr   r   rn   r   r   r   )r   _vectorize_statisticr,   rI   rJ   rK   r   )r   r   
statistic2r.   r/   rd   rP   rQ   r2   r   r3   test_vectorize_statistic  s   
r   c                 C   s   t jd}d}tjj|d|d}dd }t|f|| ddd	}t j|jj	j
|k |jjj
|k@ d
d}t |dks<J t |dksEJ |jj	jdksNJ |jjjdksWJ |jjdks_J d S )Nl   s: )r   r   )rH   rH   r   c                 S   s   t j| S r*   )r   ry   fitr   r2   r2   r3   r4        z/test_vector_valued_statistic.<locals>.statisticrS   F)r)   r   r   r   r   Z   rH   )r
   rH   )r,   rI   r   r   ry   rz   r   r   rL   rM   TrN   allrj   rO   )r)   r   paramsr   r4   rZ   countsr2   r2   r3   test_vector_valued_statistic  s"   r  c                
   @   s$  e Zd ZdZdd Zdd Zdd Zej	de
d	d
dd Zej	ddej	deddddd Zej	dejejfej	ddej	deddddd Zej	dedd
dd Zej	deddddd Zej	dd ej	d!e
dd"d# Zd$d% Zd&S )'TestMonteCarloHypothesisTestg?c                    s    fddS )Nc                     s   | d i|S )Nr;   r2   )argskwdsrsrvs_inr2   r3   <lambda>  s    z2TestMonteCarloHypothesisTest.rvs.<locals>.<lambda>r2   )selfr  r  r2   r
  r3   rz        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 r*   )r   skewnormr4   r   r2   r2   r3   stat  r   z@TestMonteCarloHypothesisTest.test_input_validation.<locals>.statr   r   r   r   r   r   r   z`rvs` must be callable.z`statistic` must be callable.r    r!   r"   r$   r%   r&   `alternative` must be in...r   alternative)r<   r=   r>   r   r   ry   rz   	TypeErrorr  r  r@   r2   r2   r3   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 rE   c                    sB   | j dkrdnt| }t| j _  jd7  _tj| |djS Nr   r   )r   r_   max
batch_sizecounterr   skewtestr4   )r.   r   r  r   r2   r3   r4   J  s   z:TestMonteCarloHypothesisTest.test_batch.<locals>.statisticr   r   T)r   r4   r#   r   i"rz   r'   r     r   r   r
   r2   )r,   rI   r   r  r  rz   r   ry   r   r   r   )r  r   r.   r	  rP   rQ   res3r2   r   r3   
test_batchD  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   rH   r   r   c                 S      t j| |djS rc   )r   r  r4   r   r2   r2   r3   r4   u     z9TestMonteCarloHypothesisTest.test_axis.<locals>.statisticTi N  )r   r#   r   rw   )r,   rI   r   rz   r   ry   r  r   r   r4   r   rx   )	r  r   r   norm_rvsrr   r.   r   r4   rZ   r2   r2   r3   	test_axisi  s   

z&TestMonteCarloHypothesisTest.test_axisr  lessgreaterrX   g      r   rn   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   rX   rr   r;   r  c                    s   t j| t jjd djS Nasymp)moder  )r   ks_1sampry   cdfr4   r   r  r2   r3   statistic1d  s
   zGTestMonteCarloHypothesisTest.test_against_ks_1samp.<locals>.statistic1dr   Fr#   r   r  r(  rw   r'  r   )r,   rI   r   r   r  rz   r-  ry   r.  r   r   r4   r   rx   )	r  r  rX   r   r.   r   r/  r$  rZ   r2   r  r3   test_against_ks_1samp~  s   z2TestMonteCarloHypothesisTest.test_against_ks_1samphypotestr'  r(  	two-sidedr   r
   c           
         s~   t jd}tjj|d|d} ||d} fdd}| tjj|}t|||d|d}	t|	j	|j	 t|	j
|j
| jd	 d S )
Ni	   r)  r  c                    s    | |dj S rc   r   r   r2  r2   r3   r4     r  zLTestMonteCarloHypothesisTest.test_against_normality_tests.<locals>.statisticTr   r  rw   )r,   rI   r   r   r  rz   ry   r   r   r4   r   rx   )
r  r2  r  rX   r   r.   r   r4   r$  rZ   r2   r6  r3   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 r5  r)  c                 S   r"  rc   )r   
normaltestr4   r   r2   r2   r3   r4     r#  zGTestMonteCarloHypothesisTest.test_against_normaltest.<locals>.statisticTr(  r7  rw   )r,   rI   r   r   r  rz   r9  ry   r   r   r4   r   rx   )r  rX   r   r.   r   r4   r$  rZ   r2   r2   r3   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   r)  c                 S   s   t | t jjjS r*   )r   cramervonmisesry   r.  r4   r   r2   r2   r3   r/    r   zMTestMonteCarloHypothesisTest.test_against_cramervonmises.<locals>.statistic1dr   Fr(  r0  rw   )r,   rI   r   r   r  rz   r;  ry   r.  r   r   r4   r   rx   )r  rX   r   r.   r   r/  r$  rZ   r2   r2   r3   test_against_cramervonmises  s   z8TestMonteCarloHypothesisTest.test_against_cramervonmises	dist_name)ry   logisticrW   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rH   r   )	r,   rI   r   r   tukeylambdarz   andersonr4   critical_values)rX   r   r.   r   r=  rW   r2   r3   fun  s   z?TestMonteCarloHypothesisTest.test_against_anderson.<locals>.funr   )x0r?  rH   r   c                       t |  jS r*   )r   rA  r4   r   )r=  r2   r3   r/    r  zGTestMonteCarloHypothesisTest.test_against_anderson.<locals>.statistic1dr   Fr(  r0  r
   rw   )r   filterRuntimeWarningr   successr.   r,   rI   r   r   r@  rz   rA  r4   significance_levelr   r   r   r   rx   )r  r=  rW   rD  supsolrX   r   r.   r   expected_stat
expected_pr/  dist_rvsrZ   r2   rC  r3   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 rH   Tr'  r7  g-C6?)r,   rI   r   zerosr   r-   r   )r  r   r.   rZ   r2   r2   r3   test_p_never_zero  s   
z.TestMonteCarloHypothesisTest.test_p_never_zeroN)__name__
__module____qualname__rx   rz   r  r  r<   markparametrizer   r%  r,   linspacer1  r   r  kurtosistestr8  r^   r:  r<  rP  rR  r2   r2   r2   r3   r    s,    -%


*r  c                
   @   sr  e Zd ZdZdd Zejdg ddd Z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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!d-d. Zd/d0 Zejdd!d1d2 Zej ejdd3d4d5 Zg d6g d7d8d9d:d;d<d=d>Zg d?g d@dAdBdCdDdEdFd>Zej ejdGeefdHdI ZejdJdKdLdM Z ejdNdOdPdQ Z!e"dRd
g fe"dd
g dg dSgfe"dTd
g dg dSddUggfgZ#ejdVe#dWdX Z$dYdZ Z%d[S )\TestPermutationTest+=c                 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 r*   r   	ttest_indr4   rU   r2   r2   r3   r    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   r    r!   r"   r$   r%   r&   r  r  r8   r9   r:   )r<   r=   r>   r   r  r  r2   r2   r3   test_permutation_test_iv  sh   $z,TestPermutationTest.test_permutation_test_ivr^  )pairingssamplesindependentc                    s  t jd t jd}t jd} fdd d _d _d|ddd}tj||f fdd	i|}t jd
 t jd	 d _tj||f fddi|}t jd t jd d _tj||f fddi|}t jd t jd t|j	|j	 t|j	|j	 d S )Nr   rE   c                    sN   | j dkrdnt| }t| j _  jd7  _tj| |dtj||d S r  )r   r_   r  r  r  r,   r-   )r.   r/   r   r  r   r2   r3   r4   J  s   z1TestPermutationTest.test_batch.<locals>.statisticr   T)r#   r^  r   r;   r'   r   r  r   r   r
   )
r,   rI   rJ   rK   r  r  r   r   r   r   )r  r^  r.   r/   r	  rP   rQ   r  r2   r   r3   r  A  s,   zTestPermutationTest.test_batchzpermutation_type, exact_sizer`  r   r
   )ra     rb  r   c                 C   s   t jd t jd}t jd}dd }|ddd}tj||f|fddi|}t|jjd tj||f|fi |}t|jj| d S )Nr   r   c                 S      t j| |dt j||d S rc   r+   rU   r2   r2   r3   r4   p     z8TestPermutationTest.test_permutations.<locals>.statisticT)r^  r   r;   r#   )	r,   rI   rJ   rK   r   r   r   null_distributionrr   )r  r^  
exact_sizer.   r/   r4   r	  rZ   r2   r2   r3   test_permutationse  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   )rc  	   i]  r   c                 S   rd  rc   r+   rU   r2   r2   r3   r4     re  zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statisticTrb  rH   r   r^  r'   r  r;   r#   {Gz?rw   )r	   binomr   ry   rz   r   r,   infr4   r   r   r  r  r   nxnypermutationsr.   r/   r   r4   r	  rZ   rQ   r2   r2   r3   '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 rc   r+   rU   r2   r2   r3   r4     r   zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statisticTra  rH   rj  r#   rk  rw   )	r   ry   rz   r   r,   rm  r4   r   r   rn  r2   r2   r3   *test_randomized_test_against_exact_samples  s    
z>TestPermutationTest.test_randomized_test_against_exact_samplesc                    s   d}zt jd}W n ty   t jd}Y nw 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skJ t|j|jdd d S )Nr4  r   )rc  rc  i@  r   c                    s   t |  d S Nr   r   pearsonrr   r/   r2   r3   r/    r#  zTTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic1dTra  rH   rj  r#   rk  rw   )r,   rI   r   AttributeErrorr   r	   	factorialr   ry   rz   r   r   r   rm  r4   r   r   )r  r  r   ro  rp  rq  r.   r   r/  r4   r	  rZ   rQ   r2   rw  r3   +test_randomized_test_against_exact_pairings  s,   

z?TestPermutationTest.test_randomized_test_against_exact_pairingsr  r&  rq  )r   g    eAr   rD   c           	   	   C   s   t dddd}t t dd d d d f d|}tj||||d|d}dd }t||f|d	|||dd
}t|j|j| j	d t|j
|j
| j	d d S )N<   r   r   rn   r   )rq  r   r;   r  c                 S      t j| ||djS rc   r\  rU   r2   r2   r3   r4     r   zETestPermutationTest.test_against_permutation_ttest.<locals>.statisticT)r   r#   r  r   r;   ru   )r,   r^   rg   moveaxisr   r]  r   r   r4   rv   r   )	r  r  rq  r   r.   r/   rP   r4   rQ   r2   r2   r3   test_against_permutation_ttest  s   
"z2TestPermutationTest.test_against_permutation_ttestc                    s   t jd tjjddd}tjjdddd}d tj|| d	d
} fdd}t||f|t j d}t	|j
|j
| jd t	|j|j| jd d S )Nr   r   r   rr   rq   rn   r   rr   rp   rq   r(  exact)r  r,  c                    s   t j| |d djS r*  )r   ks_2sampr4   r.   r/   r  r2   r3   r/    s
   
z<TestPermutationTest.test_against_kstest.<locals>.statistic1dr#   r  ru   )r,   rI   rJ   r   ry   rz   r  r   rm  r   r4   rv   r   r  r.   r/   r   r/  rZ   r2   r  r3   test_against_kstest  s   z'TestPermutationTest.test_against_kstestr3  c           	      C   s   t jd tjjddd}tjjddd}ddd	d
}|| }tj|||d}dd }t||f|t j|d}t	|j
|j
| jd t	|j|j| jd d S )Nr   r   r   r  rn   r   r(  r'  r4  r3  r  c                 S      t | |jS r*   r   ansarir4   r  r2   r2   r3   r/    r  z<TestPermutationTest.test_against_ansari.<locals>.statistic1dr  ru   )r,   rI   rJ   r   ry   rz   r  r   rm  r   r4   rv   r   )	r  r  r.   r/   alternative_correspondencealternative_scipyr   r/  rZ   r2   r2   r3   test_against_ansari  s   z'TestPermutationTest.test_against_ansaric                 C   s   t jd tjjddd}tjjddd}tj||d|d}dd }t||f|d	t j|dd
}t	|j
|j
| jd t	|j|j| jd d S )Nr   )r   rn   r
   rr   rp   皙?r   )r   r  c                 S   r|  rc   )r   mannwhitneyur4   rU   r2   r2   r3   r4   "  r   z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statisticT)r   r#   r  r   ru   )r,   rI   rJ   r   uniformrz   r  r   rm  r   r4   rv   r   )r  r  r.   r/   r   r4   rZ   r2   r2   r3   test_against_mannwhitneyu  s   z-TestPermutationTest.test_against_mannwhitneyuc                 C   s   t jd tjjddd}tjjdddd}tj||dd	}d
d }t||f|t jdd}t	|j
|j
| jd t	|j|j| jd d S )Nr   r   r   r  rn   r   r  r  r(   c                 S      t j| |ddjS N
asymptoticr(   )r   cramervonmises_2sampr4   r  r2   r2   r3   r/  3  
   z9TestPermutationTest.test_against_cvm.<locals>.statistic1dr(  r  ru   )r,   rI   rJ   r   ry   rz   r  r   rm  r   r4   rv   r   r  r2   r2   r3   test_against_cvm,  s   z$TestPermutationTest.test_against_cvm)rS   r
   c                 C   s4  t jd t jd}t jddd}t jddd}|||f}dd }dd	 }t|}t|}	t |d
}
t |d}t |d}||
|||d}|	|
|||d}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|dd t	|j|jdd d S )Nr   r   r   r
   r   c                  W      t j|  jS r*   )r   kruskalr4   r   r2   r2   r3   r/  P  r   zITestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistic1dc                  W   r  r*   )r   r  r   r   r2   r2   r3   pvalue1dS  r   zFTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.pvalue1d)r
   r   r   )r
   r   r
   r!  r   Fr(  rb  r   r   r  r^  r;   r#   r   ru   gQ?rw   Q?)r,   rI   rJ   rK   r   r   rf   r   rm  r   r4   rv   r   )r  r   r.   r/   rd   r   r/  r  r4   r   x2r   z2expected_statisticexpected_pvaluer	  rZ   rQ   r2   r2   r3    test_vectorized_nsamp_ptype_both>  s.   	


z4TestPermutationTest.test_vectorized_nsamp_ptype_bothc              	      s  t jd tjjddd}tjjddd}dd }dd } fd	d
}t|}|||dd}|d }	|d }
t|| f|ddt j	 dd}t||f|ddt j	 dd}t
|j|j| jd  dkrlt
|j|	| jd t
|j|
| jd t
|j|j| jd d S )Nr   )r   r   r
   r  r  c                 S   s   t j| ddjS Nr'  r  r   wilcoxonr4   )rd   r2   r2   r3   statistic_1samp_1dv  s   zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_1samp_1dc                 S   r  r  r  r  r2   r2   r3   statistic_2samp_1dz  r   zETestPermutationTest.test_against_wilcoxon.<locals>.statistic_2samp_1dc                    s   t j| | dS )Nr  )r   r  r  r  r2   r3   test_1d}  r#  z:TestPermutationTest.test_against_wilcoxon.<locals>.test_1dr   r   Fra  )r   r^  r#   r  r   ru   r4  )r,   rI   rJ   r   r  rz   r   r   r   rm  r   r4   rv   r   )r  r  r.   r/   r  r  r  testr   rM  rN  rP   rQ   r2   r  r3   test_against_wilcoxonn  s.   
z)TestPermutationTest.test_against_wilcoxonc           	      C   s   t jd t jjdddd}d||dk< ddd}||dd}}}tj||||d	}tj|f|d
dt j|d}t|j	|j	| j
d d S )Nr   r
   rE   r   rS   c                 S   s   t j| dk|dS )Nr   r   r,   r   r   r2   r2   r3   r4     r   z=TestPermutationTest.test_against_binomtest.<locals>.statisticr   r  Tra  )r   r^  r#   r  ru   r   )r,   rI   rJ   randintr   r   r   rm  r   r   rv   )	r  r  r.   r4   kr`   r   r   rZ   r2   r2   r3   test_against_binomtest  s   
z*TestPermutationTest.test_against_binomtestc                    s   t jd tjjdd}|tjjdd  tj| dd} fdd}t|f|dt jd	}t	|j
|j| jd
 t	|j|j| jd
 d S )Nr   r   r   r  r(   c                    s   t j|  ddjS r  )r   
kendalltaucorrelationr   rw  r2   r3   r/    r   z@TestPermutationTest.test_against_kendalltau.<locals>.statistic1dr`  )r^  r#   ru   )r,   rI   rJ   r   ry   rz   r  r   rm  r   r4   r  rv   r   )r  r.   r   r/  rZ   r2   rw  r3   test_against_kendalltau  s   
z+TestPermutationTest.test_against_kendalltauc                    s    fdd}t jd t jddkt}t j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   rw  r2   r3   r4     s   z@TestPermutationTest.test_against_fisher_exact.<locals>.statisticr      g333333?g      ?r   r`  r^  r#   r  r  )r,   rI   rJ   rK   astypefloatr   contingencycrosstabr   rm  fisher_exactr   r   )r  r  r4   r.   tabrZ   rQ   r2   rw  r3   test_against_fisher_exact  s   
z-TestPermutationTest.test_against_fisher_exact)r   r   c                 C   sP  t jd t jddd}t jddd}t jd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 )Nr   r
   r   r   r   r   c                  W      t j| dddjS )NTr  rankedr)   )r   page_trend_testr4   r   r2   r2   r3   r/    r  zLTestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.statistic1dc                  W   r  )NTr  r  )r   r  r   r   r2   r2   r3   r    r  zITestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.pvalue1dr   Fr(  r`  r  r#   ro   ru   r  rw   )r,   rI   rJ   rK   r   rankdatar   r   broadcast_arraysr   rm  r   r4   rv   r   )r  r   r.   r/   rd   r   r/  r  r4   r   r  r  r	  rZ   rQ   r2   r2   r3   #test_vectorized_nsamp_ptype_samples  s0   	


z7TestPermutationTest.test_vectorized_nsamp_ptype_samplesr   )r   r
   g      @r6   g?g&_?g      @gd~$I"@glu?)r.   r/   expected_lessexpected_2sidedexpected_Pr_gte_S_meanr  expected_avgexpected_std)o   k   rH   c   f   j   m   l   )	r  r  r  b   i   g   n   r  h   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.

        r.   r/   r  r  r  r  r  r  c                 S   r  r*   r  r  r2   r2   r3   r/  2  r  z7TestPermutationTest.test_with_ties.<locals>.statistic1dz$Ties preclude use of exact statisticr'  r  r4  Nru   g|=rw   gư>)r,   testingr   rG  UserWarningr   rm  r   r4   rv   r   rf  r-   r~   r_   r   abs)r  r  r.   r/   r  r  r  r  r  r  r/  rK  rZ   rQ   Sr-   r`   Pr_gte_S_meanr2   r2   r3   test_with_ties  s@   

z"TestPermutationTest.test_with_tieszalternative, expected_pvalue))r'  g?)r(  gOO?)r4  g<OO?c                    sx   t jd tjjdd}|tjjd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")
        r   r   r   g?c                    rF  r*   )r   	spearmanrr  r   rw  r2   r3   r/  _  r  zDTestPermutationTest.test_against_spearmanr_in_R.<locals>.statistic1dr`  r  ru   gvIh%<=rw   N)r,   rI   rJ   r   ry   rz   r   rm  r   r4   rv   r   )r  r  r  r.   r  r/  rZ   r2   rw  r3   test_against_spearmanr_in_RJ  s   
z/TestPermutationTest.test_against_spearmanr_in_Rr'   )rS   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<   r=   r>   rh   r   _batch_generator)r  r'   r2   r2   r3   test_batch_generator_ivh  s   "z+TestPermutationTest.test_batch_generator_ivr   )r   r   rn   rc  r  ziterable, batch, expectedc                 C   s    t t||}||ksJ d S r*   )rh   r   r  )r  iterabler'   r   gotr2   r2   r3   test_batch_generatorq  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   rc  c                 S   s   t | |d S rt  ru  r  r2   r2   r3   r4   ~  r#  zFTestPermutationTest.test_finite_precision_statistic.<locals>.statisticFr`  )r   r^  r
   r[  gUUUUUU?)r   r   r4   r   rf  r,   r   r_   )	r  r.   r/   r4   rZ   rr   null	correct_pr2   r2   r3   test_finite_precision_statisticw  s    z3TestPermutationTest.test_finite_precision_statisticN)&rS  rT  rU  rv   r_  r<   rV  rW  r  r	   ry  rl  rh  rr  slowrs  rz  r~  r  r  r  r  xslowr  r  r  r  r  r  
tie_case_1
tie_case_2r  r  r  r   batch_generator_casesr  r  r2   r2   r2   r3   rZ    s    6
"



.
'

,<


rZ  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   rS   c                 S   s   g | ]}t |qS r2   )	frozensetr   rW   r2   r2   r3   
<listcomp>  s    z4test_all_partitions_concatenated.<locals>.<listcomp>c              	      s4   g | ]}t t |d  t |d d  qS r  )r	   rl  r   r  r`   r2   r3   r    s    ,)r,   r   intcumsumsetr   _all_partitions_concatenatedsplitaddr?   productr   r_   r   )ncall_partitionsr  partition_concatenatedpartitioningr   r2   r  r3    test_all_partitions_concatenated  s   

r  )1numpyr,   r<   scipy.statsr   r   r   numpy.testingr   r   r   scipyr   r	    r   scipy._lib._utilr   scipy.optimizer   rA   rV  rW  rR   ra   rm   r   tests_Ritemsr   tests_against_itself_1sampr   tests_against_itself_2sampr   r   xfail_on_32bitr   r   r   r   r   r   r   r   r  r  r  rZ  r  r2   r2   r2   r3   <module>   s    A
,


%
.




 u     