U
    ½mœds+  ã                   @   sÞ  d dl mZ d dlZd dlmZ d dlmZ d dlZd dl	Z	d dlm
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ ed ƒZeƒ Ze ejj¡Zeje e_eje e_dd„ Zdd„ Zdd„ Z d8dd„Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&eej'd d!�gƒd"d#„ ƒZ(e	j) *d$d%d&g¡d'd(„ ƒZ+d)d*„ Z,e	j) *d+d,d-d.d/g¡e	j) *d0d d1g¡e	j) *d2d3d,g¡d4d5„ ƒƒƒZ-e	j) *d+d,d-d.d/g¡e	j) *d0d d1g¡e	j) *d2d3d,g¡d6d7„ ƒƒƒZ.dS )9é    )ÚsqrtN)Ú
csr_matrix)Ú	neighbors)Úmetrics)Úroc_auc_score)Úcheck_random_state)Úassert_allclose)Úassert_array_equal)Úcheck_outlier_corruption)Úparametrize_with_checks)Ú	load_irisc              
   C   sÔ   t jddgddgddgddgddgddgddgddgg| d�}tjdd	�}| |¡j}t|j|ƒ t  |d d… ¡t  	|dd … ¡ksŠt
‚tjd
dd� |¡}ddg ddg  }t| ¡ |ƒ t| |¡|ƒ d S )Néþÿÿÿéÿÿÿÿé   é   é   é   éüÿÿÿ©Údtype©Ún_neighborsg      Ð?)Úcontaminationr   é   )ÚnpÚasarrayr   ÚLocalOutlierFactorÚfitÚnegative_outlier_factor_r	   Z_fit_XÚminÚmaxÚAssertionErrorÚ_predictÚfit_predict)Úglobal_dtypeÚXÚclfZscoreZexpected_predictions© r'   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/neighbors/tests/test_lof.pyÚtest_lof#   s    2þ(r)   c           	      C   s¬   t dƒ}d| dd¡j| dd� }|d d… }|jddd	d
�j| dd�}tj|dd … |f }t dgd dgd  ¡}tjdd� 	|¡}| 
|¡ }t||ƒdks¨t‚d S )Nr   g333333Ó?éx   F©Úcopyéd   r   é   )é   r   )ÚlowÚhighÚsizer   r/   r   T©Únoveltyg®Gáz®ï?)r   ZrandnÚastypeÚuniformr   Zr_Úarrayr   r   r   Údecision_functionr   r!   )	r$   Úrngr%   ÚX_trainZ
X_outliersÚX_testZy_testr&   Úy_predr'   r'   r(   Útest_lof_performance9   s     ÿr=   c                 C   s&  t jddgddgddgg| d�}tjdddd� |¡}tjddd� |¡}dtdƒ d	tdƒ  }d	tdƒ d	d
tdƒ  d	ddtdƒ     }t|j |||gƒ t|j |||gƒ t| ddgg¡ |gƒ t| ddgg¡ |gƒ t| d	d	gg¡ |gƒ t| d	d	gg¡ |gƒ d S )Nr   r   r   çš™™™™™¹?T©r   r   r4   ©r   r4   ç       @g      ð?g      @)	r   r   r   r   r   r   r   r   Úscore_samples)r$   r:   Úclf1Úclf2Zs_0Zs_1r'   r'   r(   Útest_lof_valuesP   s"       ÿþ0rE   é*   c                 C   sÂ   t j |¡}| d¡j| dd�}| d¡j| dd�}tj|dd�}tj||dd�}tjddd	�}| 	|¡ | 
¡ }| |¡}	tjdd
ddd�}
|
 	|¡ |
 
¡ }|
 |¡}t||ƒ t|	|ƒ dS )z!Tests LOF with a distance matrix.)é
   r.   Fr+   )r   r.   Z	euclidean)Úmetricr   Tr@   ÚbruteZprecomputed)r   Ú	algorithmrH   r4   N)r   ÚrandomZRandomStateZrandom_sampler5   r   Zpairwise_distancesr   r   r   r"   Úpredictr   )r$   Zrandom_stater9   r%   ÚYZDXXZDYXZlof_XZpred_X_XZpred_X_YZlof_DZpred_D_XZpred_D_Yr'   r'   r(   Útest_lof_precomputedd   s(    

   ÿ


rN   c               	   C   s†   t j} tjdd� | ¡}|j| jd d ks0t‚tjdd�}d}tj	t
t |¡d�� | | ¡ W 5 Q R X |j| jd d ks‚t‚d S )Niô  r   r   r   z*n_neighbors will be set to (n_samples - 1)©Úmatch)ÚirisÚdatar   r   r   Zn_neighbors_Úshaper!   ÚpytestZwarnsÚUserWarningÚreÚescape)r%   r&   Úmsgr'   r'   r(   Útest_n_neighbors_attribute~   s    rY   c           	      C   s´   t jddgddgddgg| d�}t jddgg| d�}tjdddd� |¡}tjddd� |¡}| |¡}| |¡}| |¡}| |¡}t|||j ƒ t|||j ƒ t||ƒ d S )	Nr   r   r   rA   r>   Tr?   r@   )	r   r   r   r   r   rB   r8   r   Zoffset_)	r$   r:   r;   rC   rD   Zclf1_scoresZclf1_decisionsZclf2_scoresZclf2_decisionsr'   r'   r(   Útest_score_samplesŠ   s.       ÿþ



þþrZ   c               
   C   sˆ   t j} t ¡ }| | ¡ dD ]2}d |¡}tjt|d�� t	||ƒ W 5 Q R X qtjdd�}d}tjt|d�� t	|dƒ W 5 Q R X d S )N)rL   r8   rB   z&{} is not available when novelty=FalserO   Tr3   z.fit_predict is not available when novelty=Truer#   )
rQ   rR   r   r   r   ÚformatrT   ZraisesÚAttributeErrorÚgetattr)r%   r&   ÚmethodrX   r'   r'   r(   Útest_novelty_errors£   s    

r_   c                 C   sN   t j | ¡}t ¡ }| |¡ |j}tjdd�}| |¡ |j}t||ƒ d S )NTr3   )rQ   rR   r5   r   r   r   r   r   )r$   r%   Zclf_1Zscores_1Zclf_2Zscores_2r'   r'   r(   Útest_novelty_training_scores¶   s    

r`   c                  C   s¶   ddgddgddgg} t jdd�}| | ¡ t|dƒs:t‚t|dƒsHt‚t|dƒsVt‚t|dƒrdt‚t jd	d�}| | ¡ t|dƒsˆt‚t|dƒr–t‚t|dƒr¤t‚t|dƒr²t‚d S )
Nr   r   Tr3   rL   r8   rB   r#   F)r   r   r   Úhasattrr!   )r%   r&   r'   r'   r(   Útest_hasattr_predictionÈ   s    

rb   Tr3   c                 C   s   || ƒ d S )Nr'   )Z	estimatorÚcheckr'   r'   r(   Útest_novelty_true_common_testsÝ   s    rd   Úexpected_outliersé   é5   c                 C   s^   t j}|jd }t| ƒ| }tj|d�}| |¡}t |dk¡}|| krZ|j	}t
|| |ƒ d S )Nr   )r   r   )rQ   rR   rS   Úfloatr   r   r#   r   Úsumr   r
   )re   r%   Z	n_samplesr   r&   r<   Znum_outliersZy_decr'   r'   r(   Útest_predicted_outlier_numberä   s    

rj   c                  C   sX   t tjƒ} tjdd�}| | ¡ | | ¡ | | ¡ | | ¡ tjdd�}| 	| ¡ d S )NTr3   F)
r   rQ   rR   r   r   r   rL   rB   r8   r#   )r%   Zlofr'   r'   r(   Útest_sparseõ   s    




rk   rJ   ÚautoZ	ball_treeZkd_treerI   r4   Fr   g      à?c                 C   sp   t jj| dd�}tjd|||d�}| |¡ |jj| ks<t‚dD ]*}t	||ƒr@t
||ƒ|ƒ}|j| ks@t‚q@dS )zECheck that the fitted attributes are stored using the data type of X.Fr+   r   )r   rJ   r   r4   )rB   r8   N)rQ   rR   r5   r   r   r   r   r   r!   ra   r]   )r$   rJ   r   r4   r%   Zisor^   r<   r'   r'   r(   Ú!test_lof_input_dtype_preservation  s       ÿ

rm   c                 C   sÚ   t jdd… }t jdd… }tj||gdd� tj¡}tj| ||d�}|jtjdd�}| |¡ tj| ||d�}|jtj	dd�}	| |	¡ t
|j|jƒ d	D ]8}
t||
ƒrœt||
ƒ|ƒ}t||
ƒ|	ƒ}t
||d
d� qœdS )z?Check the equivalence of the results with 32 and 64 bits input.Né2   éûÿÿÿr   )Zaxis)rJ   r4   r   Tr+   )rB   r8   rL   r#   g-Cëâ6*?)Zatol)rQ   rR   r   Zconcatenater5   Zfloat32r   r   r   Zfloat64r   r   ra   r]   )rJ   r4   r   ZinliersZoutliersr%   Zlof_32ZX_32Zlof_64ZX_64r^   Z	y_pred_32Z	y_pred_64r'   r'   r(   Útest_lof_dtype_equivalence  s.      ÿ
  ÿ

rp   )rF   )/Úmathr   Únumpyr   Zscipy.sparser   Zsklearnr   rV   rT   r   Zsklearn.metricsr   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   Zsklearn.utils.estimator_checksr
   r   Zsklearn.datasetsr   r9   rQ   ZpermutationÚtargetr2   ÚpermrR   r)   r=   rE   rN   rY   rZ   r_   r`   rb   r   rd   ÚmarkZparametrizerj   rk   rm   rp   r'   r'   r'   r(   Ú<module>   sP   


