
    0Ph5                     
   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
 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+ej)        *                    de          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' Z0dS ))    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                 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        `/var/www/html/test/jupyter/venv/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   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 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   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   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.)
   r4   Fr1   )r   r4   	euclidean)metricr   TrK   bruteprecomputed)r   	algorithmrW   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_precomputedrj   _   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 )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_attributery   y   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   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      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 ]}d| d}d                    |          }t          j        t          |          5 }t          ||           d d d            n# 1 swxY w Y   t          |j        j        t                    sJ |t          |j        j                  v sJ t          j        d          }d}d	}t          j        t          |          5 }t          |d
           d d d            n# 1 swxY w Y   t          |j        j        t                    sJ |t          |j        j                  v sJ d S )N)r_   r@   rM   z''LocalOutlierFactor' has no attribute ''z&{} is not available when novelty=Falserm   Tr9   z3'LocalOutlierFactor' has no attribute 'fit_predict'z.fit_predict is not available when novelty=Truer%   )ro   rp   r   r   r   formatrs   raisesAttributeErrorgetattr
isinstancevalue	__cause__str)r'   r(   method	outer_msg	inner_msg	exec_infos         r+   test_novelty_errorsr      s   	A 
&
(
(CGGAJJJC ; ;GfGGG	<CCFKK	]>;;; 	!yC   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! )/3^DDDDDC	 9::::::: 
&t
4
4
4CEI@I	~Y	7	7	7 $9]###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ io/@@@@@IO566666666s$   /BB	B	
D''D+.D+c                 $   t           j                            |           }t          j                    }|                    |           |j        }t          j        d          }|                    |           |j        }t          ||           d S )NTr9   )ro   rp   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   Tr9   r_   r@   rM   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-   Tr9   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   )ro   rp   rr   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

&]
C
C
CC__QF6&A+&&L(((, /@%HHHHH )(r-   csr_containerc                 V    | t           j                  }t          j        d          }|                    |           |                    |           |                    |           |                    |           t          j        d          }|                    |           d S )NTr9   F)	ro   rp   r   r   r   r_   rM   r@   r%   )r   r'   lofs      r+   test_sparser      s    
 	di  A

&t
4
4
4CGGAJJJKKNNNa!

&u
5
5
5COOAr-   c                  r   t          j        d          } d}t          j        t          |          5  t          j        d                              | dd                   }ddd           n# 1 swxY w Y   t          j        d                              | dd                   }|j        dk    sJ d}t          j        t          |          5  |	                    dd           ddd           n# 1 swxY w Y   |	                    dd          \  }}|j
        d	k    sJ |j
        d	k    sJ d
}t          j        t          |          5  |	                    | d           ddd           n# 1 swxY w Y   |	                    | d          \  }}|j
        dk    sJ |j
        dk    sJ 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 = 1rm   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   onesrs   r   
ValueErrorr   r   r   n_samples_fit_
kneighborsrr   )r'   rx   r   	distancesindicess        r+   $test_lof_error_n_neighbors_too_larger   
  s    	A	+  
z	-	-	- E E*q999==aeDDE E E E E E E E E E E E E E E 
&1
5
5
5
9
9!BQB%
@
@C""""	+  
z	-	-	- , ,t+++, , , , , , , , , , , , , , , !<<Iw?f$$$$=F""""	+  
z	-	-	- ) )qa((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 	qa((?f$$$$=F""""""s5   1A//A36A3C88C<?C<E88E<?E<rZ   )auto	ball_treekd_treerX   r:   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.Fr1   r   )r   rZ   r   r:   )rM   r@   N)
ro   rp   r<   r   r   r   r    r   r   r   )r&   rZ   r   r:   r'   isor   rF   s           r+   !test_lof_input_dtype_preservationr   6  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)rZ   r:   r   Tr1   )rM   r@   r_   r%   g-C6*?)atol)ro   rp   r   concatenater<   float32r   r   r   float64r	   r    r   r   )rZ   r:   r   inliersoutliersr'   lof_32X_32lof_64X_64r   	y_pred_32	y_pred_64s                r+   test_lof_dtype_equivalencer   J  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-   c            
         t           j                            d          } |                     t          j        dgdz  t          j        ddd          |                     d          dz  g                    }|                    d	d
          }d}t          j        dd          }t          j
        t          t          j        |                    5  |                    |           ddd           dS # 1 swxY w 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   rI   i  r/   i  )numrl   r3   r   r   znDuplicate values are leading to incorrect results. Increase the number of neighbors for more accurate results.r   )r   r   rm   N)r   r[   default_rngpermutationhstacklinspacereshaper   r   rs   rt   ru   rv   rw   r%   )rA   xr'   	error_msgr   s        r+   test_lof_duplicate_samplesr   k  s=    )


"
"C
	C$///

3#%	
 	
	 	A 	
		"aA	F 
 
&1C
H
H
HC 
k9)=)=	>	>	>                   s   C77C;>C;)rS   )1rv   mathr   numpyr   rs   sklearnr   r   sklearn.datasetsr   sklearn.metricsr   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.estimator_checksr   r   sklearn.utils.fixesr   rA   ro   r   targetr8   permrp   r,   rG   rR   rj   ry   r   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r-   r+   <module>r      so   
			            & & & & & & & & & & & & & & ) ) ) ) ) ) , , , , , , F F F F F F F F        / . . . . . y{{
t{'((IdO	k$A A A,0 0 0.> > >(( ( ( (4	. 	. 	.. . .27 7 78( ( ($- - -* 6)6tDDDEFF  GF ,r2h77I I 87I  .99  :9 )# )# )#X &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-   