
    Ugc2                        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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/surfInsights/venv3-11/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   5   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   L   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   `   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   z   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 ]}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?   rL   z''LocalOutlierFactor' has no attribute ''z&{} is not available when novelty=Falserk   Tr8   z3'LocalOutlierFactor' has no attribute 'fit_predict'z.fit_predict is not available when novelty=Truer%   )rm   rn   r   r   r   formatrq   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 )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-   csr_containerc                 V    | t           j                  }t          j        d          }|                    |           |                    |           |                    |           |                    |           t          j        d          }|                    |           d S )NTr8   F)	rm   rn   r   r   r   r^   rL   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 = 1rk   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   onesrq   r   
ValueErrorr   r   r   n_samples_fit_
kneighborsrp   )r'   rv   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<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   7  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   K  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   )0rt   mathr   numpyr   rq   sklearnr   r   sklearn.datasetsr   sklearn.metricsr   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.estimator_checksr   r   sklearn.utils.fixesr   r@   rm   permutationtargetr7   permrn   r,   rF   rQ   ri   rw   r~   r   r   r   r   r   markparametrizer   r   r   r   r   r   r-   r+   <module>r      s`  
 
			            & & & & & & & & & & & & & & ) ) ) ) ) ) , , , , , , 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-   