U
    ^»{j+  ã                   @   sÆ  d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ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 d5d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) *d-dd.g¡ej) *d/d0d)g¡d1d2„ ƒƒƒZ-ej) *d(d)d*d+d,g¡ej) *d-dd.g¡ej) *d/d0d)g¡d3d4„ ƒƒƒZ.dS )6é    N)Úsqrt)Ú
csr_matrix)ÚmetricsÚ	neighbors)Ú	load_iris)Úroc_auc_score)Úcheck_random_state)Úassert_allcloseÚassert_array_equal)Úcheck_outlier_corruptionÚparametrize_with_checksc              
   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'   ú_/var/www/html/bwave/python/venv/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_performance5   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_valuesL   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_precomputed`   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_attributez   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   )/rV   Úmathr   Únumpyr   rT   Zscipy.sparser   Zsklearnr   r   Zsklearn.datasetsr   Zsklearn.metricsr   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   Zsklearn.utils.estimator_checksr   r   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>   sJ   


