U
    e»{jÜJ  ã                   @   s¢  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	d
„ Zejje dd�dd„ ƒZejje dd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"d#d$„ Z#d%d&„ Z$d'd(„ Z%d)d*„ Z&d+d,„ Z'd-d.„ Z(d/d0„ Z)ejje dd�d1d2„ ƒZ*ej +d3d4d5d6d7d8d9g¡d:d;„ ƒZ,ej +d<d=d>d?d@dAdBdCdDg¡dEdF„ ƒZ-dGdH„ Z.dIdJ„ Z/dS )Ké    N)Úassert_allcloseÚassert_equal)Úunits©Úmad_std)Ú	SigmaClipÚ
sigma_clipÚsigma_clipped_stats)Ú	HAS_SCIPY)ÚAstropyUserWarning)ÚNumpyRNGContextc               	   C   s´  t dƒ��  tj d¡} t| ddd�}t|jƒdks8t‚t|j ƒ| jk sNt‚t| ddtj	d�}t 
|j|jk¡rvt‚t| ddtjd�}t 
|j|jk¡ržt‚t| d	d d�}|jd | d ksÂt‚|jd  d
7  < |jd | d ksêt‚t| d	d dd�}|jd | d k�st‚|jd  d
7  < |jd | d k�s<t‚t d¡tj ddd¡ t t d¡¡ }t|ddd�}| ¡ dk�s†t‚t|ddd�}| ¡ dk�s¦t‚W 5 Q R X d S )Né90  é'  é   é   ©ÚsigmaÚmaxitersr   )r   r   Ústdfunc©r   r   Úcenfuncé   ç      ð?F)r   r   Úcopyé   ç        çš™™™™™©?©r   r   gffffff@©Úaxisr   é   é   )r   ÚnpÚrandomÚrandnr   ÚsumÚmaskÚAssertionErrorÚsizeÚvarÚallÚmeanÚdataÚarangeÚnormalZdiagÚonesÚcount)ÚrandvarÚfiltered_dataZfiltered_data2Zfiltered_data3r,   © r3   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/stats/tests/test_sigma_clipping.pyÚtest_sigma_clip   s,    *r5   zrequires scipy)Úreasonc                  C   s6   t  d¡} d| d< t| d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,   Úresultr3   r3   r4   Útest_axis_none:   s    
r;   c               	   C   s|   ddl m}  tdƒ�^ tj d¡}t|dd tjd�}|  |dd¡d }| 	¡ t
|ƒksZt‚t||j  j|ƒ W 5 Q R X d S )Nr   )Ústatsr   r   r   r   )Zscipyr<   r   r"   r#   r$   r   r+   Z	sigmaclipr0   Úlenr'   r   r&   r,   )r<   r1   Z
astropyresZscipyresr3   r3   r4   Útest_compare_to_scipy_sigmaclipF   s    
r>   c                  C   s,   t  d¡} t| ddd�}|jjdks(t‚dS )z,Test that the returned mask is not a scalar.r   ç      Y@r   r   r3   N)r"   r-   r   r&   Úshaper'   r9   r3   r3   r4   Útest_sigma_clip_scalar_maskV   s    
rA   c               	   C   sT   t dƒ�B tj d¡} d| d< tddd�}t| ddd�}t|| ƒ|ƒ W 5 Q R X d S )Nr   r7   ç     jø@é
   r   r   r   )r   r"   r#   r$   r   r   r   )r,   ZsobjZsfuncr3   r3   r4   Útest_sigma_clip_class]   s    
rD   c               	   C   sz   t dƒ�h tj ddd¡} d| d< tddd	d
�}tddtjd
�}t|| ƒ|| ƒƒ t|| dd�|| dd�ƒ W 5 Q R X d S )Nr   r   r   )rC   rC   rB   ©r   r   r   r   r+   r   r   ©r   )r   r"   r#   r.   r   Znanmeanr   )r,   Zsobj1Zsobj2r3   r3   r4   Útest_sigma_clip_meanf   s    
rG   c                	   C   sD   t  t¡� tdd� W 5 Q R X t  t¡� tdd� W 5 Q R X d S )NÚinvalid)r   )r   )ÚpytestZraisesÚ
ValueErrorr   r3   r3   r3   r4   Ú'test_sigma_clip_invalid_cenfunc_stdfuncp   s    rK   c                  C   s,  ddg} t  ddg¡}t| |d�}t|d tƒs4t‚|dks@t‚t| |dd�}t||ƒ t| dd	�}t|d tƒsvt‚|dks‚t‚dd
g} t| ƒ}t|d tƒs¤t‚|dks°t‚t  d¡}t j 	||d| g¡} t
| ddd�jdd�}t||ƒ t| ddd�\}}}t||ƒ t||ƒ t|t  |¡ƒ dS )z5Test list data with input mask or mask_value (#3268).r   r   TF©r&   )r   r   r   )r&   r   r   ©Z
mask_valuer   )r   r   r   rC   r   rF   N)r"   Úarrayr	   Ú
isinstanceÚfloatr'   r   r-   ÚmaÚMaskedArrayr   r+   Ú
zeros_like)r,   r&   r:   Úresult2Ú_datar+   ÚmedianÚstddevr3   r3   r4   Útest_sigma_clipped_statsx   s,    




rX   c               	   C   sx   t dƒ�f tj d¡} d| d< t| ƒ\}}}t| dd�\}}}||ksJt‚||ksVt‚t|dƒ t|dƒ W 5 Q R X d S )	Nr   r   rB   rC   r   )Zstd_ddofgüªjiï?g�Zø·hiï?)r   r"   r#   r$   r	   r'   r   )r,   Zmean1Zmedian1Zstddev1Zmean2Zmedian2Zstddev2r3   r3   r4   Útest_sigma_clipped_stats_ddofš   s    

rY   c            	   	   C   s´  t  d¡} d| d< t j| d< t j| d< t j | ¡}tjtdd�� t	| ƒ}W 5 Q R X tjtdd�� t	|ƒ}W 5 Q R X t
|j|jƒ t
|j|jƒ |jd s t‚|jd s®t‚|jd s¼t‚tjtdd�� t	| dd	�}W 5 Q R X |jd sðt‚|jd sþt‚tjtdd�� t	| dd
d�}W 5 Q R X |jd �s6t‚|jd �sFt‚t j| ddd…f< tjtdd�� t	| dd
dd�\}}}W 5 Q R X t  |d ¡�sœt‚t  |d ¡�s°t‚dS )z2Test sigma_clip of data containing invalid values.r   éè  rE   ©r   é   )r   r   z"Input data contains invalid values)Úmatchr   rF   F)r   r   Nr   T)r   r8   Úreturn_bounds)r"   r/   ÚnanÚinfrQ   rR   rI   Zwarnsr   r   r   r,   r&   r'   Úisnan)	r,   Zdata_mar:   Z	result_marT   Zresult3Ú_ZminarrZmaxarrr3   r3   r4   Útest_invalid_sigma_clip¦   s6    


 rc   c                  C   s   t  d¡} t| dd� dS )zETest that dimensions are expanded correctly even if axis is negative.r[   éÿÿÿÿrF   N)r"   r/   r   )r,   r3   r3   r4   Útest_sigmaclip_negative_axisÑ   s    
re   c                  C   s¸   t jjddgddggddgddggd�} t| ƒ}t j | |¡sBt‚t| dd�}t|t jjƒr`t‚t  t  |¡¡stt‚t| dd�\}}}t j | |¡s˜t‚t  |¡s¦t‚t  |¡s´t‚dS )	zb
    Make sure a fully masked array is returned when sigma clipping a
    fully masked array.
    r   r   T©r,   r&   F)r8   ©r^   N)	r"   rQ   rR   r   Úallequalr'   rO   r*   ra   ©r,   Zclipped_dataÚlowÚhighr3   r3   r4   Útest_sigmaclip_fully_maskedØ   s     ÿrl   c                  C   sn   t jjg g d�} t| ƒ}t j | |¡s*t‚t| dd�\}}}t j | |¡sNt‚t  |¡s\t‚t  |¡sjt‚dS )zd
    Make sure an empty masked array is returned when sigma clipping an
    empty masked array.
    rf   Trg   N)r"   rQ   rR   r   rh   r'   ra   ri   r3   r3   r4   Útest_sigmaclip_empty_maskedí   s    rm   c                  C   sl   t  g ¡} t| ƒ}t|t jjƒs$t‚t| |jƒ t| dd�\}}}t| |ƒ t  	|¡sZt‚t  	|¡sht‚dS )zV
    Make sure an empty array is returned when sigma clipping an empty
    array.
    Trg   N)
r"   rN   r   rO   rQ   rR   r'   r   r,   ra   ri   r3   r3   r4   Útest_sigmaclip_emptyü   s    

rn   c            	      C   sº   t  dt  d¡ ¡ ddd¡} t j| t jd�}t  | dd¡}t  |dd¡}t||ƒD ]@\}}| ¡ }d| 	¡  }t  
||| k ||| k¡|dd…< qTt| dt jdd	d
�}t|j|ƒ dS )z8Test sigma clipping over a subset of axes (issue #7227).gö(\�Âõè?é   r   )Údtyper   r   ç      ø?N)r   rd   )r   r   r   r   )r"   Úsinr-   ÚreshaperS   Zbool_ZrollaxisÚzipr+   ÚstdÚ
logical_orr   r   r&   )	r,   r&   Zdata_tZmask_tZ
data_planeZ
mask_planer+   Zmaxdevr:   r3   r3   r4   Útest_sigma_clip_axis_tuple_3D  s    
 
ÿrw   c                  C   s2   t ƒ } d}d}t| ƒ|kst‚t| ƒ|ks.t‚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   Úreprr'   Ústr)ZsigclipZsigclip_reprZsigclip_strr3   r3   r4   Útest_sigmaclip_repr"  s    ÿÿrz   c                  C   sD   t  ddg¡tj } t| ƒ}|dtj dtj dtj fks@t‚d S )Nr   r   r   )r"   rN   ÚuZkpcr	   r'   r9   r3   r3   r4   Útest_sigma_clippped_stats_unit5  s    r|   c                  C   sÈ   t jjt  d¡dd�} t| ƒ}|t jjt jjt jjfks<t‚t jjt  d¡dd�} t| dd�}|t jjt jjt jjfks|t‚t jjt  d¡dd�} | dk }t| |d�}|t jjt jjt jjfksÄt‚dS )	zM
    Test sigma_clipped_stats when the input array is completely masked.
    rC   TrL   Fr   rM   r    N)r"   rQ   rR   r-   r	   r8   r'   Zzeros)Zarrr:   r&   r3   r3   r4   Ú$test_sigma_clippped_stats_all_masked;  s    r}   c               	   C   s(  t  dddddddg¡} t| dd	d
ddd�}|j| jks<t‚t|j| ƒ t  |j| ¡rZt‚t| dd	d
ddd�}|j| jks~t‚t|j| ƒ t  |j| ¡sœt‚t| dd	dddd�}|j| jksÀt‚t|j| ƒ t  |j| ¡rÞt‚t| dd	dddd�}|j| jk�st‚t|j| ƒ t  |j| ¡�s$t‚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   éûÿÿÿiúÿÿÿr    é   r   rq   r   NT)r   r   r   r8   r   Fr   )r"   rN   r   rp   r'   r   r,   Zshares_memoryr9   r3   r3   r4   Ú"test_sigma_clip_masked_data_valuesN  s"    r�   c               f   C   sr  t  ddddddddd	d
ddddddddddddddddddddddd d!d"d#d$dd%d&d'dd(d)d*d+d,d-d&dd.d/d0d1d2d3d4d5d6d7d8d0d9d:d;d<d=d>d?d@dAdBdCdDd1dEdFd3dGdHd9dIdJdKddLdMd;dNdOdPdQdRdSdTdUdd-dVdWgd¡} t| dXdYdZd[�}t  dYd\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtg¡}t  t  |j¡du |¡�s>t‚|  d\d]d]¡} t| dvdZdwdxdy�}t  dududududududZdZdZdZdZdZdZdZdZdZdZdZdZdZdXdXdXdXdXdXdXdXdXdYdYdYdYdYdYdYdYdYg&dYdYdYd\d\d\dudududZdZdZdXdXdXdXdYdYd\d\dXdXdXdYdYdYd\d\d\dXdXdXdYdYdYd\d\d\g&dZdXdYdZdXdYdZdXdYdZdXdYdudZdXdYdudZdudZdZdXdYdZdXdYdZdXdYdudZdXdudZdXdudZdXg&g¡}t  t  |j¡|¡�slt‚dz| d{< t| d|dZdSd[�}t  dudududududududududZdZdZdZdZdZdZdZdZdZdZdZdZdXdXdXdXdXdXdXdXdXdYg dZdZdZdXdXdXdYdYdYdudZdZdZdXdXdXdXdXdYdYdYd\dZdZdZdXdXdXdYdYdYdXg dZdXdYdZdXdYdZdXdYdXdZdXdYdudZdXdYd\dZdXdYdXdZdXdYdZdXdYdZdXdYdXg g¡}t  t  |j¡|¡�snt‚d}S )~z{
    Test sigma_clip with growth of masking to include the neighbours within a
    specified radius of deviant values.
    gš™™™™™É¿g¸…ëQ¸Þ?g¤p=
×£à¿gìQ¸…ëá¿g…ëQ¸…ÿ?g=
×£p=ö?g
×£p=
·?gìQ¸…ëÑ?g¤p=
×£è?g      ô?g)\�Âõ(ð?gÍÌÌÌÌÌô¿gHáz®GÑ?gq=
×£pÍ?gš™™™™™õ?g{®Gázì?g       Àg®Gáz®×¿g¸…ëQ¸ú?g)\�Âõ(Ü¿gHáz®Gá¿g      
@gR¸…ëQð¿g�Âõ(\�â¿g¸…ëQ¸¾?g333333Ó?g¤p=
×£à?r   gq=
×£põ?g¸…ëQ¸æ¿g�Âõ(\�ê¿gö(\�ÂõÀgÃõ(\�Âý¿g…ëQ¸…ë¿gìQ¸…ëá?gR¸…ëQô¿gö(\�Âõð¿g…ëQ¸Õ?gáz®GáÀg¤p=
×£ø¿g
×£p=
ï¿gö(\�Âõô¿g�Âõ(\�Ò?gR¸…ëQØ?g      è¿gìQ¸…ë±?g      Ð?g{®Gáz„¿r   gHáz®Gõ?gq=
×£pí¿gÍÌÌÌÌÌø¿g{®Gáz”?gR¸…ëQè?g…ëQ¸å¿g…ëQ¸…ë?r   gq=
×£på?g333333ë?g¸…ëQ¸î¿g{®Gáz”¿gffffffÀgÍÌÌÌÌÌä¿g…ëQ¸…ó¿gHáz®Gõ¿g…ëQ¸ñ?g
×£p=
ç?g®Gázæ?g      à¿g×£p=
×ã¿g\�Âõ(\ç¿g)\�Âõ(Ì?g�Âõ(\�ò¿g=
×£p=ê?g…ëQ¸…Û?g…ëQ¸ý?g      ð¿g¤p=
×£À¿g…ëQ¸í?gR¸…ëQÈ?g\�Âõ(\@g)\�Âõ(¼¿g       @g¸…ëQ¸ž?gš™™™™™é?g�Âõ(\�â?g333333Ã?r   r   r   )r   r   Úgrowr\   r   é   é   é   é   é   é   é   é    é!   é'   é(   é)   éB   éC   éD   éT   éU   éV   éZ   é[   é\   é]   é^   r   gÍÌÌÌÌÌ @rq   )r   r   )r   r   r‚   r   r?   )r   r   r   g      @N)r"   rN   r   Zarray_equalÚwherer&   r'   rs   )r,   r2   Úexpectedr3   r3   r4   Útest_sigma_clip_grows  sÔ                                                                                             öÿ                        þÿ                                    þ                                    þ                                    þ÷ÿ                              þ                              þ                              þ÷ÿrœ   )r   Úbounds_shape)r   )r\   r   é   é   )r   )r   r   rž   rŸ   )rd   )r   r\   r   rž   ))r   r   ©r   r   rŸ   ))r   r   r    ))r   r   r\   )r   rž   c              	   C   s€   t dƒ� tj d¡}W 5 Q R X t|| d�}|j|jks<t‚t|| dd�\}}}|j|jks`t‚|j|ksnt‚|j|ks|t‚d S )Nr   )r   r\   r   rž   rŸ   rF   T)r   r^   )r   r"   r#   r   r@   r'   )r   r�   rN   Úresult1rT   Úbound1Úbound2r3   r3   r4   Útest_sigma_clip_axis_shapesÑ  s    
r¤   rp   z>f2z<f2z>f4z<f4z>f8z<f8z<i4z>i8c              	   C   sb   t dƒ� tj ddd¡ t¡}W 5 Q R X d|d< t|ddd	�}t| | ¡ddd	�}t||ƒ d S )
Nr   r   r   rZ   r7   é   TF)r   r8   )r   r"   r#   ÚrandintZastyperP   r   r   )rp   rN   Ú	referenceÚactualr3   r3   r4   Útest_sigma_clip_dtypesë  s    
 r©   c               	   C   s¨   t  dddddg¡} t| dddddd	�}t|| ƒ t| dd
dddd	�}t|dddgƒ t| ddddddd�}t|| ƒ t| dd
ddddd�}t|dt jddt jgƒ d S )Nr   r   r\   r   rV   ru   r   F)r   r   r   r   r8   r   r   )r   r   r   r   r8   r   )r"   rN   r   r   r_   )rN   Z
result_stdZresult_mad_stdr3   r3   r4   Útest_mad_stdü  sN         ÿ
     ÿù	
ù	rª   c               	   C   sd   t dƒ� tj ddd¡} W 5 Q R X ddd„}t| dd |ddd	�}t| dd d
ddd	�}t||ƒ d S )Nr   rd   r   )r¥   r�   c                 S   s   t | |dd�S )NT)r   Z
ignore_nanr   )r,   r   r3   r3   r4   Únan_mad_std0  s    z'test_mad_std_large.<locals>.nan_mad_stdr   F)r   r   r   r   r8   r   )N)r   r"   r#   Úuniformr   r   )rN   r«   r¡   rT   r3   r3   r4   Útest_mad_std_large*  s(    

     ÿ     ÿr­   )0Únumpyr"   rI   Znumpy.testingr   r   Zastropyr   r{   Zastropy.statsr   Zastropy.stats.sigma_clippingr   r   r	   Z"astropy.utils.compat.optional_depsr
   Zastropy.utils.exceptionsr   Zastropy.utils.miscr   r5   ÚmarkZskipifr;   r>   rA   rD   rG   rK   rX   rY   rc   re   rl   rm   rn   rw   rz   r|   r}   r�   rœ   Zparametrizer¤   r©   rª   r­   r3   r3   r3   r4   Ú<module>   sb   +

	
"+%
]úþ
 ÿ
.