
    bih                       d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZm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mZm Z m!Z! d dl"mc m#Z#  ee       G d d             Z$ ee       G d d             Z% ee!       G d d             Z& ee        G d d             Z'd Z(ejR                  jU                  dg d      d        Z+ G d d      Z,y)    N)assert_allcloseassert_equal)rng_integers)is_numpymake_xp_test_casexp_default_dtypexp_sizearray_namespace_xp_copy_to_numpy)xp_assert_closexp_assert_equal)array_api_extra)statsspecial)skip_xp_backends)root)	bootstrapmonte_carlo_testpermutation_testpowerc                   	   e Zd Z edd      d        Zd Zej                  j                  dg d      ej                  j                  dg d	      d
               Z	ej                  j                  dg d      d        Z
ej                  j                  dg d      ej                  j                  dg d	      ej                  j                  dddg      d                      Zej                  j                  ej                  j                  d      ej                  j                  dg d      d                      Zg dZej                  j                  de      d        Zd Zd ZddddZej                  j                  ej                  j                  dej)                               d               ZdddZej                  j                  ej                  j                  dej)                               d               Zej                  j                  dg d      ej                  j                  ddd g      ej                  j                  d!d"d#g      d$                      Zej                  j                  d%      ej                  j                  dg d      ej                  j                  ddd g      d&                      Zej                  j                  dg d      d'        Zej                  j                  dg d(      d)        Zd* Zej                  j                  d+dd,g      d-        Zej                  j                  d.      ej                  j                  dg d      d/               Zd0 Zej                  j                  d1d2      ej                  j                  d3d4d5g      d6               Z ej                  j                  d7g d8      ej                  j                  dg d	      d9               Z!ej                  j                  dg d	      d:        Z"ej                  j                  ej                  j                  dg d      d;               Z#ej                  j                  ej                  jI                  d<      d=               Z%ej                  j                  dd>g?      d@        Z&yA)BTestBootstrapnumpyzNumPy does not raisereasonc                     dj                    }t        j                  t        |      5  t	        j                  g d      ffd       d d d        y # 1 sw Y   y xY w)NzWhen using array library match         c                 &    j                  |       S Nmeanxxps    \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/stats/tests/test_resampling.py<lambda>z7TestBootstrap.test_bootstrap_iv_other.<locals>.<lambda>   s    "''!*     )__name__pytestraises	TypeErrorr   asarray)selfr)   messages    ` r*   test_bootstrap_iv_otherz%TestBootstrap.test_bootstrap_iv_other   sQ    -bkk];]]9G4 	Frzz),.0DE	F 	F 	Fs   "AA c                    |j                  g d      }d}t        j                  t        |      5  t	        t               |j                         d d d        d}t        j                  t        |      5  t	        ||j                  dg      f|j                         d d d        d}t        j                  t        |      5  t	        ||j                  g d      f|j                  d	       d d d        d
}t        j                  t        |      5  t	        ||j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d}t        j                  t        |      5  t	        |f|j                  d       d d d        d }t        j                  t        |      5  t	        |f|j                  d!"       d d d        y # 1 sw Y   ^xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   DxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)#Nr   z(`data` must contain at least one sample.r   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)r1   r.   r/   
ValueErrorr   tupler&   r0   )r2   r)   sampler3   s       r*   test_bootstrap_ivzTestBootstrap.test_bootstrap_iv   s   I&<]]:W5 	(egrww'	( S]]:W5 	:vrzz1#/9	: S]]:W5 	Pvrzz,78"''$O	P E]]:W5 	:fbgg&9	: /]]:W5 	4vis3	4 6]]:W5 	Avi4@	A B]]:W5 	=vie<	= B]]:W5 	>vif=	> @]]:W5 	7vi6	7 @]]:W5 	8vi7	8 (]]:W5 	9vi8	9 T]]:W5 	?vi2>	? J]]:W5 	9via8	9 A]]9G4 	9vii8	9 	9i	( 	(	: 	:	P 	P	: 	:	4 	4	A 	A	= 	=	> 	>	7 	7	8 	8	9 	9	? 	?	9 	9	9 	9s   N,5)N9,OOO O-O:PPP!P.P;
Q	Q,N69OOO O*-O7:PPP!P+.P8;QQQrK   )basic
percentileBCar@   r   r    r!   c           	      f   t         j                  j                  d      }|j                  ddd      }t	        |j                  |      f|j                  d |d|d      }t         j                  j                  d      }t	        |j                  |      f|j                  d||d|      }t        |j                  j                  |j                  j                         t        |j                  j                  |j                  j                         t        |j                  |j                         y )Nr   rL         d   )rI   rK   random_stater@   rE   )rI   rK   r@   rE   r^   )nprandomRandomStaterandr   r1   r&   r   confidence_intervallowhighstandard_error)r2   rK   r@   r)   rQ   r(   res1res2s           r*   test_bootstrap_batchz"TestBootstrap.test_bootstrap_batchX   s     ii##A&HHRR "**Q-)277$v&'dEii##A&"**Q-)277"V"#G 	0044d6N6N6R6RS0055t7O7O7T7TU++T-@-@Ar,   c                 v  	
 t         j                  j                  d      }d}j                  |j	                  |            
j                  |j	                  |            dfd		d	
fd	}j                  
j                  d         }t        |f|d      }t        
f	dd      }t        |j                  j                  |j                  j                         t        |j                  j                  |j                  j                         t        |j                  |j                         y )	Nr   r]   c                 6    j                  | |z
  dz  |      S )Nr!   r?   r%   r(   yr@   r)   s      r*   my_statisticz9TestBootstrap.test_bootstrap_paired.<locals>.my_statisticr   s    77AaC!8$7//r,   c                 .    |    }|    } ||      }|S r$    )ir@   abresrn   r(   rm   s        r*   my_paired_statisticz@TestBootstrap.test_bootstrap_paired.<locals>.my_paired_statisticu   s&    !A!Aq!$CJr,   rP   T)r8   rQ   )r_   r`   ra   r1   rb   arangeshaper   r   rc   rd   re   rf   )r2   rK   r)   rQ   nru   rq   rg   rh   rn   r(   rm   s     `      @@@r*   test_bootstrap_pairedz#TestBootstrap.test_bootstrap_pairedj   s     ii##A&JJsxx{#JJsxx{#	0	 IIaggaj!!2:!QdB0044d6N6N6R6RS0055t7O7O7T7TU++T-@-@Ar,   r8   TFc           	         t         j                  j                  d      }dfd	}d}||   }|j                  |      }	|j                  |      }
|j                  |      }j	                  |	      j	                  |
      j	                  |      }}
}	t        |	|
|f|||ddd      }|j                  j                  |j                  j                  dz   k(  sJ g d}|||<   t        |      }j                  j                  |	|      |      }	j                  j                  |
|      |      }
j                  j                  ||      |      }t        |	|
|f|||d|d      }t        |      }|j                  |       j                  |j                  j                  |      }j                  |j                  j                   |      }j                  |j                  |      }t#        |j                  j                  |       t#        |j                  j                   |       t#        |j                  |       y )	Nr   c                 z    j                  | |      j                  ||      z   j                  ||      z   S Nr?   r%   )r(   rm   zr@   r)   s       r*   rn   z=TestBootstrap.test_bootstrap_vectorized.<locals>.my_statistic   s;    77147(277147+@@2771SW7CXXXr,   )rL   r[   r\   r]   )r8   rK   rQ   r@   rE   )r]   )r    r    r    rv   )r_   r`   ra   rb   r1   r   bootstrap_distributionry   rf   rS   broadcast_toreshapelistpoprc   rd   re   r   )r2   rK   r@   r8   r)   rQ   rn   ry   	n_samplesr(   rm   r   rg   r   rh   result_shape
ref_ci_lowref_ci_highref_ci_standard_errors       `              r*   test_bootstrap_vectorizedz'TestBootstrap.test_bootstrap_vectorized   s    ii##A&	Y $K	HHYHHYHHY**Q-A

1a1!QLQC9++11&&,,v56 	7 6 !.OOBJJq'2E:OOBJJq'2E:OOBJJq'2E:!QLTs< E{__T%=%=%A%A<P
ood&>&>&C&C\R "0C0C\ R0044jA0055{C++-BCr,   z#MemoryError with BCa observed in CIc           	         t         j                  j                  d      }t        j                  j                  ddd|      }d}t        j                  t        |      dz
  t        j                  |      t        j                  |            }|j                  |	      \  }}|j                         }	t        |j                  |      f|j                  d||
      }
t        di |
d|i}t        |j                   j"                  |j                  |      d       t        |j                   j$                  |j                  |      d       t        |j&                  |j                  |	      d       |
j)                  t        d|             t        di |
|dd}t        |j                   j$                  |j                  |j+                  |            d       |
j)                  t        d|             t        di |
|dd}t        |j                   j"                  |j                  |j+                  d|z
              d       y )Nl   )ICbX     r!     )locscalesizer^   ffffff?r    )dfr   r   )
confidence)data	statisticrE   rK   rQ   rB   gMb@?rtolga2U0*3?atolr   rE   rM   lessrB   alternativegreaterrp   )r_   r`   default_rngr   normrvstlenr&   semintervalstddictr1   r   r   rc   rd   re   rf   updateppf)r2   rK   r)   rQ   r   alphadistref_lowref_highref_seconfigrt   s               r*   test_bootstrap_against_theoryz+TestBootstrap.test_bootstrap_against_theory   s   
 ii##$78zz~~!14c~Jww#d)A+2774=		$P MMUM;BJJt,."''t#.9&959//33RZZ5HtT//44bjj6JQUV**BJJv,>TJdq3?@M&M5fM//44

488E?3$	@ 	dq3?@P&P5iP//33

488AeG#45D	Br,   ))rV   gQ7@gHzS@)rW   g\(<@g=
ףpU@)rX   gHz'@@gQV@zmethod, ref_low, ref_highc                 $   |j                  g d      }t        |f|j                  d|d      }t        |j                  j
                  |j                  |      d       t        |j                  j                  |j                  |      d       y )N)rL   r\         )@r   g+@            "   2   Q   Y   y         i@B r   )rE   rK   rQ   g{Gzt?r   )r1   r   r&   r   rc   rd   re   )r2   rK   r   r   r)   r(   rt   s          r*   test_bootstrap_against_Rz&TestBootstrap.test_bootstrap_against_R   sr    " JJ ; <bgg76qQ//33RZZ5HuU//44bjj6JQVWr,   c                    |j                  g d      }|j                  g d      }d }t        j                  j                  d      }t	        j
                  ||f|dd|      }t	        j
                  ||f|dd|      }t	        j
                  ||f|d	d|      }|j                  |j                  |j                              }	|j                  |j                  |j                              }
|j                  |j                  |j                              }d
}|	|z
  t        |      z  }|
|z
  t        |      z  }||z
  t        |      z  }|dk  sJ |dkD  sJ t        |      dk  sJ y )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                 h    t        j                  | |      }t        j                  ||      }||z
  S r~   )r   skew)r(   rm   r@   s1s2s        r*   r   z?TestBootstrap.test_multisample_BCa_against_R.<locals>.statistic   s+    AD)BAD)B7Nr,   l   tgy4rV   r]   )rK   rI   rQ   rW   bcag1*g333333ÿg333333?Q?)
r1   r_   r`   r   r   r   r&   stackrc   abs)r2   r)   r(   rm   r   rQ   	res_basicres_percentres_bca	mid_basicmid_percentmid_bca	mid_wboot
diff_basicdiff_percentdiff_bcas                   r*   test_multisample_BCa_against_Rz,TestBootstrap.test_multisample_BCa_against_R   sj    JJ = >JJ H I
	 ii##$67OOQFIg*-38	ooq!fi,/S://1a&)E(+6 GGBHHY%B%BCD	ggbhh{'F'FGH''"((7#>#>?@ 	  )+S^;
#i/Y?i'Y7 E!!!d"""8}t###r,   c           	      *   j                  g d      }j                  g d      }dfd	}||g}t        j                  ||      }d}d}|j                  }	d}
t	        j
                  |||||	|
      \  }}}t        |j                  d             y )	N)	g      $@g      ;@g      ?@g      D@g      G@g      I@g      J@g      Z@g     @b@)g      0@g      7@g      C@g     W@g     X@g     a@g     h@c                 R    j                  | |      j                  ||      z
  S r~   r%   )r   rm   r@   r)   s      r*   r   zHTestBootstrap.test_BCa_acceleration_against_reference.<locals>.statistic.  (    77147(277147+@@@r,   rw   r   r]   ge{?r   )r1   r   r   r   _resampling_bca_intervalr   )r2   r)   rm   r   r   r   rt   r@   r   theta_hat_brI   _a_hats    `           r*   'test_BCa_acceleration_against_referencez5TestBootstrap.test_BCa_acceleration_against_reference$  s     JJFGJJ<=	A 1voodI.00!//iu0;UBH1erzz*>?@r,   i  i  zmethod, expectedc           
         t         j                  j                  d      }d}d}d}t        j                  dd      }t        |j                               }	d}
|j                  |
|f|	      }t        |j                  |      f|j                  ||d
|d|      }|j                  }|j                  |d   |	k  |	|d   k  z        }||k(  sJ t        j                  t        |      |
|      j                  }|dkD  sJ y )Ni8 r]     ?r   r    r   r   i  r   r^   r   rw   )r   rB   rE   rI   rK   r@   rQ   r   皙?)r_   r`   r   r   r   floatr&   r   r   r1   rc   count_nonzero	binomtestintpvalue)r2   rK   expectedr)   rQ   rz   rE   rB   r   	stat_truen_replicationsr   rt   cici_contains_truer   s                   r*   #test_bootstrap_against_itself_1sampz1TestBootstrap.test_bootstrap_against_itself_1samp@  s    ii##G, zzaq)$))+&	 xxna0sxCD)+"$'')9$/ %! $$ ++RUY->9rRSuCT,UV8+++ %5!6!13396 	||r,   i|  iz  )rV   rW   c           
         t         j                  j                  d      }d}d}d}d}dfd	}	t        j                  dd	      }
t        j                  d
d	      }t        |
j                         |j                         z
        }d}|
j                  ||f|      }|j                  ||f|      }t        j                  |      j                  |      f|	||d|d|      }|j                  }j                  |d   |k  ||d   k  z        }||k(  sJ t        j                  t        |      ||      j                  }|d
kD  sJ y )Nr   r]   x   r   r   rw   c                 Z    j                  | |      }j                  ||      }||z
  S r~   r%   )data1data2r@   mean1mean2r)   s        r*   my_statzBTestBootstrap.test_bootstrap_against_itself_2samp.<locals>.my_stat{  s1    GGEG-EGGEG-E5= r,   r    r   r     r   r   )r   rB   rE   rI   rK   r@   r^   rv   )r_   r`   ra   r   r   r   r&   r   r   r1   rc   r   r   r   r   )r2   rK   r   r)   rQ   n1n2rE   rB   r   dist1dist2r   r   r   r   rt   r   r   r   s      `                r*   #test_bootstrap_against_itself_2sampz1TestBootstrap.test_bootstrap_against_itself_2sampk  sT    ii##A&	! 

q*

s!,%**,56	 		3#	F		3#	FE*BJJu,=>"))9$/ %%(* $$ ++RUY->9rRSuCT,UV8+++ %5!6!13396 	||r,   r   r    dtypefloat32float64c           	      \   ddfd
}fd}t         j                  j                  d      }|j                  dd      j	                        }|j                  dd      j	                        }	|j                  dd      j	                        }
t        j                  |      j                  |	      j                  |
      f|d|d|d	      }t        ||	|
f|d
|d|d	      }dk(  rdnd}t        |j                  j                  j                  |j                  j                        |       t        |j                  j                  j                  |j                  j                        |       t        |j                  j                  |j                        |       y )Nr   r?   c                 0     t         fd|D              S )Nc              3   D   K   | ]  }j                  |         yw)r?   Nr%   ).0rT   r@   r)   s     r*   	<genexpr>zSTestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>  s     EfrwwvDw1Es    sum)r@   r   r)   s   ` r*   r   z@TestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic  s    EEEEr,   c                      | D ]  }|j                   dk(  rJ  t        j                  t        d | D                    S )Nr    c              3   <   K   | ]  }|j                           y wr$   r%   )r  rT   s     r*   r  zVTestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic_1d.<locals>.<genexpr>  s     !CF&++-!Cs   r   )ndimr_   r1   r  )r   rT   r   s     r*   statistic_1dzCTestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic_1d  s@     ({{a'''(::c!Cd!CC5QQr,   r7   r   Tr]   )r<   r@   rE   rK   rQ   Fr   ư>+=r   )r_   r`   ra   rb   astyper   r1   r   rc   rd   re   rf   )r2   rK   r@   r   r)   r   r
  rQ   r(   rm   r   rg   rh   r   s      ``         r*   test_bootstrap_vectorized_3sampz-TestBootstrap.test_bootstrap_vectorized_3samp  sg    #$ 	F	R ii##A&HHQN!!%(HHQN!!%(HHQN!!%("**Q-A

1F"t$C &A/ !QLU"FK 	)tu0044

4#;#;#?#?@t	M0055

4#;#;#@#@A	N++RZZ8K8K-LSWXr,   z'Failure is not concerning; see gh-14107c           
      P   dfd	}d }t         j                  j                  d      }|j                  d      }t        j	                  |      f|d|dd |d      }t        |f|d	|dd
|d      }	t        |j                  j                  j	                  |	j                  j                               t        |j                  j                  j	                  |	j                  j                               t        |j                  j	                  |	j                               y )Nr   c                 *    j                  | |      S r~   r%   r(   r@   r)   s     r*   r   z@TestBootstrap.test_bootstrap_vectorized_1samp.<locals>.statistic  s    77147((r,   c                 H    | j                   dk(  sJ | j                  d      S Nr    r   r?   )r	  r&   r(   s    r*   r
  zCTestBootstrap.test_bootstrap_vectorized_1samp.<locals>.statistic_1d  s"    66Q;;66q6>!r,   l   2 )r!   r"   Tr]   )r<   r@   rE   rI   rK   rQ   FrL   r   )
r_   r`   r   r   r1   r   rc   rd   re   rf   )
r2   rK   r@   r)   r   r
  rQ   r(   rg   rh   s
      `      r*   test_bootstrap_vectorized_1sampz-TestBootstrap.test_bootstrap_vectorized_1samp  s    	)	"
 ii##J/JJv"**Q-)9D%(VL!|D%(6qJ0044

4#;#;#?#?@	B0055

4#;#;#@#@A	C++RZZ8K8K-LMr,   c                 P   |j                  dd      }|dk(  rt        j                  d      5  d}t        j                  t
        j                  |      5  t        |g|j                  |      }t        |j                  j                  |j                  |j                               t        |j                  j                  |j                  |j                               d d d        d d d        nwt        |g|j                  |      }t        |j                  j                  |j                  d             t        |j                  j                  |j                  d             t        j                  |j                  d	             y # 1 sw Y   xY w# 1 sw Y   ;xY w)
N)#   g     @rX   ignore)invalidz0The BCa confidence interval cannot be calculatedr   rJ           )fullr_   errstater.   warnsr   DegenerateDataWarningr   r&   r   rc   rd   r1   nanre   rf   )r2   rK   r)   r   msgrt   s         r*   test_bootstrap_degeneratez'TestBootstrap.test_bootstrap_degenerate  s<   wwuf%U?X. VH\\%"="=SI V#THbggfEC#C$;$;$?$?BFFAST#C$;$;$@$@"**RVVBTUVV V THbggf=CC3377F9KLC3388"**V:LM**BJJrN;V VV Vs$   (FBF"FF	FF%)rX   rV   rW   c           	         t         j                  j                  d      }t        j                  dd      }|j                  d|      }t        |j                  |      ft        j                  |dt         j                  j                  d            }t        |ft        j                  |dt         j                  j                  d      d	
      }t        |j                  j                  |j                  |j                  j                               t        |j                  j                  |j                  |j                  j                               t        |j                  |j                  |j                               y )Nl   E<1

 r!   r7   r   r]   r   i[%  rK   rE   rQ   F)rK   rE   rQ   r<   )r_   r`   r   r   r   r   r   r1   r   r   rc   rd   re   rf   )r2   rK   r)   rQ   r   r   rt   refs           r*   test_bootstrap_gh15678z$TestBootstrap.test_bootstrap_gh15678  s    ii##O4zzaq)xxSsx3D)+UZZTWII11$79 FII11$7EK//33

3#:#:#>#>?	A//44

3#:#:#?#?@	B**BJJs7I7I,JKr,   c           	         t         j                  j                  d      }t        j                  dd      }|j                  d|      }t        j                  |      }|j                  |      }t        |f|j                  ddt         j                  j                  d      	      }t        |j                  j                  |j                  |             t        | f|j                  ddt         j                  j                  d      	      }t        |j                  j                   |j                  j                         t        |j                  j                   |j                  j                         y )
Nl   n!|'x`5 r!   r7   r   r]   r   rX   if  r#  )r_   r`   r   r   r   r   minr1   r   r   rc   rd   maxr   re   )r2   r)   rQ   r   r   true_minrt   rh   s           r*   test_bootstrap_minz TestBootstrap.test_bootstrap_min  s    ii##$45zzaq)xxSsx366$<zz$3II11$79//33RZZ5IJ4%266%SYY2248:00444d6N6N6S6ST00555t7O7O7S7STr,   additional_resamplesr   c           	         t         j                  j                  d      }|j                  d      }d}|}||z   }t         j                  j                  d      }t        j                  |j                  |      f|j                  ||dd      }t        j                  |j                  |      f|j                  ||d	d
|      }t         j                  j                  d      }t        j                  |j                  |      f|j                  ||d	d
      }	t        |j                  j                  |j                  |	j                  j                        d       t        |j                  j                  |j                  |	j                  j                        d       t        |j                  |j                  |	j                        d       y )Nl    ]4M r]   r   r   l   mdpi4 r   rW   )rE   rQ   rB   rK   r   rX   )rE   rQ   rB   rK   rM   r  r   )r_   r`   r   r   r   r1   r&   r   rc   rd   re   rf   )
r2   r+  r)   rQ   r(   r   r   n3rt   r$  s
             r*   test_re_bootstrapzTestBootstrap.test_re_bootstrap  sw    ii##$45JJCJ !&&ii##$67oorzz!}.RS/3LJoorzz!}.RS/3E/24 ii##$67oorzz!}.RS/3EC 	//33

3#:#:#>#>?"	$ 	//44

3#:#:#?#?@"	$ 	**BJJs7I7I,JQVWr,   zSensitive to machine precisionc                 $   t         j                  j                  d      }t        j                  dd      }|j                  |j                  d|            f}t        ||j                  |d      }t        j                  di |d	d
i}|j                  t        d|             t        j                  di |ddd}t        j                  di |ddd}	t        |j                  j                  |j                  j                  d       t        |	j                  j                  |j                  j                  d       |j                  |j                  j                        r|j                  j                  dk  sJ |j                  |	j                  j                        r|	j                  j                  dkD  sJ t!        j"                  t$        d      5  t        j                  di |ddi d d d        y # 1 sw Y   y xY w)Nl   @Qixt r!   r7   r   r]   r   rw   )r   r   rQ   r@   rB   r   r   r   r   r   r   r   r  r   z`alternative` must be one ofr   r   z	ekki-ekkirp   )r_   r`   r   r   r   r1   r   r   r   r   r   r   rc   re   rd   isinfr.   r/   rR   )
r2   rK   r)   rQ   r   r   r   r   lgs
             r*   test_bootstrap_alternativez(TestBootstrap.test_bootstrap_alternative#  s    ii##$78zzaq)

488#S8ABD4266sDOO;f;s;dq1=>OOPfPtPOOSfStS--22A4I4I4N4N"	$--1113H3H3L3L"	$xx--112q7L7L7P7PST7TTTxx--2238M8M8R8RUV8VVV]]:-KL 	?OO>f>+>	? 	? 	?s   #HHc                    d}t         j                  j                  d      }|j                  |      }t        t	        j
                  |j                  |      |            }t        |d         D ]?  }|d|d d f   }t        j                  ||d      }t        ||j                  |             A t        t	        j
                  |j                  |      d|	            }	t        |j                  |	d
      |       y )Nr"   r7   r         Zt r-  r)   rw   .r?   r!   )rI   r)   )r_   r`   r   nextr   _jackknife_resampler1   rangedeleter   r   concat)
r2   r)   ry   rQ   r(   rm   rq   slcr   y2s
             r*   test_jackknife_resamplez%TestBootstrap.test_jackknife_resample;  s    ii##J/JJEJ"00A2FGuRy! 	7A CAI,CyyAB/HCH!56	7 +11"**Q-qRPQ		"2	.2r,   array_api_strictzTest uses ... + fancy indexingrng_namera   r   c           
         t        t        j                  |      } |d      } |d      }d}d}t        j                  j                  d      }|j	                  |j                  |            }	t        j                  |	|||      }
t        |      D ]B  }|
d|d d f   }|j	                  t        |d|d   |d               }|	d|f   }t        ||       D y )	Nl   1V rL   r6  r8  )rQ   r)   .r   rw   )
getattrr_   r`   r   r1   r   _bootstrap_resampler=  r   r   )r2   rD  r)   rng_genrng1rng2rE   ry   rQ   r(   rm   rq   r@  jsr   s                  r*   test_bootstrap_resamplez%TestBootstrap.test_bootstrap_resampleL  s     "))X.z"z"ii##J/JJszz%()++A{L{# 	+A CAI,CLq%)U2YGHBbzHC*	+r,   score)r         ?r    c                 T   d}t         j                  j                  d      }|j                  |      }t        |      }t	        j
                  |j                  ||      |j                  ||      d|      }d }	 |	||d      dz  }
t        ||j                  |
|      d	
       y )N)rL         l   Q,? r  rw   )r@   r)   c                 N    t        j                  t        j                  || |      S r$   )r_   apply_along_axisr   percentileofscore)rr   rM  r@   s      r*   vectorized_posz>TestBootstrap.test_percentile_of_score.<locals>.vectorized_posp  s    &&u'>'>aOOr,   r?   r]   V瞯<r   )r_   r`   r   r   r   _percentile_of_scorer1   r   )r2   rM  r@   r)   ry   rQ   r(   r   prU  p2s              r*   test_percentile_of_scorez&TestBootstrap.test_percentile_of_scoree  s     ii##J/JJu $,,RZZZ-G-/ZZUZ-K24=	P Au2.s22::b:6UCr,   c                 8  
 d 

fd}t        j                  |      }t        j                  j	                  d      }|j                  ddd      }|j                  ddd      }|j                  ddd      } 
||||      } |||||      }	t        ||	       y )	Nc                 ,     t         fd|D              S )Nc              3   @   K   | ]  }|j                          y wr$   r%   )r  rT   r@   s     r*   r  zLTestBootstrap.test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>~  s     <Vv{{4(<s   r  r@   r   s   ` r*   r   z9TestBootstrap.test_vectorize_statistic.<locals>.statistic|  s    <t<<<r,   c                  D    | D ]  }|j                   dk(  rJ   | ddiS )Nr    r@   r   )r	  )r   rT   r   s     r*   r
  z<TestBootstrap.test_vectorize_statistic.<locals>.statistic_1d  s4     ({{a'''(d+++r,   r   r7   r   r7  r    r?   )r   _vectorize_statisticr_   r`   ra   rb   r   )r2   r@   r
  
statistic2rQ   r(   rm   r   rg   rh   r   s             @r*   test_vectorize_statisticz&TestBootstrap.test_vectorize_statisticw  s    
	=	, !55lC
ii##A&HHQ1HHQ1HHQ1Aqt,!Q-d#r,   c           	         t         j                  j                  d      }d}j                   |j                  |ddi      }fd}t        |f||ddd|	      }j                  d
dg      }j                  |j                  j                  j                  |k  |j                  j                  j                  |kD  z  d      }j                  |dk\        sJ j                  |dk        sJ |j                  j                  j                  dk(  sJ |j                  j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ y )Nl   s: )r    rN  r   )r]   r]   c                 p    j                  j                  | |      j                  | |d      g      S )Nr?   r    r@   
correction)r   r&   r   )r   r@   r)   s     r*   r   z=TestBootstrap.test_vector_valued_statistic.<locals>.statistic  s=    88RWWTW5VVDtVBD E Er,   rw   '     )rK   r@   rE   rI   r^   r    rN  r   r?   Z   r]   r!   r]   )r!   r]   rg  )r_   r`   r   r1   normalr   r   rc   rd   Tre   allry   rf   r   )	r2   rK   r)   rQ   paramsrT   r   rt   countss	     `      r*   test_vector_valued_statisticz*TestBootstrap.test_vector_valued_statistic  sg    ii##J/JCJJ@Z@A	E 	9V"$(#G QH%!!3#:#:#>#>#@#@6#I%(%<%<%A%A%C%Cf%L#N'( " * vvfl###vvfm$$$&&**00H<<<&&++11X===!!''8333))//>AAAr,   zignore::RuntimeWarningc                    t         j                  j                  d      }d fdfd}g dg dg dg dg d	g}t        j                  |      j                  }t        |||d
      }t        ||d
      }t        |j                  j                  d   |j                  j                  d       t        |j                  j                  d   |j                  j                  d       y )Nl   \Qc                     | j                  |      }|j                  |      }| |d   z
  ||d   z
  z  j                  |      }d|z  | j                  |      |j                  |      z   ||z
  dz  z   z  S )N).Nr!   )r&   var)r(   rm   r@   xmymcovs         r*   concordancezGTestBootstrap.test_vector_valued_statistic_gh17715.<locals>.concordance  st    BB9%!bm*;<BB4HCGdaeeDk 9R"WN JKKr,   c                 R    | |z   }| |z   }t        j                   |||            S r$   )r_   
nan_to_num)tptnfpfnr@   actualr   rw  s          r*   r   zETestBootstrap.test_vector_valued_statistic_gh17715.<locals>.statistic  s-    "WFBwH==VXt!DEEr,   c                 >     g ||  t         j                  df   S )N.)r_   newaxis)r@   argsr   s     r*   statistic_extradimzNTestBootstrap.test_vector_valued_statistic_gh17715.<locals>.statistic_extradim  s#    )d)D)"**c/::r,   )r7   r   r   r!   )r!   r    r!   r    )r   r7  r   r   )r   r7  r"   r   )r      r    r   T)rQ   r8   r   rV  r   )
r_   r`   r   arrayrl  r   r   rc   rd   re   )r2   rQ   r  r   rt   r$  rw  r   s         @@r*   $test_vector_valued_statistic_gh17715z2TestBootstrap.test_vector_valued_statistic_gh17715  s     ii##$67	L	F
	; 	
 xx~0c$GiS>//33A6//33%	A//44Q7//445	Br,   cupy)np_only
exceptionsc                    t         j                  j                  d      }|j                  |j                  d            }|j                  |j                  d            }d }t	        j
                  ||f|       t	        j
                  |j                  |j                  f|d       d}t        j                  t        |      5  t	        j
                  ||d d	d
f   f|       d d d        t	        j
                  ||d d	d
df   f|       t	        j
                  |j                  |j                  d
dd d	f   f|d       y # 1 sw Y   bxY w)NiF|)rL   r!   )r[   r!   c                 F    t        j                  | ||      j                  S r~   r   	ttest_indr   r(   rm   r@   s      r*   r   z.TestBootstrap.test_gh_20850.<locals>.statistic      ??1ad3===r,   r    r?   /Array shapes are incompatible for broadcasting.r   rL   r   )
r_   r`   r   r1   r   r   rl  r.   r/   rR   )r2   r)   rQ   r(   rm   r   r3   s          r*   test_gh_20850zTestBootstrap.test_gh_20850  s   ii##J/JJszz'*+JJszz'*+	> 	A	*acc
IA6 D]]:W5 	7OOQ#2#q&	NI6	7Acrc1Q3hK()4acc!A#ss(m,ia@	7 	7s    EEN)'r-   
__module____qualname__r   r4   rU   r.   markparametrizeri   r{   r   slowxfail_on_32bitr   tests_Rr   r   r   tests_against_itself_1sampitemsr   tests_against_itself_2sampr   r  r  r!  r%  r*  r/  r4  rB  rL  rZ  rb  rp  filterwarningsr  r  rp   r,   r*   r   r      s   g&<=F >F
99v [[X'EF[[VY/B 0 GB  [[X'EFB GB2 [[X'EF[[VY/[[Xe}5)D 6 0 G)DV [[[[ EF[[X'EFB G G B6&G [[8'BX CX,7$rA0 ,004)-"/ [[[[/7==?A#A #J ,/03"5 [[[[/7==?A,A ,\ [[X'EF[[VaV,[[Wy)&<=Y > - GY8 [[ IJ[[X'EF[[VaV,N - G KN, [[X'EF< G< [[X'EFL GL"U  [[3aY?X @X8 [[ @A[[X'EF? G B?,3" [[!!"4)I " K[[Z-)GH+ IK+, [[Wk2[[VY/D 0 3D  [[VY/$ 0$4 [[[[X'EFB G B> [[[[ 89#B : #BL [[!!$F8!DA EAr,   r   c            
       0   e Zd ZdZdefdZd Zd Zd Ze	j                  j                  d        Ze	j                  j                  d ed	d
            d        Ze	j                  j                  dd      d        Ze	j                  j"                  e	j                  j                  dd      e	j                  j                  d ej$                  ddd            d                      Ze	j                  j                  dej*                  ej,                  f      e	j                  j                  dd      e	j                  j                  d ej$                  ddd            d                      Ze	j                  j                  d ej0                  dd
            d        Ze	j                  j                  e	j                  j                  d ej$                  ddd            d               Ze	j                  j"                  e	j                  j                  dddg      e	j                  j                  dg d       d!                      Zd" Zd# Zd$ Ze	j                  j?                  d      e	j                  jA                  d%      d&               Z!y)'TestMonteCarloHypothesisTest皙?Nc                     fdS )Nc                  :    j                   | di|      S )Nr^   r  )r1   )r  kwdsr   rsrvs_inr)   s     r*   r+   z6TestMonteCarloHypothesisTest.get_rvs.<locals>.<lambda>  s*    RZZ0V20VQU0V6; &0 &= r,   rp   )r2   r  r  r   r)   s    ````r*   get_rvsz$TestMonteCarloHypothesisTest.get_rvs  s    = 	=r,   c                     fd}|S )Nc                     j                  | |      }j                  | |d      }| j                  |   }|||z  dz  z  S )Nr?   r    re  rN  )r&   rs  ry   )r(   r@   mvrz   r)   s        r*   r   z=TestMonteCarloHypothesisTest.get_statistic.<locals>.statistic  sH    %Aqt2AA!cz>!r,   rp   )r2   r)   r   s    ` r*   get_statisticz*TestMonteCarloHypothesisTest.get_statistic  s    	" r,   c                 	   j                  g d      }d#fd	}d}j                  d      j                  d      f}t        j                  j                  t        j                  j                  f}t        j                  t        |      5  t        ||d d	       d d d        d
}t        j                  t        |      5  t        |t        j                  j                  |d	       d d d        d}t        j                  t        |      5  t        |t        j                  j                  |d       d d d        d}t        j                  t        |      5  t        |d |       d d d        t        j                  t        |      5  j                  ddgddgg      }t        |d d g|       d d d        d}t        j                  t        |      5  j                  g dg      }t        |d d g|       d d d        d}t        j                  t        |      5  t        |t        j                  j                  d        d d d        d}t        j                  t        |      5  t        |t        j                  j                  |d       d d d        d}t        j                  t        |      5  t        |t        j                  j                  |d       d d d        d}t        j                  t        |      5  t        |t        j                  j                  |d       d d d        d}t        j                  t        |      5  t        |t        j                  j                  |d       d d d        d}t        j                  t        |      5  t        |t        j                  j                  |d        d d d        d!}fd"}	 t        ||j                         y # 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   7xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r&}t        |      j                  |      sJ Y d }~y d }~ww xY w)$N      ?       @      @c                 *    j                  | |      S r~   r%   r  s     r*   statz@TestMonteCarloHypothesisTest.test_input_validation.<locals>.stat  s    77147((r,   r  r!   r   )r"   r   r   c                      yNr    rp   r  s      r*   r+   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>  s    r,   rw   r?   r=   r>   r9   r;   0`rvs` must be callable or sequence of callables.r  r  r        @c                     | S r$   rp   r  s    r*   r+   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>      a r,   If `rvs` is a sequence...c                     | S r$   rp   r  s    r*   r+   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>   r  r,   c                     | S r$   rp   r  s    r*   r+   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>   s    1 r,   z`statistic` must be callable.)`n_resamples` must be a positive integer.rC   rD   rF   rG   rH   `alternative` must be in...r:   r   z!Signature inspection of statisticc                 b    j                  t        j                  j                  |             S )Nr-  )r1   r   r   r   )r   r)   s    r*   r   z?TestMonteCarloHypothesisTest.test_input_validation.<locals>.rvs<  s!    ::ejjnn$n788r,   r$   )r1   zerosr   r   r   r.   r/   rR   r   r0   r&   str
startswith)r2   r)   r   r  r3   tempr   es    `      r*   test_input_validationz2TestMonteCarloHypothesisTest.test_input_validation  s    zz,'	) D "((6"23zz~~uzz~~.]]:W5 	GT3(<2F	G /]]:W5 	CT5::>>4cB	C E]]:W5 	IT5::>>4CH	I E]]9G4 	/T4.	/]]9G4 	>::Bx"b23DTK#6=	> .]]:W5 	E::|n-DTK#=tD	E 2]]9G4 	9T5::>>48	9 >]]:W5 	LT5::>>4UK	L >]]:W5 	MT5::>>4VL	M @]]:W5 	FT5::>>4uE	F @]]:W5 	GT5::>>4vF	G 0]]:W5 	MT5::>>4VL	M 6	9	.T30i	G 	G	C 	C	I 	I	/ 	/	> 	>
	E 	E
	9 	9	L 	L	M 	M	F 	F	G 	G	M 	M  	.q6$$W---	.s   O6(P(PP(P*&P7'&Q2(Q?(Q(Q+(Q8&(RR 6P PPP'*P47QQQQ(+Q58RR	R?R::R?c                    fd}d}j                  g d      }t              r&t        |t        j                  j
                  |       y t        j                  t        |      5  t        |t        j                  j
                  |       d d d        t        j                  t        |      5  t        |t        j                  j
                  j                  d       d d d        y # 1 sw Y   _xY w# 1 sw Y   y xY w)Nc                 &    j                  |       S r$   r%   r'   s    r*   non_vectorized_statisticzWTestMonteCarloHypothesisTest.test_input_validation_xp.<locals>.non_vectorized_statisticD  s    771:r,   z!`statistic` must be vectorized...r  r   Fr;   )
r1   r   r   r   r   r   r.   r/   rR   r&   )r2   r)   r  r3   rT   s    `   r*   test_input_validation_xpz5TestMonteCarloHypothesisTest.test_input_validation_xpC  s    	 6L)B<VUZZ^^5MN]]:W5 	OVUZZ^^5MN	O]]:W5 	PVUZZ^^RWWO	P 	P	O 	O	P 	Ps   (&C,12C8,C58Dc                 x    t         j                  j                  d      }j                  |j	                  d            } fdd_        d_        |ddd} j                  t        j                  j                  t         j                  j                  d	      
      |d<   t        dddi|}t        j
                  d       t        j                  d        j                  t        j                  j                  t         j                  j                  d	      
      |d<   d_        t        dddi|}t        j
                  d       t        j                  d        j                  t        j                  j                  t         j                  j                  d	      
      |d<   d_        t        di |}t        j
                  d       t        j                  d       t        |j                  |j                         t        |j                  |j                         y )N   )p rL   r-  c                     | j                   dk(  rdn| j                  d   }t        |j                        _        xj                  dz  c_         j                        | |      S r  )r	  ry   r(  
batch_sizecounterr  )r(   r@   r  r2   r   r)   s      r*   r   z:TestMonteCarloHypothesisTest.test_batch.<locals>.statisticY  s\    ffkqwwqzJ#&z93G3G#HI ")4%%b)!$77r,   r   r   T)rT   r   rE   r<   i r9  r   rI   r      r   r   r!   rp   )r_   r`   r   r1   standard_normalr  r  r  r   r   r   r   r   r   r   )	r2   r)   rQ   r(   r  rg   rh   res3r   s	   ``      @r*   
test_batchz'TestMonteCarloHypothesisTest.test_batchR  s    ii##K0JJs***34	8
 	 	)#49 ll5::>>2993H3H3PUWlXU0a040Y&&-Y))1-ll5::>>2993H3H3PUWlXU	1b1D1Y&&+Y))2.ll5::>>2993H3H3PUWlXU	'$'Y&&*Y))40T[[1T[[1r,   r@   r"   c                    t         j                  j                  d      }g d}d||<   |j                  d      j                  }dt        |      v rdnd}t        t         |      }t        ||      }|j                  ||      }	t        j                  |	d	|
      }
|j                  |	|      }	| j                  |      }| j                  t        j                  j                  |||      }t        |	||dd|      }|j                  |
j                  |      }|j                  |
j                   |      }t#        |j                  |       t#        |j                   || j$                         y )Nit$ )r!   r"   r7   r]   r  64r   r   )r   r   r  )popmeanr@   r  )r   r)   Ti N  )r<   rE   r@   r   )r_   r`   r   r1   r   r  rF  r  r   ttest_1sampr  r  r   r   r   r   r   r   r   )r2   r@   r)   rQ   r   dtype_default	dtype_strdtype_npr   r(   r   r   r   rt   ref_statistic
ref_pvalues                   r*   test_axis_dtypez,TestMonteCarloHypothesisTest.test_axis_dtypex  s:    ii##G,T
 

2,,!%]);!;I)	2y)I& T:$$Q>JJqJ&&&r*	ll5::>>3elCq#yT+0t= 

8#5#5U
CZZuZ=
}5

JTYY?r,   r   )	two-sidedr   r   c                 $   t         j                  j                  d      }|j                  d      }t	        j
                  |d|      }|j                  |      }| j                  |      }| j                  t        j                  j                  ||      }t        ||||      }t        |j                  |j                  |j                               t        |j                  |j                  |j                        | j                         y )N)rQ  r-  r  r  r9  r   )r_   r`   r   r  r   r  r1   r  r  r   r   r   r   r   r   r   )	r2   r   r)   rQ   r(   r$  r   r   rt   s	            r*   test_alternativez-TestMonteCarloHypothesisTest.test_alternative  s     ii##H-R(2;?JJqM&&r*	ll5::>>32l6q#ykJrzz#--'@A

BJJszz$:Kr,   )r   r   rr   g      rN  r   c                 v   t         j                  j                  d      }t        j                  j                  |d|      }t        j                  |t        j                  j                        }fd}| j                  t        j                  j
                  |      }t        |||dd      }t        |j                  |j                         d	k(  r-t        |j                  |j                  | j                  
       y dk(  r0t        d|j                  z
  |j                  | j                  
       y y )Nr  rQ  rr   r   r^   r  c                 z    t        j                  | t         j                  j                  d      j                  S )Nasymp)moder   )r   ks_1sampr   cdfr   )r(   r   s    r*   statistic1dzGTestMonteCarloHypothesisTest.test_against_ks_1samp.<locals>.statistic1d  s+    >>!UZZ^^'.9;;D9Er,   r   FrE   r<   r   r   r   r   r    )r_   r`   r   r   skewnormr   r  r   r  r  r   r   r   r   r   )	r2   r   rr   rQ   r(   r   r  norm_rvsrt   s	    `       r*   test_against_ks_1sampz2TestMonteCarloHypothesisTest.test_against_ks_1samp  s    
 ii##H-NN#>>>!UZZ^^M	E <<

4q(K+/E+68 	x'9'9:)#CJJdiiHF"AcjjL(//		J #r,   hypotestr   r   r  r:  r!   c                    t         j                  j                  d      }t        j                  j                  |d|      } ||      }fd}| j                  t        j                  j
                  |      }t        |||d|      }	t        |	j                  |j                         t        |	j                  |j                  | j                         y )	Ni	   r  r  c                 ,     | |      j                   S r~   )r   )r(   r@   r  s     r*   r   zLTestMonteCarloHypothesisTest.test_against_normality_tests.<locals>.statistic  s    AD)333r,   Tr<   r   r   )r_   r`   r   r   r  r   r  r   r   r   r   r   r   )
r2   r  r   rr   rQ   r(   r   r   r  rt   s
    `        r*   test_against_normality_testsz9TestMonteCarloHypothesisTest.test_against_normality_tests  s    
 ii##H-NN3?A;7	4 <<

4q(I$+68 	x'9'9:

HOO$))Dr,   c                    t         j                  j                  d      }t        j                  j                  |d|      }t        j                  |      }d }| j                  t        j                  j
                  |      }t        |||dd      }t        |j                  |j                         t        |j                  |j                  | j                         y )	Ni!M r  r  c                 D    t        j                  | |      j                  S r~   )r   
normaltestr   )r(   r@   s     r*   r   zGTestMonteCarloHypothesisTest.test_against_normaltest.<locals>.statistic  s    ##AD1;;;r,   Tr   r  r   )r_   r`   r   r   r  r   r  r  r   r   r   r   r   r   )r2   rr   rQ   r(   r   r   r  rt   s           r*   test_against_normaltestz4TestMonteCarloHypothesisTest.test_against_normaltest  s     ii##H-NN3?##A&	< <<

4q(I$+46 	x'9'9:

HOO$))Dr,   c                    t         j                  j                  d      }t        j                  j                  |d|      }t        j                  |t        j                  j                        }d }| j                  t        j                  j
                  |      }t        |||ddd      }t        |j                  |j                         t        |j                  |j                  | j                  	       y )
NirQ  r  c                 r    t        j                  | t         j                  j                        j                  S r$   )r   cramervonmisesr   r  r   r  s    r*   r  zMTestMonteCarloHypothesisTest.test_against_cramervonmises.<locals>.statistic1d  s#    ''5::>>:DDDr,   r   Fr   r  r   )r_   r`   r   r   r  r   r  r   r  r  r   r   r   r   r   )r2   rr   rQ   r(   r   r  r  rt   s           r*   test_against_cramervonmisesz8TestMonteCarloHypothesisTest.test_against_cramervonmises  s     ii##I.NN#>''5::>>:	E <<

4q(K+/E+46 	x'9'9:

HOO$))Dr,   	dist_namer   logistictarget_statistic)333333?gffffff?g?c           	      N   fd}t        j                         5  t        j                  dt               t	        |d      }d d d        j
                  sJ |j                  d   }t        j                  j                  d      }t        j                  j                  |d|      }t        j                  |d	      }|j                  }	|j                  }
fd
}| j!                  t#        t              j                  |      }t        j                         5  t        j                  dt               t%        |||ddd      }d d d        t'        j                  |	       t'        |j                  |
d| j(                  z         y # 1 sw Y   KxY w# 1 sw Y   RxY w)Nc                     t         j                  j                  d      }t        j                  j                  | d|      }t        j                  |d      }|j                  z
  S )Nxr]   r   interpolaterJ   )r_   r`   r   r   tukeylambdar   andersonr   )rr   rQ   r(   r   r  r  s       r*   funz?TestMonteCarloHypothesisTest.test_against_anderson.<locals>.fun	  sX    ))''	2C!!%%ac%DA~~a=IH%%(888r,   r  r   )x0r  r]   r   r  rJ   c                 H    t        j                  | d      j                  S )Nr  rJ   )r   r  r   )r(   r  s    r*   r  zGTestMonteCarloHypothesisTest.test_against_anderson.<locals>.statistic1d  s    >>!Y}EOOOr,   r   Fr   r  r!   r   )warningscatch_warningssimplefilterRuntimeWarningr   successr(   r_   r`   r   r   r  r   r  r   r   r  rF  r   r   r   )r2   r  r  r  solrr   rQ   r(   r   expected_stat
expected_pr  dist_rvsrt   s    ``           r*   test_against_andersonz2TestMonteCarloHypothesisTest.test_against_anderson   sU   	9
 $$& 	"!!(N;sq/C	" {{{ EE!Hii##I.!!!#C!@>>!Y}E **__
	P <<y 9 = =sC$$& 	L!!(N;"1h#.D.3LC	L 	}5

JQtyy[A5	" 	"&	L 	Ls   (F,FFF$c                     t         j                  j                  d      }t        j                  d      }t	        ||j                  t         j
                  dd      }|j                  dk(  sJ y )Nl   IL~QH(s r]   Tr   r  g-C6?)r_   r`   r   r  r   r&   r   )r2   rQ   r(   rt   s       r*   test_p_never_zeroz.TestMonteCarloHypothesisTest.test_p_never_zero*  sV     ii##$78HHSMq#**bgg*.FDzzV###r,   c                    t         j                  j                  d      }|j                  d      |j                  d      f}|j                  |j                  f}d }t	        j
                  |||d      }t	        j                  |d   |d	   gd      }t        |j                  |j                         t        |j                  |j                  d
       y )N   F:fmPr  r-     c                 F    t        j                  | ||      j                  S r~   r  r  s      r*   r   zFTestMonteCarloHypothesisTest.test_against_ttest_ind.<locals>.statistic8  r  r,   rw   r?   r   r    {Gz?r   )
r_   r`   r   rk  r   r   r  r   r   r   r2   rQ   r   r   r   rt   r$  s          r*   test_against_ttest_indz3TestMonteCarloHypothesisTest.test_against_ttest_ind3  s    ii##$67zzvz&


(::jj#**$	> $$T3	Cood1gQyr:s}}5

CJJT:r,   c                    t         j                  j                  d      }|j                  d      |j                  d      |j                  d      |j                  d      f}|j                  |j                  |j                  |j                  f}d }t	        j
                  |||dd	
      }t	        j                  |ddi}t        |j                  |j                         t        |j                  |j                  d       y )Nr  rj  r-  )r!   e   )r!   f   )r!   g   c                 @    t        j                  |d| ij                  S Nr@   )r   f_onewayr   )r@   r  s     r*   r   zETestMonteCarloHypothesisTest.test_against_f_oneway.<locals>.statisticG  s    >>43d3===r,   rw   r   r@   r   r@   {Gz?r   )
r_   r`   r   rk  r   r   r"  r   r   r   r  s          r*   test_against_f_onewayz2TestMonteCarloHypothesisTest.test_against_f_oneway@  s    ii##$67


)3::8:+D


)3::8:+DFjj#**cjj#**<	> $$T3	1:<nnd,,s}}5

CJJT:r,   z2Statistic may not depend on sample order on 32-bitc                    t         j                  j                  d      d}fd} |d      }t        j                  ||t         j
                  d|      }t        j                  |j                  |j                  k        }t        j                  |j                  |j                  dz  k        }||k7  sJ |j                  |dz   |dz   z  k(  sJ y )	Nl   U5<H rg  c                 X    dt        j                  d      j                  |       z  S )Nr  gZd;O?)rX  r   )r   	bernoullir   r   rQ   s    r*   r   zITestMonteCarloHypothesisTest.test_finite_precision_statistic.<locals>.rvsY  s'    %044$S4QQQr,   r]   r   )r   rE   g     ?r    )
r_   r`   r   r   r   rs  r  null_distributionr   r   )r2   rE   r   r(   rt   c0c1rQ   s          @r*   test_finite_precision_statisticz<TestMonteCarloHypothesisTest.test_finite_precision_statisticQ  s     ii##$45	R H$$QRVV1<> VVC))S]]:;VVC))S]]G-DDERxxzzb1f{Q7777r,   )"r-   r  r  r   r_   r  r  r  r  r.   r  xslowr  r  r=  r  r  r  linspacer  r   skewtestkurtosistestr  rx   r  r  r  r  r  r%  	fail_slowr  r-  rp   r,   r*   r  r    s   D(, =@.DP [[#2 #2J [[VU2q\2@ 3@@ [[],LML NL& [[[[],?@[[S+"++dC";<K = A K, [[Z%..%:L:L)MN[[],LM[[S+"++b!Q"78E 9 N OE" [[S)"))B"23E 4E" [[[[S+"++dC";<E = E$ [[[[[6:*>?[[/A%B B @ %BN$;;" [[1[[ TU8 V 8r,   r  c                   b   e Zd ZdddZd Zej                  j                  d        Zej                  j                  d        Z	ej                  j                  dg d	      d
        Zej                  j                  dd      ej                  j                  dg d	      d               Zy)	TestPowerNr  c                4    t              nfdS )Nc                 J    j                  j                  |             S )Nr-  r  )r1   rk  )r   r   rQ   r)   s    r*   r+   z%TestPower.xp_normal.<locals>.<lambda>j  s    BJJszztz'<EJJ r,   )r   )r2   rQ   r)   r   s    ```r*   	xp_normalzTestPower.xp_normalh  s    (- $5JJr,   c                 	   t         j                  j                  d      }t        j                  }| j                  ||      | j                  ||      f}|j                  d      |j                  d      f}d}t        j                  t        |      5  t        |||d       d d d        d	}t        j                  t        |      5  t        |d |       d d d        t        j                  t        |      5  t        || j                  ||      d
f|       d d d        d}t        j                  t        |      5  t        || j                  ||      f|       d d d        t        j                  t        |      5  t        ||d       d d d        d}t        j                  t        |      5  t        |||d       d d d        t        j                  t        |      5  t        ||||j                  ddd             d d d        d}t        j                  t        |      5  t        |||d       d d d        d}t        j                  t        t        f|      5  t        |||j                  ddg      |j                  g d      f       d d d        t        j                  t        t        f|      5  t        |||j                  ddg      |j                  ddg      fd|j                  g d      i       d d d        d}t        j                  t        |      5  t        d ||       d d d        d}t        j                  t        |      5  t        |||d       d d d        t        j                  t        |      5  t        |||d       d d d        d }t        j                  t        |      5  t        |||d!       d d d        t        j                  t        |      5  t        |||d!       d d d        y # 1 sw Y   vxY w# 1 sw Y   PxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)"Nl   yB0 1 r9  rL   r\   r9   r   r>   r;   r  r:   r  )rL   z3`significance` must contain floats between 0 and 1.r!   significancerw   r    r   z`kwargs` must be a dictionaryr   )kwargsz6not be broadcast|Chunks do not add|Incompatible shapesr[   )r\         r<  r(   z`test` must be callablez(`n_resamples` must be a positive integerirD   g      %@z"`batch` must be a positive integerrH   )r_   r`   r   r   r  r7  r1   r.   r/   rR   r   r0   r/  RuntimeError)r2   r)   rQ   testr   n_observationsr3   s          r*   r  zTestPower.test_input_validationl  s   ii##$78~~cb~)4>>#">+EF**R."**R.9D]]:W5 	=$^<	= E]]9G4 	.$n-	.]]9G4 	N$3V<nM	N .]]:W5 	G$35~F	G]]:W5 	$$U#	$ H]]:W5 	=$^!<	=]]:W5 	R$^"++b!R:PQ	R 2]]9G4 	?$^I>	? K]]J5WE 	O$bjj"b2BJJ|4LMN	O]]J5WE 	7$bjj"b2BJJBx4HIrzz)457	7 ,]]9G4 	-$^,	- =]]:W5 	>$^=	>]]:W5 	?$^>	? 7]]:W5 	8$^37	8]]:W5 	9$^48	9 	9[	= 	=	. 	.	N 	N	G 	G	$ 	$	= 	=	R 	R	? 	?	O 	O	7 	7
	- 	-	> 	>	? 	?	8 	8	9 	9s   P
P&;!P3 Q Q7Q*!Q'0Q4+2RAR2R%R(R5S SP#&P03P= Q
QQ$'Q14Q>RRR%(R25R?SSc                    t         j                  j                  d      }fdd_        d_        t        j                  d      d      }t         j                  j                  d      }t        di || j                  |      dd	}j                  dk(  sJ j                  dk(  sJ t         j                  j                  d      }d_        t        di || j                  |      d
d	}j                  dk(  sJ j                  d
k(  sJ t         j                  j                  d      }d_        t        di || j                  |      dd	}j                  dk(  sJ j                  dk(  sJ t        |j                  |j                         t        |j                  |j                         y )Nr  c                    | j                   dk(  rdn| j                  d   }t        |j                        _        xj                  dz  c_        t        j                  | j                  d      |      j                  S )Nr    r   r  r?   )	r	  ry   r(  r  r  r   r  r1   r   )r(   r@   r  r?  r)   s      r*   r?  z"TestPower.test_batch.<locals>.test  s_    ffkqwwqzJ!*doo>DOLLAL$$Q

2TBIIIr,   r   rL   r   )r?  r@  rE   r9  r    )r   rI   r   rP  rp   )
r_   r`   r   r  r  r   r1   r   r7  r   )r2   r)   rQ   r  rg   rh   r  r?  s    `     @r*   r  zTestPower.test_batch  s    ii##K0	J
 #%::b> $& ii##K0EtE!;1E||t###!###ii##K0FtF!;2F||r!!!"$$$ii##K0HtH!;4H||q   $&&&

DJJ/

DJJ/r,   c                 `   t         j                  j                  d      }dddd|j                  ddg      dfd	}|j                  g d	      d d |j                  f   }d
|j                  g d      i}|j                  g d      }t        j                  || j                  ||      |||      }g }|D ]  }	t        |j                  d         D ]  }
||
df   }|d
   D ]q  t        j                  d         D ]T  }|   dfd	}t        j                  || j                  ||      ||	      }|j                  |j                         V s   |j                  |j                  |      |j                  j                        }t        |j                  |dd       y )Nl   x7'\r   r  r   )rw   r   r    r   皙?c           
          t        j                  t        t        d| j                  dz                     }t        |         }t        j                  | |||      S )Nr    r?   r   r@   )xpxexpand_dimsrS   r=  r	  r   r   r  )r(   r   r@   popmeans_expandedalternativespopmeanss       r*   r?  z*TestPower.test_vectorization.<locals>.test  sX     #5:5AFFQJ;O5P!R&s;'78K$$Q(9{*.0 0r,   )rL   r   rP  r   r]   r   )r$  r  皙?r   r9  r:  r;  .c           	      N    t        j                  | |t                       S )Nr#  )r   r  r   )r(   r@   alternative_irJ  	popmean_js     r*   test2z+TestPower.test_vectorization.<locals>.test2  s+    #(#4#4Q	,8]9K,L$N Nr,   r9  r  r$  )r   r   rv   )r_   r`   r   r1   r  r   r   r7  r=  ry   appendr   r   r   )r2   r)   rQ   r?  nxr;  r:  rt   r$  significance_irq   nx_ijrQ  tmprO  rJ  rP  rK  s                  @@@@r*   test_vectorizationzTestPower.test_vectorization  s    ii##N3"ki@ ::q#h'	0 ZZ-.q"**}=J!78 zz":;kk$sr :B'3FD * 	.N288A;' .!S&z%+M%: 	.M"8>>!#45 .$,QK	N $kk%1KT7EG

399-.	..	. jj#		8 			3T=r,   T)r  	jax.numpyz
dask.arraycpu_onlyr  c                 0   t         j                  j                  d      }t        j                  }|j                  |j                  ddd            |j                  |j                  ddd            f}| j                  ||      | j                  ||      f}|j                  g d      }t        j                  ||||      }|j                  |d d |j                  f   |j                  j                        }t        |j                  |d	       y )
N   &( rL   r]   r-  r9  )r$  rL  r   r9  r$  r   )r_   r`   r   r   r  r1   integersr7  r   r   r  ry   r   )r2   r)   rQ   r?  r@  r   r:  rt   s           r*   test_ttest_ind_nullzTestPower.test_ttest_ind_null  s    
 ii##O4**S\\"c\%EF**S\\"c\%EFHnnSRn($...*DDzz"34kk$^,O|ArzzM'BCIIOOT		<d;r,   rC  z+currently combines integer and float arraysr   c                    t         j                  j                  d      }g dg dgg dg dgg}d|j                  g d      i}|j                  dgd	gg      }|j                  d
dg      }t	        j
                  t        j                  | j                  ||      |||      }t        |j
                  |j                  |      d
       y )Nr]  )gv?g]NbJ?g6;?)gOt]?g7gLڷ?g0Dҗ?)gVL[?g;c?g.H&?)g#*3)?glk?g5i ?r  )r   rN  r   rL   rP  r$  rL  r9  rM  r   )	r_   r`   r   r1   r   r   r  r7  r   )r2   r)   rQ   r$  r;  r@  r:  rt   s           r*   test_ttest_1samp_powerz TestPower.test_ttest_1samp_power  s     ii##O4 5464467
 RZZ89bTB4L1zz4,/kk%++T^^CB^-G'3FD		2::c?>r,   )r-   r  r  r7  r  r.   r  r  r  rX  r   r_  ra  rp   r,   r*   r4  r4  f  s    *. K79r [[#0 #0J [[*> *>X [[!!4-P " R<R< [[!!"4)V " X[[!!4-P " R?RX?r,   r4  c                   
   e Zd ZdZd Zd Zej                  j                  de	j                  j                  e	j                  j                  g      ej                  j                  dg d      d               Zej                  j                  de	j                  j                  e	j                  j                  g      ej                  j                  dd	 ej                  d
      dz  fdd ej                   dd
      fg      d               Zd Zej                  j'                         d        Zej                  j+                  dddg      d        Zej                  j+                  d      ej                  j                  dd      d               Zej                  j+                  d      ej                  j                  dd      d               Z edd       ed      ej                  j                  dd      d                      Z edd       ed       ed       d!                      Z edd"       ed      ej                  j                  d#d$      d%                      Zej                  j+                  d      ej                  j                  dd      d&               Zej                  j                  dd      d'        Zej                  j+                  d      d(        Zej                  j                  dd      d)        Zej                  jA                         ej                  j                  d#d*      d+               Z!g d,g d-d.d/d0d1d2d3d4Z"g d5g d6d7d8d9d:d;d<d4Z#ej                  j+                  d      ej                  jA                         ej                  j                  d=e"e#f      d>                      Z$ej                  j&                  ej                  j                  d?d@      ej                  j+                  dddg      ej                  j+                  d      dA                             Z%ej                  j                  dBdC      dD        Z& e'dE      d
g f e'd      d
g dFg dGgf e'dH      d
g dFg dGddIggfgZ(ej                  j                  dJe(      dK        Z)ej                  jU                  d      ej                  j+                  dddg      dL               Z+yM)NTestPermutationTestr  c                 L    t         j                  j                  d      | _        y )Nl   F )r_   r`   r   rQ   )r2   s    r*   setup_methodz TestPermutationTest.setup_method'  s    99(()<=r,   c                    d }|j                  g d      |j                  g d      f}d}t        j                  t        |      5  t	        |d   |j                  dg      f|       d d d        d}t        j                  t        |      5  t	        d|       d d d        t        j                  t
        |      5  t	        d|       d d d        d	}t        j                  t        |      5  t	        ||d
       d d d        d}t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t        |      5  t	        ||d
       d d d        d}t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t        |      5  t	        ||d       d d d        d}t        j                  t
        |      5  t	        ||d       d d d        y # 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 F    t        j                  | |f|      j                  S r$   r  r  s      r*   r  z:TestPermutationTest.test_permutation_test_iv.<locals>.stat-  s    ??Aq640:::r,   r   z2each sample in `data` must contain two or more ...r   r   z6`data` must be a tuple containing at least two samples)r    r    r=   r>   r?   z `permutation_type` must be in...r:   permutation_typer9   r;   r  rC   rD   rF   rG   rH   r  r  rN   rO   rP   )r1   r.   r/   rR   r   r0   )r2   r)   r  r   r3   s        r*   test_permutation_test_ivz,TestPermutationTest.test_permutation_test_iv+  s   	; 

9%rzz)'<=F]]:W5 	?d1grzz1#7>	? K]]:W5 	)T4(	)]]9G4 	&Q%	& /]]:W5 	3T4c2	3 5]]:W5 	6T4.46	6 E]]:W5 	9T4C8	9 >]]:W5 	<T4U;	< >]]:W5 	=T4V<	= @]]:W5 	6T4u5	6 @]]:W5 	7T4v6	7 0]]:W5 	=T4V<	= A]]9G4 	8T4Y7	8 	8W	? 	?	) 	)	& 	&	3 	3	6 	6
	9 	9	< 	<	= 	=	6 	6	7 	7	= 	=	8 	8s   "J(J5>K0K$KK)K6 L4L(LL)L5(J25J?KKK&)K36L LLL&)L25L>r^   ri  )pairingssamplesindependentc                   
 j                  | j                  j                  d            }j                  | j                  j                  d            }
fd
d
_        d
_        d|dd}t        j                  ||f
fd |d      d|}
j                  d	k(  sJ 
j                  dk(  sJ d
_        t        j                  ||f
fd
 |d      d|}
j                  dk(  sJ 
j                  d
k(  sJ d
_        t        j                  ||f
fd |d      d|}	
j                  dk(  sJ 
j                  dk(  sJ t        |j                  |	j                         t        |j                  |	j                         y )NrL   c                     | j                   dk(  rdn| j                  d   }t        |j                        _        xj                  dz  c_        j                  | |      j                  ||      z
  S r  )r	  ry   r(  r  r  r&   )r(   rm   r@   r  r   r)   s       r*   r   z1TestPermutationTest.test_batch.<locals>.statisticm  sg    ffkqwwqzJ#&z93G3G#HI "77147(277147+@@@r,   r   r   T)rE   ri  r<   r    )rI   r^   r  r   r   r!   )	r1   rQ   r`   r  r  r   r   r   r   )r2   ri  r^   r)   r(   rm   r  rg   rh   r  r   s      `      @r*   r  zTestPermutationTest.test_batchc  s    JJtxxr*+JJtxxr*+	A
 	 	#9I"$%%q!fi Lq3??LFJL  D(((##q(((	%%q!fi Lr3??LFJL  B&&&##r)))	%%q!fi Lt3??LFJL  A%%%##t+++T[[1T[[1r,   zpermutation_type, exact_sizerk  r"   r!   )rl  r  rm  r7  c                    j                  | j                  j                  d            }j                  | j                  j                  d            }fd}|dd}t        j                  ||f|fd |d      d|}	t        |	j                        dk(  sJ t        j                  ||f|fi |}	t        |	j                        |k(  sJ y )Nr"   c                 R    j                  | |      j                  ||      z
  S r~   r%   rl   s      r*   r   z8TestPermutationTest.test_permutations.<locals>.statistic  r   r,   T)ri  r<   r   )rE   r^   )r1   rQ   r`   r   r   r	   r*  )
r2   ri  
exact_sizer^   r)   r(   rm   r   r  rt   s
       `     r*   test_permutationsz%TestPermutationTest.test_permutations  s     JJtxxq)*JJtxxq)*	A %5"$$$aVY KA2>q/KEIKs,,-222$$aVY?$?s,,-;;;r,   c                    d\  }}d\  }}}t        j                  ||z   |      |kD  sJ t        j                  j	                  d      }j                  |j                  |            }j                  |j                  |            }||f}	fd}
ddd||d	}t        |	|
fd
|i|}t        |	|
fd
j                  i|}|j                  |j                  k(  sJ t        |j                  |j                  d       y )N)r   r   )r  	   i]     U r-  c                 R    j                  | |      j                  ||      z
  S r~   r%   rl   s      r*   r   zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statistic  r   r,   Trm  r]   r<   ri  rI   r   rQ   rE   r$  r   )r   binomr_   r`   r   r1   r  r   infr   r   r   r2   r)   r   rQ   rS  nypermutationsr(   rm   r   r   r  rt   rh   s    `            r*   'test_randomized_test_against_exact_bothz;TestPermutationTest.test_randomized_test_against_exact_both  s    %S*B}}R"Wb)L888ii##J/JJs***34JJs***34!t	A #[FtYQLQDQiLRVVLtL}}...

DKKd;r,   c                    d\  }}d\  }}}d|z  |kD  sJ t         j                  j                  d      }j                  |j	                  |            }j                  |j	                  |            }||f}	fd}
ddd	||d
}t        |	|
fd|i|}t        |	|
fdj                  i|}|j                  |j                  k(  sJ t        |j                  |j                  d       y )N)r   N)r   r   i }  r!   rv  r-  c                 0    j                  | |z
  |      S r~   r%   rl   s      r*   r   zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statistic  s    771q5t7,,r,   Trl  r]   rx  rE   r$  r   )
r_   r`   r   r1   r  r   rz  r   r   r   r{  s    `            r*   *test_randomized_test_against_exact_samplesz>TestPermutationTest.test_randomized_test_against_exact_samples  s    
 +S,B"u|###ii##J/JJs***34JJs***34!t	- #	[FtYQLQDQiLRVVLtL}}...

DKKd;r,   Tr  rY  rZ  c                    d| j                   }}d\  }}}t        j                  |      |kD  sJ t        j                  j                  d      }|j                  |j                  |            }|j                  |j                  |            |g}fd}	ddd||d	}
t        ||	fd
|i|
}t        ||	fd
|j                  i|
}|j                  |j                  k(  sJ t        |j                  |j                  d       y )Nr  )r  r  i@  rv  r-  c                 H    t        j                  | |      j                  S r~   )r   pearsonrr   )r(   r@   rm   s     r*   r   zRTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic  s    >>!QT2<<<r,   Trl  r]   rx  rE   r$  r   )rQ   r   	factorialr_   r`   r   r1   r  r   rz  r   r   r   )r2   r)   r   rQ   rS  r|  r}  r(   r   r   r  rt   rh   rm   s                @r*   +test_randomized_test_against_exact_pairingsz?TestPermutationTest.test_randomized_test_against_exact_pairings  s    
 'S*B  $|333ii##J/JJs***34JJs***34s	= #	[FtYQLQDQiLRVVLtL}}...

DKKd;r,   )
eager_onlyr   r  c                 @   | j                   j                  dd      }| j                   j                  ddd      }t        j                  ||d      }fd	}j	                  |      j	                  |      }}t        ||f|t        j                  d
| j                         }t        |j                  j	                  |j                        | j                         t        |j                  j	                  |j                        | j                         y )Nr7   r    r   r   r   r"   )r   r   r   exact)r   r  c                     t        |       t        |      }} t        j                  | ||d      }j                  |j                        }|j
                  dk(  r|d   S |S )Nr  )r@   r  r   r   rp   )r   r   ks_2sampr1   r   r	  )r(   rm   r@   rt   r   r)   s       r*   r   z<TestPermutationTest.test_against_ks_2samp.<locals>.statistic  sX    $Q'):1)=qA..ADwKXC**S]]+C!hh!m3r744r,   r   rE   r   rQ   r   )rQ   rk  r   r  r1   r   r_   rz  r   r   r   r   r2   r   r)   r(   rm   r   r   rt   s    ``     r*   test_against_ks_2sampz)TestPermutationTest.test_against_ks_2samp  s     HHOO!O,HHOOO3>>!QKgN	5 zz!}bjjm11vybff+4$((D 	rzz(2D2D'EDIIV

BJJx$?diiPr,   c                 N   | j                   j                  dd      }| j                   j                  dd      }dddd	}||   }t        j                  |||
      }fd}j	                  |      j	                  |      }}t        ||f|t        j                  || j                         }	t        |	j                  j	                  |j                        | j                         t        |	j                  j	                  |j                        | j                         y )Nr7   r    r  r   r"   r   r   r  r  r  c                     t        |       t        |      }} t        j                  | ||      }j                  |j                        }|j
                  dk(  r|d   S |S Nr?   r   rp   r   r   ansarir1   r   r	  r(   rm   r@   rt   r)   s       r*   r   z:TestPermutationTest.test_against_ansari.<locals>.statistic!  T    $Q'):1)=qA,,q!$/C**S]]+C!hh!m3r744r,   r  r   )rQ   rk  r   r  r1   r   r_   rz  r   r   r   r   )
r2   r   r)   r(   rm   alternative_correspondencealternative_scipyr   r   rt   s
     `       r*   test_against_ansariz'TestPermutationTest.test_against_ansari  s     HHOO!O,HHOO!O, /8173>&@" 7{C<<12CD	5 zz!}bjjm11vybff+6DHHF 	rzz(2D2D'EDIIV

BJJx$?diiPr,   zneeds mannwhitneyur   c           	      l   t         j                  j                  dd| j                        }t         j                  j                  dd| j                        }t        j                  ||d|      }d }|j                  |      |j                  |      }}t        ||f|d|j                  |d| j                  	      }t        |j                  |j                  |j                        | j                  
       t        |j                  |j                  |j                        | j                  
       y )N)r"   r   r!   r   r   r   r^   rL  r    r#  c                 H    t        j                  | ||d      j                  S N
asymptotic)r@   rK   )r   mannwhitneyur   r  s      r*   r   z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statistic8  s    %%alKUUUr,   T)r<   rE   r   r@   rQ   r   )r   uniformr   rQ   r  r1   r   rz  r   r   r   r   r  s           r*   test_against_mannwhitneyuz-TestPermutationTest.test_against_mannwhitneyu/  s     MM9!$((KMM9$TXXN%%aL	V zz!}bjjm11vyT+-66{$%4885 	rzz(2D2D'EDIIV

BJJx$?diiPr,   zneeds cramervonmises_2samp)r[  c                 p   t         j                  j                  dd| j                        }t         j                  j                  ddd| j                        }t        j                  ||d      }d	 }|j                  |      |j                  |      }}t        ||f|t        j                  d
| j                        }t        |j                  |j                  |j                        | j                         t        |j                  |j                  |j                        | j                         y )Nr7   r    )r   r   r^   r   r"   )r   r   r   r^   r  rJ   c                 L    t        j                  | ||d      }|j                  S r  )r   cramervonmises_2sampr   )r(   rm   r@   rt   s       r*   r   z7TestPermutationTest.test_against_cvm.<locals>.statisticL  s"    ,,Q\RC== r,   r   r  r   )r   r   r   rQ   r  r1   r   r_   rz  r   r   r   r   )r2   r)   r(   rm   r   r   rt   s          r*   test_against_cvmz$TestPermutationTest.test_against_cvmC  s     JJNNNBJJNNqNI--a7C	!
 zz!}bjjm11vybff+4$((D 	rzz(2D2D'EDIIV

BJJx$?diiPr,   zneeds kruskalr@   )rw   r!   c                    t         j                  j                  d      }|j                  d      }|j                  d      }|j                  d      }|||f}t        j                  |d|i}d }	|dd	|d
}
|D cg c]  }|j                  |       }}t        ||	fd|j                  i|
}t        ||	fddi|
}t        |j                  |j                  |j                        | j                  dz         t        |j                  |j                  | j                  dz         t        |j                  |j                  |j                        d       t        |j                  |j                  d       y c c}w )Nl   Y}y!dh r"   r-  )r    r"   r!   )r!   r    r7   r@   c                 @    t        j                  |d| ij                  S r!  )r   kruskalr   r^  s     r*   r   zGTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistico  s    ==$2T2<<<r,   r   rm  )r@   r   ri  rQ   rE   r   r   r   gQ?r   r   )r_   r`   r   r   r  r1   r   rz  r   r   r   r   )r2   r@   r)   rQ   r(   rm   r   r   r   r   r  data_rt   rh   s                 r*    test_vectorized_nsamp_ptype_bothz4TestPermutationTest.test_vectorized_nsamp_ptype_bothX  sG    ii##$78JJQJ JJIJ&JJIJ&1ay==$2T2	= Y$1#?/34e

5!44tYKBFFKdKiJTJTJ 	rzz(2D2D'EDIIVWKXt~~DIIaKH

BJJx$?dK

DKKd; 5s   >Fc                 f   t         j                  j                  dd| j                        }t         j                  j                  dd| j                        }t        j                  |||d      }fd}fd}j                  |      j                  |      }}d|d	| j                  t        j                  d
}t        ||z
  f|fi |}	t        ||f|fi |}
t        |	j                  |
j                  | j                         |dk7  r;t        |
j                  j                  |j                        | j                         t        |
j                  j                  |j                        | j                         t        |	j                  |
j                  | j                         y )N)r"   r7  r!   r   r  rL  r    rF  c                     t        |       } t        j                  | d|      }j                  |j                        }|j
                  dk(  r|d   S |S Nr   rF  r   rp   r   r   wilcoxonr1   r   r	  )r   r@   rt   r)   s      r*   statistic_1samp_1dzETestPermutationTest.test_against_wilcoxon.<locals>.statistic_1samp_1d  sL     "!$A..TBC**S]]+C!hh!m3r744r,   c                     t        |       t        |      }} t        j                  | |d|      }j                  |j                        }|j
                  dk(  r|d   S |S r  r  r  s       r*   statistic_2samp_1dzETestPermutationTest.test_against_wilcoxon.<locals>.statistic_2samp_1d  sV    $Q'):1)=qA..A6EC**S]]+C!hh!m3r744r,   rl  )r@   r   ri  rQ   rE   r   r  )r   r  r   rQ   r  r1   r_   rz  r   r   r   r   r   )r2   r   r)   r(   rm   r   r  r  r  rg   rh   s     `        r*   test_against_wilcoxonz)TestPermutationTest.test_against_wilcoxon  sH    MM9!$((KMM9$TXXN>>!QKaH	5	5 zz!}bjjm1+9xx81(:CdCA(:CdC 	TYYG+%DNNBJJx7I7I,J!%, 	RZZ%@tyyQT[[tyyAr,   c           	         | j                   j                  ddd      }d||dk(  <   dd} ||      dd}}}t        j                  ||||      }t        j                  |j                  ||j                  	      f|d
d|j                  | j                   |      }	t        |	j                  |j                  |j                        | j                         y )Nr   r!   rL   r-  rw   c                 D    t        |       }|j                  | dkD  |      S )Nr   r?   )r
   r   )r(   r@   xp_s      r*   r   z=TestPermutationTest.test_against_binomtest.<locals>.statistic  s&    !!$C$$QU$66r,   rN  r  r  Trl  )r<   ri  rE   rQ   r   r   r   )rQ   r^  r   r   r   r1   r   rz  r   r   r   )
r2   r   r)   r(   r   krz   rX  r   rt   s
             r*   test_against_binomtestz*TestPermutationTest.test_against_binomtest  s     HHa,!q&	
	7 A,Ca1??1aD$$bjj"**j&E%G046?RVV)-{L 	

BJJx$?diiPr,   c                    | j                   j                  d      }|| j                   j                  d      z   t        j                  |d      }fd}j	                  |      }t        |f|dt        j                  | j                         }t        |j                  j	                  |j                        | j                         t        |j                  j	                  |j                        | j                         y )	Nr7  r-  r  rJ   c                     t        |       } t        j                  | d|      }j                  |j                        }|j
                  dk(  r|d   S |S )Nr  )rK   r@   r   rp   )r   r   
kendalltaur1   r   r	  )r(   r@   rt   r)   rm   s      r*   r   z>TestPermutationTest.test_against_kendalltau.<locals>.statistic  sN    !!$A""1a4HC**S]]+C!hh!m3r744r,   rk  )ri  rE   rQ   r   )rQ   rk  r   r  r1   r   r_   rz  r   r   r   r   )r2   r)   r(   r   r   rt   rm   s    `    @r*   test_against_kendalltauz+TestPermutationTest.test_against_kendalltau  s    HHOOO#Q''##Aq9	5 JJqMtY+-66txxA 	rzz(2D2D'EDIIV

BJJx$?diiPr,   c                 b  	 t         j                  j                  d      }|j                  d      dkD  j                  t              }|j                  d      d|z  z   dkD  j                  t              	t
        j                  j                  |	      d   }j                  |      j                  	      c}		fd}t        |f|dj                  ||      }t        j                  ||	      }t        |j                  j                  |j                  |j                  
             y )Nl   	(yM4 r  r  g      ?r    c                 <    j                  | dk(  dk(  z  |      S Nr    r?   )r   r(   r@   r)   rm   s     r*   r   z@TestPermutationTest.test_against_fisher_exact.<locals>.statistic  s&    ##Q!VQ$7d#CCr,   rk  )ri  rE   r   rQ   r  r  )r_   r`   r   r  r   r   contingencycrosstabr1   r   rz  fisher_exactr   r   r   )
r2   r   r)   rQ   r(   tabr   rt   rh   rm   s
     `      @r*   test_against_fisher_exactz-TestPermutationTest.test_against_fisher_exact  s     ii##$78ZZ]S ((/ZZ]T!V#c)11%8((A.q1zz!}bjjm1	D tY+-66{#&( !!#;?

BJJt{{!''J$JKr,   )r:  r    c                    | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }t        j                  ||      }t        j                  ||      }t        j                  ||      }|d   }|||f}d }d }t	        j
                  |      }t	        j
                  |      }	 |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                         t        |j                  |j                  | j                         t        |j                  || j                         t        |j                  |j                  d       y )N)r!   r7   r"   r-  )r    r7   r"   )r!   r7   r    r?   r   c                  F    t        j                  | dd      j                  S )NTr  rankedrK   )r   page_trend_testr   r   s    r*   r  zLTestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.statistic1d  s"    ((d0<>>GiHr,   c                  F    t        j                  | dd      j                  S )NTr  r  )r   r  r   r  s    r*   pvalue1dzITestPermutationTest.test_vectorized_nsamp_ptype_samples.<locals>.pvalue1d  s"    ((d0799?@r,   r@   Fr   rk  )r<   r@   r   ri  rQ   rE   r   r   r   r   )rQ   r`   r   rankdatar   r`  r_   broadcast_arraysr   rz  r   r   r   r   )r2   r@   r(   rm   r   r   r  r  r   r   expected_statisticexpected_pvaluer  rt   rh   s                  r*   #test_vectorized_nsamp_ptype_samplesz7TestPermutationTest.test_vectorized_nsamp_ptype_samples  s    HHOOO+HHOOO+HHOOO+NN14(NN14(NN14(aD1ay	H	@  44[A	11(;&(;(;T(BNN ""5"5t"<H4H $T)$.q:t[MbffMMkLtLtL'9		Jt~~DIIF

O$))D

DKKd;r,   r6   )r>   r!   g      @rD  g?g&_?g      @gd~$I"@glu?)r(   rm   expected_lessexpected_2sidedexpected_Pr_gte_S_meanr  expected_avgexpected_std)o   k   r]   c   r  j   m   l   )	r  r  r  b   i   r  n   r  h   gd?gd?gYo5 ?g     @@@g{C@gDmFA@casec           	         |d   }|d   }j                  |d         }j                  |d         }j                  |d         }j                  |d         }j                  |d         }	j                  |d         }
fd	}t              }j                  ||
      j                  ||
      }}t        j                         5  t        j                  ddt
               t        ||f|t        j                  d      }t        ||f|t        j                  d      }ddd       t        j                  || j                         t        |j                  |d       t        j                  |d       t        j                  |j                        |	d       t        j                  |j                        |
d       |j                  }j                  |j                        }|j                  j                   d   }j#                  j%                  j'                  |j                  |z
        j'                  ||z
        k\        |j(                        |z  }t        ||       y# 1 sw Y   VxY w)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(   rm   r  r  r  r  r  r  c                     t        |       t        |      }} t        j                  | ||      }j                  |j                        }|j
                  dk(  r|d   S |S r  r  r  s       r*   r   z5TestPermutationTest.test_with_ties.<locals>.statisticM  r  r,   r  r  z$Ties preclude use of exact statisticr   )rE   r   r  Nr   g|=r   r  r   )r1   r   r	  r
  r  UserWarningr   r_   rz  r   r   r   r   r&   r*  r   ry   r  r   r   r   )r2   r  r)   r(   rm   r  r  r  r  r  r  r   r   rt   rh   Sr&   rz   Pr_gte_S_means     `                r*   test_with_tiesz"TestPermutationTest.test_with_ties&  s2   : IIZZ-A(BC

4#89**T*;%<=!#D1I,J!Kzz$~"67zz$~"67	5 !$zz!5z)2::au:+E1$$& 	=##@+O"Aq69"&&/57C#QFI2660;=D	= 	'9		J

M>_5A 6 67DQt5564P MMwws,,-!!''*		""2"2FF3((-."&&4.@#BCD77LNOP'=>)	= 	=s   AI<<Jzalternative, expected_pvalue))r   g?)r   gOO?)r  g<OO?c                    j                  g d      }j                  g d      d}j                  t        j                  t                          fd}t	        |f|dj
                  |      }t        |j                  j                  |      | j                         t        |j                  j                  |      d	       y
)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                     j                  t        j                  t        |       |            } t        j                  | |      j
                  S r~   )r1   r   r  r   r  r   r  s     r*   r   zBTestPermutationTest.test_against_spearmanr_in_R.<locals>.statistic  s=     

5>>*;A*>TJKA>>!QT2<<<r,   rk  )ri  rE   r   r   gvIh%<=r   N)
r1   r   r  r   r   rz  r   r   r   r   )	r2   r   r  r)   r(   r  r   rt   rm   s	      `    @r*   test_against_spearmanr_in_Rz/TestPermutationTest.test_against_spearmanr_in_Rl  s    . JJ < =JJ ; </JJu~~&7&:;<	= tY+-66{L 	rzz2D'EDIIV

BJJ$?eLr,   rI   )rw   r   c                     t        j                  t        d      5  t        t	        j
                  g d|             d d d        y # 1 sw Y   y xY w)Nz`batch` must be positive.r   r   )r.   r/   rR   r   r   _batch_generator)r2   rI   s     r*   test_batch_generator_ivz+TestPermutationTest.test_batch_generator_iv  s?    ]]:-HI 	A--i?@	A 	A 	As   "AAr   rY   )r"   r7   r   r  r  ziterable, batch, expectedc                 P    t        t        j                  ||            }||k(  sJ y r$   )r   r   r  )r2   iterablerI   r   gots        r*   test_batch_generatorz(TestPermutationTest.test_batch_generator  s'     ;//%@Ahr,   c                    |j                  g d|j                        }|j                  g d|j                        }d }t        j                  ||f|d      }|j                  |j
                  |j                  }}}dt        |j                  ||dz
  k\              z  |j                  d	   z  }	||	cxk(  rd
k(  sJ  J y )N)r  r  r  r  r  )r  r  g      @g       @c                 8    t        j                  | ||      d   S )Nr?   r   )r   r  r  s      r*   r   zFTestPermutationTest.test_finite_precision_statistic.<locals>.statistic  s    >>!QT2155r,   rk  rh  r!   r  r   gUUUUUU?)
r1   r   r   r   r   r   r*  r   r   ry   )
r2   r)   r(   rm   r   rt   rr   null	correct_ps
             r*   r-  z3TestPermutationTest.test_finite_precision_statistic  s     JJ'rzzJ:JJ'rzzJ:	6 $$aVY6@B--S5J5J46b..tq5y/@ABBTZZPQ]R	)c)))))r,   N),r-   r  r  r   re  rj  r.   r  r  r_   r`   ra   r   r  r   r  ry  rs  r~  r  r  r   r  r  r  r  r  r  r  r  r  r  r.  r  
tie_case_1
tie_case_2r  r  r  r=  batch_generator_casesr  r2  r-  rp   r,   r*   rc  rc  "  s    D>48p [[^bii.C.C.0ii.C.C.E F[[/CE"2EF"2J [[^bii.C.C.0ii.C.C.E F[[;)+<7+<+<Q+?+BC/,mgmmAq.ABDE<	EF<4<2 [[< <4 [[!!4V[<Q!R< S<6 [[!!T!2[[],LMQ N 3Q, [[!!T!2[[],LMQ N 3Q2 f%9:&[[],LMQ N ' ;Q" f%AB&t$Q % ' CQ$ f_5&[[VW-"< . ' 6"<L [[!!T!2[[],LM#B N 3#BJ [[],LMQ NQ. [[!!T!2Q 3Q* [[],LML NL$ [[[[VW-)< . )<Z $-#/%(,8(+"*GEJ ?C#/%1,8(,"+XGJ [[!!T!2[[[[Vj*%=>A? ?  3A?F [[[[;>?
 [[!!4V[<Q!R[[!!T!2!M 3 S? !MF [[Wg.A /A $Ah2.#AhIy+AB#AhIy1a&+IJL [[8244 [[1[[!!4V[<Q!R* S *r,   rc  c                  v   t        j                  g dt              } t        j                  |       }t	               }d}t        j                  |       D ]Q  }|dz  }t        j                  ||d d       }|j                  t        |D cg c]  }t        |       c}             S t        j                  t        t        |       dz
        D cg c]3  }t        j                  t!        | |d        t!        | |dz   d              5 c}      }t#        ||       t#        t        |      |       y c c}w c c}w )N)r"   r!   r7   r  r   r    rw   )r_   r  r   cumsumsetr   _all_partitions_concatenatedsplitaddrS   	frozensetprodr=  r   r   ry  r  r   )rz   ncall_partitionsr  partition_concatenatedpartitioningrq   r   s           r*    test_all_partitions_concatenatedr    s    	#&A	1BUNG"-"J"J1"M H1xx 63B@5!E1)A,!EFGH
 ww!&s1vax2  c!AB%j#a!g,? 2 3H (#^$h/ "F2s   	D18D6fun_namer   r   r   c                 V   t         j                  j                  d      j                  d      fd}fddfdd|d	d
}ddi}t        t        |       }||    }|j                  |       fd} |d|d d|  |d|dd| d } |d|d d|  |d|dd| y )Nl   r: rL   r-  c                 F    t         j                  j                  |       S )Nr   )r   r   r   r)  s    r*   r   z&test_parameter_vectorized.<locals>.rvs  s    zz~~4c~::r,   rW   )r   rQ   rK   rl  )r   rQ   ri  )rT   r   r	  rE   r]   c                     | j                   dkD  st        j                  |       sJ t        j                  | |      S r  )r	  r_   array_equalr&   )r(   r@   rT   s     r*   r   z,test_parameter_vectorized.<locals>.statistic  s2    vvzR^^Av666wwqt$$r,   )r   r<   Tc                 N    | j                   dk(  sJ t        j                  |       S r  )r	  r_   r&   r  s    r*   r   z,test_parameter_vectorized.<locals>.statistic  s     vv{{wwqzr,   Frp   )r_   r`   r   rF  r   r   )	r  r   fun_optionscommon_optionsr  optionsr   rQ   rT   s	          @@r*   test_parameter_vectorizedr    s    
 ))


/CZZRZ F; +13+7!917	#<E(G28'E	GK
 $S)N
%
"C(#GNN>"% 8)888)88 8)889)99r,   c                       e Zd Zd Zy)TestMonteCarloMethodc                     d}t         j                  j                  d      }t        j                  t
        |      5  t        j                  |j                  |       d d d        y # 1 sw Y   y xY w)Nz.Use of `rvs` and `rng` are mutually exclusive.ir   )r   rQ   )r_   r`   r   r.   r/   rR   r   MonteCarloMethod)r2   r3   rQ   s      r*   test_rvs_and_random_statez.TestMonteCarloMethod.test_rvs_and_random_state  sR    Bii##H-]]:W5 	<""szzs;	< 	< 	<s   "A((A1N)r-   r  r  r  rp   r,   r*   r  r    s    <r,   r  )-r	  r.   r   r_   numpy.testingr   r   scipy._lib._utilr   scipy._lib._array_apir   r   r   r	   r
   r   scipy._lib._array_api_no_0dr   r   
scipy._libr   rG  scipyr   r   scipy.fft.tests.test_fftlogr   scipy.optimizer   scipy.statsr   r   r   r   scipy.stats._resamplingr   r   r  r4  rc  r  r  r  r  r  rp   r,   r*   <module>r"     s      7 )P P H -   8  L L - - 9VA VA VAt #$r8 r8 %r8j 5x? x? x?v #$U
* U
* %U
*|0* NP:P:B< <r,   