
    IR-eJ                     d   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mZ d dlmZ d dlmZ d dlmZ d	 Zej                            e d
          d             Zej                            e d
          d             Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)ej                            e d
          d             Z*ej        +                    dg d           d!             Z,ej        +                    d"g d#          d$             Z-d% Z.d& Z/dS )'    N)assert_allcloseassert_equal)unitsmad_std)	SigmaClip
sigma_clipsigma_clipped_stats)	HAS_SCIPY)AstropyUserWarning)NumpyRNGContextc                     t          d          5  t          j                            d          } t	          | dd          }t          |j                  dk    sJ t          |j                   | j        k     sJ t	          | ddt          j                  }t          j	        |j        |j        k              rJ t	          | ddt          j
                  }t          j	        |j        |j        k              rJ t	          | d	d           }|j        d         | d         k    sJ |j        dxx         d
z  cc<   |j        d         | d         k    sJ t	          | d	d d          }|j        d         | d         k    sJ |j        dxx         d
z  cc<   |j        d         | d         k    sJ t          j        d          t          j                            ddd          z   t          j        t          j        d                    z   }t	          |dd          }|                                dk    sJ t	          |dd          }|                                dk    sJ 	 d d d            d S # 1 swxY w Y   d S )N90  '        sigmamaxitersr   )r   r   stdfuncr   r   cenfunc         ?F)r   r   copy           皙?r   r   gffffff@axisr         )r   nprandomrandnr	   summasksizevarallmeandataarangenormaldiagonescount)randvarfiltered_datafiltered_data2filtered_data3r-   s        Glib/python3.11/site-packages/astropy/stats/tests/test_sigma_clipping.pytest_sigma_clipr8      s    
		 $+ $+)//%(("7!a@@@=%&&****M&&''',6666
 $G1q"&QQQ6-,0CCDDDDD#G1q"'RRR6-,0CCDDDDD #7!dCCC !!$
22221$!!$
2222"7!dOOO!!$
22221$!!$
2222 y||bi..sD&AAABGBGTUJJDWDWW"4as;;;""$$****"4as;;;""$$*****I$+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+ $+s   II44I8;I8zrequires scipy)reasonc                      t          j        d          } d| d<   t          | dd          }t          || dd                    dS )z`
    For masked=False and axis=None, masked elements should be removed
    from the result.
    g      $@d   r   FN)maskedr!   r   )r$   r.   r	   r   r-   results     r7   test_axis_noner?   :   sL     9T??DDGU666Fabb"""""    c                     ddl m}  t          d          5  t          j                            d          }t          |dd t          j                  }|                     |dd          d         }|	                                t          |          k    sJ t          ||j                  j        |           d d d            d S # 1 swxY w Y   d S )Nr   )statsr   r   r   r   )scipyrB   r   r$   r%   r&   r	   r,   	sigmaclipr2   lenr   r(   r-   )rB   r3   
astropyresscipyress       r7   test_compare_to_scipy_sigmacliprH   F   s!    
		 B B)//%((q4QQQ
??7Aq11!4!!S]]2222Z 016AAAB B B B B B B B B B B B B B B B B Bs   B"CC	C	c                  v    t          j        d          } t          | dd          }|j        j        dk    sJ dS )z,Test that the returned mask is not a scalar.r         Y@r   r    N)r$   r.   r	   r(   shaper=   s     r7   test_sigma_clip_scalar_maskrM   V   s?    9Q<<DEA666F;""""""r@   c                     t          d          5  t          j                            d          } d| d<   t	          dd          }t          | dd          }t           ||           |           d d d            d S # 1 swxY w Y   d S )Nr   r;        j@
   r   r   r   )r   r$   r%   r&   r   r	   r   )r-   sobjsfuncs      r7   test_sigma_clip_classrS   ]   s    			 ( (ys##Rq1---4q1555TT$ZZ'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   A!A>>BBc                     t          d          5  t          j                            ddd          } d| d<   t	          ddd	
          }t	          ddt          j        
          }t           ||            ||                      t           || d           || d                     d d d            d S # 1 swxY w Y   d S )Nr   r   r   )rP   rP   rO   r   r   r   r   r,   r   r   r!   )r   r$   r%   r/   r   nanmeanr   )r-   sobj1sobj2s      r7   test_sigma_clip_meanrZ   f   s   			 ? ?yT844T
Av>>>ArzBBBUU4[[%%++...UU4a(((%%1*=*=*=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   BB::B>B>c                     t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ninvalid)r   )r   )pytestraises
ValueErrorr   rK   r@   r7   'test_sigma_clip_invalid_cenfunc_stdfuncr`   p   s    	z	"	" % %)$$$$% % % % % % % % % % % % % % % 
z	"	" % %)$$$$% % % % % % % % % % % % % % % % % %s   7;;A99A= A=c                  T   ddg} t          j        ddg          }t          | |          }t          |d         t                    sJ |dk    sJ t          | |d          }t          ||           t          | d	          }t          |d         t                    sJ |dk    sJ dd
g} t          |           }t          |d         t                    sJ |dk    sJ t          j        d          }t           j                            ||d|z  g          } t          | dd          
                    d          }t          ||           t          | dd          \  }}}t          ||           t          ||           t          |t          j        |                     dS )z5Test list data with input mask or mask_value (#3268).r   r   TFr(   )r   r   r   )r(   r!   r   
mask_valuer   )r   r   r   rP   r    rV   N)r$   arrayr
   
isinstancefloatr   r.   maMaskedArrayr	   r,   
zeros_like)r-   r(   r>   result2_datar,   medianstddevs           r7   test_sigma_clipped_statsro   x   s    q6D8T5M""D D111FfQi'''''_$$$$!$T:::G!!! !#666FfQi'''''_$$$$ q6D &&FfQi'''''_$$$$IbMME5eUBJ788Dd!,,,11q199Du.t!1EEED&&uu--.....r@   c                  N   t          d          5  t          j                            d          } d| d<   t	          |           \  }}}t	          | d          \  }}}||k    sJ ||k    sJ t          |d           t          |d           d d d            d S # 1 swxY w Y   d S )	Nr   r   rO   rP   r   )std_ddofgji?gZhi?)r   r$   r%   r&   r
   r   )r-   mean1median1stddev1mean2median2stddev2s          r7   test_sigma_clipped_stats_ddofrx      s    			 6 6yu%%R"5d";";w"5dQ"G"G"Gw~~~~'!!!!!4555!45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   A=BB!Bc                  0   t          j        d          } d| d<   t           j        | d<   t           j        | d<   t           j                            |           }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        |j                   t          |j        |j                   |j        d         sJ |j        d         sJ |j        d         sJ t          j        t          d          5  t          | d	
          }ddd           n# 1 swxY w Y   |j        d         sJ |j        d         sJ t          j        t          d          5  t          | d	d          }ddd           n# 1 swxY w Y   |j        d         sJ |j        d         sJ t           j        | d	ddf<   t          j        t          d          5  t          | ddd          \  }}}ddd           n# 1 swxY w Y   t          j        |d	                   sJ t          j        |d	                   sJ dS )z2Test sigma_clip of data containing invalid values.r     rU   r      )r   r   z"Input data contains invalid values)matchNr   rV   F)r!   r   r   T)r!   r<   return_bounds)r$   r1   naninfrh   ri   r]   warnsr   r	   r   r-   r(   isnan)	r-   data_mar>   	result_mark   result3_minarrmaxarrs	            r7   test_invalid_sigma_clipr      s    76??DDJDJDJe%%G	(0U	V	V	V " "D!!" " " " " " " " " " " " " " "	(0U	V	V	V ( (w''	( ( ( ( ( ( ( ( ( ( ( ( ( ( ( in---in---
 ;t;t;t	(0U	V	V	V + +T***+ + + + + + + + + + + + + + +<<	(0U	V	V	V 7 7T6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7<< DAAAJ	(0U	V	V	V W W&t!EQUVVV66W W W W W W W W W W W W W W W8F1I8F1IsZ   2BBB4CCCE55E9<E99GGG/IIIc                  P    t          j        d          } t          | d           dS )zETest that dimensions are expanded correctly even if axis is negative.r{   rV   N)r$   r1   r	   )r-   s    r7   test_sigmaclip_negative_axisr      s(    76??Dt"r@   c                  <   t           j                            ddgddggddgddgg          } t          |           }t           j                            | |          sJ t          | d          }t          |t           j        j                  rJ t          j        t          j        |                    sJ t          | d          \  }}}t           j                            | |          sJ t          j        |          sJ t          j        |          sJ dS )	zb
    Make sure a fully masked array is returned when sigma clipping a
    fully masked array.
    r   r   Tr-   r(   F)r<   r~   N)r$   rh   ri   r	   allequalrf   r+   r   r-   clipped_datalowhighs       r7   test_sigmaclip_fully_maskedr      s   
 5Cj3*%dD\D$<,H   D d##L5>>$-----d5111L,(9:::::6"(<(()))))(TBBBL#t5>>$-----8C==8D>>r@   c                  p   t           j                            g g           } t          |           }t           j                            | |          sJ t          | d          \  }}}t           j                            | |          sJ t          j        |          sJ t          j        |          sJ dS )zd
    Make sure an empty masked array is returned when sigma clipping an
    empty masked array.
    r   Tr   N)r$   rh   ri   r	   r   r   r   s       r7   test_sigmaclip_empty_maskedr      s    
 5"2..Dd##L5>>$-----(TBBBL#t5>>$-----8C==8D>>r@   c                  Z   t          j        g           } t          |           }t          |t           j        j                  sJ t          | |j                   t          | d          \  }}}t          | |           t          j        |          sJ t          j        |          sJ dS )zV
    Make sure an empty array is returned when sigma clipping an empty
    array.
    Tr   N)	r$   re   r	   rf   rh   ri   r   r-   r   r   s       r7   test_sigmaclip_emptyr      s    
 8B<<Dd##LlBE$566666|()))(TBBBL#t|$$$8C==8D>>r@   c                  R   t          j        dt          j        d          z                                ddd          } t          j        | t           j                  }t          j        | dd          }t          j        |dd          }t          ||          D ]X\  }}|                                }d|	                                z  }t          j
        |||z
  k     |||z   k              |dd<   Yt          | dt           j        dd	
          }t          |j        |           dS )z8Test sigma clipping over a subset of axes (issue #7227).g(\?   r   )dtyper   r         ?N)r   r   )r   r   r   r!   )r$   sinr.   reshaperj   bool_rollaxiszipr,   std
logical_orr	   r   r(   )	r-   r(   data_tmask_t
data_plane
mask_planer,   maxdevr>   s	            r7   test_sigma_clip_axis_tuple_3Dr     s   6$2&''//1a88D=RX...D[q!$$F[q!$$F #&ff"5"5 
 

J  z~~'''&
TF](B
 

111
 C17SSSFd#####r@   c                  ~    t                      } d}d}t          |           |k    sJ t          |           |k    sJ d S )NzoSigmaClip(sigma=3.0, sigma_lower=3.0, sigma_upper=3.0, maxiters=5, cenfunc='median', stdfunc='std', grow=False)z<SigmaClip>
    sigma: 3.0
    sigma_lower: 3.0
    sigma_upper: 3.0
    maxiters: 5
    cenfunc: 'median'
    stdfunc: 'std'
    grow: False)r   reprstr)sigclipsigclip_reprsigclip_strs      r7   test_sigmaclip_reprr   "  sU    kkG	 	  ==L((((w<<;&&&&&&r@   c                      t          j        ddg          t          j        z  } t	          |           }|dt          j        z  dt          j        z  dt          j        z  fk    sJ d S )Nr   r   r   )r$   re   ukpcr
   r=   s     r7   test_sigma_clippped_stats_unitr   5  sY    8QFae#D &&FcAEk3;ae<<<<<<<r@   c                     t           j                            t          j        d          d          } t	          |           }|t           j        j        t           j        j        t           j        j        fk    sJ t           j                            t          j        d          d          } t	          | d          }|t           j        j        t           j        j        t           j        j        fk    sJ t           j                            t          j        d          d          } | dk     }t	          | |          }|t           j        j        t           j        j        t           j        j        fk    sJ dS )	zM
    Test sigma_clipped_stats when the input array is completely masked.
    rP   Trb   Fr   rc   r"   N)r$   rh   ri   r.   r
   r<   zeros)arrr>   r(   s      r7   $test_sigma_clippped_stats_all_maskedr   ;  s   
 %

BIbMM

5
5C %%FbelBEL"%,?????
%

BHRLLu

5
5C 555FbelBEL"%,?????
%

BIbMM

6
6C8D 4000FbelBEL"%,???????r@   c                     t          j        g d          } t          | ddddd          }|j        | j        k    sJ t	          |j        |            t          j        |j        |           rJ t          | ddddd          }|j        | j        k    sJ t	          |j        |            t          j        |j        |           sJ t          | ddddd          }|j        | j        k    sJ t	          |j        |            t          j        |j        |           rJ t          | ddddd          }|j        | j        k    sJ t	          |j        |            t          j        |j        |           sJ dS )	a  
    Test that the data values & type returned by sigma_clip are the same as
    its input when using masked=True (rather than being upcast to float64 &
    containing NaNs as in issue #10605) and also that the input data get
    copied or referenced as appropriate.
    )r   ir"      r   r   r   NT)r   r   r!   r<   r   Fr   )r$   re   r	   r   r   r-   shares_memoryr=   s     r7   "test_sigma_clip_masked_data_valuesr   N  s    8...//DC!$tRVWWWF<4:%%%%d###T22222C!$tRWXXXF<4:%%%%d###FK..... C!!DtTTTF<4:%%%%d###T22222C!!DuUUUF<4:%%%%d###FK.......r@   c                     t          j        g d          } t          | ddd          }t          j        g d          }t          j        t          j        |j                  d         |          sJ |                     dd	d	          } t          | d
ddd          }t          j        g dg dg dg          }t          j        t          j        |j                  |          sJ d| d<   t          | ddd          }t          j        g dg dg dg          }t          j        t          j        |j                  |          sJ dS )z{
    Test sigma_clip with growth of masking to include the neighbours within a
    specified radius of deviant values.
    )d皙ɿQ?gp=
ףgQgQ?g=
ףp=?g
ףp=
?gQ?gp=
ף?g      ?)\(?ggHzG?gq=
ףp?皙?g{Gz?g       gGz׿gQ?g)\(ܿgHzGr   g      
@gRQg(\Q?g333333?gp=
ף?r   gq=
ףp?gQg(\g(\g(\gQgQ?gRQr   g(\Q?gzGr   gp=
ףg
ףp=
g(\g(\?gRQ?      r   r   gQ?g      ?{Gzr   gHzG?q=
ףpgg{Gz?gRQ?gQgQ?r   r   gq=
ףp?333333?gQg{GzgffffffggQgHzGgQ?g
ףp=
?gGz?r   g      gףp=
r   g\(\g)\(?r   g(\g=
ףp=?gQ?r   gQ?g      r   gp=
ףgQ?gRQ?g\(\@g)\(       @gQ?g?r   r   g(\?g333333?r   r   r   )r   r   grow)r   r|   r                            !   '   (   )   B   C   D   T   U   V   Z   [   \   ]   ^   r   r|   r   g @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   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   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   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   r   r   r   r   r   rJ   )r   r   r   g      @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   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   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   r   r   r   r   r   r   r   r   r   r   N)r$   re   r	   array_equalwherer(   r   )r-   r4   expecteds      r7   test_sigma_clip_growr   s  s    8	
 	
 	
 D" t1qqAAAM
 x	
 	
 	
 H >"(=#566q98DDDDD <<1a  Dt36RRRM x      	
 H$ >"(=#566AAAAA DMt3EEEM x      	
 H$ >"(=#566AAAAAAAr@   )r!   bounds_shape))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   c                 \   t          d          5  t          j                            d          }d d d            n# 1 swxY w Y   t          ||           }|j        |j        k    sJ t          || d          \  }}}|j        |j        k    sJ |j        |k    sJ |j        |k    sJ d S )Nr   )r   r|   r   r   r   rV   T)r!   r~   )r   r$   r%   r	   rL   )r!   r   re   result1rk   bound1bound2s          r7   test_sigma_clip_axis_shapesr     s    
		 2 2	  112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 T***G=EK''''(TNNNGVV=EK''''<<''''<<''''''s    <A A r   )z>f2z<f2z>f4z<f4z>f8z<f8z<i4z>i8c                 ^   t          d          5  t          j                            ddd                              t
                    }d d d            n# 1 swxY w Y   d|d<   t          |dd	          }t          |                    |           dd	          }t          ||           d S )
Nr   r   r   rz   r;      TF)r   r<   )r   r$   r%   randintastyperg   r	   r   )r   re   	referenceactuals       r7   test_sigma_clip_dtypesr     s     
		 = =	!!"a..55e<<= = = = = = = = = = = = = = =E"I5tE:::IU++$uEEEFF#####s   :AAAc            	         t          j        g d          } t          | ddddd          }t          ||            t          | ddddd          }t          |g d	           t          | dddddd
          }t          ||            t          | dddddd
          }t          |dt           j        ddt           j        g           d S )N)r   r   r|   r   r   rm   r   r   r   F)r   r   r   r   r<   r   )r   r|   r   r   )r   r   r   r   r<   r!   r|   r   )r$   re   r	   r   r   )re   
result_stdresult_mad_stds      r7   test_mad_stdr     s   
 H,,,--E x!E  J U###  xQaPU  N +++   J U###  N !RVQ26!:;;;;;r@   c                     t          d          5  t          j                            ddd          } d d d            n# 1 swxY w Y   d
d}t	          | dd |dd          }t	          | dd d	dd          }t          ||           d S )Nr   r   r   )r   r   c                 &    t          | |d          S )NT)r!   
ignore_nanr   )r-   r!   s     r7   nan_mad_stdz'test_mad_std_large.<locals>.nan_mad_std0  s    t$48888r@   r   F)r   r   r   r!   r<   r   )N)r   r$   r%   uniformr	   r   )re   r   r   rk   s       r7   test_mad_std_larger  *  s     
		 3 3	!!"a223 3 3 3 3 3 3 3 3 3 3 3 3 3 39 9 9 9 Q{5  G Qyq  G GW%%%%%s   ">AA)0numpyr$   r]   numpy.testingr   r   astropyr   r   astropy.statsr   astropy.stats.sigma_clippingr   r	   r
   "astropy.utils.compat.optional_depsr   astropy.utils.exceptionsr   astropy.utils.miscr   r8   markskipifr?   rH   rM   rS   rZ   r`   ro   rx   r   r   r   r   r   r   r   r   r   r   r   parametrizer   r   r   r  rK   r@   r7   <module>r     s        7 7 7 7 7 7 7 7       ! ! ! ! ! ! S S S S S S S S S S 8 8 8 8 8 8 7 7 7 7 7 7 . . . . . .(+ (+ (+V 	M*:;;# # <;# 	M*:;;B B <;B# # #( ( (? ? ?% % %/ / /D	6 	6 	6( ( (V    *     $ $ $,' ' '&= = =@ @ @&"/ "/ "/J 	M*:;;ZB ZB <;ZBz   
 
( (
 
( EEE $ $ $+< +< +<\& & & & &r@   