o
    \i5                     @   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sEJ 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	   _fit_Xminmax_predictfit_predict)global_dtypeXclfscoreexpected_predictions r)   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/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sTJ d S )Nr   333333?x   Fcopyd   r      )   r   )lowhighsizer   r2   r   TnoveltygGz?)r   randnastypeuniformr   r_arrayr   r   r   decision_functionr   )	r$   rngr%   X_train
X_outliersX_testy_testr&   y_predr)   r)   r*   test_lof_performance4   s   rD   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   r7   r   r7          @g      ?g      @)	r   r   r   r   r   r   r   r   score_samples)r$   r?   clf1clf2s_0s_1r)   r)   r*   test_lof_valuesK   s    0rN   *   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.)
   r1   Fr.   )r   r1   	euclidean)metricr   TrG   bruteprecomputed)r   	algorithmrR   r7   N)r   randomRandomStaterandom_sampler9   r   pairwise_distancesr   r   r   r"   predictr   )r$   random_stater>   r%   YDXXDYXlof_Xpred_X_Xpred_X_Ylof_Dpred_D_Xpred_D_Yr)   r)   r*   test_lof_precomputed_   s"   




re   c                  C   s   t j} tjdd| }|j| jd d ksJ tjdd}d}tjt	t
|d ||  W d    n1 s:w   Y  |j| jd d ksKJ d S )N  r   r   r   z*n_neighbors will be set to (n_samples - 1)match)irisdatar   r   r   n_neighbors_shapepytestwarnsUserWarningreescape)r%   r&   msgr)   r)   r*   test_n_neighbors_attributey   s   rs   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   rH   rE   TrF   rG   )	r   r   r   r   r   rI   r=   r   offset_)	r$   r?   rA   rJ   rK   clf1_scoresclf1_decisionsclf2_scoresclf2_decisionsr)   r)   r*   test_score_samples   s*    



ry   c               	   C   s  t j} t }||  dD ]<}d| d}d|}tjt|d}t	|| W d    n1 s2w   Y  t
|jjts@J |t|jjv sJJ qtjdd}d}d	}tjt|d}t	|d
 W d    n1 slw   Y  t
|jjtszJ |t|jjv sJ d S )N)rZ   r=   rI   z''LocalOutlierFactor' has no attribute ''z&{} is not available when novelty=Falserg   Tr6   z3'LocalOutlierFactor' has no attribute 'fit_predict'z.fit_predict is not available when novelty=Truer#   )ri   rj   r   r   r   formatrm   raisesAttributeErrorgetattr
isinstancevalue	__cause__str)r%   r&   method	outer_msg	inner_msg	exec_infor)   r)   r*   test_novelty_errors   s&   

r   c                 C   sN   t j| }t }|| |j}tjdd}|| |j}t|| d S )NTr6   )ri   rj   r9   r   r   r   r   r   )r$   r%   clf_1scores_1clf_2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J t|ds$J t|ds+J t|dr2J t jd	d}||  t|dsDJ t|drKJ t|drRJ t|drYJ d S )
Nr   r   Tr6   rZ   r=   rI   r#   F)r   r   r   hasattr)r%   r&   r)   r)   r*   test_hasattr_prediction   s   

r   Tr6   c                 C   s   ||  d S )Nr)   )	estimatorcheckr)   r)   r*   test_novelty_true_common_tests   s   r   expected_outliers   5   c                 C   sb   t j}|jd }t| | }tj|d}||}t|dk}|| kr/|j	}t
|| | d S d S )Nr   )r   r   )ri   rj   rl   floatr   r   r#   r   sumr   r
   )r   r%   	n_samplesr   r&   rC   num_outliersy_decr)   r)   r*   test_predicted_outlier_number   s   

r   csr_containerc                 C   sX   | t j}tjdd}|| || || || tjdd}|| d S )NTr6   F)	ri   rj   r   r   r   rZ   rI   r=   r#   )r   r%   lofr)   r)   r*   test_sparse   s   




r   c                  C   s^  t d} d}tjt|d tjdd| dd }W d   n1 s&w   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 sZw   Y  |j	ddd\}}|j
d	ksoJ |j
d	ksvJ d
}tjt|d |j	| dd W d   n1 sw   Y  |j	| dd\}}|j
dksJ |j
dksJ 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
    )   r   z[Expected n_neighbors < n_samples_fit, but n_neighbors = 1, n_samples_fit = 1, n_samples = 1rg   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   )r   r   )r   onesrm   r|   
ValueErrorr   r   r   n_samples_fit_
kneighborsrl   )r%   rr   r   	distancesindicesr)   r)   r*   $test_lof_error_n_neighbors_too_large
  s6   
r   rU   )auto	ball_treekd_treerS   r7   Fr   g      ?r   c                 C   sp   t jj| dd}tjd|||d}|| |jj| ksJ dD ]}t||r5t	|||}|j| ks5J q dS )zECheck that the fitted attributes are stored using the data type of X.Fr.   r   )r   rU   r   r7   )rI   r=   N)
ri   rj   r9   r   r   r   r   r   r   r~   )r$   rU   r   r7   r%   isor   rC   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 ]}
t||
rjt||
|}t||
|	}t
||d
d qNdS )z?Check the equivalence of the results with 32 and 64 bits input.N2   r   )axis)rU   r7   r   Tr.   )rI   r=   rZ   r#   g-C6*?)atol)ri   rj   r   concatenater9   float32r   r   r   float64r   r   r   r~   )rU   r7   r   inliersoutliersr%   lof_32X_32lof_64X_64r   	y_pred_32	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   dS 1 sIw   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   rE   i  r,   i  )numrf   r0   r   r   znDuplicate values are leading to incorrect results. Increase the number of neighbors for more accurate results.r   )r   r   rg   N)r   rV   default_rngpermutationhstacklinspacereshaper   r   rm   rn   ro   rp   rq   r#   )r>   xr%   	error_msgr   r)   r)   r*   test_lof_duplicate_samplesk  s    		"r   )rO   )1rp   mathr   numpyr   rm   sklearnr   r   sklearn.datasetsr   sklearn.metricsr   sklearn.utilsr   sklearn.utils._testingr   r	   sklearn.utils.estimator_checksr
   r   sklearn.utils.fixesr   r>   ri   r   targetr5   permrj   r+   rD   rN   re   rs   ry   r   r   r   r   r   markparametrizer   r   r   r   r   r   r)   r)   r)   r*   <module>   sR   



,