
    IR-eFv                     "   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
 d dlmZmZ d dlmZ d Zd Zd	 Zd
 Zd Zd Zej                            e d          d             Zej                            e d          d             Zd Zd Zd Zej                            e d          d             Zd Zd Zd Z ej        !                    d          d             Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)ej                            e d          ej        *                    d!g d"          d#                         Z+d$ Z,ej                            e d          d%             Z-d& Z.d' Z/ej                            e d          d(             Z0ej                            e d          d)             Z1ej                            e d          d*             Z2ej                            e d          d+             Z3ej                            e d          ej        *                    d,g d-          d.                         Z4ej                            e d          d/             Z5ej                            e d0          d1             Z6ej                            e d          d2             Z7ej                            e d          d3             Z8ej                            eped4          d5             Z9ej                            e d          ej        *                    d6g d7          d8                         Z:ej                            e d          ej        *                    d9g d:          d;                         Z;ej                            e d          ej        *                    d9g d:          d<                         Z<ej                            e d          d=             Z=ej                            e d          ej        *                    d9g d:          d>                         Z>ej                            e d          d?             Z?ej                            e d          d@             Z@ej                            e d          ej        *                    dAg dB          dC                         ZAej                            e d          ej        *                    dD ejB        dEdFdGej        C                    dH          I           ejB        dJdFdKej        C                    dH          I          dLdMg          dN                         ZDdS )O    N)assert_allcloseassert_equal)units)funcs)
HAS_MPMATH	HAS_SCIPY)NumpyRNGContextc            	         t          d          5  t          j                            d          } t	          j        |           }|                     d          } t	          j        | d          }t          |          dk    sJ |j        | j        k     sJ t	          j        | d          }t          |          dk    sJ |j        | j        k     sJ t          j	        d	          t          j
        fd
t          t                              D                                           ddd          }t	          j        |          }|dk    sJ t	          j        |d          }t          |g dg dg dg dg           t	          j        |d          }t          |g dg dg dg           t	          j        |d          }t          |g dg dg dg           d d d            d S # 1 swxY w Y   d S )N90  '  )
        axisr   r   r   <   c                 D    g | ]}t          d |dz                      S Nr   )sum).0ixs     >lib/python3.11/site-packages/astropy/stats/tests/test_funcs.py
<listcomp>z2test_median_absolute_deviation.<locals>.<listcomp>   s+    ===!c!Ga!eG*oo===             g     Xx@)g     @j@g     l@g     @o@g     p@g      r@)g     `s@g     t@g     u@g      w@g     `x@)g     y@g     z@g      |@g     `}@g     ~@)g     @g     @g     0@g     Ё@g     p@)g     ;@g     @@@g     B@g     @E@g     G@)g     _@g     `@g     0a@g     a@g     pb@)g     pl@g     m@g     m@g     Pn@g     n@   )g      @g       @g      *@g      2@)g      7@g      <@g     @@g      C@)g     E@g      H@g     J@g      M@)r	   nprandomrandnr   median_absolute_deviationreshapelensizearangearrayranger   )randvarmadar   s      @r   test_median_absolute_deviationr-      s   			 -
 -
)//%((-g66 //*---gA>>>3xx2~~~~x',&&&&-gA>>>3xx4x',&&&&Ii  H====uSVV}}===>>FFq!QOO-a00e||||-aa888333333333333		
 	
 	
 -aa888...333333	
 	
 	
 -aa888&&&((((((	
 	
 	
M-
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
 -
s   GG00G47G4c                  J   t           j                            g d          } t          j        |           dk    sJ t           j                            g dg d          } t          j        |           dk    sJ t          j        |           t          j        | | j                            k    sJ t           j                            ddgddggddgddgg          } t          j        |            t          j        |           dk    sJ t          j        | j                  d	k    sJ t           j                            t          j        | d
          j        ddg           t           j                            t          j        | d
          j        ddg           d S )Nr   r   r   r   )r   r   r   )r   r   r   maskr   r   r         ?r   )	r    mar(   r   r#   r1   datatestingassert_array_equalr(   s    r   %test_median_absolute_deviation_maskedr8   >   s   
 EKK			""E*511Q6666 EKK						K22E*511Q6666 *511'uzk(:;;   
 EKK!Q!Q(AA/?K@@E	#E****511Q6666*5:66#==== J!!'A666;aV   J!!'A666;aV    r   c                  >   t          j        dddt           j        gddt           j        dgg          } t          t	          j        | t           j        d          ddg           t           j                            |           } t	          j        |           dk    sJ d S )Nr   r   r   r   r   )funcr   )	r    r(   nanr   r   r#   	nanmedianr3   masked_invalidr7   s    r   #test_median_absolute_deviation_nansr>   `   s    Hq!Q'!Q):;<<E'BLqIIIAq6   E  ''E*511Q666666r   c                  P   t          j        dt           j        dt           j        g          } t           j                            | d          }t          j        | d          }t          j        |d          }t          ||           t          j	        |d                   sJ dS )	z}
    Regression test to ensure ignore_nan=True gives same results for
    ndarray and masked arrays that contain +/-inf.
          ?r   Fr0   T
ignore_nanr   N)
r    r(   r;   infr3   masked_arrayr   r#   r   isnan)data1data2mad1mad2s       r   *test_median_absolute_deviation_nans_maskedrJ   j   s     Hc261bf-..EEu511E*5TBBBD*5TBBBDt 8E!Hr   c                  R   t          j        d          t          j        d          d d t           j        t           j        f         z  } t	          j        | d          }t	          j        | d          }t          |t          j        d                     t          ||           d S )N)r   r   r   r   r   r   r   )r   r   )r    onesr'   newaxisr   r#   r   zeros)r(   rH   rI   s      r   ,test_median_absolute_deviation_multidim_axisrP   z   s    GI1aaaRZ.G!HHE*5v>>>D*5v>>>Drx{{###tr   c                      t          j        g d          t          j        z  } t	          j        |           }|j        | j        k    sJ |j        t	          j        | j                  k    sJ d S )N)r      r   )r    r(   umr   r#   unitvalue)r,   r+   s     r   'test_median_absolute_deviation_quantityrW      sk    
 	qs"A

)!
,
,C 8qv97@@@@@@@@r   zrequires scipy)reasonc                     dg d} dD ]tt          j        | d          }|dk    |dk    z                                  sJ t          j        | d          }|dk    |dk    z                                  sJ ug d	} d
dt          j        | d          }t          j        g dg dg          }t          ||dd           t          j        fd| D                                                       }t          ||dd           t          j        | d          }t          j        g dg dg          }t          ||dd           t          j        ddd          }t          |d           t          j        ddd          }t          |d           t          j        dddd          }t          |d         ddt          j        d          z  z
             t          |d         ddt          j        d          z  z              d} d
dD ]&}t          j        | |          }|j        dk    sJ 't          j        |           } dD ]&}t          j        | |          }|j        dk    sJ 't          j                  dD ]&}t          j        | |          }|j        dk    sJ 't          j        g d           } dD ]&}t          j        | |          }|j        d!k    sJ 't          j        g d"          dD ]&}t          j        | |          }|j        d!k    sJ 'd S )#Nr   )r   r   r   )        r2   r@   wilsonconfidence_levelintervalrZ   r@   jeffreys)r   r   r   r   r      ffffff?)rZ   gMb?gp=
ף?gn?gʡE?)g㥛 ?gx&1?g#~j?gPn?gZd;O?MbP?)atolrtolc                 @    g | ]}t          j        |d           S )r_   r\   )r   binom_conf_interval)r   kvalconfns     r   r   z,test_binom_conf_interval.<locals>.<listcomp>   sF     	
 	
 	
  %a$  	
 	
 	
r   flat)rZ   gTN?g6Yѵ?gW?gW?)g.4i?g+?gO@a?gOc*?ge1?r   waldr^     r   g鲘?r2        @@r   r   )rk   r[   r_   rj   )r   )r   r   r   )r   r   )r   r   r   )	r   rf   allr    r(   r   	transposesqrtshape)kresresulttabler^   rh   ri   s        @@r   test_binom_conf_intervalrw      s    	
A		A 3 3'1thWWWs
+0022222'q4*
 
 
 s
+00222222 	A	AD&q!dZXXXFH	,	,	,.Q.Q.QR E FES9999 X	
 	
 	
 	
 	
 		
 	
 	
  ikk  FES9999 &q!dVTTTFH555999	
 E FES9999 &q!f===FFC   &q!f===FFC   &TGf  F F1IsS276??%::;;;F1IsS276??%::;;; 	
A	A: $ $*1a(CCC|t#####
A: $ $*1a(CCC|t#####
A: $ $*1a(CCC|t#####
A: & &*1a(CCC|v%%%%%
A: & &*1a(CCC|v%%%%%& &r   c                     d} t          j        ddd          }t          j        t          |          t                    }t          j        |||           \  }}}}|j        | fk    sJ |j        | fk    sJ |j        | fk    sJ |j        d| fk    sJ |dk                                    sJ d	|d d <   t          j        |||           \  }}}}|dk                                    sJ d S )
N   rZ         $@d   )dtype)binsr   r@   F)	r    linspacerM   r%   boolr   binned_binom_proportionrr   ro   )nbinsr   successbin_ctrbin_hwpperrs          r   test_binned_binom_proportionr      s    E
Cs##Agc!ffD)))G$<QeTTTGVQ =UH$$$$<E8####7uh:!U#### H>> GAAAJ$<QeTTTGVQH>>r   c                      t          j        t                    5  t          j        dgddgd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   g      ?r]   )pytestraises
ValueErrorr   r    r   r   &test_binned_binom_proportion_exceptionr      s    	z	"	" J J%qcAq6DIIIIJ J J J J J J J J J J J J J J J J Js   AA	Ac            	         t          j        dddddd          } | dk    sJ t          j        ddddddd          } | dk    sJ t          j        dddddd          } | dk     sJ t          j        dddddd          } | dk     sJ t          j        dddddd          } | dk     sJ t          j        dddddd          } | dk    sJ d S )Nr      r         @r   r   )r   signal_to_noise_oir_ccd)ru   s    r   test_signal_to_noise_oir_ccdr      s    *1b!Q1==FS====*1aAq!Q??FS==== *1b!Q1==FC<<<<*1b!Q1==FC<<<<*1b!Q1==FC<<<< *1b!Q1==FC<<<<<<r   c                     t          j        g d          } t          j        g dg dg          }t          d          5  t          |t	          j        | d                     d d d            n# 1 swxY w Y   t          d          5  t          j        t	          j        | dt           j                            }t          t          j        |           |d	           d d d            d S # 1 swxY w Y   d S )
N
r   r   r   r   r      r`      	   r   )
r`   r   r   r   r`   r   r   r`   r   r   
r   r   r   r   r   r   r   r   r   r   *   r   r   bootfunc{Gz?rc   )r    r(   r	   r   r   	bootstrapmeanr   )bootarranswer
bootresults      r   test_bootstrapr     s   h55566GX5557U7U7UVWWF			 : :VU_Wa88999: : : : : : : : : : : : : : : 
		 A AWU_WebgNNNOO
((*4@@@@A A A A A A A A A A A A A A A A A As%    $A00A47A4
AC//C36C3c                  "   ddl m t          d          5  t          j        g dg dg          j        } t          j        d          }fd}t          j        | d|	          }t          ||d
           d d d            n# 1 swxY w Y   t          d          5  t          j        g dg dg          j        } t          j        d          }fd}t          j        | d|	          }t          ||d
           d d d            n# 1 swxY w Y   t          d          5  t          j        d          }fd}t          j        | d|	          }|j	        dk    sJ t          ||d
           d d d            d S # 1 swxY w Y   d S )Nr   )	spearmanrr   r   r   )gw/?gKq?c                 &     |           d         S )Nr   r   r   r   s    r   r   z1test_bootstrap_multiple_outputs.<locals>.bootfunc/      9Q<<?"r   r   r   rb   r   )鷯?眢#?c                 &     |           d         S r   r   r   s    r   r   z1test_bootstrap_multiple_outputs.<locals>.bootfunc?  r   r   ))gq?r   )gAf?r   )g2ı.n?gʡE?c                      |           S )Nr   r   s    r   r   z1test_bootstrap_multiple_outputs.<locals>.bootfuncJ  s    9Q<<r   r   )r   r   )
scipy.statsr   r	   r    r(   Tr   r   r   rr   )r   r   r   r   r   s       @r   test_bootstrap_multiple_outputsr   "  s   %%%%%% 
		 7 7(+++-K-K-KL
 

 	 ,--	# 	# 	# 	# 	# _Wa(CCC

66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7  
		 7 7(+++-K-K-KL
 

 	 *++	# 	# 	# 	# 	# _Wa(CCC

66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 
		 	7 	7PQQ	  	  	  	  	  _Wa(CCC
6))))
6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s8   A"BB	B	A"DDD'AFFFc                      t          d          5  t          j                            ddd          } t	          t          j        |           dd           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r{   r{   r&          @皙?rd   )r	   r    r!   normalr   r   mad_stdr4   s    r   test_mad_stdr   S  s    			 = =y1:66d++St<<<<= = = = = = = = = = = = = = = = = =s   AA$$A(+A(c                  J   t          d          5  t          j                            ddd          } t          j                            t          j        |           |           } t          j        |           }t          j	        |          sJ t          j
        | d<   t          j        | d          }t          j	        |          sJ t          j        |           }t          j	        |          sJ t          j        |          sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r   r   r   r   r   TrA   )r	   r    r!   r   r3   masked_whererE   r   r   isscalarr;   r4   rslts     r   test_mad_std_scalar_returnr   Y  sE   			  y1844u!!"(4..$77}T""{4     VT
}Td333{4     }T""{4     x~~                 s   C:DDDc                     t          d          5  t          j                            ddd          } t          j        | d<   t          j        | d          }t          j        |          sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r   r   r   FrA   )r	   r    r!   r   r;   r   r   rE   r   s     r   test_mad_std_warnsr   k  s    			  y1844VT
}Te444x~~	                    AA<<B B z*ignore:Invalid value encountered in medianc            
         t          d          5  t          j        ddg          } t          j        | d d <   t          j                            ddd          | ddddf<   t          t          j        | d	
          dd           d d d            n# 1 swxY w Y   t          j	        t          j        dddddt          j        g                    sJ t          t          j        dddddt          j        gd	
          d           d S )Nr   f   r   r   r   r   r   TrA   r   r   r   r   r   gtV?)
r	   r    emptyr;   r!   r   r   r   r   rE   r   s    r   test_mad_std_withnanr   s  sZ   			 N Nxc
##&QQQ9++Aqz+BBQrT1R4Zdt<<<cMMMM	N N N N N N N N N N N N N N N 8EM1aAq"&"9::;;;;;q!Q1bf-$???AR    s   A9BBBc                  "   t          j        g dg dg          } t          j        g d          }t          j        ddg          }t          t          j        | d          |           t          t          j        | d          |           d S )N)r   r   r   r   )r   r   r   r   )#>ԍ@.?r   r   .?r   r   r   )r    r(   r   r   r   r4   result_axis0result_axis1s      r   test_mad_std_with_axisr     s    8\\\<<<011D8LLLMML8Z455LEM$Q///>>>EM$Q///>>>>>r   c                     t          j        ddddt           j        gddddt           j        gg          } t          j        ddddt           j        g          }t          j        ddg          }t          j        t
          d	          5  t          t          j        | d
d          |           t          t          j        | dd          |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r   r   All-NaN slice encounteredmatchr   Tr   rB   )	r    r(   r;   r   warnsRuntimeWarningr   r   r   r   s      r   test_mad_std_with_axis_and_nanr     s0   8aAq"&)Aq!Q+?@AAD8ZZRVTUUL8Z455L	n,H	I	I	I T TdtDDDlSSSdtDDDlSSST T T T T T T T T T T T T T T T T Ts   	AC!!C%(C%c                     t          j        ddddt           j        gddddt           j        gg          } t          j        t
          d          5  t          j        | dd	          }d d d            n# 1 swxY w Y   t           j        	                    |          rJ t           j        
                    t          j        |           |           } t          j        | dd	          }t           j        	                    |          sJ d S )
Nr   r   r   r   r   r   r   Tr   )r    r(   r;   r   r   r   r   r   r3   isMaskedArrayr   rE   )r4   ru   s     r   )test_mad_std_with_axis_and_nan_array_typer     s$   8aAq"&)Aq!Q+?@AAD	n,H	I	I	I > >t!===> > > > > > > > > > > > > > >u""6*****5bhtnnd33D]4aD999F5v&&&&&&&s   A44A8;A8c                      dt          j        dt          j        d          z            z  } t          t          j        | z  dd           d S )Nr   r@   ư>r   )r    rq   logr   r   gaussian_fwhm_to_sigma)fwhms    r   test_gaussian_fwhm_to_sigmar     sF    rvc{{*+++DE0476JJJJJJr   c                      ddt          j        dt          j        d          z            z  z  } t          t          j        | z  dd           d S )Nr@   r   r   r   )r    rq   r   r   r   gaussian_sigma_to_fwhmsigmas    r   test_gaussian_sigma_to_fwhmr     sK    3rvc{{!23334EE058#FKKKKKKr   c                  T    t          t          j        t          j        z  d           d S )Nr@   )r   r   r   r   r   r   r   $test_gaussian_sigma_to_fwhm_to_sigmar     s$    E053OOQTUUUUUr   c                  N    t          t          j        dd          d           d S )NrR   root-nrl   )   ry   r   r   poisson_conf_intervalr   r   r    test_poisson_conf_interval_rootnr     s(    E/XFFFQQQQQr   r^   )root-n-0pearsonsherpagehrelsfrequentist-confidencec                 ~    d}t          t          j        |d          t          j        ||           d           d S )Nr{   r   rl   {Gz?r   r   )r^   ri   s     r   test_poisson_conf_larger     sS    
 	A#A999#A999     r   c                  d   t          j        d          } t          t          j        | d          t          j        | d         d          d d d d d f         t          j        |           z             t          j        t          j        t          j        | d                              rJ d S )Nr   r   r   r   rl   r   r   r   r    rO   r   r   r   	ones_likeanyrE   ri   s    r   #test_poisson_conf_array_rootn0_zeror     s    
A#A
;;;#AgJDDDAAtT4	
 ,q//	   vbhu:1zRRRSSTTTTTTTr   c                  d   t          j        d          } t          t          j        | d          t          j        | d         d          d d d d d f         t          j        |           z             t          j        t          j        t          j        | d                              rJ d S )Nr   r   rl   r   r   r   r   s    r   3test_poisson_conf_array_frequentist_confidence_zeror    s    
A#A0HIII#AgJ9QRRRAAtT4	
 ,q//	   vbhu:1zRRRSSTTTTTTTr   c                      g d} t          t          j        | d          g dg dg           t          j        t          j        t          j        | d                              rJ d S )Nr   r   rl   )r   r   r   )r   r   r   r    r   rE   r   s    r   "test_poisson_conf_list_rootn0_zeror    sw    		A#A
;;;iii=S   vbhu:1zRRRSSTTTTTTTr   c                  t   dt          j        d          z  } t          t          j        | d          t          j        | d         d          d d d d d f         t          j        |           z             d| d<   t          j        t          j        t          j        | d                              rJ d S )Nr`   r   r   rl   r   r   r/   r    rM   r   r   r   r   r   rE   r   s    r   test_poisson_conf_array_rootn0r    s    	BGIA#A
;;;#AgJDDDAAtT4	
 ,q//	   AgJvbhu:1zRRRSSTTTTTTTr   c                  t   dt          j        d          z  } t          t          j        | d          t          j        | d         d          d d d d d f         t          j        |           z             d| d<   t          j        t          j        t          j        | d                              rJ d S )Nr`   r   r   rl   r   r   r/   r  r   s    r   test_poisson_conf_array_fcr    s    	BGIA#A0HIII#AgJ9QRRRAAtT4	
 ,q//	   AgJv
,Q9QRRRSS      r   c                      t          j        g d          } t          t          j        | dddf         d          | ddddf         j        dd           dS )	6Test intervals against those published in Gehrels 1986))r   r   g~jt?)r   g/$?gffffff
@)r   g-?gZd;O@)r   gZd;?gy&1@)r   g㥛  @gx@)r   gQ@g$ @)r   g(\@g^I+#@)r`   gV@g
ףp=%@)r   g!rh@gfffff'@)r   g|?5^:@gQ8*@)r   gMb@g
ףp=,@Nr   r   rl   r   rb   )rd   rc   r    r(   r   r   r   r   nlhs    r   0test_poisson_conf_frequentist_confidence_gehrelsr    s     (	
 	
 	
 C #C1I8PQQQAAAqrrE
	     r   c                      t          j        g d          } t          t          j        | dddf         dd          j        | ddddf         d           dS )	a   Test intervals against those published in Gehrels 1986

    Note: I think there's a typo (transposition of digits) in Gehrels 1986,
    specifically for the two-sigma lower limit for 3 events; they claim
    0.569 but this function returns 0.59623...

    ))r   r   r   g$C@)r   r   gZd;O?gZd@)r   r   gq=
ףp?g1Zd@)r   r   gOn?g!@)r   r   g!rh?gHz$@)r   r   gS?gp=
ף'@)r   r   gMbX9@gq=
ףp*@)r`   r   gMb@gGz.-@)r   r   gT㥛 @gzG/@)r   r   gv/@gQE1@)r   r   gK7A@gGz2@Nr   r   r   r   r^   r   r   r  r  s    r   7test_poisson_conf_frequentist_confidence_gehrels_2sigmar    s     (	
 	
 	
 C #1IQ)A	
 	
 	

AAAqrrE
     r   c                      t          j        g d          } t          t          j        | dddf         dd          j        | ddddf         dd	
           dS )r
  ))r   r   r   g;On@)r   r   g_vOV?g!@)r   r   ghs?g=
ףp%@)r   r   gA`"?g\(\)@)r   r   g(\?gHz,@)r   r   gMbX?gHz0@)r   r   g?gQ1@)r`   r   gS?gQ+3@)r   r   g%C @gq=
ף4@)r   r   g/$@gGz.6@)r   r   gy&1@gp=
ף7@Nr   r   r   r  r   r   T)rd   verboser  r  s    r   7test_poisson_conf_frequentist_confidence_gehrels_3sigmar  ?  s     (	
 	
 	
 C #1IQ)A	
 	
 	

AAAqrrE
     r   ri   )r   r   r   r   r   ry   r{   c                     t          t          j        | d          d         t          j        | d          d         d           d S )Nr   rl   r   r   r   r   r   r   s    r   test_poisson_conf_gehrels86r  [  sY     #A@@@C#A0HIII!L     r   c            	         t          t          j        ddd          dd           t          t          j        t          j        d          dd          dd           t          t          j        t          j        d          dd          dd           t          t          j        dt          j        d          d          dd           t          t          j        dt          j        d          d          dd           t          t          j        ddt          j        d                    dd           t          t          j        ddt          j        d                    dd           t          j        ddgd	dd
gddg          } t          | dddf         dd           t          | dddf         dd           dS )zTest that the lower-level routine gives the snae number.

    Test numbers are from table1 1, 3 in
    Kraft, Burrows and Nousek in
    `ApJ 374, 344 (1991) <https://ui.adsabs.harvard.edu/abs/1991ApJ...374..344K>`_
    r         @Gz?r   gףp=
W%@rb   r   r   r   kraft-burrows-nousekr   ?
backgroundr]   Nr   r   gQ?g{G!@{Gzt?)	r   r   _scipy_kraft_burrows_nousekr    int32int64float32float64r   )rh   s    r   test_scipy_poisson_limitr&  e  s    )!S$77$    )"(3--dCC   
 )"(3--dCC   
 )!RZ__dCC   
 )!RZ__dCC   
 )!S"*T2B2BCC   
 )!S"*T2B2BCC   
 &	
A:	  D DAJ
6666DAJ4888888r   zrequires mpmathc            	         t          t          j        ddd          dd           t          t          j        ddd          d	d           t          t          j        d
dd          dd           t          t          j        d
dd          dd           t          t          j        t          j        d          dd          dd           t          t          j        t          j        d          dd          dd           t          t          j        dt          j        d          d          dd           t          t          j        dt          j        d          d          dd           t          t          j        ddt          j        d                    dd           t          t          j        ddt          j        d                    dd           t          t          j        d
dd          dd           t          t          j        dddd          d d df         d           t          j        ddd          } d S )Nr@   g?r  )rZ   g)\(@r   r   r2   ra   )rZ   gq=
ףp@r   rZ   )gQ?gp=
ף*@r  r  rb   r   r   r  r        @   gL7A`Qc@r  )ri   r  r]   r^   r   )r   gM>@rn   g      @)	r   r   _mpmath_kraft_burrows_nousekr    r"  r#  r$  r%  r   )_s    r   test_mpmath_poisson_limitr,    s   *3T::Lt    *3T::Lt    *3T::MPT    *3T::JT    *28A;;SAA   
 *28A;;SAA   
 *3
3EE   
 *3
3EE   
 *3RZ__EE   
 *3RZ__EE   
 *3T::JT    #!+		
 	
 	

 !!Q$	 	   	*65#>>AAAr   c                  h   t          j        t          d          5  t          j        ddgdd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        ddgd	d
dg           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        ddgdd
dg           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        dd           d d d            d S # 1 swxY w Y   d S )NzOnly sigma=1 supportedr   r   r   r   r   r   zbackground not supportedr   r  r   r  zconfidence_level not supportedr   r   zInvalid methodr   foo)r   r   r   r   r   r   r   r   test_poisson_conf_value_errorsr0    sL   	z)A	B	B	B ? ?#QFHA>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
z)C	D	D	D N N#QFI3*MMMMN N N N N N N N N N N N N N N 
z)I	J	J	J 
 
#FOsCj	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z)9	:	:	: . .#Au---. . . . . . . . . . . . . . . . . .sG   AA	A(BBB6CC"%C"D''D+.D+c                      t          j        t          d          5  t          j        dddd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        ddd	           d d d            n# 1 swxY w Y   t          j        t          d
          5  t          j        dddd           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          j        dddd           d d d            n# 1 swxY w Y   t          j        t
          d          5  t          j        ddgdddgddg           d d d            d S # 1 swxY w Y   d S )Nznumber between 0 and 1r   r   r  r  c   r  zSet confidence_level for methodr.  zBackground must beg      r  z Number of counts must be integerr   r(  r   r  )r   r   r   r   r   	TypeErrorr   r   r   "test_poisson_conf_kbn_value_errorsr4    s   	z)A	B	B	B 
 
#%#	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
z)J	K	K	K O O#A'=#NNNNO O O O O O O O O O O O O O O 
z)=	>	>	> 
 
#%$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
y(J	K	K	K 
 
#'C$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
y(J	K	K	K 
 
##J"Sz"C[		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sY   AAA'BBB1CCC<D!!D%(D%E33E7:E7z!requires neither scipy nor mpmathc                      t          j        t                    5  t          j        dddd           d d d            d S # 1 swxY w Y   d S )Nry   r  rz   ra   )r^   r  r]   )r   r   ImportErrorr   r   r   r   r   !test_poisson_limit_nodependenciesr7    s    	{	#	# 
 
#/DSW	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A  AAN)r   r{   r   r   c                     t          d          5  t          j        t          j                            |                     d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S Nr   r   r   )r	   r   kuiperr    r!   )r8  s    r   test_uniformr<    s     
		 ; ;|BI,,Q//003d:::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   >AA #A zN,M)r   )ry   r{   )r{   ry   )r   ry   r   )r   r{   c                    t          d          5  t          j        t          j                            |           t          j                            |                    d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S r:  r	   r   
kuiper_twor    r!   r8  Ms     r   test_kuiper_two_uniformrB    s    
 
		 T T	 0 0 3 3RY5E5Ea5H5HII!LtSSSSST T T T T T T T T T T T T T T T T Ts   AA::A>A>c                    t          d          5  t          j        t          j                            |           dz  t          j                            |          dz            d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r>  r@  s     r   test_kuiper_two_nonuniformrD    s    
 
		 
 
RY--a00A5ry7G7G7J7Ja7OPPQRS    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A"B  BBc                     t          d          5  t          j        t          j                            d          dz  t          j                            d                    \  } }|dk     sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   rm   r2   r   r>  )Dfs     r    test_detect_kuiper_two_differentrH  )  s    			  	 0 0 5 5 ;RY=M=Mc=R=RSS14xxxxx                 r   c                    ddl m} t          d          5  d}d}d}t          |          D ]_}t	          j        t          j                            |           t          j                            |                    \  }}||k     r|dz  }` |||                              |dz
            dk    sJ  |||          	                    |dz
            dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   binomr   r{   r   r   r   )
r   rK  r	   r)   r   r?  r    r!   sfcdf)	r8  rA  rK  Rfppfpsr   rF  rG  s	            r   test_fpp_kuiper_tworQ  0  sR   
 "!!!!!			 	2 	2q 	 	A#BI$4$4Q$7$79I9I!9L9LMMDAq3wwquQ}}a((50000uQ}}  q))E11111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   CC**C.1C.c                  @    t          j        dd          } | dk    sJ d S )Ng^s!?g     p@r   )r   !kuiper_false_positive_probability)rO  s    r   &test_kuiper_false_positive_probabilityrT  C  s&    

12Df
M
MC!888888r   c                  ,   ddl m}  t          d          5  d\  }}t          j                            ||d          dz  }t          j        ||d||z
  z  fg          \  }}t          j        d||          }t          j	        |t          |          d	
          \  }}t          j        |          }t          |          |z  |z  t          |          z  t          |          |z  |z  t          |          z  }}t          j        |dz
  |z  dz            }	 | t          |                                        |	          dk    sJ  | t          |                                        |	          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   )chi2  )g333333?gQ	@r   r   r@   rR   r   r   )r}   r)   r   r   )r   rV  r	   r    r!   uniformr   fold_intervalshistogram_intervals	histogramr%   rq   r   rM  rL  )
rV  r,   bswhnnbbuuc2s
             r   test_histogramre  I  s         			 * *1IaE**Q.#aC1q5M%:$;<<1%b!Q//ac!ffF;;;BWR[[Q"q3q66)3q66B;?SVV+CBVb1f]q())tCFF||##d****tCFF||r""T)))))* * * * * * * * * * * * * * * * * *s   E%F		FFzii,rr)))r   rX  r   r   r   r   r   ))r   rX  rf  r   r   ))r   r   r2   r   rh  rg  ))r   ri  rL   )r   r   r   r   ))r   ri  rL   )r   g      ?r   c                     t          d          5  t          t          j        |  |           d d d            d S # 1 swxY w Y   d S )NrW  )r	   r   r   r[  )iirrs     r   test_histogram_intervals_knownrm  _  s     
		 < <126;;;< < < < < < < < < < < < < < < < < <s   :>>zN,m,pr{   r   r   zTest too slow)marksi,  rb   )r   r   rb   )r   r   rb   c                     ddl m} t          d          5  t          j         fdt          |          D                       }|dk                                    sJ |dk                                    sJ  |||                              d          } |||                              d          }|t          ||k               cxk     r|k     sn J 	 d	d	d	           d	S # 1 swxY w Y   d	S )
a'  Check that the false positive probability is right

    In particular, run m trials with N uniformly-distributed photons
    and check that the number of false positives is consistent with
    a binomial distribution. The more trials, the tighter the bounds
    but the longer the runtime.

    r   rJ  rW  c                 ~    g | ]9}t          j        t          j                                                d          :S rf  )r   r;  r    r!   )r   r   r8  s     r   r   z)test_uniform_binomial.<locals>.<listcomp>  s8    PPP!bi&6&6q&9&9::1=PPPr   r   )ri   r   r   r  N)	r   rK  r	   r    r(   r)   ro   ppfr   )r8  rT   r   rK  fppslowhighs   `      r   test_uniform_binomialru  o  sW   & "!!!!!			 * *xPPPPuQxxPPPQQ	     	     ea1ooo!!$''uqA""4((S]]))))T)))))))* * * * * * * * * * * * * * * * * *s   CC))C-0C-)Enumpyr    r   numpy.testingr   r   astropyr   rS   astropy.statsr   "astropy.utils.compat.optional_depsr   r   astropy.utils.miscr	   r-   r8   r>   rJ   rP   rW   markskipifrw   r   r   r   r   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   parametrizer   r   r  r  r  r  r  r  r  r  r&  r,  r0  r4  r7  r<  rB  rD  rH  rQ  rT  re  rm  paramskipru  r   r   r   <module>r     s        7 7 7 7 7 7 7 7             D D D D D D D D . . . . . ..
 .
 .
b  D7 7 7     
A 
A 
A 	M*:;;Q& Q& <;Q&h 	M*:;;  <;,J J J
  *
A 
A 
A 	M*:;;-7 -7 <;-7`= = =  $   HII
 
 JI
? ? ?T T T
' 
' 
'K K K
L L L
V V VR R R 	M*:;;RRR    <;
U 
U 
U 	M*:;;
U 
U <;
UU U UU U U 	M*:;;  <;  	M*:;;  <;2 	M*:;;  <;@ 	M*:;;  <;6 	M*:;;77788  98 <; 	M*:;;/9 /9 <;/9d 
N+<==;? ;? >=;?| 	M*:;;. . <;.  	M*:;;
 
 <;
8 I+4WXX
 
 YX
 	M*:;;44455; ; 65 <;;
 	M*:;;	LLL T T  <;T
 	M*:;;	LLL 
 
  <;
 	M*:;;  <; 	M*:;;	LLL 2 2  <;2 	M*:;;  <;
 	M*:;;* * <;** 	M*:;;  	 	< <	 	 <;<
 	M*:;;S%V[-=-=o-N-NOOOS%fk.>.>.O.OPPP	 * *  <;* * *r   