
    IR-eJ                     <   d dl Zd dlZd dlmZmZmZ d dlmZ	 d dl
mZmZmZmZmZ d dlmZ d dlmZ d Zd Zd Zd	 Zd
 Zd Zd Zd Zej                            d          ej                            d          d                         Zej                            d          ej                            d          d                         Zej                            d          ej                            d          d                         Z d Z!d Z"d Z#d Z$d Z%d Z&ej                            d          ej                            d          d                         Z'ej                            d          ej                            d          d                         Z(ej                            d          ej                            d          d                         Z)d Z*d Z+d Z,d Z-d  Z.d! Z/d" Z0d# Z1d$ Z2d% Z3d& Z4d' Z5d( Z6d) Z7d* Z8dS )+    N)assert_allcloseassert_array_almost_equal_nulpassert_equal)biweight_locationbiweight_midcorrelationbiweight_midcovariancebiweight_midvariancebiweight_scale)assert_quantity_allclose)NumpyRNGContextc                      t          d          5  t          j                            d          } t	          |           }t          |dz
            dk     sJ 	 d d d            d S # 1 swxY w Y   d S )N90  '  r   g{Gz?)r   nprandomrandnr   abs)randvarcbls     Alib/python3.11/site-packages/astropy/stats/tests/test_biweight.pytest_biweight_locationr      s    			 # #)//%((((37||d"""""	# # # # # # # # # # # # # # # # # #s   AA%%A),A)c                  X    t          t          j        d                    } | dk    sJ d S )N
            ?)r   r   ones)r   s    r   test_biweight_location_constantr      s*    
BGG,,
-
-C#::::::    c                  @   d} t          j        |           }t          |d          }t          |t          j        | d                              t          |d          }t          |t          j        | d                              d}d}d}t          j        d                              d	d
          }||d<   ||d<   |d|d|g|d<   t          |d          }t          |d         |           t          |d         |           t          |d         |           d S )Nr   r   axis         Y@       @      @2   r   r         皙?皙   )r   r   r   r   arangereshape)shapedatar   val1val2val3s         r   'test_biweight_location_constant_axis_2dr4       s   E75>>D
Dq
)
)
)CCq**+++
Dq
)
)
)CCq**+++DDD9R==  Q''DDGDGS$d+DG
Dq
)
)
)CCFD!!!CFD!!!CFD!!!!!r   c                     d} t          j        |           }t          |d          }t          |t          j        | d         | d         f                     t          |d          }t          |t          j        | d         | d         f                     t          |d          }t          |t          j        | d         | d         f                     d S N)r   r   r(   r   r!   r#   r(   )r   r   r   r   r/   r0   r   s      r   'test_biweight_location_constant_axis_3dr8   5   s    E75>>D
Dq
)
)
)CC%(E!H!566777
Dq
)
)
)CC%(E!H!566777
Dq
)
)
)CC%(E!H!56677777r   c                  H    t          g d          } t          | d           d S )Nr#      r     r(   XD@)r   r   )bw_locs    r   test_biweight_location_smallr?   @   s,    00011FFI&&&&&r   c            
      x   t          d          5  d} d}t          j                            dd| |f          }t	          |d          }g }t          |          D ].}|                    t	          |dd|f                              /t          j        |          }t          ||           t	          |d	          }g }t          |           D ].}|                    t	          ||ddf                              /t          j        |          }t          ||           ddd           dS # 1 swxY w Y   dS 
z&Test a 2D array with the axis keyword.r   d      r   r(   r   r!   Nr#   )	r   r   r   normalr   rangeappendarrayr   nynxr0   bwbwiis         r   test_biweight_location_axisrN   E   s   			 ! !y1r2h//t!,,,r 	6 	6AJJ(aaad445555hsmmC   t!,,,r 	6 	6AJJ(ad445555hsmmC   #! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !   DD//D36D3c            
         t          d          5  d} d}d}t          j                            dd| ||f          }t	          |d          }|j        ||fk    sJ d}g }t          |          D ]/}|                    t	          |dd||f                              0t          j        |          }t          ||         |           ddd           dS # 1 swxY w Y   dS 	z&Test a 3D array with the axis keyword.r   r;      r   r(   r   r!   N)
r   r   r   rD   r   r/   rE   rF   rG   r   nzrI   rJ   r0   rK   yrL   rM   s           r   test_biweight_location_axis_3drV   [   s7   			 $ $y1r2rl33t!,,,xB8####r 	9 	9AJJ(aaaAg778888hsmm1s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $   B8CCCc                     t          j        d                              ddd          } d| d<   t          t	          | d          t	          | d	                     t          t	          | d
          t	          | d                     t          t	          | d          t	          | d                     t          t	          | d          t	          | d                     t          t	          | d          t	          | d                     t          t	          | d          t	          | d                     dS )*Test a 3D array with a tuple axis keyword.   r(   r;   rR   r$   r   r   r   r!   r   r(   r   r#   r#   r   r   r(   r   r]   r   r#   r(   r(   r   r#   N)r   r-   r.   r   r   r0   s    r   !test_biweight_location_axis_tuplerf   m   s]    9R==  Aq))DDJ"4a0002CDt2T2T2TUUU"4b1113DTPT3U3U3UVVV$V,,,.?6.R.R.R   $V,,,.?7.S.S.S   $Y///1B4i1X1X1X   $Y///1B4d1S1S1S    r   z ignore:All-NaN slice encounteredz*ignore:Invalid value encountered in medianc                     t          j        dddddt           j        g          } t          j        | | g          }t          j        t	          | d                    sJ t	          | d d         d          }t          t	          | d	          |           t          t	          |d
d	          |            t          t	          |dd	          ||g           d S )Nr#   r;   r   r<   r(   F
ignore_nanr]   Tr   r"   ri   )r   rG   nanisnanr   r   )data1ddata2dbiw_expecteds      r   !test_biweight_location_ignore_nanrp      s     Xq!QQ/00FXvv&''F8%f???@@@@@$VCRC[UCCCL"6d;;;\JJJ"6dCCCVLLL&qT:::\<<X    r   c            	      .   t          j        dddddt           j        g          } |                                 }t           j        |d d <   t          j        | | |g          }t           j                            |           }t           j        |j        d<   t           j                            |          }t          j        t          |                     sJ t          |          }t          |t           j        j
                  rJ t          j        t          |                    sJ dD ]i}t          j        t          j        t          ||                              sJ t          t          ||          t           j        j
                  sJ jd S )	Nr#   r;   r   r<   r(   r   r_   r!   )r   rG   rk   copymamasked_invalidr0   rl   r   
isinstanceMaskedArrayall)rm   all_nanrn   data1d_maskeddata2d_maskedr>   r"   s          r   test_biweight_location_nanr{      sr    Xq!QQ/00FkkmmGGAAAJXvvw/00FE((00MFMqE((00M8%f--.....}--F&"%"3444448%f--..... 
 
vbh0dCCCDDEEEEEm$7779J
 
 	
 	
 	
 	

 
r   c                  ,   t          j        dddddt           j        g          } t          j        | | g          }t           j                            |           }t           j                            |          }t          t          | d          t          |                     t          t          |d          t          |                     t          |          }t          |d           t          j        |          sJ t          |dd	          }t          |d
          }t          |t           j        j
                  sJ t          j        |j                   sJ t          ||j                   t          |dd	          }t          |d
          }t          |j        d d         |d d                    |j        d         sJ t           j        |j        d<   t          |          }t          |t           j        j
                  rJ t          j        |          sJ t          j        |          sJ t          t          |d          t          | dd          d                     t          j        |d                   sJ d S )Nr#   r;   r   r<   r(   Trh   r=   ri   r"   r!   r   r]   )r   rG   rk   rs   rt   r   r   r   isscalarru   rv   anymaskr0   rl   )rm   rn   ry   rz   r>   bw_loc_maskeds         r   test_biweight_location_maskedr      s    Xq!QQ/00FXvv&''FE((00ME((00M&T2224Em4T4T   &T2224Em4T4T   }--FFI&&&;vv$Q???F%m!<<<MmRU%677777F=%&&&&&&+,,,v$Q???F%m!<<<M#CRC(&"+666b!!!!FMq}--F&"%"344444;v8F-D999&*666   8M!$%%%%%%%r   c                     g d} t          |           }t          |           }t          |t          j        |                     t          j                            dddddt          j        g          } t          j        | d<   t          | d	          }t          | d	          }t          |t          j        |                     d S )
Nr:   r#   r;   r   r<   r(   r   Trh   )r
   r	   r   r   sqrtrs   rt   rk   )r0   sclvars      r   test_biweight_scaler      s    D


C
t
$
$CC&&&5Aq#q"& 9::DfDG
$
/
/
/C
t
5
5
5CC&&&&&r   c                      t          d          5  t          j                            d          } t	          |           }t          |dd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   g{Gz?)rtol)r   r   r   r   r	   r   )r   r   s     r   test_biweight_midvariancer      s    			 - -)//%(("7++St,,,,	- - - - - - - - - - - - - - - - - -s   AAA"%A"c                      g d} t          |           }t          |d           t          | d          }t          |d           d S )Nr:   mt)	d@Tmodify_sample_sizegrm@)r	   r   )r0   r   s     r   test_biweight_midvariance_smallr      sR    D
t
$
$CC###
t
=
=
=CC#####r   c                      t           j                            d          } |                     ddd          }t	          |          }t          |d           d S )Nr           g      4@)rB   rB   )locscalesizegy@)r   r   default_rngrD   r	   r   )randr0   r   s      r   test_biweight_midvariance_5127r      sR    9  ''D;;3d;<<D
t
$
$CC+,,,,,r   c            
      x   t          d          5  d} d}t          j                            dd| |f          }t	          |d          }g }t          |          D ].}|                    t	          |dd|f                              /t          j        |          }t          ||           t	          |d	          }g }t          |           D ].}|                    t	          ||ddf                              /t          j        |          }t          ||           ddd           dS # 1 swxY w Y   dS rA   )	r   r   r   rD   r	   rE   rF   rG   r   rH   s         r   test_biweight_midvariance_axisr      s   			 ! !y1r2h//!$Q///r 	9 	9AJJ+DAJ778888hsmmC   !$Q///r 	9 	9AJJ+DAAAJ778888hsmmC   #! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !rO   c            
         t          d          5  d} d}d}t          j                            dd| ||f          }t	          |d          }|j        ||fk    sJ d}g }t          |          D ]/}|                    t	          |dd||f                              0t          j        |          }t          ||         |           ddd           dS # 1 swxY w Y   dS rQ   )
r   r   r   rD   r	   r/   rE   rF   rG   r   rS   s           r   !test_biweight_midvariance_axis_3dr     s7   			 $ $y1r2rl33!$Q///xB8####r 	< 	<AJJ+DAqM::;;;;hsmm1s###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $rW   c            	         t          j        dddddt           j        g          } t          j        | | g          }t          j        t	          | d                    sJ t	          | d d         d          }t	          | d	          }t          ||           t          t	          |d
d	          dddddt           j        g           t          t	          |dd	          ||g           d S )Nr#   r;   r   r<   r(   Frh   r]   Tr   rj   r   )r   rG   rk   rl   r	   r   )rm   rn   biw_varbiw_var_nonans       r   $test_biweight_midvariance_ignore_nanr   '  s    Xq!QQ/00FXvv&''F8(EBBBCCCCC"6#2#;5AAAG(DAAAM(((V!===	c3S"&)   V!===	&    r   c            	         t          j        dddddt           j        g          } |                                 }t           j        |d d <   t          j        | | |g          }t           j                            |           }t           j        |j        d<   t           j                            |          }t          j        t          |                     sJ t          |          }t          |t           j        j
                  rJ t          j        |          sJ t          j        t          |                    sJ t          t          |          dd	           d
D ]i}t          j        t          j        t          ||                              sJ t          t          ||          t           j        j
                  sJ jd S )Nr#   r;   r   r<   r(   r   gH][?gh㈵>)atolr_   r!   )r   rG   rk   rr   rs   rt   r0   rl   r
   ru   rv   r   rw   )rm   rx   rn   ry   rz   bw_sclr"   s          r   test_biweight_scale_nanr   =  s    Xq!QQ/00FkkmmGGAAAJXvvw/00FE((00MFMqE((00M8N6**+++++M**F&"%"3444448F8N6**+++++N=118$GGGG W Wvbh~f4@@@AABBBBB.TBBBBEDUVVVVVVW Wr   c                  ,   t          j        dddddt           j        g          } t          j        | | g          }t           j                            |           }t           j                            |          }t          t          | d          t          |                     t          t          |d          t          |                     t          |          }t          |d           t          j        |          sJ t          |dd	          }t          |d
          }t          |t           j        j	                  sJ t          j
        |j                   sJ t          ||j                   t          |dd	          }t          |d
          }t          |j        d d         |d d                    |j        d         sJ t           j        |j        d<   t          |          }t          |t           j        j	                  rJ t          j        |          sJ t          j        |          sJ t          t          |d          t          | dd          d                     t          j        |d                   sJ d S )Nr#   r;   r   r<   r(   Trh   r   r}   r!   r   r]   )r   rG   rk   rs   rt   r   r	   r~   ru   rv   r   r   r0   rl   )rm   rn   ry   rz   r   r>   r   s          r    test_biweight_midvariance_maskedr   T  s    Xq!QQ/00FXvv&''FE((00ME((00MV555]++   V555]++  
 "-00FFI&&&;v!&TBBBF(Q???MmRU%677777F=%&&&&&&FM.///!&TBBBF(Q???MM&ss+VCRC[999b!!!!FMq!-00F&"%"344444;v8F]t<<<VABBZD999   8M!$%%%%%%%r   c                     t          j        d                              ddd          } d| d<   t          t	          | d          t	          | d	                     t          t	          | d
          t	          | d                     t          t	          | d          t	          | d                     t          t	          | d          t	          | d                     t          t	          | d          t	          | d                     t          t	          | d          t	          | d                     t          t	          | dd          t	          | dd                     dS )rY   rZ   r(   r;   rR   r$   r[   r   r!   r\   r]   r^   r_   r`   ra   rb   rc   rd   NT)r"   r   )r   r-   r.   r   r
   re   s    r   test_biweight_scale_axis_tupler     sr    9R==  Aq))DDJ1---~d/N/N/NOOO2...t$0O0O0OPPP6222N4f4U4U4UVVV6222N4g4V4V4VWWWt),,,nT	.R.R.R   9555~dQU7V7V7VWWWt&TBBBt'dCCC    r   c                  X    t          t          j        d                    } | dk    sJ d S )Nr   r   )r	   r   r   )rK   s    r   'test_biweight_midvariance_constant_axisr     s*    	bgg..	/	/B999999r   c                  .   d} t          j        |           }t          |d          }t          |t          j        | d                              t          |d          }t          |t          j        | d                              t          j        d                              dd          }d|d	<   d
|d<   g d|d<   t          |d          }t          |d	         d           t          |d         d           t          |d         d           d S )Nr   r   r!   r#   r'   r   r   r$   r(   r%   r)   )r&   r*   r&   r+   r&   r,   r   )r   r   r	   r   zerosr-   r.   )r/   r0   r   rK   s       r   *test_biweight_midvariance_constant_axis_2dr     s   E75>>D
t!
,
,
,CC%(++,,,
t!
,
,
,CC%(++,,,9R==  Q''DDGDG(((DG	d	+	+	+BBqE3BqE3BqE3r   c                     d} t          j        |           }t          |d          }t          |t          j        | d         | d         f                     t          |d          }t          |t          j        | d         | d         f                     t          |d          }t          |t          j        | d         | d         f                     d S r6   )r   r   r	   r   r   r7   s      r   *test_biweight_midvariance_constant_axis_3dr     s    E75>>D
t!
,
,
,CC58U1X"677888
t!
,
,
,CC58U1X"677888
t!
,
,
,CC58U1X"67788888r   c                  n    g d} t          |           }t          |           }t          ||gg           d S )Nrc   )r   r	   r   )dcovr   s      r   test_biweight_midcovariance_1dr     s?    		A
 
#
#C
q
!
!CC3%!!!!!r   c                     g dg dg} t          |           }d}t          ||| g| |gg           g dg dg} t          |           }t          |ddgddgg           t          | d	
          }t          |ddgddgg           d S )Nrc   r(   r#   r   g<}`p?)r   r#   r   )r<   r   r(   gQbK-@gЩ:)g4@Tr   gch'g"t@)r   r   )r   r   vals      r   test_biweight_midcovariance_2dr     s    	IIIA
 
#
#C
CC3+c{3444	[[[!A
 
#
#C{K(;
*CD   !t
<
<
<CC;4{J6OPQQQQQr   c            
         t          j        d          } d}|d|d|||d|dg
| d<   t          |           }t          |t          j        d                     t           j                            d	          }|                    d
          } d}|d|d|g| d<   t          |           }t          |dd d f         d           t          |d d df         d           d S )N)r;   r   r&   r*   r+   r   gffffffr#   r;   r;   {   )r   r   r   )r   r   r   r   r   r   r   )r0   r3   r   rngs       r   $test_biweight_midcovariance_constantr     s    77DDS$dD$T4HDG
 
&
&CC&))***
)


$
$C::fDDS$d+DG
 
&
&CC111Is###C1Is#####r   c                  l   t           j                            d          } |                     ddd          }t	          |          }d |D             }t          |                                |           t	          |d          }d	 |D             }t          |                                |           d
S )za
    Test that biweight_midcovariance diagonal elements agree with
    biweight_midvariance.
    r#   r   r(   )rB   r;   r   c                 ,    g | ]}t          |          S  r	   .0as     r   
<listcomp>z;test_biweight_midcovariance_midvariance.<locals>.<listcomp>  s!    
.
.
.q""
.
.
.r   Tr   c                 0    g | ]}t          |d           S )Tr   r   r   s     r   r   z;test_biweight_midcovariance_midvariance.<locals>.<listcomp>  s&    HHH t<<<HHHr   N)r   r   r   rD   r   r   diagonal)r   r   r   r   cov2var2s         r   'test_biweight_midcovariance_midvariancer     s     )


"
"C

1ah
''A
 
#
#C
.
.A
.
.
.CCLLNNC(((!!===DHHaHHHDDMMOOT*****r   c                      t          j        d                              ddd          } t          j        t
          d          5  t          |            ddd           dS # 1 swxY w Y   dS )zH
    Test that biweight_midcovariance raises error with a 3D array.
       r;   z"The input array must be 2D or 1D\.matchN)r   r   r.   pytestraises
ValueErrorr   )r   s    r   test_midcovariance_shaper     s    
 	Aq!$$A	z)N	O	O	O " "q!!!" " " " " " " " " " " " " " " " " "s   A""A&)A&c                      g d} ddgddgg}t          j        t          d          5  t          | |           d	d	d	           d	S # 1 swxY w Y   d	S )
z_
    Test that biweight_midcovariance raises error when M is not a scalar
    or 1D array.
    rc   r   r#   r(   r;   z M must be a scalar or 1D array\.r   )MN)r   r   r   r   )r   r   s     r   test_midcovariance_M_shaper     s     			A
Q!QA	z)L	M	M	M ' 'qA&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AAAc                     t           j                            d          } |                     ddd          }t	          |          }t          ||j        d           t	          |d          }t          ||j        d           d	S )
z|
    Regression test to ensure that midcovariance matrix is symmetric
    when ``modify_sample_size=True`` (see #5972).
    r#   r(   )r;   r<   r   r   )nulpTr   N)r   r   r   gammar   r   T)r   r   r   s      r   %test_biweight_midcovariance_symmetricr     s     )


"
"C		!QX	&&A
 
#
#C"3A6666
 t
<
<
<C"3A666666r   c                      g d} g d}t          t          | |           d           t          t          | |          d           g d} g d}t          t          | |          d           d S )Nrc   r   r   g      )r   r#   r   g(@gffffff*@)r<   r   r(   gffffff@g?gl5r¿)r   r   )xrU   s     r   test_biweight_midcorrelationr     s    		A		A+Aq113777+Aq114888AA+Aq113GHHHHHr   c                     t          j        d          } t          j        d          }t          j        d          }t          j        t          d          5  t          | |           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||            d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r)   zx must be a 1D array\.r   zy must be a 1D array\.z"x and y must have the same shape\.)r   r   r   r   r   r   )a1a2a3s      r   #test_biweight_midcorrelation_inputsr   "  s   	B	B	B	z)B	C	C	C ( (B'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
z)B	C	C	C ( (B'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
z)N	O	O	O ( (B'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s6   A55A9<A9B88B<?B<C<<D D c                     t          d          5  t          j                            d                              t          j                  } d| d<   t          |            t          |            ddd           dS # 1 swxY w Y   dS )zRegression test for #6905.r   rB   g     L@r'   N)r   r   r   astypefloat32r
   r	   re   s    r   $test_biweight_32bit_runtime_warningsr   1  s    			 # #y$$++BJ77RtT"""	# # # # # # # # # # # # # # # # # #s   A A==BBc                     t           j        } t          j        d          | z  }t	          |          }t          |          }t          |t           j                  sJ t          |t           j                  sJ t          |d| z             t          |d| dz  z             t          j        d          | z  }t          j	        |d<   t	          |          }t          |          }t          |t           j                  sJ t          |t           j                  sJ t          |t          j	        | z             t          |t          j	        | dz  z             d S )Nr   r   r(   r   )
ukmr   r   r
   r	   ru   Quantityr   rk   )unitr0   biwsclbiwvars       r   $test_biweight_scl_var_constant_unitsr   :  s/   4D72;;$DD!!F!$''Ffaj)))))faj)))))VSD[111VSD!G^44472;;$DfDGD!!F!$''Ffaj)))))faj)))))VRVt^444VRVtQw%677777r   )9numpyr   r   numpy.testingr   r   r   astropy.unitsunitsr   astropy.stats.biweightr   r   r   r	   r
   astropy.tests.helperr   astropy.utils.miscr   r   r   r4   r8   r?   rN   rV   rf   markfilterwarningsrp   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   <module>r      sB        W W W W W W W W W W                    : 9 9 9 9 9 . . . . . .# # #  
" " "*8 8 8' ' '
! ! !,$ $ $$  , >??HII  JI @? >??HII
 
 JI @?
* >??HII(& (& JI @?(&V' ' '- - -$ $ $- - -! ! !,$ $ $$ >??HII  JI @?( >??HIIW W JI @?W* >??HII*& *& JI @?*&Z  (  
     $9 9 9" " "R R R $ $ $ + + +"" " "	' 	' 	'7 7 7	I 	I 	I( ( (# # #8 8 8 8 8r   