U
    e»{j¼J  ã                   @   s  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d„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej d¡ej d¡dd„ ƒƒZej d¡ej d¡dd„ ƒƒZej d¡ej d¡dd„ ƒƒZ dd„ Z!d d!„ Z"d"d#„ Z#d$d%„ Z$d&d'„ Z%d(d)„ Z&ej d¡ej d¡d*d+„ ƒƒZ'ej d¡ej d¡d,d-„ ƒƒZ(ej d¡ej d¡d.d/„ ƒƒZ)d0d1„ Z*d2d3„ Z+d4d5„ Z,d6d7„ Z-d8d9„ Z.d:d;„ Z/d<d=„ Z0d>d?„ Z1d@dA„ Z2dBdC„ Z3dDdE„ Z4dFdG„ Z5dHdI„ Z6dJdK„ Z7dLdM„ Z8dS )Né    N)Úassert_allcloseÚassert_array_almost_equal_nulpÚassert_equal)Úbiweight_locationÚbiweight_midcorrelationÚbiweight_midcovarianceÚbiweight_midvarianceÚbiweight_scale)Úassert_quantity_allclose)ÚNumpyRNGContextc               	   C   s@   t dƒ�. tj d¡} t| ƒ}t|d ƒdk s2t‚W 5 Q R X d S )Né90  é'  r   g{®Gáz„?)r   ÚnpÚrandomÚrandnr   ÚabsÚAssertionError)ÚrandvarÚcbl© r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/stats/tests/test_biweight.pyÚtest_biweight_location   s    
r   c                  C   s   t t d¡ƒ} | dkst‚d S )N©é
   é   ç      ð?)r   r   Úonesr   )r   r   r   r   Útest_biweight_location_constant   s    r   c                  C   sÈ   d} t  | ¡}t|dd�}t|t  | d ¡ƒ t|dd�}t|t  | d ¡ƒ d}d}d}t  d¡ d	d
¡}||d< ||d< |d|d|g|d< t|dd�}t|d |ƒ t|d |ƒ t|d |ƒ d S )Nr   r   ©Úaxisé   ç      Y@ç       @ç      @é2   r   r   é   é   çš™™™™™é?çš™™™™™é¿é   )r   r   r   r   ÚarangeÚreshape)ÚshapeÚdatar   Zval1Zval2Úval3r   r   r   Ú'test_biweight_location_constant_axis_2d    s"    
r/   c                  C   sŠ   d} t  | ¡}t|dd�}t|t  | d | d f¡ƒ t|dd�}t|t  | d | d f¡ƒ t|dd�}t|t  | d | d f¡ƒ d S ©N)r   r   r%   r   r   r    r%   )r   r   r   r   ©r,   r-   r   r   r   r   Ú'test_biweight_location_constant_axis_3d5   s    
r2   c                  C   s    t dddddgƒ} t| dƒ d S )Nr    é   r   éô  r%   ç¥XD÷@)r   r   )Úbw_locr   r   r   Útest_biweight_location_small@   s    r7   c               	   C   sÌ   t dƒ�º d} d}tj dd| |f¡}t|dd�}g }t|ƒD ]}| t|dd…|f ƒ¡ q>t |¡}t||ƒ t|d	d�}g }t| ƒD ]}| t||dd…f ƒ¡ qŠt |¡}t||ƒ W 5 Q R X 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Únxr-   ÚbwÚbwiÚir   r   r   Útest_biweight_location_axisE   s     



rE   c               	   C   s¢   t dƒ�� d} d}d}tj dd| ||f¡}t|dd�}|j||fksJt‚d}g }t|ƒD ] }| t|dd…||f ƒ¡ qZt 	|¡}t
|| |ƒ W 5 Q R X dS ©	z&Test a 3D array with the axis keyword.r   r3   é   r   r%   r   r   N)r   r   r   r;   r   r,   r   r<   r=   r>   r   ©Znzr@   rA   r-   rB   ÚyrC   rD   r   r   r   Útest_biweight_location_axis_3d[   s    

rJ   c                  C   s¼   t  d¡ ddd¡} d| d< tt| dd�t| d	d�ƒ tt| d
d�t| dd�ƒ tt| dd�t| dd�ƒ tt| dd�t| dd�ƒ tt| dd�t| dd�ƒ tt| dd�t| dd�ƒ dS )ú*Test a 3D array with a tuple axis keyword.é   r%   r3   rG   r!   ©r   r   r   r   ©r   éÿÿÿÿ©r%   ©r   r    ©r    r   ©r   r%   ©r   rO   ©r   r    r%   ©r%   r   r    N)r   r*   r+   r   r   ©r-   r   r   r   Ú!test_biweight_location_axis_tuplem   s(    
 
ÿ
 
ÿ
 
ÿ
 
ÿrX   z ignore:All-NaN slice encounteredz*ignore:Invalid value encountered in medianc                  C   s’   t  dddddt jg¡} t  | | g¡}t  t| dd�¡s<t‚t| d d… dd�}tt| d	d�|ƒ tt|d
d	d�| ƒ tt|dd	d�||gƒ d S )Nr    r3   r   r4   r%   F©Ú
ignore_nanrO   Tr   ©r   rZ   )r   r>   ÚnanÚisnanr   r   r   )Údata1dÚdata2dZbiw_expectedr   r   r   Ú!test_biweight_location_ignore_nanƒ   s     ÿr`   c               	   C   sä   t  dddddt jg¡} |  ¡ }t j|d d …< t  | | |g¡}t j | ¡}t j|jd< t j |¡}t  t| ƒ¡stt	‚t|ƒ}t
|t jjƒrŽt	‚t  t|ƒ¡s t	‚dD ]:}t  t  t||d�¡¡sÄt	‚t
t||d�t jjƒs¤t	‚q¤d S )	Nr    r3   r   r4   r%   r   rQ   r   )r   r>   r\   ÚcopyÚmaÚmasked_invalidr-   r]   r   r   Ú
isinstanceÚMaskedArrayÚall)r^   Úall_nanr_   Údata1d_maskedÚdata2d_maskedr6   r   r   r   r   Útest_biweight_location_nan”   s"    
 ÿrj   c                  C   sœ  t  dddddt jg¡} t  | | g¡}t j | ¡}t j |¡}tt| dd�t|ƒƒ tt|dd�t|ƒƒ t|ƒ}t|dƒ t  |¡sŠt	‚t|ddd	�}t|dd
�}t
|t jjƒs¶t	‚t  |j¡ sÈt	‚t||jƒ t|ddd	�}t|dd
�}t|jd d… |d d… ƒ |jd �st	‚t j|jd< t|ƒ}t
|t jjƒ�rBt	‚t  |¡�sRt	‚t  |¡�sbt	‚tt|dd�t| dd … dd�ƒ t  |d ¡�s˜t	‚d S )Nr    r3   r   r4   r%   TrY   r5   ©rZ   r   r   r   rO   )r   r>   r\   rb   rc   r   r   r   Úisscalarr   rd   re   ÚanyÚmaskr-   r]   )r^   r_   rh   ri   r6   Úbw_loc_maskedr   r   r   Útest_biweight_location_masked«   sD    
 ÿ
 ÿ

þrp   c                  C   s~   dddddg} t | ƒ}t| ƒ}t|t |¡ƒ tj dddddtjg¡} tj| d< t | dd�}t| dd�}t|t |¡ƒ d S )	Nr    r3   r   r4   r%   r   TrY   )r	   r   r   r   Úsqrtrb   rc   r\   )r-   ZsclÚvarr   r   r   Útest_biweight_scaleØ   s    
rs   c               	   C   s:   t dƒ�( tj d¡} t| ƒ}t|ddd� W 5 Q R X d S )Nr   r   r   g{®Gáz”?)Zrtol)r   r   r   r   r   r   )r   rr   r   r   r   Útest_biweight_midvarianceæ   s    
rt   c                  C   s:   dddddg} t | ƒ}t|dƒ t | dd�}t|d	ƒ d S )
Nr    r3   r   r4   r%   ç�mt)	d@T©Úmodify_sample_sizeg¶¼r½m¶@)r   r   )r-   rr   r   r   r   Útest_biweight_midvariance_smallî   s
    
rx   c                  C   s2   t j d¡} | jdddd�}t|ƒ}t|dƒ d S )Nr   ç        g      4@)r9   r9   )ÚlocÚscaleÚsizeg×ññ�y@)r   r   Údefault_rngr;   r   r   )Zrandr-   rr   r   r   r   Útest_biweight_midvariance_5127÷   s    r~   c               	   C   sÌ   t dƒ�º d} d}tj dd| |f¡}t|dd�}g }t|ƒD ]}| t|dd…|f ƒ¡ q>t |¡}t||ƒ t|d	d�}g }t| ƒD ]}| t||dd…f ƒ¡ qŠt |¡}t||ƒ W 5 Q R X dS r8   )	r   r   r   r;   r   r<   r=   r>   r   r?   r   r   r   Útest_biweight_midvariance_axisÿ   s     



r   c               	   C   s¢   t dƒ�� d} d}d}tj dd| ||f¡}t|dd�}|j||fksJt‚d}g }t|ƒD ] }| t|dd…||f ƒ¡ qZt 	|¡}t
|| |ƒ W 5 Q R X dS rF   )r   r   r   r;   r   r,   r   r<   r=   r>   r   rH   r   r   r   Ú!test_biweight_midvariance_axis_3d  s    

r€   c                  C   s¤   t  dddddt jg¡} t  | | g¡}t  t| dd�¡s<t‚t| d d… dd�}t| d	d�}t||ƒ tt|d
d	d�dddddt jgƒ tt|dd	d�||gƒ d S )Nr    r3   r   r4   r%   FrY   rO   Tr   r[   ry   )r   r>   r\   r]   r   r   r   )r^   r_   Zbiw_varZbiw_var_nonanr   r   r   Ú$test_biweight_midvariance_ignore_nan'  s    
þþr�   c               	   C   s  t  dddddt jg¡} |  ¡ }t j|d d …< t  | | |g¡}t j | ¡}t j|jd< t j |¡}t  t| ƒ¡stt	‚t|ƒ}t
|t jjƒrŽt	‚t  |¡sœt	‚t  t|ƒ¡s®t	‚tt|ƒddd	� d
D ]:}t  t  t||d�¡¡sät	‚t
t||d�t jjƒsÄt	‚qÄd S )Nr    r3   r   r4   r%   r   gH‰]Û[û?gñhãˆµøä>)ZatolrQ   r   )r   r>   r\   ra   rb   rc   r-   r]   r	   r   rd   re   r   rf   )r^   rg   r_   rh   ri   Úbw_sclr   r   r   r   Útest_biweight_scale_nan=  s     rƒ   c                  C   sœ  t  dddddt jg¡} t  | | g¡}t j | ¡}t j |¡}tt| dd�t|ƒƒ tt|dd�t|ƒƒ t|ƒ}t|dƒ t  |¡sŠt‚t|ddd	�}t|dd
�}t	|t jj
ƒs¶t‚t  |j¡ sÈt‚t||jƒ t|ddd	�}t|dd
�}t|jd d… |d d… ƒ |jd �st‚t j|jd< t|ƒ}t	|t jj
ƒ�rBt‚t  |¡�sRt‚t  |¡�sbt‚tt|dd�t| dd … dd�ƒ t  |d ¡�s˜t‚d S )Nr    r3   r   r4   r%   TrY   ru   rk   r   r   rO   )r   r>   r\   rb   rc   r   r   rl   r   rd   re   rm   rn   r-   r]   )r^   r_   rh   ri   r‚   r6   ro   r   r   r   Ú test_biweight_midvariance_maskedT  sD    
þ
þ

þr„   c                  C   sÚ   t  d¡ ddd¡} d| d< tt| dd�t| d	d�ƒ tt| d
d�t| dd�ƒ tt| dd�t| dd�ƒ tt| dd�t| dd�ƒ tt| dd�t| dd�ƒ tt| dd�t| dd�ƒ tt| ddd�t| ddd�ƒ dS )rK   rL   r%   r3   rG   r!   rM   r   r   rN   rO   rP   rQ   rR   rS   rT   rU   rV   NT)r   rw   )r   r*   r+   r   r	   rW   r   r   r   Útest_biweight_scale_axis_tupleƒ  s    
 
ÿþr…   c                  C   s   t t d¡ƒ} | dkst‚d S )Nr   ry   )r   r   r   r   )rB   r   r   r   Ú'test_biweight_midvariance_constant_axis—  s    r†   c                  C   s¼   d} t  | ¡}t|dd�}t|t  | d ¡ƒ t|dd�}t|t  | d ¡ƒ t  d¡ dd¡}d|d	< d
|d< dddddg|d< t|d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)   ry   )r   r   r   r   Úzerosr*   r+   )r,   r-   r   rB   r   r   r   Ú*test_biweight_midvariance_constant_axis_2dœ  s    
rˆ   c                  C   sŠ   d} t  | ¡}t|dd�}t|t  | d | d f¡ƒ t|dd�}t|t  | d | d f¡ƒ t|dd�}t|t  | d | d f¡ƒ d S r0   )r   r   r   r   r‡   r1   r   r   r   Ú*test_biweight_midvariance_constant_axis_3d®  s    
r‰   c                  C   s,   dddg} t | ƒ}t| ƒ}t||ggƒ d S )Nr   r    r%   )r   r   r   )ÚdÚcovrr   r   r   r   Útest_biweight_midcovariance_1d¹  s    
rŒ   c                  C   s’   dddgdddgg} t | ƒ}d}t||| g| |ggƒ dddgdddgg} t | ƒ}t|dd	gd	d
ggƒ t | dd�}t|ddgddggƒ d S )Nr   r    r%   g<}ë`pæ?r   r   r4   gQî©bK-@gÐ©–:)ÀgŒ½´4ù®@Trv   gchŽ'ÆÀgáäé"¦t@)r   r   )rŠ   r‹   Úvalr   r   r   Útest_biweight_midcovariance_2dÀ  s     ÿrŽ   c               
   C   s¦   t  d¡} d}|d|d|||d|dg
| d< t| ƒ}t|t  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)r3   r   r#   r'   r(   r   gffffffæ¿r    ©r3   r3   é{   )r   r   ry   )r   r   r   r   r‡   r   r}   )r-   r.   r‹   Úrngr   r   r   Ú$test_biweight_midcovariance_constantÐ  s    

r’   c                  C   sl   t j d¡} | jdddd�}t|ƒ}dd„ |D ƒ}t| ¡ |ƒ t|dd	�}d
d„ |D ƒ}t| ¡ |ƒ dS )za
    Test that biweight_midcovariance diagonal elements agree with
    biweight_midvariance.
    r    r   r%   )r9   r3   ©r|   c                 S   s   g | ]}t |ƒ‘qS r   ©r   ©Ú.0Úar   r   r   Ú
<listcomp>é  s     z;test_biweight_midcovariance_midvariance.<locals>.<listcomp>Trv   c                 S   s   g | ]}t |d d�‘qS )Trv   r”   r•   r   r   r   r˜   í  s     N)r   r   r}   r;   r   r   Zdiagonal)r‘   rŠ   r‹   rr   Zcov2Zvar2r   r   r   Ú'test_biweight_midcovariance_midvarianceà  s    r™   c               	   C   s:   t  d¡ ddd¡} tjtdd�� t| ƒ W 5 Q R X dS )zH
    Test that biweight_midcovariance raises error with a 3D array.
    é   r3   z"The input array must be 2D or 1D\.©ÚmatchN)r   r   r+   ÚpytestÚraisesÚ
ValueErrorr   )rŠ   r   r   r   Útest_midcovariance_shapeñ  s    r    c               	   C   sD   dddg} ddgddgg}t jtdd�� t| |d� W 5 Q R X dS )	z_
    Test that biweight_midcovariance raises error when M is not a scalar
    or 1D array.
    r   r    r%   r3   z M must be a scalar or 1D array\.r›   )ÚMN)r�   rž   rŸ   r   )rŠ   r¡   r   r   r   Útest_midcovariance_M_shapeû  s    
r¢   c                  C   sT   t j d¡} | jdddd�}t|ƒ}t||jdd� t|dd�}t||jdd� d	S )
z|
    Regression test to ensure that midcovariance matrix is symmetric
    when ``modify_sample_size=True`` (see #5972).
    r    r%   )r3   r4   r“   r   )ZnulpTrv   N)r   r   r}   Úgammar   r   ÚT)r‘   rŠ   r‹   r   r   r   Ú%test_biweight_midcovariance_symmetric  s    r¥   c                  C   sd   dddg} dddg}t t| | ƒdƒ t t| |ƒdƒ ddddd	g} d
ddddg}t t| |ƒdƒ d S )Nr   r    r%   r   g      ð¿r   r   gÍÌÌÌÌÌ(@gffffff*@r4   gffffff@gÍÌÌÌÌÌì?glˆ‘5rÂ¿)r   r   )ÚxrI   r   r   r   Útest_biweight_midcorrelation  s    

r§   c               	   C   sŽ   t  d¡} t  d¡}t  d¡}tjtdd�� t| |ƒ W 5 Q R X tjtdd�� t|| ƒ W 5 Q R X tjtdd�� t||ƒ W 5 Q R X 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   )Za1Za2Úa3r   r   r   Ú#test_biweight_midcorrelation_inputs"  s    


r©   c               	   C   sD   t dƒ�2 tj d¡ tj¡} d| d< t| ƒ t| ƒ W 5 Q R X dS )zRegression test for #6905.r   r9   g     LÝ@r$   N)r   r   r   ZastypeZfloat32r	   r   rW   r   r   r   Ú$test_biweight_32bit_runtime_warnings1  s
    
rª   c                  C   sÔ   t j} t d¡| > }t|ƒ}t|ƒ}t|t jƒs4t‚t|t jƒsDt‚t	|d| > ƒ t	|d| d > ƒ t d¡| > }tj
|d< t|ƒ}t|ƒ}t|t jƒsœt‚t|t jƒs¬t‚t	|tj
| > ƒ t	|tj
| d > ƒ d S )Nr   ry   r%   r   )ÚuÚkmr   r   r	   r   rd   ZQuantityr   r
   r\   )Úunitr-   ZbiwsclZbiwvarr   r   r   Ú$test_biweight_scl_var_constant_units:  s     
r®   )9Únumpyr   r�   Znumpy.testingr   r   r   Zastropy.unitsZunitsr«   Zastropy.stats.biweightr   r   r   r   r	   Zastropy.tests.helperr
   Zastropy.utils.miscr   r   r   r/   r2   r7   rE   rJ   rX   ÚmarkÚfilterwarningsr`   rj   rp   rs   rt   rx   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>   sj   





+	





-
	