U
    9%e+                     @   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st
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/Darija-Ai-API/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std S )Nr   g333333?x   Fcopyd   r      )   r   )lowhighsizer   r/   r   TnoveltygGz?)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st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stt|drtt|drtt|drt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||
rt||
|}t||
|	}t
||d
d qdS )z?Check the equivalence of the results with 32 and 64 bits input.N2   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   


