
    >[g5                        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/d& Z0y)(    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        [/var/www/html/bid-api/venv/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   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                    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   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   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.)
   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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)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                    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   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                     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@   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      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 )NTr9   )rn   ro   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   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sO,,,,r-   Tr9   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   )rn   ro   rq   floatr   r   r%   r   sumr    r   )r   r'   	n_samplesr   r(   rF   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 )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                  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 = 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+ 
. !<Iw??f$$$==F"""	+  
z	-qa( 
. 	qa(??f$$$==F"""; 
.	- 
.	- 
.	-s#   )F :F+F F
FF"rY   )auto	ball_treekd_treerW   r:   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.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)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)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))WMF 88BJJT8*D
JJt))WMF 88BJJT8*D
JJtF33V5T5TUR66"//5I//5IIyv>	 Sr-   c            
         t         j                  j                  d      } | j                  t        j                  dgdz  t        j
                  ddd      | j                  d      dz  g            }|j                  d	d
      }d}t        j                  dd      }t        j                  t        t        j                  |            5  |j                  |       ddd       y# 1 sw Y   yxY w)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''C0)*   )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)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-   