
    {Kgc2                        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j3                  ej4                  j6                        Zej:                  e   e_        ej4                  e   e_        d
 Zd Zd Z d&dZ!d Z"d Z#d Z$d Z%d Z& e ejN                  d      g      d        Z(ejR                  jU                  dddg      d        Z+ejR                  jU                  de      d        Z,d Z-ejR                  jU                  dg d      ejR                  jU                  ddd g      ejR                  jU                  d!d"d#g      d$                      Z.ejR                  jU                  dg d      ejR                  jU                  ddd g      ejR                  jU                  d!d"d#g      d%                      Z/y)'    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                 &   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	                  |      j
                  }t        |j                  |       t        j                  |d d       t        j                  |dd        kD  sJ t        j                  d
d      j	                  |      }ddgz  ddgz  z   }t        |j                         |       t        |j                  |      |       y )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        d/home/alanp/www/video.onchill/myenv/lib/python3.12/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                    t        d      }d|j                  dd      j                  | d      z  }|d d }|j                  ddd	
      j                  | d      }t        j
                  |dd  |f   }t	        j                  dgdz  dgdz  z         }t        j                  d      j                  |      }|j                  |       }t        ||      dkD  sJ y )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   5   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                    t        j                  ddgddgddgg|       }t        j                  ddd      j	                  |      }t        j                  dd      j	                  |      }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        |j                  ddgg       |g       t        |j                  ddgg       |g       t        |j                  d	d	gg       |g       t        |j                  d	d	gg       |g       y )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   L   si   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2S#sODT222S#sODT''#s55u=T''#s55u=T''#s55u=T''#s55u=r-   c                    t         j                  j                  |      }|j                  d      j	                  | d      }|j                  d      j	                  | d      }t        j                  |d      }t        j                  ||d      }t        j                  dd	      }|j                  |       |j                         }|j                  |      }	t        j                  dd
dd      }
|
j                  |       |
j                         }|
j                  |      }t        ||       t        |	|       y)z!Tests LOF with a distance matrix.)
   r3   Fr0   )r   r3   	euclidean)metricr   TrJ   bruteprecomputed)r   	algorithmrU   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_precomputedrh   `   s    ))


-C'")),U)CA&!((E(BA

$
$Q{
;C

$
$Q+
>C((QEE	IIaL~~H}}QH ((E 
IIcN~~H}}S!HHh'Hh'r-   c                     t         j                  } t        j                  d      j	                  |       }|j
                  | j                  d   dz
  k(  sJ t        j                  d      }d}t        j                  t        t        j                  |            5  |j	                  |        d d d        |j
                  | j                  d   dz
  k(  sJ y # 1 sw Y   +xY w)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_attributerv   z   s    		A

&
&3
7
;
;A
>CqwwqzA~---

&
&3
7C
6C	k3	8
 
9qwwqzA~--- 
9	8s   CC"c                    t        j                  ddgddgddgg|       }t        j                  ddgg|       }t        j                  ddd      j	                  |      }t        j                  dd      j	                  |      }|j                  |      }|j                  |      }|j                  |      }|j                  |      }t        |||j                  z          t        |||j                  z          t        ||       y )	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}      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                     t         j                  } t        j                         }|j	                  |        dD ]  }d| d}dj                  |      }t        j                  t        |      5 }t        ||       d d d        t        j                  j                  t              sJ |t        |j                  j                        v rJ  t        j                  d      }d}d	}t        j                  t        |      5 }t        |d
       d d d        t        j                  j                  t              sJ |t        |j                  j                        v sJ y # 1 sw Y   xY w# 1 sw Y   _xY w)N)r]   r?   rL   z''LocalOutlierFactor' has no attribute ''z&{} is not available when novelty=Falserj   Tr8   z3'LocalOutlierFactor' has no attribute 'fit_predict'z.fit_predict is not available when novelty=Truer%   )rl   rm   r   r   r   formatrp   raisesAttributeErrorgetattr
isinstancevalue	__cause__str)r'   r(   method	outer_msg	inner_msg	exec_infos         r+   test_novelty_errorsr      s-   		A 
&
&
(CGGAJC=fXQG	<CCFK	]]>;yC  < )//33^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-!E*	-E6c                 "   t         j                  j                  |       }t        j                         }|j                  |       |j                  }t        j                  d      }|j                  |       |j                  }t        ||       y )NTr8   )rl   rm   r;   r   r   r   r    r	   )r&   r'   clf_1scores_1clf_2scores_2s         r+   test_novelty_training_scoresr      sp     			&A ((*E	IIaL--H ((6E	IIaL--HHh'r-   c                     ddgddgddgg} t        j                  d      }|j                  |        t        |d      sJ t        |d      sJ t        |d      sJ t        |d      rJ t        j                  d	      }|j                  |        t        |d      sJ t        |d      rJ t        |d      rJ t        |d      rJ y )
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
4CGGAJ3	"""3+,,,3(((sM*** 
&
&u
5CGGAJ3&&&sI&&&s/000sO,,,,r-   Tr8   c                      ||        y )N )	estimatorchecks     r+   test_novelty_true_common_testsr      s     
)r-   expected_outliers   5   c                    t         j                  }|j                  d   }t        |       |z  }t	        j
                  |      }|j                  |      }t        j                  |dk7        }|| k7  r|j                  }t        || |       y y )Nr   )r   r   )rl   rm   ro   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

&
&]
CC__QF66&A+&L((,, /@%H )r-   csr_containerc                 2    | t         j                        }t        j                  d      }|j	                  |       |j                  |       |j                  |       |j                  |       t        j                  d      }|j                  |       y )NTr8   F)	rl   rm   r   r   r   r]   rL   r?   r%   )r   r'   lofs      r+   test_sparser      sp    
 	dii A

&
&t
4CGGAJKKNa!

&
&u
5COOAr-   c                  J   t        j                  d      } d}t        j                  t        |      5  t        j                  d      j                  | dd       }ddd       t        j                  d      j                  | dd       }|j                  dk(  sJ d}t        j                  t        |      5  |j                  dd       ddd       |j                  dd      \  }}|j                  d	k(  sJ |j                  d	k(  sJ d
}t        j                  t        |      5  |j                  | d       ddd       |j                  | d      \  }}|j                  dk(  sJ |j                  dk(  sJ y# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   [xY w)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 = 1rj   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   onesrp   r   
ValueErrorr   r   r   n_samples_fit_
kneighborsro   )r'   ru   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+ 
. !<Iw??f$$$==F"""	+  
z	-qa( 
. 	qa(??f$$$==F"""; 
.	- 
.	- 
.	-s#   )F :F+F F
FF"rX   )auto	ball_treekd_treerV   r9   Fr   g      ?r   c                 >   t         j                  j                  | d      }t        j                  d|||      }|j                  |       |j                  j                  | k(  sJ dD ]2  }t        ||      s t        ||      |      }|j                  | k(  r2J  y)zECheck that the fitted attributes are stored using the data type of X.Fr0   r   )r   rX   r   r9   )rL   r?   N)
rl   rm   r;   r   r   r   r    r   r   r   )r&   rX   r   r9   r'   isor   rE   s           r+   !test_lof_input_dtype_preservationr   7  s    
 			E2A

&
&-QXC GGAJ''--===83)WS&)!,F<<</// 9r-   c                    t         j                  dd }t         j                  dd }t        j                  ||gd      j	                  t        j
                        }t        j                  | ||      }|j	                  t        j
                  d      }|j                  |       t        j                  | ||      }|j	                  t        j                  d      }	|j                  |	       t        |j                  |j                         d	D ]A  }
t        ||
      s t        ||
      |      } t        ||
      |	      }t        ||d
       C y)z?Check the equivalence of the results with 32 and 64 bits input.N2   r   )axis)rX   r9   r   Tr0   )rL   r?   r]   r%   g-C6*?)atol)rl   rm   r   concatenater;   float32r   r   r   float64r	   r    r   r   )rX   r9   r   inliersoutliersr'   lof_32X_32lof_64X_64r   	y_pred_32	y_pred_64s                r+   test_lof_dtype_equivalencer   K  s    iinGyy~H 	*3::2::FA))WMF 88BJJT8*D
JJt))WMF 88BJJT8*D
JJtF33V5T5TUR66"//5I//5IIyv>	 Sr-   )*   )0rs   mathr   numpyr   rp   sklearnr   r   sklearn.datasetsr   sklearn.metricsr   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.estimator_checksr   r   sklearn.utils.fixesr   r@   rl   permutationtargetr7   permrm   r,   rF   rQ   rh   rv   r}   r   r   r   r   r   markparametrizer   r   r   r   r   r   r-   r+   <module>r      s  
 
    & & ) , F / {
t{{''(IIdO	kk$A,0.>((4	..278($-* 6)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-   