a
    ߙfbUL                     @   s  d dl Z d dlZd dlmZmZ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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_scalebiweight_midvariancebiweight_midcovariancebiweight_midcorrelation)assert_quantity_allclose)NumpyRNGContextc                  C   sT   t d8 tjd} t| }t|d dk s2J W d    n1 sF0    Y  d S )N90  '  r   g{Gz?)r   nprandomrandnr   abs)randvarcbl r   @lib/python3.9/site-packages/astropy/stats/tests/test_biweight.pytest_biweight_location   s    
r   c                  C   s   t td} | dksJ d S )N
            ?)r   r   ones)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_3d3   s    
r1   c                  C   s   t g d} t| d d S )Nr      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  qt|}t|| W d   n1 s0    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nxr,   bwbwiir   r   r   test_biweight_location_axisC   s     



rE   c               	   C   s   t d d} d}d}tjdd| ||f}t|dd}|j||fksJJ d}g }t|D ] }|t|dd||f  qZt|}t	|| | W d   n1 s0    Y  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   Znzr@   rA   r,   rB   yrC   rD   r   r   r   test_biweight_location_axis_3dY   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_tuplek   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<J 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   )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| stJ t|}t	|t jj
rJ t t|sJ dD ]:}t t t||dsJ t	t||dt jj
sJ qd S )	Nr   r3   r   r4   r$   r   rQ   r   )r   r>   r\   copymamasked_invalidr,   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 |sJ t|ddd	}t|dd
}t	|t jj
sJ t |j sJ t||j t|ddd	}t|dd
}t|jd d |d d  |jd sJ t j|jd< t|}t	|t jj
rBJ t |sRJ t |sbJ tt|ddt| dd  dd t |d sJ d S )Nr   r3   r   r4   r$   TrY   r5   rZ   r   r   r   rO   )r   r>   r\   rb   rc   r   r   r   isscalarrd   re   anymaskr,   r]   )r^   r_   rh   ri   r6   bw_loc_maskedr   r   r   test_biweight_location_masked   s>    
rp   c                  C   sx   g d} 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 )
Nr2   r   r3   r   r4   r$   r   TrY   )r   r   r   r   Zsqrtrb   rc   r\   )r,   Zsclvarr   r   r   test_biweight_scale   s    
rr   c                  C   sN   t d2 tjd} t| }t|ddd W d    n1 s@0    Y  d S )Nr   r   r   g{Gz?)Zrtol)r   r   r   r   r   r   )r   rq   r   r   r   test_biweight_midvariance   s    
rs   c                  C   s4   g d} t | }t|d t | dd}t|d d S )Nr2   mt)	d@Tmodify_sample_sizegrm@)r   r   )r,   rq   r   r   r   test_biweight_midvariance_small   s
    
rw   c                  C   s2   t jd} | jdddd}t|}t|d d S )Nr           g      4@)r9   r9   )ZlocZscalesizegy@)r   r   default_rngr;   r   r   )Zrandr,   rq   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  qt|}t|| W d   n1 s0    Y  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sJJ d}g }t|D ] }|t|dd||f  qZt|}t	|| | W d   n1 s0    Y  dS rF   )
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<J 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[   rx   )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| stJ t|}t	|t jj
rJ t |sJ t t|sJ tt|ddd	 d
D ]:}t t t||dsJ t	t||dt jj
sJ qd S )Nr   r3   r   r4   r$   r   gH][?gh㈵>)ZatolrQ   r   )r   r>   r\   ra   rb   rc   r,   r]   r   rd   re   r   rf   )r^   rg   r_   rh   ri   bw_sclr   r   r   r   test_biweight_scale_nan0  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 |sJ t|ddd	}t|dd
}t	|t jj
sJ t |j sJ t||j t|ddd	}t|dd
}t|jd d |d d  |jd sJ t j|jd< t|}t	|t jj
rBJ t |sRJ t |sbJ tt|ddt| dd  dd t |d sJ d S )Nr   r3   r   r4   r$   TrY   rt   rk   r   r   rO   )r   r>   r\   rb   rc   r   r   r   rl   rd   re   rm   rn   r,   r]   )r^   r_   rh   ri   r   r6   ro   r   r   r    test_biweight_midvariance_maskedH  s>    
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   rv   )r   r)   r*   r   r   rW   r   r   r   test_biweight_scale_axis_tupleq  s.    





r   c                  C   s   t td} | dksJ d S )Nr   rx   )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< g d|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'   r"   r(   rx   )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 r/   )r   r   r   r   r   r0   r   r   r   *test_biweight_midvariance_constant_axis_3d  s    
r   c                  C   s*   g d} t | }t| }t||gg d S )NrU   )r   r   r   )dcovrq   r   r   r   test_biweight_midcovariance_1d  s    r   c                  C   s   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	d
}t|ddgddgg d S )NrU   r$   r   r   g<}`p?)r   r   r   )r4   r   r$   gQbK-@gЩ:)g4@Tru   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   gffffffr   r3   r3   {   )r   r   rx   )r   r   r   r   r   r   rz   )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   ry   c                 S   s   g | ]}t |qS r   r   .0ar   r   r   
<listcomp>      z;test_biweight_midcovariance_midvariance.<locals>.<listcomp>Tru   c                 S   s   g | ]}t |d dqS )Tru   r   r   r   r   r   r     s   N)r   r   rz   r;   r   r   Zdiagonal)r   r   r   rq   Zcov2Zvar2r   r   r   'test_biweight_midcovariance_midvariance  s    r   c                  C   s\   t dddd} tt}t|  W d   n1 s<0    Y  dt|jv sXJ dS )zH
    Test that biweight_midcovariance raises error with a 3D array.
       r3   Nz!The input array must be 2D or 1D.)	r   r   r*   pytestraises
ValueErrorr   strvalue)r   er   r   r   test_midcovariance_shape  s    &r   c                  C   sd   g d} ddgddgg}t t}t| |d W d   n1 sD0    Y  dt|jv s`J dS )	z_
    Test that biweight_midcovariance raises error when M is not a scalar
    or 1D array.
    rU   r   r   r$   r3   )MNzM must be a scalar or 1D array.)r   r   r   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nulpTru   N)r   r   rz   Zgammar   r   T)r   r   r   r   r   r   %test_biweight_midcovariance_symmetric  s    r   c                  C   sT   g d} g d}t t| | d t t| |d g d} g d}t t| |d d S )NrU   r   r   g      )r   r   r   g(@gffffff*@)r4   r   r$   gffffff@g?gl5r¿)r   r	   )xrI   r   r   r   test_biweight_midcorrelation	  s    r   c                  C   s   t d} t d}t d}tt,}t| | dt|jv sFJ W d    n1 sZ0    Y  tt,}t||  dt|jv sJ W d    n1 s0    Y  tt,}t|| dt|jv sJ W d    n1 s0    Y  d S )Nr   r   r%   zx must be a 1D array.zy must be a 1D array.z!x and y must have the same shape.)r   r   r   r   r   r	   r   r   )Za1Za2Za3r   r   r   r   #test_biweight_midcorrelation_inputs  s    



0
0
r   c                  C   sX   t d< tjdtj} d| d< t|  t|  W d   n1 sJ0    Y  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_warnings'  s
    
r   c                  C   s   t j} td| > }t|}t|}t|t js4J t|t jsDJ t|d| >  t|d| d >  td| > }tj	|d< t|}t|}t|t jsJ t|t jsJ t|tj	| >  t|tj	| d >  d S )Nr   rx   r$   r   )
uZkmr   r   r   r   rd   ZQuantityr
   r\   )Zunitr,   ZbiwsclZbiwvarr   r   r   $test_biweight_scl_var_constant_units0  s     
r   )9r   Znumpyr   Znumpy.testingr   r   r   Zastropy.stats.biweightr   r   r   r   r	   Zastropy.tests.helperr
   Zastropy.unitsZunitsr   Zastropy.utils.miscr   r   r   r.   r1   r7   rE   rJ   rX   Zmarkfilterwarningsr`   rj   rp   rr   rs   rw   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   





'	





'	