a
    h5                     @   s  d dl Z d dlmZ d dlZd dl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 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+ej)*d&ed'd( Z,d)d* Z-ej)*d+g d,ej)*d-dd.gej)*d/d0d1gd2d3 Z.ej)*d+g d,ej)*d-dd.gej)*d/d0d1gd4d5 Z/d6d7 Z0dS )9    N)sqrt)metrics	neighbors)	load_iris)roc_auc_score)check_random_state)assert_allcloseassert_array_equal)check_outlier_corruptionparametrize_with_checks)CSR_CONTAINERSc              
   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sJ 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_predictfit_predict)global_dtypeXclfZscoreZexpected_predictions r&   \/var/www/html/assistant/venv/lib/python3.9/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sJ d S )Nr   333333?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#   rngr$   X_trainZ
X_outliersX_testZy_testr%   y_predr&   r&   r'   test_lof_performance4   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_valuesK   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s0J tjdd}d}tjt	t
|d ||  W d    n1 st0    Y  |j| jd d ksJ d S )N  r   r   r   z*n_neighbors will be set to (n_samples - 1)match)irisdatar   r   r   Zn_neighbors_shapepytestwarnsUserWarningreescape)r$   r%   msgr&   r&   r'   test_n_neighbors_attributey   s    (r[   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*     



r\   c               	   C   s  t j} t }||  dD ]x}d| d}d|}tjt|d}t	|| W d    n1 sd0    Y  t
|jjtsJ |t|jjv sJ qtjdd}d}d	}tjt|d}t	|d
 W d    n1 s0    Y  t
|jjtsJ |t|jjv s
J d S )N)rL   r8   rB   z''LocalOutlierFactor' has no attribute ''z&{} is not available when novelty=FalserP   Tr3   z3'LocalOutlierFactor' has no attribute 'fit_predict'z.fit_predict is not available when novelty=Truer"   )rR   rS   r   r   r   formatrU   raisesAttributeErrorgetattr
isinstancevalue	__cause__str)r$   r%   methodZ	outer_msgZ	inner_msgZ	exec_infor&   r&   r'   test_novelty_errors   s"    

((rg   c                 C   sN   t j| }t }|| |j}tjdd}|| |j}t|| d S )NTr3   )rR   rS   r5   r   r   r   r   r   )r#   r$   Zclf_1Zscores_1Zclf_2Zscores_2r&   r&   r'   test_novelty_training_scores   s    

rh   c                  C   s   ddgddgddgg} t jdd}||  t|ds:J t|dsHJ t|dsVJ t|drdJ t jd	d}||  t|dsJ t|drJ t|drJ t|drJ d S )
Nr   r   Tr3   rL   r8   rB   r"   F)r   r   r   hasattr)r$   r%   r&   r&   r'   test_hasattr_prediction   s    

rj   Tr3   c                 C   s   ||  d S )Nr&   )Z	estimatorcheckr&   r&   r'   test_novelty_true_common_tests   s    rl   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   )rR   rS   rT   floatr   r   r"   r   sumr   r
   )rm   r$   Z	n_samplesr   r%   r<   Znum_outliersZy_decr&   r&   r'   test_predicted_outlier_number   s    

rr   csr_containerc                 C   sX   | t j}tjdd}|| || || || tjdd}|| d S )NTr3   F)	rR   rS   r   r   r   rL   rB   r8   r"   )rs   r$   lofr&   r&   r'   test_sparse   s    




ru   c                  C   sd  t d} d}tjt|d* tjdd| dd }W d   n1 sL0    Y  tjdd| dd }|jdks~J d}tjt|d |j	ddd W d   n1 s0    Y  |j	ddd\}}|j
d	ksJ |j
d	ksJ d
}tjt|d |j	| dd W d   n1 s$0    Y  |j	| dd\}}|j
dksPJ |j
dks`J dS )zCheck that we raise a proper error message when n_neighbors == n_samples.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/17207
    )   rv   z[Expected n_neighbors < n_samples_fit, but n_neighbors = 1, n_samples_fit = 1, n_samples = 1rP   r   r   Nr   z[Expected n_neighbors < n_samples_fit, but n_neighbors = 2, n_samples_fit = 2, n_samples = 2)r   r   z\Expected n_neighbors <= n_samples_fit, but n_neighbors = 3, n_samples_fit = 2, n_samples = 7r   )rv   r   )r   ZonesrU   r_   
ValueErrorr   r   r   Zn_samples_fit_Z
kneighborsrT   )r$   rZ   rt   Z	distancesindicesr&   r&   r'   $test_lof_error_n_neighbors_too_large
  s0    
8,.ry   rJ   )autoZ	ball_treeZkd_treerI   r4   Fr   g      ?rz   c                 C   sp   t jj| dd}tjd|||d}|| |jj| ks<J dD ]*}t||r@t	|||}|j| ks@J 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)
rR   rS   r5   r   r   r   r   r   ri   ra   )r#   rJ   r   r4   r$   Zisorf   r<   r&   r&   r'   !test_lof_input_dtype_preservation6  s    

r{   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)rR   rS   r   Zconcatenater5   Zfloat32r   r   r   Zfloat64r   r   ri   ra   )rJ   r4   r   ZinliersZoutliersr$   Zlof_32ZX_32Zlof_64ZX_64rf   Z	y_pred_32Z	y_pred_64r&   r&   r'   test_lof_dtype_equivalenceJ  s&    


r~   c               
   C   s   t jd} | t dgd t jdddd| dd g}|d	d
}d}tjddd}t	j
tt|d || W d   n1 s0    Y  dS )z
    Check that LocalOutlierFactor raises a warning when duplicate values
    in the training data cause inaccurate results.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27839
    r   r>   i  r)   i  )numrO   r-   r   r   znDuplicate values are leading to incorrect results. Increase the number of neighbors for more accurate results.r   )r   r   rP   N)r   rK   Zdefault_rngpermutationZhstackZlinspaceZreshaper   r   rU   rV   rW   rX   rY   r"   )r9   xr$   	error_msgrt   r&   r&   r'   test_lof_duplicate_samplesk  s    		r   )rF   )1rX   mathr   numpyr   rU   Zsklearnr   r   Zsklearn.datasetsr   Zsklearn.metricsr   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   Zsklearn.utils.estimator_checksr
   r   Zsklearn.utils.fixesr   r9   rR   r   targetr2   permrS   r(   r=   rE   rN   r[   r\   rg   rh   rj   r   rl   markZparametrizerr   ru   ry   r{   r~   r   r&   r&   r&   r'   <module>   sP   



,