
    >qjJn                       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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g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jX                  j[                  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is_lazy_arrayeager_warns)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    `/opt/rentech/trading_bot/.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)r3   r0   r1   
ValueErrorr   tupler(   r2   )r4   r+   sampler5   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rM   )basic
percentileBCarB   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   rN         d   )rK   rM   random_staterB   rG   )rK   rM   rB   rG   r`   )nprandomRandomStaterandr   r3   r(   r   confidence_intervallowhighstandard_error)r4   rM   rB   r+   rS   r*   res1res2s           r,   test_bootstrap_batchz"TestBootstrap.test_bootstrap_batch\   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#   rA   r'   r*   yrB   r+   s      r,   my_statisticz9TestBootstrap.test_bootstrap_paired.<locals>.my_statisticv   s    77AaC!8$7//r.   c                 .    |    }|    } ||      }|S r&    )irB   abresrp   r*   ro   s        r,   my_paired_statisticz@TestBootstrap.test_bootstrap_paired.<locals>.my_paired_statisticy   s&    !A!Aq!$CJr.   rR   T)r:   rS   )ra   rb   rc   r3   rd   arangeshaper   r   re   rf   rg   rh   )r4   rM   r+   rS   nrw   rs   ri   rj   rp   r*   ro   s     `      @@@r,   test_bootstrap_pairedz#TestBootstrap.test_bootstrap_pairedn   s     ii##A&JJsxx{#JJsxx{#	0	 IIaggaj!!2:!QdB0044d6N6N6R6RS0055t7O7O7T7TU++T-@-@Ar.   r:   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 NrA   r'   )r*   ro   zrB   r+   s       r,   rp   z=TestBootstrap.test_bootstrap_vectorized.<locals>.my_statistic   s;    77147(277147+@@2771SW7CXXXr.   )rN   r]   r^   r_   )r:   rM   rS   rB   rG   )r_   )r"   r"   r"   rx   )ra   rb   rc   rd   r3   r   bootstrap_distributionr{   rh   rU   broadcast_toreshapelistpopre   rf   rg   r   )r4   rM   rB   r:   r+   rS   rp   r{   	n_samplesr*   ro   r   ri   r   rj   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	statisticrG   rM   rS   rD   gMb@?rtolga2U0*3?atolr   rG   rO   lessrD   alternativegreaterrr   )ra   rb   default_rngr   normrvstlenr(   semintervalstddictr3   r   r   re   rf   rg   rh   updateppf)r4   rM   r+   rS   r   alphadistref_lowref_highref_seconfigrv   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.   ))rX   gQ7@gHzS@)rY   g\(<@g=
ףpU@)rZ   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)rN   r^         )@r   g+@            "   2   Q   Y   y         i@B r   )rG   rM   rS   g{Gzt?r   )r3   r   r(   r   re   rf   rg   )r4   rM   r   r   r+   r*   rv   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*   ro   rB   s1s2s        r,   r   z?TestBootstrap.test_multisample_BCa_against_R.<locals>.statistic   s+    AD)BAD)B7Nr.   l   tgy4rX   r_   )rM   rK   rS   rY   bcag1*g333333ÿg333333?Q?)
r3   ra   rb   r   r   r   r(   stackre   abs)r4   r+   r*   ro   r   rS   	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   ro   rB   r+   s      r,   r   zHTestBootstrap.test_BCa_acceleration_against_reference.<locals>.statistic2  (    77147(277147+@@@r.   ry   r   r_   ge{?r   )r3   r   r   r   _resampling_bca_intervalr   )r4   r+   ro   r   r   r   rv   rB   r   theta_hat_brK   _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   ry   )r   rD   rG   rK   rM   rB   rS   r   皙?)ra   rb   r   r   r   floatr(   r   r   r3   re   count_nonzero	binomtestintpvalue)r4   rM   expectedr+   rS   r|   rG   rD   r   	stat_truen_replicationsr   rv   cici_contains_truer   s                   r,   #test_bootstrap_against_itself_1sampz1TestBootstrap.test_bootstrap_against_itself_1sampD  s    ii##G, zzaq)$))+&	 xxna0sxCD)+"$'')9$/ %! $$ ++RUY->9rRSuCT,UV8+++ %5!6!13396 	||r.   i|  iz  )rX   rY   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   ry   c                 Z    j                  | |      }j                  ||      }||z
  S r   r'   )data1data2rB   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   rD   rG   rK   rM   rB   r`   rx   )ra   rb   rc   r   r   r   r(   r   r   r3   re   r   r   r   r   )r4   rM   r   r+   rS   n1n2rG   rD   r   dist1dist2r   r   r   r   rv   r   r   r   s      `                r,   #test_bootstrap_against_itself_2sampz1TestBootstrap.test_bootstrap_against_itself_2sampo  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   rA   c                 0     t         fd|D              S )Nc              3   D   K   | ]  }j                  |         yw)rA   Nr'   ).0rV   rB   r+   s     r,   	<genexpr>zSTestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic.<locals>.<genexpr>  s     EfrwwvDw1Es    sum)rB   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  rV   s     r,   r  zVTestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic_1d.<locals>.<genexpr>  s     !CF&++-!Cs   r   )ndimra   r3   r  )r   rV   r   s     r,   statistic_1dzCTestBootstrap.test_bootstrap_vectorized_3samp.<locals>.statistic_1d  s@     ({{a'''(::c!Cd!CC5QQr.   r9   r   Tr_   )r>   rB   rG   rM   rS   Fr   ư>+=r   )ra   rb   rc   rd   astyper   r3   r   re   rf   rg   rh   )r4   rM   rB   r   r+   r   r  rS   r*   ro   r   ri   rj   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*   rB   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   rA   )r  r(   r*   s    r,   r  zCTestBootstrap.test_bootstrap_vectorized_1samp.<locals>.statistic_1d  s"    66Q;;66q6>!r.   l   2 )r#   r$   Tr_   )r>   rB   rG   rK   rM   rS   FrN   r   )
ra   rb   r   r   r3   r   re   rf   rg   rh   )
r4   rM   rB   r+   r   r  rS   r*   ri   rj   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                 B   |j                  dd      }|dk(  rt        j                  d      5  d}t        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	      d
       y # 1 sw Y   xY w# 1 sw Y   =xY w)N)#   g     @rZ   ignore)invalidz0The BCa confidence interval cannot be calculated)r    r+   rL           g-q=r   )fullra   errstater   r   DegenerateDataWarningr   r(   r   re   rf   r3   nanrg   r   rh   )r4   rM   r+   r   msgrv   s         r,   test_bootstrap_degeneratez'TestBootstrap.test_bootstrap_degenerate  s<   wwuf%U?X. VH !<!<CBO 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GV VV Vs$   FBF	F	F	FF)rZ   rX   rY   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#   r9   r   r_   r   i[%  rM   rG   rS   F)rM   rG   rS   r>   )ra   rb   r   r   r   r   r   r3   r   r   re   rf   rg   rh   )r4   rM   r+   rS   r   r   rv   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#   r9   r   r_   r   rZ   if  r$  )ra   rb   r   r   r   r   minr3   r   r   re   rf   maxr   rg   )r4   r+   rS   r   r   true_minrv   rj   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   rY   )rG   rS   rD   rM   r   rZ   )rG   rS   rD   rM   rO   r  r   )ra   rb   r   r   r   r3   r(   r   re   rf   rg   rh   )
r4   r,  r+   rS   r*   r   r   n3rv   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#   r9   r   r_   r   ry   )r   r   rS   rB   rD   r   r   r   r   r   r   r   r  r   z`alternative` must be one ofr   r   z	ekki-ekkirr   )ra   rb   r   r   r   r3   r   r   r   r   r   r   re   rg   rf   isinfr0   r1   rT   )
r4   rM   r+   rS   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$   r9   r         Zt r.  r+   ry   .rA   r#   )rK   r+   )ra   rb   r   nextr   _jackknife_resampler3   rangedeleter   r   concat)
r4   r+   r{   rS   r*   ro   rs   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_namerc   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 rN   r7  r9  )rS   r+   .r   ry   )
getattrra   rb   r   r3   r   _bootstrap_resampler>  r   r   )r4   rE  r+   rng_genrng1rng2rG   r{   rS   r*   ro   rs   rA  jsr   s                  r,   test_bootstrap_resamplez%TestBootstrap.test_bootstrap_resampleP  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)rN         l   Q,? r
  ry   )rB   r+   c                 N    t        j                  t        j                  || |      S r&   )ra   apply_along_axisr   percentileofscore)rt   rN  rB   s      r,   vectorized_posz>TestBootstrap.test_percentile_of_score.<locals>.vectorized_post  s    &&u'>'>aOOr.   rA   r_   V瞯<r   )ra   rb   r   r   r   _percentile_of_scorer3   r   )r4   rN  rB   r+   r{   rS   r*   r   prV  p2s              r,   test_percentile_of_scorez&TestBootstrap.test_percentile_of_scorei  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  rV   rB   s     r,   r  zLTestBootstrap.test_vectorize_statistic.<locals>.statistic.<locals>.<genexpr>  s     <Vv{{4(<s   r  rB   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"   rB   r   )r  )r   rV   r   s     r,   r  z<TestBootstrap.test_vectorize_statistic.<locals>.statistic_1d  s4     ({{a'''(d+++r.   r   r9   r   r8  r"   rA   )r   _vectorize_statisticra   rb   rc   rd   r   )r4   rB   r  
statistic2rS   r*   ro   r   ri   rj   r   s             @r,   test_vectorize_statisticz&TestBootstrap.test_vectorize_statistic{  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"   rO  r   )r_   r_   c                 p    j                  j                  | |      j                  | |d      g      S )NrA   r"   rB   
correction)r   r(   r   )r   rB   r+   s     r,   r   z=TestBootstrap.test_vector_valued_statistic.<locals>.statistic  s=    88RWWTW5VVDtVBD E Er.   ry   '     )rM   rB   rG   rK   r`   r"   rO  r   rA   Z   r_   r#   r_   )r#   r_   rh  )ra   rb   r   r3   normalr   r   re   rf   Trg   allr{   rh   r   )	r4   rM   r+   rS   paramsrV   r   rv   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*   ro   rB   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&   )ra   
nan_to_num)tptnfpfnrB   actualr   rx  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.)ra   newaxis)rB   argsr   s     r,   statistic_extradimzNTestBootstrap.test_vector_valued_statistic_gh17715.<locals>.statistic_extradim  s#    )d)D)"**c/::r.   )r9   r   r   r#   )r#   r"   r#   r"   )r   r8  r   r   )r   r8  r$   r   )r      r"   r   T)rS   r:   r   rW  r   )
ra   rb   r   arrayrm  r   r   re   rf   rg   )r4   rS   r  r   rv   r%  rx  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|)rN   r#   )r]   r#   c                 F    t        j                  | ||      j                  S r   r   	ttest_indr   r*   ro   rB   s      r,   r   z.TestBootstrap.test_gh_20850.<locals>.statistic      ??1ad3===r.   r"   rA   /Array shapes are incompatible for broadcasting.r   rN   r   )
ra   rb   r   r3   r   r   rm  r0   r1   rT   )r4   r+   rS   r*   ro   r   r5   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   r6   rW   r0   markparametrizerk   r}   r   slowxfail_on_32bitr   tests_Rr   r   r   tests_against_itself_1sampitemsr   tests_against_itself_2sampr   r  r  r"  r&  r+  r0  r5  rC  rM  r[  rc  rq  filterwarningsr  r  rr   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H GH [[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
  )r3   )r  kwdsr   rsrvs_inr+   s     r,   r-   z6TestMonteCarloHypothesisTest.get_rvs.<locals>.<lambda>  s*    RZZ0V20VQU0V6; &0 &= r.   rr   )r4   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 )NrA   r"   rf  rO  )r(   rt  r{   )r*   rB   mvr|   r+   s        r,   r   z=TestMonteCarloHypothesisTest.get_statistic.<locals>.statistic  sH    %Aqt2AA!cz>!r.   rr   )r4   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"   rr   r  s      r,   r-   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>  s    r.   ry   rA   r?   r@   r;   r=   0`rvs` must be callable or sequence of callables.r  r  r        @c                     | S r&   rr   r  s    r,   r-   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>      a r.   If `rvs` is a sequence...c                     | S r&   rr   r  s    r,   r-   zDTestMonteCarloHypothesisTest.test_input_validation.<locals>.<lambda>$  r  r.   c                     | S r&   rr   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.rE   rF   rH   rI   rJ   `alternative` must be in...r<   r   z!Signature inspection of statisticc                 b    j                  t        j                  j                  |             S )Nr.  )r3   r   r   r   )r   r+   s    r,   r   z?TestMonteCarloHypothesisTest.test_input_validation.<locals>.rvs@  s!    ::ejjnn$n788r.   r&   )r3   zerosr   r   r   r0   r1   rT   r   r2   r(   str
startswith)r4   r+   r   r  r5   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_statisticH  s    771:r.   z!`statistic` must be vectorized...r  r   Fr=   )
r3   r   r   r   r   r   r0   r1   rT   r(   )r4   r+   r  r5   rV   s    `   r,   test_input_validation_xpz5TestMonteCarloHypothesisTest.test_input_validation_xpG  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 rN   r.  c                     | j                   dk(  rdn| j                  d   }t        |j                        _        xj                  dz  c_         j                        | |      S r  )r  r{   r)  
batch_sizecounterr  )r*   rB   r  r4   r   r+   s      r,   r   z:TestMonteCarloHypothesisTest.test_batch.<locals>.statistic]  s\    ffkqwwqzJ#&z93G3G#HI ")4%%b)!$77r.   r   r   T)rV   r   rG   r>   i r:  r   rK   r"   i  r   r   r#   rr   )ra   rb   r   r3   standard_normalr  r  r  r   r   r   r   r   r   r   )	r4   r+   rS   r*   r  ri   rj   res3r   s	   ``      @r,   
test_batchz'TestMonteCarloHypothesisTest.test_batchV  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.   rB   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$   r9   r_   r  64r   r   )r   r   r  )popmeanrB   r
  )r   r+   Ti N  )r>   rG   rB   r   )ra   rb   r   r3   r   r  rG  r  r   ttest_1sampr  r  r   r   r   r   r   r   r   )r4   rB   r+   rS   r   dtype_default	dtype_strdtype_npr   r*   r   r   r   rv   ref_statistic
ref_pvalues                   r,   test_axis_dtypez,TestMonteCarloHypothesisTest.test_axis_dtype|  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)rR  r.  r  r  r:  r   )ra   rb   r   r  r   r  r3   r  r  r   r   r   r   r   r   r   )	r4   r   r+   rS   r*   r%  r   r   rv   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   rt   g      rO  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  rR  rt   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rG   r>   r   r   r   r   r"   )ra   rb   r   r   skewnormr   r  r   r  r  r   r   r   r   r   )	r4   r   rt   rS   r*   r   r  norm_rvsrv   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*   rB   r  s     r,   r   zLTestMonteCarloHypothesisTest.test_against_normality_tests.<locals>.statistic  s    AD)333r.   Tr>   r   r   )ra   rb   r   r   r  r   r  r   r   r   r   r   r   )
r4   r  r   rt   rS   r*   r   r   r  rv   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*   rB   s     r,   r   zGTestMonteCarloHypothesisTest.test_against_normaltest.<locals>.statistic  s    ##AD1;;;r.   Tr   r  r   )ra   rb   r   r   r  r   r  r  r   r   r   r   r   r   )r4   rt   rS   r*   r   r   r  rv   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rR  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   )ra   rb   r   r   r  r   r  r   r  r  r   r   r   r   r   )r4   rt   rS   r*   r   r  r  rv   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   interpolaterL   )ra   rb   r   r   tukeylambdar   andersonr   )rt   rS   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  rL   c                 H    t        j                  | d      j                  S )Nr  rL   )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*   ra   rb   r   r   r  r   r  r   r   r  rG  r   r   r   )r4   r  r  r  solrt   rS   r*   r   expected_stat
expected_pr  dist_rvsrv   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?)ra   rb   r   r  r   r(   r   )r4   rS   r*   rv   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>.statistic<  r  r.   ry   rA   r   r"   {Gz?r   )
ra   rb   r   rl  r   r   r  r   r   r   r4   rS   r   r   r   rv   r%  s          r,   test_against_ttest_indz3TestMonteCarloHypothesisTest.test_against_ttest_ind7  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  rk  r.  )r#   e   )r#   f   )r#   g   c                 @    t        j                  |d| ij                  S NrB   )r   f_onewayr   )rB   r  s     r,   r   zETestMonteCarloHypothesisTest.test_against_f_oneway.<locals>.statisticK  s    >>43d3===r.   ry   r   rB   r   rB   {Gz?r   )
ra   rb   r   rl  r   r   r"  r   r   r   r  s          r,   test_against_f_onewayz2TestMonteCarloHypothesisTest.test_against_f_onewayD  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 rh  c                 X    dt        j                  d      j                  |       z  S )Nr  gZd;O?)rY  r   )r   	bernoullir   r   rS   s    r,   r   zITestMonteCarloHypothesisTest.test_finite_precision_statistic.<locals>.rvs]  s'    %044$S4QQQr.   r_   r   )r   rG   g     ?r"   )
ra   rb   r   r   r   rt  r  null_distributionr   r   )r4   rG   r   r*   rv   c0c1rS   s          @r,   test_finite_precision_statisticz<TestMonteCarloHypothesisTest.test_finite_precision_statisticU  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   ra   r  r  r  r  r0   r  xslowr  r  r>  r  r  r  linspacer  r   skewtestkurtosistestr  rz   r  r  r  r  r  r%  	fail_slowr  r-  rr   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
  )r3   rl  )r   r   rS   r+   s    r,   r-   z%TestPower.xp_normal.<locals>.<lambda>n  s    BJJszztz'<EJJ r.   )r   )r4   rS   r+   r   s    ```r,   	xp_normalzTestPower.xp_normall  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        ||||j                  d             d d d        |j                  d      }t        |      s5d}t        j                  t        |      5  t        ||||       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   xY w# 1 sw Y   lx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   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 r:  rN   r^   r;   r   r@   r=   r  r<   r  )rN   z/`significance` must be of floating point dtype.Tsignificancer  z8All elements of `significance` must be between 0. and 1.z`kwargs` must be a dictionaryr!   )kwargszNnot be broadcast|Chunks do not add|Incompatible shapes|Attempting to broadcastr]   )r^         r<  r*   z`test` must be callablez(`n_resamples` must be a positive integerirF   g      %@z"`batch` must be a positive integerrJ   )ra   rb   r   r   r  r7  r3   r0   r1   rT   r   r2   r   RuntimeError)r4   r+   rS   testr   n_observationsr5   r:  s           r,   r  zTestPower.test_input_validationp  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#	$ D]]:W5 	L$^"**T:JK	L zz"~\*PGz9 LdClKL 2]]9G4 	?$^I>	?' 	 ]]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 	9m	= 	=	. 	.	N 	N	G 	G	$ 	$	L 	LL L	? 	?	O 	O	7 	7
	- 	-	> 	>	? 	?	8 	8	9 	9s   P5
Q;!Q QQ)7Q6RR2R"AR*R7S4S)SS*5P?QQQ&)Q36R RRR'*R47SSSS'*S3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  rA   )	r  r{   r)  r  r  r   r  r3   r   )r*   rB   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   rN   r   )r?  r@  rG   r:  r"   )r   rK   r   rQ  rr   )
ra   rb   r   r  r  r   r3   r   r7  r   )r4   r+   rS   r  ri   rj   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   )ry   r   r"   r   皙?c           
          t        j                  t        t        d| j                  dz                     }t        |         }t        j                  | |||      S )Nr"   rA   r   rB   )xpxexpand_dimsrU   r>  r  r   r   r  )r*   r   rB   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.   )rN   r   rQ  r   r_   r   )r$  r  皙?r   r:  r:  r;  .c           	      N    t        j                  | |t                       S )Nr#  )r   r  r   )r*   rB   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   rx   )ra   rb   r   r3   r  r   r   r7  r>  r{   appendr   r   r   )r4   r+   rS   r?  nxr;  r:  rv   r%  significance_irs   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   &( rN   r_   r.  r:  )r$  rL  r   r9  r$  r   )ra   rb   r   r   r  r3   integersr7  r   r   r  r{   r   )r4   r+   rS   r?  r@  r   r:  rv   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.   rD  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   rO  r   rN   rQ  r$  rL  r:  rM  r   )	ra   rb   r   r3   r   r   r  r7  r   )r4   r+   rS   r%  r;  r@  r:  rv   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  r0   r  r  r  rX  r   r_  ra  rr   r.   r,   r4  r4  j  s    *. K@9D [[#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      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.d/d0d1d2d3Z"g d4g d5d6d7d8d9d:d;d3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      d@                             Z%ej                  j                  dAdB      dC        Z& e'dD      d
g f e'd      d
g dEg dFgf e'dG      d
g dEg dFddHggfgZ(ej                  j                  dIe(      dJ        Z)ej                  jU                  d      ej                  j+                  dddg      dK               Z+dL Z,yM)NTestPermutationTestr  c                 L    t         j                  j                  d      | _        y )Nl   F )ra   rb   r   rS   )r4   s    r,   setup_methodz TestPermutationTest.setup_method4  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@   rA   z `permutation_type` must be in...r<   permutation_typer;   r=   r  rE   rF   rH   rI   rJ   r  r  rP   rQ   rR   )r3   r0   r1   rT   r   r2   )r4   r+   r  r   r5   s        r,   test_permutation_test_ivz,TestPermutationTest.test_permutation_test_iv8  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 )NrN   c                     | j                   dk(  rdn| j                  d   }t        |j                        _        xj                  dz  c_        j                  | |      j                  ||      z
  S r  )r  r{   r)  r  r  r(   )r*   ro   rB   r  r   r+   s       r,   r   z1TestPermutationTest.test_batch.<locals>.statisticz  sg    ffkqwwqzJ#&z93G3G#HI "77147(277147+@@@r.   r   r_   T)rG   ri  r>   r"   )rK   r`   r  r   r$   r#   )	r3   rS   rb   r  r  r   r   r   r   )r4   ri  r`   r+   r*   ro   r  ri   rj   r  r   s      `      @r,   r  zTestPermutationTest.test_batchp  s    JJtxxr*+JJtxxr*+	A
 	 	"8H"$%%q!fi Lq3??LFJL  C'''##q(((	%%q!fi Lr3??LFJL  A%%%##r)))	%%q!fi Ls3??LFJL  A%%%##s***T[[1T[[1r.   zpermutation_type, exact_sizerk  r$   r#   )rl  r  rm  r8  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'   rn   s      r,   r   z8TestPermutationTest.test_permutations.<locals>.statistic  r   r.   T)ri  r>   r   )rG   r`   )r3   rS   rb   r   r   r	   r*  )
r4   ri  
exact_sizer`   r+   r*   ro   r   r  rv   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'   rn   s      r,   r   zNTestPermutationTest.test_randomized_test_against_exact_both.<locals>.statistic  r   r.   Trm  r_   r>   ri  rK   r   rS   rG   r$  r   )r   binomra   rb   r   r3   r  r   infr   r   r   r4   r+   r   rS   rS  nypermutationsr*   ro   r   r   r  rv   rj   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'   rn   s      r,   r   zQTestPermutationTest.test_randomized_test_against_exact_samples.<locals>.statistic  s    771q5t7,,r.   Trl  r_   rx  rG   r$  r   )
ra   rb   r   r3   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*   rB   ro   s     r,   r   zRTestPermutationTest.test_randomized_test_against_exact_pairings.<locals>.statistic  s    >>!QT2<<<r.   Trl  r_   rx  rG   r$  r   )rS   r   	factorialra   rb   r   r3   r  r   rz  r   r   r   )r4   r+   r   rS   rS  r|  r}  r*   r   r   r  rv   rj   ro   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 )Nr9   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  )rB   r  r   r   rr   )r   r   ks_2sampr3   r   r  )r*   ro   rB   rv   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   rG   r   rS   r   )rS   rl  r   r  r3   r   ra   rz  r   r   r   r   r4   r   r+   r*   ro   r   r   rv   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 )Nr9   r"   r  r   r$   r   r   r  r  r  c                     t        |       t        |      }} t        j                  | ||      }j                  |j                        }|j
                  dk(  r|d   S |S NrA   r   rr   r   r   ansarir3   r   r  r*   ro   rB   rv   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   )rS   rl  r   r  r3   r   ra   rz  r   r   r   r   )
r4   r   r+   r*   ro   alternative_correspondencealternative_scipyr   r   rv   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)rB   rM   )r   mannwhitneyur   r  s      r,   r   z@TestPermutationTest.test_against_mannwhitneyu.<locals>.statisticE  s    %%alKUUUr.   T)r>   rG   r   rB   rS   r   )r   uniformr   rS   r  r3   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 )Nr9   r"   )r   r   r`   r   r$   )r   r   r   r`   r  rL   c                 L    t        j                  | ||d      }|j                  S r  )r   cramervonmises_2sampr   )r*   ro   rB   rv   s       r,   r   z7TestPermutationTest.test_against_cvm.<locals>.statisticY  s"    ,,Q\RC== r.   r   r  r   )r   r   r   rS   r  r3   r   ra   rz  r   r   r   r   )r4   r+   r*   ro   r   r   rv   s          r,   test_against_cvmz$TestPermutationTest.test_against_cvmP  s     JJNNNBJJNNqNI--a7C	!
 zz!}bjjm11vybff+4$((D 	rzz(2D2D'EDIIV

BJJx$?diiPr.   rB   )ry   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"   r9   rB   c                 @    t        j                  |d| ij                  S r!  )r   kruskalr   r_  s     r,   r   zGTestPermutationTest.test_vectorized_nsamp_ptype_both.<locals>.statistic{  s    ==$2T2<<<r.   r   rm  )rB   r   ri  rS   rG   r   r   r   gQ?r   r   )ra   rb   r   r   r  r3   r   rz  r   r   r   r   )r4   rB   r+   rS   r*   ro   r   r   r   r   r  data_rv   rj   s                 r,    test_vectorized_nsamp_ptype_bothz4TestPermutationTest.test_vectorized_nsamp_ptype_bothe  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$   r8  r#   r   r  rL  r"   rF  c                     t        |       } t        j                  | d|      }j                  |j                        }|j
                  dk(  r|d   S |S Nr   rF  r   rr   r   r   wilcoxonr3   r   r  )r   rB   rv   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  )rB   r   ri  rS   rG   r   r  )r   r  r   rS   r  r3   ra   rz  r   r   r   r   r   )r4   r   r+   r*   ro   r   r  r  r  ri   rj   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#   rN   r.  ry   c                 D    t        |       }|j                  | dkD  |      S )Nr   rA   )r
   r   )r*   rB   xp_s      r,   r   z=TestPermutationTest.test_against_binomtest.<locals>.statistic  s&    !!$C$$QU$66r.   rO  r  r
  Trl  )r>   ri  rG   rS   r   r   r   )rS   r^  r   r   r   r3   r   rz  r   r   r   )
r4   r   r+   r*   r   kr|   rY  r   rv   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 )	Nr8  r.  r  rL   c                     t        |       } t        j                  | d|      }j                  |j                        }|j
                  dk(  r|d   S |S )Nr  )rM   rB   r   rr   )r   r   
kendalltaur3   r   r  )r*   rB   rv   r+   ro   s      r,   r   z>TestPermutationTest.test_against_kendalltau.<locals>.statistic  sN    !!$A""1a4HC**S]]+C!hh!m3r744r.   rk  )ri  rG   rS   r   )rS   rl  r   r  r3   r   ra   rz  r   r   r   r   )r4   r+   r*   r   r   rv   ro   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"   rA   )r   r*   rB   r+   ro   s     r,   r   z@TestPermutationTest.test_against_fisher_exact.<locals>.statistic  s&    ##Q!VQ$7d#CCr.   rk  )ri  rG   r   rS   r  r
  )ra   rb   r   r  r   r   contingencycrosstabr3   r   rz  fisher_exactr   r   r   )
r4   r   r+   rS   r*   tabr   rv   rj   ro   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#   r9   r$   r.  )r"   r9   r$   )r#   r9   r"   rA   r   c                  F    t        j                  | dd      j                  S )NTr  rankedrM   )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.   rB   Fr   rk  )r>   rB   r   ri  rS   rG   r   r   r   r   )rS   rb   r   rankdatar   ra  ra   broadcast_arraysr   rz  r   r   r   r   )r4   rB   r*   ro   r   r   r  r  r   r   expected_statisticexpected_pvaluer  rv   rj   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.   r8   )r@   r#   g      @rD  g?g&_?g      @gd~$I"@glu?)r*   ro   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*   ro   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>.statisticY  r  r.   r
  r  z$Ties preclude use of exact statisticr   )rG   r   r  Nr   g|=r   r  r   )r3   r   r	  r
  r  UserWarningr   ra   rz  r   r   r   r   r(   r*  r   r{   r  r   r   r   )r4   r  r+   r*   ro   r  r  r  r  r  r  r   r   rv   rj   Sr(   r|   Pr_gte_S_means     `                r,   test_with_tiesz"TestPermutationTest.test_with_ties2  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   )r3   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  rG   r   r   gvIh%<=r   N)
r3   r   r  r   r   rz  r   r   r   r   )	r4   r   r  r+   r*   r  r   rv   ro   s	      `    @r,   test_against_spearmanr_in_Rz/TestPermutationTest.test_against_spearmanr_in_Rx  s    . JJ < =JJ ; </JJu~~&7&:;<	= tY+-66{L 	rzz2D'EDIIV

BJJ$?eLr.   rK   )ry   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!   )r0   r1   rT   r   r   _batch_generator)r4   rK   s     r,   test_batch_generator_ivz+TestPermutationTest.test_batch_generator_iv  s?    ]]:-HI 	A--i?@	A 	A 	As   "AAr   r[   )r$   r9   r   r  r  ziterable, batch, expectedc                 P    t        t        j                  ||            }||k(  sJ y r&   )r   r   r  )r4   iterablerK   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 )NrA   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?)
r3   r   r   r   r   r   r*  r   r   r{   )
r4   r+   r*   ro   r   rv   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.   c                    t         j                  j                  d      }t              }j	                  |j                  d      |      }j	                  dddj
                  dg      }j	                  |j                  d      |      }fd}d|dd	}t        ||f|fi |}	j                  |||z   g      |f}
t        |
|fi |}j	                  j
                  |      }t        |j                  d   |	j                         t        |j                  d   |	j                         t        |j                  d
   |       t        |j                  d
   |       y )Nl    G+ r   r
  r   r8  c                 R    j                  | |      j                  ||      z
  S r   r'   rn   s      r,   r   z9TestPermutationTest.test_nan_statistic.<locals>.statistic  r   r.   rm  ry   )ri  rS   rB   r"   )ra   rb   r   r   r3   r   r   r   r   r   r   )r4   r+   rS   r   r*   x_nanro   r   r  r%  r   rv   NaNs    `           r,   test_nan_statisticz&TestPermutationTest.test_nan_statistic  s1    ii##J/ $JJszz!}EJ2

Aq!RVVQ/0JJszz!}EJ2	A %2#rJ1vy9D9!QY(!,tY7$7jjuj-a(#--8

1szz2a(#.

1s+r.   N)-r/   r  r  r   re  rj  r0   r  r  ra   rb   rc   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-  r  rr   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$ &[[VW-"< . '"<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#   r9   r
  r   r"   ry   )ra   r  r   cumsumsetr   _all_partitions_concatenatedsplitaddrU   	frozensetprodr>  r   r   ry  r  r   )r|   ncall_partitionsr  partition_concatenatedpartitioningrs   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: rN   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.   rY   )r   rS   rM   rl  )r   rS   ri  )rV   r   r  rG   r_   c                     | j                   dkD  st        j                  |       sJ t        j                  | |      S r  )r  ra   array_equalr(   )r*   rB   rV   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  ra   r(   r  s    r,   r   z,test_parameter_vectorized.<locals>.statistic  s     vv{{wwqzr.   Frr   )ra   rb   r   rG  r   r   )	r  r   fun_optionscommon_optionsr  optionsr   rS   rV   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   rS   )ra   rb   r   r0   r1   rT   r   MonteCarloMethod)r4   r5   rS   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  rr   r.   r,   r  r    s    <r.   r  )0r	  r0   r   ra   numpy.testingr   r   scipy._lib._utilr   scipy._lib._array_apir   r   r   r	   r
   r   r   r   scipy._lib._array_api_no_0dr   r   scipy._externalr   rG  scipyr   r   scipy.fft.tests.test_fftlogr   scipy.optimizer   scipy.statsr   r   r   r   scipy.stats._resamplingr   lazy_xp_modulesr   r  r4  rc  r  r  r  r  r  rr   r.   r,   <module>r(     s      7 )? ? ? I 2   8  L L - - ' 9VA VA VAt #$r8 r8 %r8j 5A? A? A?H #$t
, t
, %t
,n0* NP:P:B< <r.   