
    -i5                        S SK r S SKJr  S SKrS SKrS SKJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJr  S SKJrJr  S S	KJr  \" S 5      r\
" 5       r\R3                  \R4                  R6                  5      r\R:                  \   \l        \R4                  \   \l        S
 rS rS r S'S jr!S r"S r#S r$S r%S r&\" \RN                  " SS9/5      S 5       r(\RR                  RU                  SSS/5      S 5       r+\RR                  RU                  S\5      S 5       r,S r-\RR                  RU                  S/ SQ5      \RR                  RU                  SSS /5      \RR                  RU                  S!S"S#/5      S$ 5       5       5       r.\RR                  RU                  S/ SQ5      \RR                  RU                  SSS /5      \RR                  RU                  S!S"S#/5      S% 5       5       5       r/S& r0g)(    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                     [         R                  " SS/SS/SS/SS/SS/SS/SS/SS//U S9n[        R                  " SS	9nUR	                  U5      R
                  n[        UR                  U5        [         R                  " US S 5      [         R                  " USS  5      :  d   e[        R                  " S
SS9R	                  U5      nSS/-  SS/-  -   n[        UR                  5       U5        [        UR                  U5      U5        g )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        S/var/www/html/venv/lib/python3.13/site-packages/sklearn/neighbors/tests/test_lof.pytest_lofr,      s   



bB8b"X1v1v1v1vAwO	A 
&
&1
5CGGAJ//Eszz1% 66%*uRSz 2222 
&
&Tq
I
M
Ma
PCs7Q"X-s||~';<sq)+?@    c                    [        S5      nSUR                  SS5      R                  U SS9-  nUS S nUR                  SSS	S
9R                  U SS9n[        R
                  USS  U4   n[        R                  " S/S-  S/S-  -   5      n[        R                  " SS9R                  U5      nUR                  U5      * n[        Xh5      S:  d   eg )Nr   333333?x   Fcopyd   r      )   r   )lowhighsizer   r5   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_performancerG   4   s    
Q
CciiQ&&|%&@@AgG !':AA5 B J UU1ST7J&'FXXqcBh!r)*F 
&
&t
4
8
8
AC ##F++F (4///r-   c                    [         R                  " SS/SS/SS//U S9n[        R                  " SSSS9R	                  U5      n[        R                  " SSS9R	                  U5      nS[        S5      -  S	[        S5      -   -  nS	[        S5      -   S	S
[        S5      -  -  S	SS[        S5      -  -   -  -   -  n[        UR                  * XEU/5        [        UR                  * XEU/5        [        UR                  SS//5      * U/5        [        UR                  SS//5      * U/5        [        UR                  S	S	//5      * U/5        [        UR                  S	S	//5      * U/5        g )Nr   r   r   皙?Tr   r   r:   r   r:          @g      ?g      @)	r   r   r   r   r   r   r	   r    score_samples)r&   rB   clf1clf2s_0s_1s         r+   test_lof_valuesrR   K   se   jj1a&1a&1a&1FG''S$	c'l 	 ''AtDHHQD
S	/S49_
-Ca=SC$s)O4scC$q'M>Q7RR
SCT222SsODT222SsODT''#s55u=T''#s55u=T''#s55u=T''#s55u=r-   c                 ^   [         R                  R                  U5      nUR                  S5      R	                  U SS9nUR                  S5      R	                  U SS9n[
        R                  " USS9n[
        R                  " XCSS9n[        R                  " SSS	9nUR                  U5        UR                  5       nUR                  U5      n	[        R                  " SS
SSS9n
U
R                  U5        U
R                  5       nU
R                  U5      n[        X5        [        X5        g)z!Tests LOF with a distance matrix.)
   r4   Fr1   )r   r4   	euclidean)metricr   TrK   bruteprecomputed)r   	algorithmrV   r:   N)r   randomRandomStaterandom_sampler<   r   pairwise_distancesr   r   r   r$   predictr	   )r&   random_staterA   r'   YDXXDYXlof_Xpred_X_Xpred_X_Ylof_Dpred_D_Xpred_D_Ys                r+   test_lof_precomputedri   _   s    ))


-C'")),U)CA&!((E(BA

$
$Q{
;C

$
$Q+
>C((QEE	IIaL~~H}}QH ((E 
IIcN~~H}}S!HH'H'r-   c                     [         R                  n [        R                  " SS9R	                  U 5      nUR
                  U R                  S   S-
  :X  d   e[        R                  " SS9nSn[        R                  " [        [        R                  " U5      S9   UR	                  U 5        S S S 5        UR
                  U R                  S   S-
  :X  d   eg ! , (       d  f       N1= f)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(   msgs      r+   test_n_neighbors_attributerx   y   s    		A

&
&3
7
;
;A
>CqwwqzA~---

&
&3
7C
6C	k3	8
 
9qwwqzA~--- 
9	8s   C
C$c                     [         R                  " SS/SS/SS//U S9n[         R                  " SS//U S9n[        R                  " SSSS9R	                  U5      n[        R                  " SSS9R	                  U5      nUR                  U5      nUR                  U5      nUR                  U5      nUR                  U5      n[        UXcR                  -   5        [        UXR                  -   5        [        XW5        g )	Nr   r   r   rL   rI   TrJ   rK   )	r   r   r   r   r   rM   r@   r	   offset_)	r&   rB   rD   rN   rO   clf1_scoresclf1_decisionsclf2_scoresclf2_decisionss	            r+   test_score_samplesr      s    jj1a&1a&1a&1FGZZ#sL9F''S$	c'l 	 ''AtDHHQD$$V,K++F3N$$V,K++F3N% % K-r-   c                     [         R                  n [        R                  " 5       nUR	                  U 5        S H  nSU S3nSR                  U5      n[        R                  " [        US9 n[        X5        S S S 5        [        WR                  R                  [        5      (       d   eU[        UR                  R                  5      ;   a  M   e   [        R                  " SS9nSnS	n[        R                  " [        US9 n[        US
5        S S S 5        [        WR                  R                  [        5      (       d   eU[        UR                  R                  5      ;   d   eg ! , (       d  f       N= f! , (       d  f       Np= f)N)r^   r@   rM   z''LocalOutlierFactor' has no attribute ''z&{} is not available when novelty=Falserl   Tr9   z3'LocalOutlierFactor' has no attribute 'fit_predict'z.fit_predict is not available when novelty=Truer%   )rn   ro   r   r   r   formatrr   raisesAttributeErrorgetattr
isinstancevalue	__cause__str)r'   r(   method	outer_msg	inner_msg	exec_infos         r+   test_novelty_errorsr      s1   		A 
&
&
(CGGAJC=fXQG	<CCFK	]]>;yC  < )//33^DDDDC	 9 9:::: D 
&
&t
4CEI@I	~Y	79]# 
8 ioo//@@@@IOO556666 <; 
8	7s   ,E+E<+
E9	<
F
c                    [         R                  R                  U 5      n[        R                  " 5       nUR                  U5        UR                  n[        R                  " SS9nUR                  U5        UR                  n[        X55        g )NTr9   )rn   ro   r<   r   r   r   r    r	   )r&   r'   clf_1scores_1clf_2scores_2s         r+   test_novelty_training_scoresr      sn     			&A ((*E	IIaL--H ((6E	IIaL--HH'r-   c                     SS/SS/SS//n [         R                  " SS9nUR                  U 5        [        US5      (       d   e[        US5      (       d   e[        US5      (       d   e[        US5      (       a   e[         R                  " S	S9nUR                  U 5        [        US5      (       d   e[        US5      (       a   e[        US5      (       a   e[        US5      (       a   eg )
Nr   r   Tr9   r^   r@   rM   r%   F)r   r   r   hasattr)r'   r(   s     r+   test_hasattr_predictionr      s    
Q!Q!Q A 
&
&t
4CGGAJ3	""""3+,,,,3((((sM**** 
&
&u
5CGGAJ3&&&&sI&&&&s/0000sO,,,,,r-   Tr9   c                     U" U 5        g )N )	estimatorchecks     r+   test_novelty_true_common_testsr      s     
)r-   expected_outliers   5   c                    [         R                  nUR                  S   n[        U 5      U-  n[        R
                  " US9nUR                  U5      n[        R                  " US:g  5      nX`:w  a  UR                  n[        X`U5        g g )Nr   )r   r   )rn   ro   rq   floatr   r   r%   r   sumr    r   )r   r'   	n_samplesr   r(   rF   num_outliersy_decs           r+   test_predicted_outlier_numberr      sz     			A
I+,y8M

&
&]
CC__QF66&A+&L(,, %H )r-   csr_containerc                 *   U " [         R                  5      n[        R                  " SS9nUR	                  U5        UR                  U5        UR                  U5        UR                  U5        [        R                  " SS9nUR                  U5        g )NTr9   F)	rn   ro   r   r   r   r^   rM   r@   r%   )r   r'   lofs      r+   test_sparser      sp    
 	dii A

&
&t
4CGGAJKKNa!

&
&u
5COOAr-   c                  F   [         R                  " S5      n Sn[        R                  " [        US9   [
        R                  " SS9R                  U SS 5      nSSS5        [
        R                  " SS9R                  U SS 5      nUR                  S:X  d   eSn[        R                  " [        US9   UR                  SSS9  SSS5        UR                  SSS9u  p4UR                  S	:X  d   eUR                  S	:X  d   eS
n[        R                  " [        US9   UR                  U SS9  SSS5        UR                  U SS9u  nnUR                  S:X  d   eUR                  S:X  d   eg! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       Ni= f)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 = 1rl   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   onesrr   r   
ValueErrorr   r   r   n_samples_fit_
kneighborsrq   )r'   rw   r   	distancesindicess        r+   $test_lof_error_n_neighbors_too_larger   
  s}    	A	+  
z	-**q9==aeD 
. 
&
&1
5
9
9!BQ%
@C"""	+  
z	-t+ 
. !<I??f$$$==F"""	+  
z	-qa( 
. 	qa(??f$$$==F"""; 
.	- 
.	- 
.	-s#   'E/4FF/
E>
F
F rY   )auto	ball_treekd_treerW   r:   Fr   g      ?r   c                 B   [         R                  R                  U SS9n[        R                  " SXUS9nUR                  U5        UR                  R                  U :X  d   eS H8  n[        XV5      (       d  M  [        XV5      " U5      nUR                  U :X  a  M8   e   g)zECheck that the fitted attributes are stored using the data type of X.Fr1   r   )r   rY   r   r:   )rM   r@   N)
rn   ro   r<   r   r   r   r    r   r   r   )r&   rY   r   r:   r'   isor   rF   s           r+   !test_lof_input_dtype_preservationr   6  s    
 			E2A

&
&QXC GGAJ''--===83S)!,F<<</// 9r-   c                    [         R                  SS n[         R                  SS n[        R                  " X4/SS9R	                  [        R
                  5      n[        R                  " XUS9nUR	                  [        R
                  SS9nUR                  U5        [        R                  " XUS9nUR	                  [        R                  SS9n	UR                  U	5        [        UR                  UR                  5        S	 HA  n
[        Xj5      (       d  M  [        Xj5      " U5      n[        X5      " U	5      n[        XS
S9  MC     g)z?Check the equivalence of the results with 32 and 64 bits input.N2   r   )axis)rY   r:   r   Tr1   )rM   r@   r^   r%   g-C6*?)atol)rn   ro   r   concatenater<   float32r   r   r   float64r	   r    r   r   )rY   r:   r   inliersoutliersr'   lof_32X_32lof_64X_64r   	y_pred_32	y_pred_64s                r+   test_lof_dtype_equivalencer   J  s    iinGyy~H 	*3::2::FA))MF 88BJJT8*D
JJt))MF 88BJJT8*D
JJtF33V5T5TUR6""/5I/5IIv>	 Sr-   c                     [         R                  R                  S5      n U R                  [         R                  " S/S-  [         R
                  " SSSS9U R                  S5      S-  /5      5      nUR                  S	S
5      nSn[        R                  " SSS9n[        R                  " [        [        R                  " U5      S9   UR                  U5        SSS5        g! , (       d  f       g= f)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   rI   i  r/   i  )numrk   r3   r   r   znDuplicate values are leading to incorrect results. Increase the number of neighbors for more accurate results.r   )r   r   rl   N)r   rZ   default_rngpermutationhstacklinspacereshaper   r   rr   rs   rt   ru   rv   r%   )rA   xr'   	error_msgr   s        r+   test_lof_duplicate_samplesr   k  s     ))


"C
		C$/

3#%	
	A 	
		"aA	F 
 
&
&1C
HC 
k9)=	> 
?	>	>s   C##
C1)*   )1ru   mathr   numpyr   rr   sklearnr   r   sklearn.datasetsr   sklearn.metricsr   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.estimator_checksr   r   sklearn.utils.fixesr   rA   rn   r   targetr8   permro   r,   rG   rR   ri   rx   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r-   r+   <module>r      s   
    & & ) , F / {
t{{''(IIdO	kk$A,0.>((4	..278($-* )66tDEF G ,r2h7I 8I  .9 : )#X &OPT5M23-80 9 3 Q0" &OPT5M23-8? 9 3 Q?<r-   