
    _nds+                        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 Zd Zd Z d(dZ!d Z"d Z#d Z$d Z%d Z& e ej'        d          g          d             Z(e	j)        *                    dddg          d             Z+d Z,e	j)        *                    dg d           e	j)        *                    d!dd"g          e	j)        *                    d#d$d%g          d&                                     Z-e	j)        *                    dg d           e	j)        *                    d!dd"g          e	j)        *                    d#d$d%g          d'                                     Z.dS ))    )sqrtN)
csr_matrix)	neighbors)metrics)roc_auc_score)check_random_state)assert_allclose)assert_array_equal)check_outlier_corruption)parametrize_with_checks)	load_irisc                 X   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|           }t          j        d	          }|                    |          j        }t          |j        |           t          j        |d d                   t          j	        |dd                    k    sJ t          j        d
d                              |          }ddgz  ddgz  z   }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_predictionss        @lib/python3.11/site-packages/sklearn/neighbors/tests/test_lof.pytest_lofr,   #   s7   


bB8b"X1v1v1v1vAwO	 	 	A 
&1
5
5
5CGGAJJ/Esz1%%% 6%*uRSSz 2 22222 
&Tq
I
I
I
M
Ma
P
PCs7Q"X-s||~~';<<<sq))+?@@@@@    c                    t          d          }d|                    dd                              | d          z  }|d d         }|                    ddd	
                              | d          }t          j        |dd          |f         }t	          j        dgdz  dgdz  z             }t          j        d          	                    |          }|
                    |           }t          ||          dk    sJ d S )Nr   g333333?x   Fcopyd   r      )   r   )lowhighsizer   r4   r   TnoveltygGz?)r   randnastypeuniformr   r_arrayr   r   r   decision_functionr   )	r&   rngr'   X_train
X_outliersX_testy_testr(   y_preds	            r+   test_lof_performancerF   9   s   
Q

CciiQ&&|%&@@@AgG !'::AA5 B  J U1STT7J&'FXqcBh!r)**F 
&t
4
4
4
8
8
A
AC ##F+++F ((4//////r-   c                 Z   t          j        ddgddgddgg|           }t          j        ddd                              |          }t          j        dd                              |          }dt          d          z  d	t          d          z   z  }d	t          d          z   d	d
t          d          z  z  d	ddt          d          z  z   z  z   z  }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   r9   r   r9          @g      ?g      @)	r   r   r   r   r   r   r	   r    score_samples)r&   rA   clf1clf2s_0s_1s         r+   test_lof_valuesrQ   P   s   j1a&1a&1a&1FFFG'S$  	c'll 	 'AtDDDHHQQD
S		/S499_
-Ca=SC$s))O4scC$q''M>Q7RR
SCT22S#sODDDT22S#sODDDT''#s555u===T''#s555u===T''#s555u===T''#s555u=====r-   *   c                    t           j                            |          }|                    d                              | d          }|                    d                              | d          }t          j        |d          }t          j        ||d          }t          j        dd	          }|	                    |           |
                                }|                    |          }	t          j        dd
dd          }
|
	                    |           |

                                }|
                    |          }t          ||           t          |	|           dS )z!Tests LOF with a distance matrix.)
   r3   Fr0   )r   r3   	euclidean)metricr   TrJ   bruteprecomputed)r   	algorithmrV   r9   N)r   randomRandomStaterandom_sampler;   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_Ys                r+   test_lof_precomputedri   d   sN    )


-
-C'"")),U)CCA&!!((E(BBA

$Q{
;
;
;C

$Q+
>
>
>C(QEEEE	IIaLLL~~H}}QH (  E 
IIcNNN~~H}}S!!HHh'''Hh'''''r-   c                     t           j        } t          j        d                              |           }|j        | j        d         dz
  k    sJ t          j        d          }d}t          j        t          t          j        |                    5  |                    |            d d d            n# 1 swxY w Y   |j        | j        d         dz
  k    sJ d S )Ni  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(   msgs      r+   test_n_neighbors_attributerw   ~   s   	A

&3
7
7
7
;
;A
>
>CqwqzA~----

&3
7
7
7C
6C	k3	8	8	8  


              qwqzA~------s   B66B:=B:c                 D   t          j        ddgddgddgg|           }t          j        ddgg|           }t          j        ddd                              |          }t          j        dd                              |          }|                    |          }|                    |          }|                    |          }|                    |          }t          |||j        z              t          |||j        z              t          ||           d S )	Nr   r   r   rK   rH   TrI   rJ   )	r   r   r   r   r   rL   r?   r	   offset_)	r&   rA   rC   rM   rN   clf1_scoresclf1_decisionsclf2_scoresclf2_decisionss	            r+   test_score_samplesr~      s8   j1a&1a&1a&1FFFGZ#sL999F'S$  	c'll 	 'AtDDDHHQQD$$V,,K++F33N$$V,,K++F33N%   %   K-----r-   c                     t           j        } t          j                    }|                    |            dD ]Z}d                    |          }t          j        t          |          5  t          ||           d d d            n# 1 swxY w Y   [t          j        d          }d}t          j        t          |          5  t          |d           d d d            d S # 1 swxY w Y   d S )N)r^   r?   rL   z&{} is not available when novelty=Falserk   Tr8   z.fit_predict is not available when novelty=Truer%   )
rm   rn   r   r   r   formatrq   raisesAttributeErrorgetattr)r'   r(   methodrv   s       r+   test_novelty_errorsr      sh   	A 
&
(
(CGGAJJJC ! !6==fEE]>555 	! 	!C   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 
&t
4
4
4C
:C	~S	1	1	1 $ $]###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s$   )BB
	B
	C""C&)C&c                 $   t           j                            |           }t          j                    }|                    |           |j        }t          j        d          }|                    |           |j        }t          ||           d S )NTr8   )rm   rn   r;   r   r   r   r    r	   )r&   r'   clf_1scores_1clf_2scores_2s         r+   test_novelty_training_scoresr      s     		&&A (**E	IIaLLL-H (666E	IIaLLL-HHh'''''r-   c                     ddgddgddgg} t          j        d          }|                    |            t          |d          sJ t          |d          sJ t          |d          sJ t          |d          rJ t          j        d	          }|                    |            t          |d          sJ t          |d          rJ t          |d          rJ t          |d          rJ d S )
Nr   r   Tr8   r^   r?   rL   r%   F)r   r   r   hasattr)r'   r(   s     r+   test_hasattr_predictionr      s   
Q!Q!Q A 
&t
4
4
4CGGAJJJ3	"""""3+,,,,,3(((((sM***** 
&u
5
5
5CGGAJJJ3&&&&&sI&&&&&s/00000sO,,,,,,,r-   Tr8   c                      ||            d S )N )	estimatorchecks     r+   test_novelty_true_common_testsr      s     
E)r-   expected_outliers   5   c                     t           j        }|j        d         }t          |           |z  }t	          j        |          }|                    |          }t          j        |dk              }|| k    r|j	        }t          || |           d S d S )Nr   )r   r   )rm   rn   rp   floatr   r   r%   r   sumr    r   )r   r'   	n_samplesr   r(   rE   num_outliersy_decs           r+   test_predicted_outlier_numberr      s     		A
I+,,y8M

&]
C
C
CC__QF6&A+&&L(((, /@%HHHHH )(r-   c                  ^   t          t          j                  } t          j        d          }|                    |            |                    |            |                    |            |                    |            t          j        d          }|	                    |            d S )NTr8   F)
r   rm   rn   r   r   r   r^   rL   r?   r%   )r'   lofs     r+   test_sparser      s     	49A

&t
4
4
4CGGAJJJKKNNNa!

&u
5
5
5COOAr-   rY   )auto	ball_treekd_treerW   r9   Fr   g      ?r   c                 <   t           j                            | d          }t          j        d|||          }|                    |           |j        j        | k    sJ dD ]8}t          ||          r& t          ||          |          }|j        | k    sJ 9dS )zECheck that the fitted attributes are stored using the data type of X.Fr0   r   )r   rY   r   r9   )rL   r?   N)
rm   rn   r;   r   r   r   r    r   r   r   )r&   rY   r   r9   r'   isor   rE   s           r+   !test_lof_input_dtype_preservationr     s    
 		E22A

&-QX  C GGAJJJ'-====8 0 03 	0)WS&))!,,F<<////0 0r-   c                    t           j        dd         }t           j        dd         }t          j        ||gd                              t          j                  }t          j        | ||          }|                    t          j        d          }|                    |           t          j        | ||          }|                    t          j	        d          }	|                    |	           t          |j        |j                   d	D ]V}
t          ||
          rD t          ||
          |          } t          ||
          |	          }t          ||d
           WdS )z?Check the equivalence of the results with 32 and 64 bits input.N2   r   )axis)rY   r9   r   Tr0   )rL   r?   r^   r%   g-C6*?)atol)rm   rn   r   concatenater;   float32r   r   r   float64r	   r    r   r   )rY   r9   r   inliersoutliersr'   lof_32X_32lof_64X_64r   	y_pred_32	y_pred_64s                r+   test_lof_dtype_equivalencer     sh    inGy~H 	*333::2:FFA)WM  F 88BJT8**D
JJt)WM  F 88BJT8**D
JJtF3V5TUUUR ? ?66"" 	?///55I///55IIyv>>>>	? ?r-   )rR   )/mathr   numpyr   scipy.sparser   sklearnr   rt   rq   r   sklearn.metricsr   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.estimator_checksr   r   sklearn.datasetsr   r@   rm   permutationtargetr7   permrn   r,   rF   rQ   ri   rw   r~   r   r   r   r   r   markparametrizer   r   r   r   r   r-   r+   <module>r      sC  
           # # # # # #       				        ) ) ) ) ) ) , , , , , , 2 2 2 2 2 2 5 5 5 5 5 5 C C C C C C B B B B B B & & & & & &
 y{{
t{'((IdO	k$A A A,0 0 0.> > >(( ( ( (4	. 	. 	.. . .2$ $ $&( ( ($- - -* 6)6tDDDEFF  GF ,r2h77I I 87I     &O&O&OPPT5M223-880 0 98 32 QP0" &O&O&OPPT5M223-88? ? 98 32 QP? ? ?r-   