U
    3d)                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ e jZeddd f Zej\Z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S )    N)assert_array_almost_equal)datasets)empirical_covariance	MinCovDet)fast_mcdc                   C   sp   t dddddd t dddddd t ddd	ddd
 t dddddd t dddddd t dddddd d S )Nd      r   g{Gz?皙?P      F   (   2   i  i  i  i  i   if  i     gMbP?i^  )launch_mcd_on_dataset r   r   S/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/covariance/tests/test_robust_covariance.pytest_mcd   s    r   c               	   C   s4   t d} d}tjt|d t|  W 5 Q R X d S Nr   z'Expected 2D array, got 1D array insteadmatch)nparangepytestraises
ValueErrorr   )Xmsgr   r   r   test_fast_mcd_on_invalid_input+   s    
r   c               	   C   s<   t d} t }d}tjt|d ||  W 5 Q R X d S r   )r   r   r   r   r   r   fit)r   mcdr   r   r   r   test_mcd_class_on_invalid_input2   s
    
r!   c                 C   s  t jd}|| |}|| d | }d|jd||fdd  }	||  |	7  < t | t}
d|
|< ||
 }t	|d
|}|j}|j}|j}t |d| d }||k stt t|| d }||k stt ||kstt|||j d S )Nr   g      $@   size      ?FZrandom_state)r   randomRandomStateZrandnZpermutationrandintZonesZastypeboolr   r   Z	location_Zcovariance_Zsupport_ZmeanAssertionErrorr   sumr   ZmahalanobisZdist_)	n_samples
n_featuresZ
n_outliersZtol_locZtol_covZtol_supportrand_gendataZoutliers_indexZoutliers_offsetZinliers_maskZ	pure_dataZmcd_fitTSHZerror_locationZ	error_covr   r   r   r   :   s$    r   c                  C   s,   t jd} | jdd}t }|| d S )Nr   )   r   r#   )r   r'   r(   normalr   r   )Zrndr   r    r   r   r   test_mcd_issue1127V   s    r6   c                  C   sf   t jd} t ddd }t tt||}t 	|t 
|jd dff}t| d| d S )Nr   r   
   r   r&   )r   r'   r(   Zlinspacetolistarraylist	itertoolsproductZhstackzerosshaper   r   )r/   Zdata_valuesr0   r   r   r   test_mcd_issue3367_   s
    r@   c                  C   s   t ddddddddddg
} | dd} t ddddddddddg
}|dd}d}| |fD ]*}tjt|d	 t | W 5 Q R X q`d S )
Nr%   r	   g9v?gCl?r   333333?zYThe covariance matrix of the support data is equal to 0, try to increase support_fractionr   )r   r:   Zreshaper   r   r   r   r   )ZX_1ZX_2r   r   r   r   r   #test_mcd_support_covariance_is_zero   s    rC   c                  C   s   ddddgddddgddd	dgd
dddgddddgd
dddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgd
dddgddddgddddgg} t dd }d!}tjt|d" ||  W 5 Q R X d S )#Ngffffff@g      @gffffff?g?g@g      @g@g	@g?gffffff@g@g      ?g      @g@g333333@rB   g@g333333@r	   g@g@g333333@g?g333333@g?g@gffffff@g333333?g      ?g@r   r&   zDeterminant has increasedr   )r   r   ZwarnsRuntimeWarningr   )r   r    Zwarn_msgr   r   r   test_mcd_increasing_det_warning   s0    



















rE   )r<   Znumpyr   r   Zsklearn.utils._testingr   Zsklearnr   Zsklearn.covariancer   r   r   Z	load_irisr0   r   ZX_1dr?   r-   r.   r   r   r!   r   r6   r@   rC   rE   r   r   r   r   <module>   s"   

	 