
    PiS                       d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: ej;        <                    d           Z= ej>                    Z?e=@                    e?jA        jB                  ZCe?jD        eC         e?_D        e?jA        eC         e?_A         ejE                    ZFe=@                    eFjA        jB                  ZCeFjD        eC         eF_D        eFjA        eC         eF_A         eGe2e3z   e4z   e5z   e7z   e8z             ZHeHejI        fz   ZJdZK eL eMjN         eOeMejP        Q                                                     ZRddddejS        fZT e0ejU                  e_U         e0ejV                  e_V        dgZWddeXfdZYdeXdeZfdZ[d Z\dde\gZ]ej^        j_        ej^        `                    dd d!g          ej^        `                    d"d#d$g          ej^        `                    deReWz             d%                                                 Zaej^        `                    d&d'd(g          ej^        `                    deReWz             ej^        `                    d)g d*          ej^        `                    d+ejb        ej%        ejc        ejd        g          d,                                                 Zeej^        `                    d-ejb        ej%        ejf        g          d.             Zgd/ Zhej^        i                    d0          d1             Zjd2 Zkej^        `                    d3d4d5g          d6             Zlej^        `                    d3d4d5g          d7             Zmej^        `                    d8e5          d9             Znej^        i                    d0          ej^        `                    d:e*e(g          ej^        `                    d8e5          d;                                     Zoej^        i                    d0          ej^        `                    d8e5          d<                         Zpej^        `                    d8e5          d=             Zqej^        `                    d>e7e2z   e6z             d?             Zrej^        i                    d0          ej^        `                    d8e5          d@                         ZsdA Zt	 ddEZuej^        `                    dFeK          ej^        `                    dGe]          	 	 	 	 	 ddJ                        Zv	 	 	 	 	 ddKZwdL Zxej^        `                    dFeK          ej^        `                    dGe]          	 	 	 	 	 ddM                        Zyej^        `                    dFeK          ej^        `                    dGe]          ej^        `                    dNg dO          dP                                     Zzej^        `                    dFeK          ej^        `                    dGe]          dQ                         Z{dR Z|dS Z}dT Z~ej^        `                    d8e5          dU             Zej^        `                    dFg dV          dW             Zej^        `                    dFdg e edXdYgeWR                     dZd[gz             d\             Zd] Z	 dd^Zd_ Z	 dd`Zda Z	 ddbZ	 ddcZdd Z	 ddeZej^        i                    d0          	 ddf            Zdg Zdh Zdi Zej^        `                    djg dk          ej^        `                    dldmdg          ej^        `                    d8e5          ddo                                    Zdp Zej^        `                    djg dk          ej^        `                    dldmdg          ej^        `                    d8e5          ddq                                    Zej^        `                    drejb        ejc        ej%        ejd        g          ej^        `                    d8e5          ds                         Zej^        `                    drejb        ejc        ej%        ejd        g          ej^        `                    dddtg          ej^        `                    dFdudvg          dw                                     Zej^        `                    drejb        ejc        ej%        ejd        g          ej^        `                    dddtg          ej^        `                    dFdxdyg          dz                                     Zd{ Zej^        `                    d eL eMejP        dy                   N                    ejP        dv                    eMd|ge          z
            eWz             	 	 	 	 dd}            Z e0e~          ej^        `                    d eL eMejP        dv                    eMdg          z
                      	 	 	 	 dd                        Zd Zej^        `                    dejP        dv         eWz             ej^        `                    d8e5          	 dd                        Zd Zej^        `                    d8e5          d             Zd Zd Zd Zej^        `                    dFeK          d             Zej^        `                    dFeK          d             Zd Zej^        `                    dFeK          d             Zej^        `                    dFeK          d             Zej^        j_        ej^        `                    dddg          ej^        `                    dFeK          d                                     Zd Zej^        `                    d8e5          d             Zej^        i                    d          d             Zd Zd Zej^        `                    dej;                            dId          dddvfej;                            dIdB          dYddvfej;                            ddC          dYddvfej;                            dIdC          dYddxfej;                            dIdC          dddgdCz  idyfej;                            dIdC          dddvfg          d             Z e0e~          ej^        `                    d eL eMejP        dv                    eMdg          z
                      	 	 	 	 dd                        Zd Zd Zej^        `                    dejb        djdifej%        djdifejd        i fejc        i fej        djdifej        ddifej        djdifg          d             Zd Zd Zd Zej^        `                    d ejb        dI           ejc                    g          ej^        `                    dFeK          d                         Zej^        `                    d ej%        dI           ejd                    g          ej^        `                    dFeK          d                         ZdS )    N)product)issparse)config_contextdatasetsmetrics	neighbors)clone)EfficiencyWarningNotFittedError)DistanceMetric)PAIRWISE_BOOLEAN_FUNCTIONSpairwise_distances)BOOL_METRICS)!assert_compatible_argkmin_results assert_compatible_radius_results)LeaveOneOutcross_val_predictcross_val_scoretrain_test_split)VALID_METRICS_SPARSEKNeighborsRegressor)KNeighborsMixin_check_precomputed_is_sorted_by_datasort_graph_by_row_values)make_pipeline)assert_allcloseassert_array_equalignore_warnings)BSR_CONTAINERSCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDIA_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)check_random_state)	ball_treebrutekd_treeauto            DM_euclideanmetricc                 ^    | dd         dk    rt          j        | dd         |          S | S )a  
    Helper function for properly building a type-specialized DistanceMetric instances.

    Constructs a type-specialized DistanceMetric instance from a string
    beginning with "DM_" while allowing a pass-through for other metric-specifying
    strings. This is necessary since we wish to parameterize dtype independent of
    metric, yet DistanceMetric requires it for construction.

    Nr.   DM_dtype)r   
get_metric)r1   r5   s     z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/neighbors/tests/test_neighbors.py_parse_metricr8   c   s:     bqbzU(5AAAAM    
n_featuresc           
         t           j                            d          }| dk    rkt          d          t          d          t          d          t          t           j                  t          d|                    |                    gS | dk    r$t          |                    |          	          gS | d
k    rI|                    ||          }||j        z   dt          j        |          z  z   }t          |          gS i gS )z/Return list of DistanceMetric kwargs for tests.r,   	minkowski      ?)pr-   r.   )r>   w
seuclidean)Vmahalanobis)VI)nprandomRandomStatedictinfrandTeye)r1   r:   rngArC   s        r7   _generate_test_params_forrN   r   s     )


"
"C3KKK1III1III26NNN1,,---
 	
 sxx
++,,,--HHZ,,Wq26*----} 4Kr9   c                 p    t          j        d          5  d| z  }ddd           n# 1 swxY w Y   |dz  S )zWeight function to replace lambda d: d ** -2.
    The lambda function is not valid because:
    if d==0 then 0^-2 is not valid.ignore)divide      ?Nr-   )rD   errstate)distretvals     r7   _weight_funcrV      s     
H	%	%	%  t              19s   (,,uniformdistancez/n_samples, n_features, n_query_pts, n_neighbors)d   rY   
   rY   )     rY   r,   query_is_trainFTc           
      J   t          ||           }t          j                            d          }|                    ||                              | d          }|r|n*|                    ||                              | d          }	g }
g }t          D ]}t          |t                    r(| t          j	        k    rd|v rt          j        d           t          j        |||          }|                    |           |
                    |                    |	d                     |                    |                    |	d                     t#          t%          |          d	z
            D ]}t          |         }t          |d	z            }|
|         }||         d         ||d	z            d         }}||         d	         ||d	z            d	         }}t'          ||d
| d           t'          ||d
| d| d           t)          ||d
| d| dd           d S )Nr   FcopytreeCNeither KDTree nor BallTree support 32-bit distance metric objects.n_neighbors	algorithmr1   return_distanceTr,   The 'zE' algorithm returns differentindices depending on 'return_distances'.err_msg' and 'z&' algorithms return different indices.z(' algorithms return different distances.gư>)rj   atol)r8   rD   rE   rF   rI   astype
ALGORITHMS
isinstancer   float32pytestskipr   NearestNeighborsfitappend
kneighborsrangelenr   r   )global_dtype	n_samplesr:   n_query_ptsrd   r]   r1   	local_rngXqueryresults_nodistresultsre   neighinext_algorithmindices_no_dist	distancesnext_distancesindicesnext_indicess                        r7   test_unsupervised_kneighborsr      s   . 6<00F 	%%a((Iy*--44\4NNA 	V^^K44;;Lu;UU 
 NG F F	fn-- 	,"*2L2L""    *#y
 
 
 			!e..ue.LLMMMu''t'DDEEEE3w<<!#$$ 
 
qM	#AE*(+$+AJqM71q5>!3D>	 '
1wq1u~a/@;	 ; ; ;		
 	
 	
 	
 	7	 7 7. 7 7 7		
 	
 	
 	
 	9	 9 9. 9 9 9 	
 	
 	
 	
 	
/
 
r9   z"n_samples, n_features, n_query_pts)rY   rY   rZ   )r[   r\   rY   zn_neighbors, radius))r,   rY   )2   i  )rY   r[   NeighborsMixinSubclassc           
         t          ||           }t          |t                    r:d|j        v rt	          j        d           d|j        v rt	          j        d           t          j                            d          }|	                    ||          
                    | d          }	|                    d|	          }
|	                    ||          
                    | d          }g }t          |t                    r|n|}t          D ]}t          |t                    r(| t          j        k    rd
|v rt	          j        d            ||||          }|                    |	|
           |                    |                    |                     t'          t)          |          dz
            D ]K}t          |         }t          |dz            }||         ||dz            }}t+          ||d| d| d           Ld S )N
ClassifierzGMetrics of type `DistanceMetric` are not yet supported for classifiers.RadiusVMetrics of type `DistanceMetric` are not yet supported for radius-neighbor estimators.r   Fr_   r.   sizera   rb   re   r1   r,   rh   rk   z*' algorithms return different predictions.ri   )r8   ro   r   __name__rq   rr   rD   rE   rF   rI   rm   randint
issubclassr   rn   rp   rt   ru   predictrw   rx   r   )ry   rz   r:   r{   r1   rd   radiusr   r|   r}   yr~   predict_results	parameterre   r   r   r   predictionsnext_predictionss                       r7   ,test_neigh_predictions_algorithm_agnosticityr      sX   > 6<00F&.)) 
1:::K    -666K/   	%%a((Iy*--44\4NNA!),,ANN;
33::<e:TTEO ""8/JJVPV    
5 
5	fn-- 	,"*2L2L""    '&yIfUUU		!Qu}}U3344443''!+,, 
 
qM	#AE*(7(:OAPQE<R%;	 ; ;. ; ; ;		
 	
 	
 	
 	

 
r9   KNeighborsMixinSubclassc                 ,   t                               d                              | d          }t                               dd          }t	          j        d          }|                    |           |                    |          \  }} |d          }|t	          j        |          t	          j	        |          fD ]P}|                    ||           |                    |          \  }	}
t          ||	           t          ||
           Qd S )	NrZ   r.   Fr_   r.   rZ   r   r,   rd   )rL   random_samplerm   r   r   rs   rt   rv   BallTreeKDTreer   r   )ry   r   r}   r   nbrs_fiddist1ind1nbrsdatadist2ind2s              r7   test_unsupervised_inputsr   L  s    	'"")),U)CCAABA)a888HLLOOO%%a((KE4""q111D9-a00)2B12E2EF ' 'qooa((tu%%%4&&&&' 'r9   c                  N   dgg} t          j                    }t          j        t                    5  |                    |            d d d            n# 1 swxY w Y   t          j        t                    5  |                    |            d d d            d S # 1 swxY w Y   d S )Nr,   )r   rs   rq   raisesr   kneighbors_graphradius_neighbors_graph)r}   
neighbors_s     r7   !test_not_fitted_error_gets_raisedr   i  s   
A+--J	~	&	& ' '##A&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '	~	&	& - -))!,,,- - - - - - - - - - - - - - - - - -s#   AAA7BB!Bzignore:EfficiencyWarningc                    t           j                            d          }|                    d          }|                    d          } | ||          \  }}dD ]}t	          j        d          }|                    |            t          ||          |          \  }	}
t	          j        ddd	          }|                    |            t          ||          |          \  }}t          |	|           t          |
|           t	          j        dd
d	          }|                    |            t          ||          |          \  }}t          |	|           t          |
|            t          ||          d          \  }	}
 t          ||          d          \  }}t          |	|           t          |
|           t          j        t                    5   t          ||          |           ddd           n# 1 swxY w Y   t          j        |j        d                   }|D ]} |d          }dx|_        |_        |                    ||                              |          }d|_        |                    ||                              |          }t          ||           dS )z;Tests unsupervised NearestNeighbors with a distance matrix.*   rZ   r/   r.   r/   )rv   r.   r   r)   precomputedrc   r+   Nr   	euclideanr1   r,   )rD   rE   rF   r   r   rs   rt   getattrr   r   rq   r   
ValueErrorarangeshaper   rd   r   r1   )make_train_test
estimatorsrL   r}   YDXXDYXmethodnbrs_Xdist_Xind_Xnbrs_Ddist_Dind_DtargetEstestpred_Xpred_Ds                      r7   check_precomputedr   r  s    )


#
#C'""A&!!Aq!$$HC $' $' +:::

1///22 +W]
 
 
 	

3///44'''5%((( +VM
 
 
 	

3///44'''5%((( 0//55///55'''5%((( ]:&& 	' 	'#GFF##A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' Yqwqz""F ( (c%%%'((
S_F##++A.."
f%%--c22''''( (s   %HH	H	c                      d } t           j        t           j        t           j        t           j        g}t          | |           d S )Nc                 T    t          j        |           t          j        ||           fS N)r   r   )X_trainX_tests     r7   r   z/test_precomputed_dense.<locals>.make_train_test  s*    &w//&vw77
 	
r9   )r   KNeighborsClassifierr   RadiusNeighborsClassifierRadiusNeighborsRegressorr   )r   r   s     r7   test_precomputed_denser     sJ    
 
 
 	&%+*	J oz22222r9   fmtcsrlilc                 b      fd}t           j        t           j        g}t          ||           d S )Nc                     t          j        d                              |           }|                    | d                                        |                    |d                                        fS )Nr/   r   rX   mode)r   rs   rt   r   asformatr   r   nnr   s      r7   r   z4test_precomputed_sparse_knn.<locals>.make_train_test  sv    'E:::>>wGGj99BB3GGZ88AA#FF
 	
r9   )r   r   r   r   r   r   r   s   `  r7   test_precomputed_sparse_knnr     sI    
 
 
 
 
 	&%J oz22222r9   c                 b      fd}t           j        t           j        g}t          ||           d S )Nc                     t          j        d                              |           }|                    | d                                        |                    |d                                        fS )Nr,   r   rX   r   )r   rs   rt   r   r   r   s      r7   r   z7test_precomputed_sparse_radius.<locals>.make_train_test  sv    'q11155g>>%%gJ%??HHMM%%f:%>>GGLL
 	
r9   )r   r   r   r   r   s   `  r7   test_precomputed_sparse_radiusr     sI    
 
 
 
 
 	+*J oz22222r9   csr_containerc                 `    | t          j        d                              dd                    }t          |          sJ d|d<   t          |          rJ  | g dg dg dg dg          }t          |          sJ g d	g d
g d}}} | |||fd          }t          |          sJ d S )NrZ   r,   r\   r   r-   r   r,   r-   )r.   r   r   )r.   r/   r   r,   r   r-   )r   r/   r-   r-   )r   r,   r,   r,   )r   r-   r-   r/   r.   r.   )r   )rD   r   reshaper   )r   r}   r   r   indptrs        r7   test_is_sorted_by_datar     s     	bimm++Ar2233Aa     AdG!!$$$$$ 	yyy)))YYY			BCCAa      )LL,,,6'DtWf-V<<<Aa       r9   functionc                     |t          j        t           j                            d                              dd                              }t          |          rJ  | |          }t          |          sJ t           j                            d                              dd          }|                                }d||dk    <    ||          }t          |          rJ  | |          }t          |          sJ d S )Nr   rZ   r-   rZ   rZ   r   r   r,   )rD   absrE   rF   randnr   r   toarray)r   r   r}   Xtmasks        r7   test_sort_graph_by_row_valuesr     s    
 	bfRY22266<<RDDEEFFA!!$$$$$	!Bb!!!!! 9  $$,,QX,>>D			AAdaiLaA!!$$$$$	!Bb!!!!!!!r9   c                 H    | t          j        t           j                            d                              dd                              }t          |          rJ |                                }t          |          j        |j        u sJ |                                }t          |d          j        |j        u sJ |                                }t          |d          j        |j        usJ |                                }t          |          j        |j        usJ t          |
                                d           t          j        t          d          5  t          |
                                d           d d d            d S # 1 swxY w Y   d S )Nr   rZ   Fr_   Tz%Use copy=True to allow the conversionmatch)rD   r   rE   rF   r   r   r`   r   r   r   tocscrq   r   r   )r   X_r}   s      r7   "test_sort_graph_by_row_values_copyr     s    
rvbi33B77==b"EEFF	G	GB!"%%%%% 			A#A&&+qv5555
		A#AE222716AAAA
		A#AD1116afDDDD 			Aa  %QV3333 QWWYYT2222 
z)P	Q	Q	Q 8 8 77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   &$FFFc                     | t          j        t           j                            d                              dd                              }t          |          rJ t          j        t          d          5  t          |d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          |dd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          |           d d d            n# 1 swxY w Y   t          j                    5  t          j        d           t          |dd	           d d d            d S # 1 swxY w Y   d S )
Nr   rZ   zwas not sorted by row valuesr   Tr_   )r`   warn_when_not_sortederrorF)rD   r   rE   rF   r   r   rq   warnsr
   r   r   warningscatch_warningssimplefilter)r   r}   s     r7   %test_sort_graph_by_row_values_warningr  (  s    	bfRY22266<<RDDEEFFA!!$$$$$ 
'/M	N	N	N / / ..../ / / / / / / / / / / / / / /	'/M	N	N	N J J DIIIIJ J J J J J J J J J J J J J J	'/M	N	N	N  1               
	 	"	" K Kg&&& EJJJJK K K K K K K K K K K K K K K K K KsH   ;BB B?CC"%C"D  D$'D$>'E22E69E6sparse_containerc                     | t          j        t           j                            d                              dd                              }t          j        t          d          5  t          |           d d d            n# 1 swxY w Y   t          j        t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )Nr   rZ   zformat is not supportedr   )
rD   r   rE   rF   r   rq   r   	TypeErrorr   r   )r	  r}   s     r7   /test_sort_graph_by_row_values_bad_sparse_formatr  <  s?   
 		 5 5b 9 9 ? ?B G GHHIIA	y(A	B	B	B $ $ ###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	y(A	B	B	B  1                 s$   *BB
B
,C		CCc                 .   t          j        g dg dg dg          } | |          }t          j        dd          }|                    |           |                    d d           |                    t          j        g dg          d	           t          j        g d
g dg dg          } | |          }|                    |           d}t          j        t          |          5  |                    d d           d d d            n# 1 swxY w Y   t          j        g dg dg dg          } | |          }d}t          j        t          |          5  |                    |d           d d d            d S # 1 swxY w Y   d S )N)               @rR   )r  r        @)rR   r  r  r,   r   rd   r1   r   r  r  r  r-   )r  r  r  )r  r  r  zB2 neighbors per samples are required, but some samples have only 1r   )      @r  rR   )g       r  r  z>Negative values in data passed to precomputed distance matrix.)	rD   arrayr   rs   rt   rv   rq   r   r   )r   rT   dist_csrr   msgs        r7   test_precomputed_sparse_invalidr  H  s9    8___oooGHHD}T""H&1]KKKE	IIh	Tq)))	RX/00a@@@ 8___oooGHHD}T""H	IIh
NC	z	-	-	- . .1---. . . . . . . . . . . . . . . 8___&6&6&6HIID}T""H
JC	z	-	-	- 2 2q1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s$   1DDD%F

FFc                     t           j                            d          } |                     dd          }t	          |d          }|                     dd          }t          j        t          j        t          j	        t          j
        fD ]F}t           |            ||          }t           |d          ||          }t          ||           Gd S )	Nr      r-   r   r   r.   r   r   )rD   rE   rF   rI   r   r   r   r   r   r   r   r   r   )rL   r}   Dr   r   metric_scoreprecomp_scores          r7   !test_precomputed_cross_validationr  b  s    
)


"
"CQA1[111AABA&+%*	 8 8 'ssuua33'=(A(A(A1aHH<77778 8r9   r  r\         ?c                 6   t           j                            |          }|                    ||                              | d          }|                    ||                              | d          }t
          D ]}	g }
t          D ]}t          j        |||	          }|	                    |           |
                    |d          }|
                    |d          \  }}t          |||          D ]A\  }}}|                                }||         |d d <   ||         |d d <   ||         |d d <   B|
                    ||f           t          t          j        t!          |                    t          j        t!          |                               t#          t%          |
          dz
            D ]}t          t          j        t!          |
|         d                             t          j        t!          |
|dz            d                                        t          t          j        t!          |
|         d                             t          j        t!          |
|dz            d                                        Րd S )NFr_   )r   re   r>   rf   Tr,   r   )rD   rE   rF   rI   rm   Prn   r   rs   rt   radius_neighborszipargsortru   r   concatenatelistrw   rx   )ry   rz   r:   r{   r   random_staterL   r}   testr>   r   re   r   r   rT   inddr   i1js                       r7   "test_unsupervised_radius_neighborsr,  s  sm    )


-
-CJ''..|%.HHA88K,,33Lu3MMD  # 	S 	SI.f	UVWWWEIIaLLL))$)FFD ..tT.JJID#c400  1bIIKKt!!!t!!!1111NND#;'''BN49955r~d4jj7Q7QRRRRs7||a'(( 	 	AtGAJqM2233tGAEN1$56677   tGAJqM2233tGAEN1$56677   	+ r9   re   weights(   rZ   c                    t           j                            |          }d|                    ||                              | d          z  dz
  }	|	dz                      d          dk                         t                    }
|
                    t                    }t          j	        |||          }|
                    |	|
           dd|                    d|          z  dz
  z  }|                    |	d |         |z             }t          ||
d |                    |
                    |	|           |                    |	d |         |z             }t          ||d |                    d S )	Nr-   Fr_   r,   axisr  rd   r-  re   h㈵>)rD   rE   rF   rI   rm   sumintstrr   r   rt   r   r   )ry   re   r-  rz   r:   
n_test_ptsrd   r&  rL   r}   r   y_strknnepsilony_preds                  r7   test_kneighbors_classifierr<    s\    )


-
-C	CHHY
++22<e2LLLqPA
Q$		c	!))#..AHHSMME

(I  C GGAqMMMa#((1j111A56G[[;J;'122Fvq*~...GGAu[[;J;'122Fvu[j[122222r9   c                 D   t           j                            |          }d|                    ||                              | d          z  dz
  }|dz                      d          dk                         t                    }t          j        |          }	|		                    ||                    t                               dd|                    d|          z  dz
  z  }
|	                    |d |         |
z             }t          ||d |                    d S )	Nr-   Fr_   r,   r0  r  r   r3  )rD   rE   rF   rI   rm   r4  r5  r   r   rt   floatr   r   )ry   rz   r:   r7  rd   r&  rL   r}   r   r9  r:  r;  s               r7   'test_kneighbors_classifier_float_labelsr?    s    )


-
-C	CHHY
++22<e2LLLqPA
Q$		c	!))#..A

([
A
A
ACGGAqxxa#((1j111A56G[[;J;'122Fvq*~.....r9   c           	      J   t          j        g dg dg dg dg dg dg                              | d          }t          j        g d	          }t          j        d
d          }|                    ||           |                    |          }t          j        g dg dg dg dg dg dg          dz  }t          ||           |                    ||                    t                               |                    |          }t          ||           t          j        ddd          }|                    ||           |                    t          j        g dg dg                    }t          j        g dg dg          }t          ||           d S )N)r   r-   r   )r   r-   r,   )r-   r   r   )r-   r-   r   )r   r   r-   )r   r   r,   Fr_   )r/   r/   r\   r\   r,   r,   r.   r,   )rd   r>   )r,   r-   r   r   r   )r-   r,   r   r  r-   rX   )rd   r>   r-  )r-   r-   r-   r   r,   r   )r   g?g333333?)
rD   r  rm   r   r   rt   predict_probar   r6  r   )ry   r}   r   clsy_prob	real_probs         r7   (test_kneighbors_classifier_predict_probarF    s   
	IIIyyy)))YYY			J	 	f\f&&  	###$$A

(Q!
<
<
<CGGAqMMMq!!F
														
 		
 
	  y&)))GGAqxx}}q!!Fy&)))

(Q!Z
P
P
PCGGAqMMMrxIII(>??@@F)))]]]344IIv&&&&&r9   c                    t           j                            |          }d|                    ||                              | d          z  dz
  }	|	dz                      d          |k                         t                    }
|
                    t                    }t          j	        |||          }|
                    |	|
           dd|                    d|          z  dz
  z  }|                    |	d |         |z             }t          ||
d |                    |
                    |	|           |                    |	d |         |z             }t          ||d |                    d S )Nr-   Fr_   r,   r0  r   r-  re   r3  )rD   rE   rF   rI   rm   r4  r5  r6  r   r   rt   r   r   )ry   re   r-  rz   r:   r7  r   r&  rL   r}   r   r8  r   r:  r;  s                  r7    test_radius_neighbors_classifierrI    s\    )


-
-C	CHHY
++22<e2LLLqPA
Q$		f	$,,S11AHHSMME/w)  E 
IIaOOOa#((1j111A56G]]1[j[>G344Fvq*~...	IIa]]1[j[>G344Fvu[j[122222r9   outlier_label)r   Nc                 D   t          j        ddgddgg|           }t          j        ddg          }d}t          j        ddgddgg|           }t          j        ddgd	d	gg|           }t          j        }	 |	||||
          }
|
                    ||           t          t          j        ddg          |
                    |                     |It          j        t                    5  |
                    |           d d d            d S # 1 swxY w Y   d S d S )NrR   r  r4   r,   r-   皙?)\(?Gz @ffffff?r   r-  re   rJ  )
rD   r  r   r   rt   r   r   rq   r   r   )ry   re   r-  rJ  r}   r   r   z1z2rncclfs              r7   2test_radius_neighbors_classifier_when_no_neighborsrV    sy    	3*sCj)>>>A
!QAF 
D$<$.l	C	C	CB 
D$<#s,L	A	A	AB

-C
##	  C GGAqMMMrxA''R999]:&& 	 	KKOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   0DDDc                 
   t          j        ddgddgddgddgddgg|           t          j        g d          d}t          j        d	d	gddgg|           }t          j        d
d
gd	d	gddgg|           }t          j        ddg          }t          j        g d          }t          j        ddg          }t          j        |||d          }	|	                               t          ||	                    |                     t          j        t          d          5  t          ||	                    |                     d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||	                    |          d                    d d d            n# 1 swxY w Y   t          j        t          j        dgdgdgdgdgdgdgdgdgdgg
|           t          j        g d          fd}
t          j        t                    5   |
             d d d            n# 1 swxY w Y   fd}t          j        t                    5   |             d d d            n# 1 swxY w Y    dd          }	|	                               |	                    dgdgg          }t          |dd d f         g d             dd          }	|	                               |	                    dgdgg          }t          |dd d f         g d!           |	                    dgdgg          }t          |ddg           fd"}t          j        t                    5   |             d d d            n# 1 swxY w Y   ddgddg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
 dd          }	|	                               |	                    dgdgg          }t          |d         dd d f         g d!           |	                    dgdgg          }t          |dd d f         ddg           ddgddg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
 dddg          }	|	                               |	                    dgdgg          }t          |d         dd d f         g d#           t          |d         dd d f         g d!           |	                    dgdgg          }t          |dd d f         ddg           fd$}t          j        t                    5   |             d d d            d S # 1 swxY w Y   d S )%NrR   r  gGz?g\(\?rO  r4   )r,   r-   r,   r,   r-   rM  rN  rP  r,   r-   )rK  r,   r-   r   rK  rQ  z+Outlier label -1 is not in training classesr   r.   r/   r\            	   )
r   r-   r-   r,   r,   r,   r.   r.   r.   r.   c                  R     ddgg          } |                                 d S )Nr,   r\   r   rJ  rt   rU  RNCr}   r   s    r7   check_array_exceptionzPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_array_exceptionY  s0    cA3%0001r9   c                  N     dd          } |                                 d S )Nr,   ar]  r^  r_  s    r7   check_dtype_exceptionzPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_dtype_exceptiona  s,    c#...1r9   most_frequentr]     )r   r   r   r,   )r   r,   r   r   c                       dd          } |                                 |                     dgdgg           d S )Nr,   r/   r]  rf  )rt   rB  r_  s    r7   check_warningzHtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_warningw  sJ    c!,,,1A3+&&&&&r9   )r,   r   r   r   c                  R     dg d          } |                                 d S )Nr,   r   r]  r^  )rU  r`  r}   y_multis    r7   check_exceptionzJtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_exception  s5    c)))4447r9   )rD   r  r   r   rt   r   r   rq   r  UserWarningr   rB  r   r  r   )ry   re   r-  r   rR  rS  correct_labels1correct_labels2outlier_probarU  ra  rd  probapredrh  rk  r`  r}   r   rj  s                   @@@@r7   1test_radius_neighbors_classifier_outlier_labelingrr  2  s    	
sc3Z$d|dD\J	 	 	A 	!!AF 
D$<$.l	C	C	CB 
C:d|dD\:,	O	O	OBh1v&&Ohzzz**OHaV$$M

-w)2  C GGAqMMMB888	k)V	W	W	W = =?CKKOO<<<= = = = = = = = = = = = = = =	k)V	W	W	W A As'8'8'<'<Q'?@@@A A A A A A A A A A A A A A A 
-C
1#sQC!qcA3aS1#sC<XXXA
///00A       
y	!	!                                        
y	!	!                                  #Qo
6
6
6CGGAqMMMsRDk**EuQT{LLL111 #Qa
(
(
(CGGAqMMMsRDk**EuQT{LLL111;;bT{##DtaV$$$' ' ' ' ' ' '
 
k	"	"                
 
A	
A	
A	
A	
A	
A	
A	
A	
A	
AG #Qa
(
(
(CGGAwsRDk**EuQx111~|||444;;bT{##DtAqqqDzAq6*** 
A	
A	
A	
A	
A	
A	
A	
A	
A	
AG #Qq!f
-
-
-CGGAwsRDk**EuQx111~|||444uQx111~|||444;;bT{##DtAqqqDzAq6***       
z	"	"                   sl   +$EE"E*F77F;>F;.II	I	0JJJN$$N(+N(U11U58U5c            	         t          j        ddgddgg          } t          j        ddg          }d}t          j        ddgddgg          }t          j        ddg          }t          }t          D ]}dd|fD ]}t	          j        |||	          }|                    | |           t          j        d
          5  t          ||	                    |                     d d d            n# 1 swxY w Y   d S )NrR   r  r,   r-   rM  rN  rW   rX   rH  rP   )invalid)
rD   r  rV   rn   r   r   rt   rS   r   r   )	r}   r   r   rR  rm  weight_funcre   r-  rU  s	            r7   .test_radius_neighbors_classifier_zero_distancerv    sn    	3*sCj)**A
!QAF	D$<#s,	-	-Bh1v&&OK 	E 	E	!:{; 	E 	EG5w)  C GGAqMMMX... E E #?CKKOODDDE E E E E E E E E E E E E E E	E	E 	Es   <$C,,C03C0c                     t          j        ddgddgddgddgg          } t          j        g d          }d}t          j        ddgddgg          }t          j        ddg          }t          j        ddg          }t          j        ddg          }t          D ]}dD ]R}t          j        |||	          }	|	                    | |           t          ||	                    |                     St          d
dg||g          D ]U\  }}
t          j	        d||          }|                    | |           t          |
|                    |                     Vd S )NrR   r        @)rR   r=   r  r  皙?皙?g      ?rW   rX   rH  rW   rX   r-   r2  )
rD   r  rn   r   r   rt   r   r   r"  r   )r}   r   r   zrnn_correct_labelsknn_correct_unifknn_correct_distre   r-  rnncorr_labelsr9  s               r7   'test_neighbors_regressors_zero_distancer    s    	3*sCj3*sCjABBA
%%%&&AF
3*sCj)**A4+..xs,,xs,, 9 9	 / 	@ 	@G4w)  C GGAqMMM.A????$'
#&68H%I%
 %
 	9 	9 G[ /w)  C GGAqMMMKQ8888	99 9r9   c                  D   t          j        dgdgdgg          } d}t          D ]{}t          j        ||                              |           }|                    dggd          }|j        dk    sJ |j        t          k    sJ t          |d	         d	d
g           |dS )zTest whether points lying on boundary are handled consistently

    Also ensures that even with only one query point, an object array
    is returned rather than a 2d array.
    r=   r  gGz@r   re   r  Frf   )r,   r   r,   N)rD   r  rn   r   rs   rt   r!  r   r5   objectr   )r}   r   re   r   r   s        r7   'test_radius_neighbors_boundary_handlingr    s     	3%#'((AF / /	)9MMMQQRSTT''#'GG}$$$$}&&&&71:1v..../ /r9   c                 ,    | t          j        d                    }|                    g d           t          j        dddd                              |          }|                    |d	          \  }}t          j        |j        d
         t                    }t          j
        d
g          t          j
        d
g          t          j
        d
g          t          j
        d
g          g|d d <   t          j        |j        d
         t                    }t          j
        d
g          t          j
        dg          t          j
        dg          t          j
        dg          g|d d <   t          ||           t          ||           d S )N)r/   r/   )r   r   r   r   r  r+      r   )r   re   	leaf_sizer1   Trf   r   r4   r,   r-   r.   )rD   onessetdiagr   rs   rt   r!  emptyr   r  r  r   )r   r}   r   
neigh_dist	neigh_indexpected_distexpected_inds          r7   .test_radius_neighbors_returns_array_of_objectsr    sU    	bgfoo&&AIIlll%f=  	c!ff 	 !11!T1JJJ	HQWQZv666M!rx}}bhsmmRXqc]]SM!!!8AGAJf555Lx}}bhsmmRXqc]]BHaSMMRLOz=111y,/////r9   )r(   r*   r)   c                 j   t          j        ddgg          }t          j        ddgddgddgddgg          }d}t          j        ddgg          }t          j        |                               |          }t          j        |                    ||d                    }t          ||           d S )Nr   r,   rK  r-   re   F)rd   rg   )rD   r  r   rs   rt   sortrv   r   )re   query_pointequidistant_pointskknn_indicesr   r   s          r7   test_query_equidistant_kth_nnr    s     (QF8$$KAq6Aq6B7QG"DEE 	
A(QF8$$K		#i	8	8	8	<	<=O	P	PBgbmmKQPUmVVWWGw,,,,,r9   )r*   r(   r)   r   )r)   r   )r)   r   c                    t          |t          j                  }t          |t                    rt          j        d           d}t          j                            d          }|	                    |df          }|dk    r!t          j        |t          j        d          }t          j        | |          }|                    |           |                    |t          j        d	
          \  }}t!          |          D ]0}t#          ||         t          j        ||                              1|dk    rVt          j        t(          d          5  |                    |t          j        d	d           d d d            n# 1 swxY w Y   |                    |t          j        dd	          }	t+          |	          sJ d S )Nr   rZ   r   r/   r   rX   r   r   r   T)r}   r   sort_resultszreturn_distance must be Truer   F)r}   r   r  rg   )r}   r   r   r  )r8   rD   float64ro   r   rq   rr   rE   rF   r   r   r   rH   rs   rt   r!  rw   r   r  r   r   r   )
re   r1   rz   rL   r}   modelr   r   iigraphs
             r7   "test_radius_neighbors_sort_resultsr  "  s      62:..F&.)) 
	
 	
 	
 I
)


#
#C9a.))A,QrvJOOO&6JJJE	IIaLLL //!BFQU/VVIwI B B9R="')B-*@*@AAAA ]:-KLLL 	 	""BFu #   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ((
BF$ )  E e$$$$$$$s   $FFFc                     t          d          } d}d}d}|                     ||          }|                     dd||f          }t          ||d          \  }}}}	d ddt          g}
t          t          |
          D ]\  }}
g }t          |          D ]`}t          j	        |
|          }|
                    ||d d |f                    |                    |                    |                     at          j        |          j        }|j        |	j        k    sJ t          j	        |
|          }|
                    ||           |                    |          }|j        |	j        k    sJ t#          ||           d S )	Nr   r-   r.  r.   r&  rW   rX   r-  re   )r'   rI   r   r   rV   r   rn   rw   r   r   rt   ru   r   rD   vstackrJ   r   r   )rL   r:   rz   n_outputr}   r   r   r   y_trainy_testr-  re   	y_pred_soor  rnn_mo	y_pred_mos                    r7   *test_RadiusNeighborsClassifier_multioutputr  T  s   
Q

CJIHJ''AAq9h/00A'711'M'M'M$GVWfY
L9G%j':: 1 1	7	x 	2 	2A59  C GGGWQQQT]+++S[[001111Ii((*	&,.... 4y
 
 
 	

7G$$$NN6**	&,....9i0000+1 1r9   c                 j   t           j                            |          }d|                    | |          z  dz
  }||dk    z  }|dz                      d          dk                         t                    }t          D ]}t          j	        |d          }	|	
                     ||          |           dd|                    d|          z  dz
  z  }
t          t           j        fz   D ]E} ||d |         |
z             }|	                    |          }t          ||d |                    Fd S )	Nr-   r,   ry  r0  r  r+   rd   re   r3  )rD   rE   rF   rI   r4  rm   r5  SPARSE_TYPESr   r   rt   asarrayr   r   )rz   r:   r7  rd   r&  rL   r}   r   	sparsematr9  r:  sparsevX_epsr;  s                 r7   !test_kneighbors_classifier_sparser  z  s?   
 )


-
-C	CHHY
+++a/ASLA
Q$		c	!))#..A! 7 7	,PVWWW		!a   !chhq*5559:#rzm3 	7 	7GGAkzkNW455E[[''Fvq*~6666	7	7 7r9   c                  *   t          d          } d}d}d}|                     ||          }|                     dd||f          }t          ||d          \  }}}}	d ddt          g}
t          t          |
          D ]\  }}
g }g }t          |          D ]}t          j	        |
|          }|
                    ||d d |f                    |                    |                    |                     |                    |                    |                     t          j        |          j        }|j        |	j        k    sJ t%          |          |k    sJ t          j	        |
|          }|
                    ||           |                    |          }|j        |	j        k    sJ t'          ||           |                    |          }t%          |          |k    sJ t)          ||          D ]\  }}t'          ||           d S )	Nr   r\   r   r.   r  rW   rX   r  )r'   rI   r   r   rV   r   rn   rw   r   r   rt   ru   r   rB  rD   r  rJ   r   rx   r   r"  )rL   r:   rz   r  r}   r   r   r   r  r  r-  re   r  y_pred_proba_sor  r9  knn_mor  y_pred_proba_moproba_moproba_sos                        r7   %test_KNeighborsClassifier_multioutputr    s<   
Q

CJIHJ''AAq9h/00A'711'M'M'M$GVWfY
L9G%j':: 3 3	7	x 	> 	>A0IVVVCGGGWQQQT]+++S[[00111""3#4#4V#<#<====Ii((*	&,....?##x//// /9UUU

7G$$$NN6**	&,....9i000 !..v66?##x////"%o"G"G 	3 	3Hhx2222	353 3r9   c                 p   t           j                            |          }d|                    | |          z  dz
  }t          j        |dz                      d                    }||                                z  }|d |         }t          }	t          D ]}
dd|	fD ]}t          j
        |||
          }|                    ||           dd|                    d|          z  dz
  z  }|                    |d |         |z             }t          j        t          ||z
            dk               sJ d S Nr-   r,   rW   rX   r2  r3  333333?)rD   rE   rF   rI   sqrtr4  maxrV   rn   r   r   rt   r   allr   )rz   r:   r7  rd   r&  rL   r}   r   y_targetru  re   r-  r9  r:  r;  s                  r7   test_kneighbors_regressorr    sF    )


-
-C	CHHY
+++a/A
A

1ALA*~HK 8 8	!:{; 	8 	8G/'I  C GGAqMMMa#((1j"9"99A=>G[[;J;'!9::F6#fx/0036777777	88 8r9   c                  J   t          d          } d}d}d}|                     ||          }|                     ||          }t          ||d          \  }}}t          t          d dg          D ]\  }	}
t          j        |
|	          }|                    |           |                    |d	          }t          j
        fd
|D                       }|                    |          }|j        |j        k    sJ |j        |j        k    sJ t          ||           d S )Nr   r\   r.  r/   r  rW   r  Frf   c                 H    g | ]}t          j        |         d           S r   r0  rD   mean.0idxr  s     r7   
<listcomp>zGtest_KNeighborsRegressor_multioutput_uniform_weight.<locals>.<listcomp>  ,    RRRrwws|!<<<RRRr9   )r'   rI   r   r   rn   r   r   rt   rv   rD   r  r   r   r   )rL   r:   rz   r  r}   r   r   r   r  re   r-  r9  	neigh_idx
y_pred_idxr;  r  s                  @r7   3test_KNeighborsRegressor_multioutput_uniform_weightr    s@   
Q

CJIHJ''AH%%A'711'M'M'M$GVWf%j42CDD , ,	7+GyQQQ!!!NN65NAA	XRRRR	RRRSS
V$$|v|++++6<////
++++, ,r9   c                    t           j                            |          }d|                    | |          z  dz
  }t          j        |dz                      d                    }||                                z  }t          j        ||g          j        }|d |         }ddt          g}	t          t          |	          D ]\  }
}	t          j        ||	|
          }|                    ||           dd|                    d|          z  dz
  z  }|                    |d |         |z             }|j        |j        k    sJ t          j        t          j        ||z
            dk               sJ d S r  )rD   rE   rF   rI   r  r4  r  r  rJ   rV   r   rn   r   r   rt   r   r   r  r   )rz   r:   r7  rd   r&  rL   r}   r   r  r-  re   r9  r:  r;  s                 r7   %test_kneighbors_regressor_multioutputr    sn    )


-
-C	CHHY
+++a/A
A

1ALA
	1a&A*~H*l3G%j':: 	7 	7	7+#W	
 
 
 	1!chhq*5559:Q{
{^g566|x~----vbfVh.//#5666666	7 	7r9   c                    t           j                            |          }d|                    | |          z  dz
  }t          j        |dz                      d                    }||                                z  }|d |         }t          }	t          D ]}
dd|	fD ]}t          j
        |||
          }|                    ||           dd|                    d|          z  dz
  z  }|                    |d |         |z             }t          j        t          ||z
            |dz  k               sJ dD ]}t          j
        ||d          }|                    ||           t          j        d|fd	          }d
}t!          j        t$          t'          j        |                    5  |                    |          }d d d            n# 1 swxY w Y   t          j        t          j        |                    sJ d S )Nr-   r,   rW   rX   rH  r3  r{  r+   g      zNOne or more samples have no neighbors within specified radius; predicting NaN.r   )rD   rE   rF   rI   r  r4  r  rV   rn   r   r   rt   r   r  r   fullrq   r  rl  reescapeisnan)rz   r:   r7  r   r&  rL   r}   r   r  ru  re   r-  r   r:  r;  
X_test_nanempty_warning_msgrq  s                     r7   test_radius_neighbors_regressorr    sT    )


-
-C	CHHY
+++a/A
A

1ALA*~HK ? ?	!:{; 	? 	?G6w)  E IIaOOOa#((1j"9"99A=>G]]1[j[>G#;<<F6#fx/006A:=>>>>>>	? + & &27f
 
 
 			!QWa_d33
7 	 \+RY7H-I-IJJJ 	- 	-==,,D	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-vbhtnn%%%%%%& &s   0GG	G	c                  r   t          d          } d}d}d}|                     ||          }|                     ||          }t          ||d          \  }}}t          t          d dg          D ]\  }	}
t          j        |
|	          }|                    |           |                    |d	          }t          j
        fd
|D                       }t          j
        |          }|                    |          }|j        |j        k    sJ |j        |j        k    sJ t          ||           d S )Nr   r\   r.  r/   r  rW   r  Frf   c                 H    g | ]}t          j        |         d           S r  r  r  s     r7   r  zQtest_RadiusNeighborsRegressor_multioutput_with_uniform_weight.<locals>.<listcomp><  r  r9   )r'   rI   r   r   rn   r   r   rt   r!  rD   r  r   r   r   )rL   r:   rz   r  r}   r   r   r   r  re   r-  r  r  r  r;  r  s                  @r7   =test_RadiusNeighborsRegressor_multioutput_with_uniform_weightr  +  sT    Q

CJIHJ''AH%%A'711'M'M'M$GVWf%j42CDD , ,	70IVVV!!!(((GG	XRRRR	RRRSS
Xj))
V$$6<////|v|++++
++++, ,r9   c                    t           j                            |          }d|                    | |          z  dz
  }t          j        |dz                      d                    }||                                z  }t          j        ||g          j        }|d |         }ddt          g}t          t          |          D ]\  }	}t          j        ||	          }
|
                    ||           dd|                    d|          z  dz
  z  }|
                    |d |         |z             }|j        |j        k    sJ t          j        t          j        ||z
            dk               sJ d S )Nr-   r,   rW   rX   r  r3  r  )rD   rE   rF   rI   r  r4  r  r  rJ   rV   r   rn   r   r   rt   r   r   r  r   )rz   r:   r7  r&  rL   r}   r   r  r-  re   r  r:  r;  s                r7   )test_RadiusNeighborsRegressor_multioutputr  F  sc    )


-
-C	CHHY
+++a/A
A

1ALA
	1a&A*~H*l3G%j':: 7 7	70IVVV1!chhq*5559:Q{
{^g566|x~----vbfVh.//#56666667 7r9   c                    t           j                            |          }d|                    | |          z  dz
  }|dz                      d          dk                         t                    }t          D ]}t          j	        |d          }	|	
                     ||          |           t          j	        |d          }
|

                    t          |d	
          |           t          D ]
} ||          }t          j        |	                    |                                          |k              dk    sJ  |t          |d	
                    }|t           t"          z   v rKd}t%          j        t(          |          5  |
                    |           d d d            n# 1 swxY w Y   t          j        |
                    |                                          |k              dk    sJ d S )Nr-   r,   r0  g      ?r+   r  r   r  r   r   ffffff?z3not supported due to its handling of explicit zerosr   )rD   rE   rF   rI   r4  rm   r5  r  r   r   rt   r   SPARSE_OR_DENSEr  r   roundr%   r    rq   r   r  )rz   r:   r7  rd   r&  rL   r}   r   r  r9  knn_prer  X2X2_prer  s                  r7    test_kneighbors_regressor_sparser  ]  s4    )


-
-C	CHHY
+++a/A
Q$		d	"**3//A! L L	+vVVV		!a   /#M
 
 
 	&q===qAAA& 
	L 
	LGB73;;r??0022a7884????W/+FFFGGF.>999K]9C888 , ,OOF+++, , , , , , , , , , , , , , , wwv66<<>>!CDDtKKKKK
	LL Ls   F--F14F1c                  F   t           D ]} t          j        d|           }|                    t          j        t          j                   t          |                    t          j                  t          j                   |	                    d|            |                    t          j        t          j                   t          j        |                    t          j                  t          j        k              dk    sJ t          j        d|           }|                    t          j        t          j                   t          j        |                    t          j                                                  t          j        k              dk    sJ d S )Nr,   r  r[  r  r\   )rn   r   r   rt   irisr   r   r   r   
set_paramsrD   r  r   r  )re   rU  rgss      r7   test_neighbors_irisr  }  s8   
   M M	,iPPP	4;'''3;;ty114;???1	:::	4;'''ws{{49--<==DDDD+YOOO	4;'''ws{{49--3355DEELLLLLM Mr9   c                  z   t           j                            d          } t           j        }| j        \  }}t          |dz            }t          j        d|          }t          j        ||          }| |         ||         | |         ||         f\  }}}	}
t          j	        dd          }|
                    ||                              |	|
          }|
                    |                    t          d          |                              |	                    t          d          |
          }||k    sJ d S )	Nuint8g?r   r,   r)   r  Fr_   )digitsr   rm   r   r   r5  rD   r   r   r   rt   scorer>  )r}   r   rz   r:   train_test_boundarytrainr'  r   Y_trainr   Y_testrU  score_uint8score_floats                 r7   test_neighbors_digitsr    s"   
 	7##AAgY
i#o..Ia,--E9()44D)*51U8QtWag)M&Wgvv

(Q'
J
J
JC'''7++11&&AAK'''..U.;;WEEKKe%((& K +%%%%%%r9   c                     t          j        ddgddgddgg          } t          j        | ddd          }t	          |                                t          j        |j        d                              t          j        | dd	
          }t          |                                g dg dg dg           t          j        | ddd          }t	          |                                g dg dg dg           t          j        | dd	
          }t          |                                g dg dg dg           t          j        | ddd          }t          |                                g dg dg dg           d S )Nr   r,   rN  rR   r-   connectivityTr   include_selfrX   r   r  rN  r  )rN  r  r  r  z?r  rR   rR   r  r  rR   rR   )r  rN  w@rN  r  r  )r  r  r  r.   )r,   r,   r,   )	rD   r  r   r   r   r   rK   r   r   r}   rM   s     r7   test_kneighbors_graphr    s   
1a&4+1v.//A 	"1an4PPPAqyy{{BF171:$6$6777"1aj999A			''')9)9)9;R;R;RS  
 	"1an4PPPAqyy{{___ooo$WXXX"1aj999A			######)))	
   	"1an4PPPAAIIKK)))YYY			!BCCCCCr9   rd   )r,   r-   r.   r   r  $   c                 B   t           j                            |          }|                    dd          } ||          }t	          t          j        || |                                          t          j        || |                                                     d S NrZ   r   )rD   rE   rF   r   r   r   r   r   rd   r   r   seedrL   r}   Xcsrs          r7   test_kneighbors_graph_sparser    s     )


%
%C		"bA=D"1k===EEGG"44@@@HHJJ    r9   c                  J   t          j        ddgddgddgg          } t          j        | ddd	          }t	          |                                g d
g dg dg           t          j        | dd          }t          |                                g dg dg dg           d S )Nr   r,   rN  rR   r-   r=   r  Tr  r   )rR   rR   rR   r  rX   r   r  r  r  )rD   r  r   r   r   r   r   r  s     r7   test_radius_neighbors_graphr    s    
1a&4+1v.//A(CnSWXXXAqyy{{___ooo$WXXX(CjAAAA			&&&(?(?(?AWAWAWX    r9   c                 B   t           j                            |          }|                    dd          } ||          }t	          t          j        || |                                          t          j        || |                                                     d S r  )rD   rE   rF   r   r   r   r   r   r	  s          r7   "test_radius_neighbors_graph_sparser    s     )


%
%C		"bA=D(KdCCCKKMM({FFFNNPP    r9   	Estimatorc                    t                               d          } ||          }t                               d          }t          j        d          } | dd          }d}t	          j        t          |          5  |                    |           d	d	d	           n# 1 swxY w Y   d
}t	          j        t          |          5  t          |	                    ||                     d	d	d	           n# 1 swxY w Y    | dd          }|	                    ||           d}t	          j        t          |          5  |                    |           d	d	d	           n# 1 swxY w Y    |             }t          j        d          }t	          j        t          |          5  |	                    t          j        d          t          j        d                     d	d	d	           n# 1 swxY w Y   d}t	          j        t          |          5  |	                    |d	d	d	d	d	f         |           d	d	d	           n# 1 swxY w Y   |	                    ||           t          j        d          }t	          j        t          |          5  |                    g g           d	d	d	           d	S # 1 swxY w Y   d	S )z`Additional parameter validation for *Neighbors* estimators not covered by common
    validation.rZ   r-   r   rZ   r(   	haversiner   zinstance is not fitted yetr   Nz.Metric 'haversine' not valid for sparse input.r)   r1   re   z-Haversine distance only valid in 2 dimensionszFound array with 0 sample(s)r   r   zFound array with dim 3zFound array with 0 feature(s))rL   r   rD   r  rq   r   r   r   r   rt   r  r  )r  r   r}   XsparseX3r   r   r  s           r7   "test_neighbors_validate_parametersr    s    	'""AmAG			7	#	#B
A9{;???D
&C	z	-	-	-  Q              
:C	z	-	-	- . .!,,---. . . . . . . . . . . . . . . 9K7;;;DHHROOO
9C	z	-	-	-  R               9;;D
)2
3
3C	z	-	-	- . ."'!**---. . . . . . . . . . . . . . . #C	z	-	-	- # #111aaa:"""# # # # # # # # # # # # # # #HHQNNN
)3
4
4C	z	-	-	-  bT                 sl   >B  B$'B$$C88C<?C<E%%E),E));G00G47G4$IIIJ<<K K rY   r+   r)   c                 0   t                               d|f          }t          j        d          } | d|          }d}t	          j        t          |          5  |                    ||           ddd           n# 1 swxY w Y   |j        dk    sJ dS )z
    Validation of all classes extending NeighborsBase with
    Minkowski semi-metrics (i.e. when 0 < p < 1). That proper
    Warning is raised for `algorithm="auto"` and "brute".
    rZ   rM  )r>   re   zwMind that for 0 < p < 1, Minkowski metrics are not distance metrics. Continuing the execution with `algorithm='brute'`.r   Nr)   )	rL   r   rD   r  rq   r  rl  rt   _fit_methodr  r:   re   r}   r   r  r  s          r7   -test_neighbors_minkowski_semimetric_algo_warnr  !  s    " 	2z*++A
AIy111E	G  
k	-	-	-  		!Q               ''''''s   A>>BBr*   r(   c                    t                               d          }t          j        d          } | |d          }d| d}t	          j        t          |          5  |                    ||           ddd           dS # 1 swxY w Y   dS )	zECheck that we raise a proper error if `algorithm!='brute'` and `p<1`.r  rZ   rM  )re   r>   zalgorithm="zv" does not support 0 < p < 1 for the Minkowski metric. To resolve this problem either set p >= 1 or algorithm="brute".r   N)rL   r   rD   r  rq   r   r   rt   r  s          r7   .test_neighbors_minkowski_semimetric_algo_errorr  @  s     	'""A
AI	S111E	+i 	+ 	+ 	+ 
 
z	-	-	-  		!Q                 s   BBBc                     t                               d          } t          j                                        |           }d}t          j        t          |          5  |                    | d           ddd           n# 1 swxY w Y   t          j        t          |          5  |	                    | d           ddd           dS # 1 swxY w Y   dS )z'Validate parameter of NearestNeighbors.r  zUUnsupported mode, must be one of "connectivity", or "distance" but got "blah" insteadr   blahr   N)
rL   r   r   rs   rt   rq   r   r   r   r   )r}   r   r  s      r7   &test_nearest_neighbors_validate_paramsr!  [  sR   '""A%''++A..D	  
z	-	-	- . .af---. . . . . . . . . . . . . . .	z	-	-	- 4 4##AF#3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s$   BB	B(CCCpyfuncc           	      p   t           j                            |          }t          ||           }g d}|                    ||                              | d          }	|                    ||                              | d          }
t          ||          }|D ]}t          |t                    rdn|t          j
        d         vpd|v od|v }i }|                    dd          }|D ])}t          |t                    r(| t           j        k    rd	|v rt          j        d
           t          j        |||||          }|rM|dk    rGt          j        t"                    5  |                    |	           d d d            n# 1 swxY w Y   |dk    rLt'          d d          }t          j        |	d d |f                   }	t          j        |
d d |f                   }
|                    |	           |                    |
d          ||<   +|d         \  }}|d         \  }}| t           j        k    rdnd}t/          |||           t1          ||           |sO|d         \  }}t/          |||           t1          ||           t/          |||           t1          ||           d S )N)r)   r(   r*   Fr_   r*   r<   r?   r>   r-   ra   rb   rd   re   r1   r>   metric_paramsr  Trf   r)   r(   gHz>g-C6?)rtol)rD   rE   rF   r8   rI   rm   rN   ro   r   r   VALID_METRICSpoprp   rq   rr   rs   r   r   rt   sliceascontiguousarrayrv   r  r   r   )ry   global_random_seedr1   rz   r:   r{   rd   rL   
algorithmsr   r   metric_params_listr%  exclude_kd_treer   r>   re   r   
feature_sl	brute_dst	brute_idxball_tree_dstball_tree_idxr&  kd_tree_dstkd_tree_idxs                             r7   test_neighbors_metricsr6  j  sY   & )

 2
3
3C6<00F 322Jhhy*--44\4NNGXXk:..55l5OOF26:FF+ 7; 7; &.11@EEy6yAA @v%>#*>	 	 c1%%# 	P 	PI&.11 lbj6P6PY&&K$   .'#+  E  9	#9#9]:.. ' 'IIg&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' $$"4^^
.wqqq*}/EFF-fQQQ
].CDDIIg!&!1!1&$!1!O!OGI&w/	9'.{';$} $rz11ttt	=t<<<<9m444 	;'.y'9$KI{>>>>y+666M;TBBBB}k:::o7; 7;s   &FFF)categoryr     r  c                    t           j                            |          }|                    ||                              |d          }|                    ||                              |d          }	| dk    rLt          d d          }
t          j        |d d |
f                   }t          j        |	d d |
f                   }	| t          v r|dk    }|	dk    }	t          | |          }|D ]}|	                    dd          }t          j        |d| ||          }|                    |           t          d	          5  |                    |	d
          \  }}d d d            n# 1 swxY w Y   t          d
	          5  |                    |	d
          \  }}d d d            n# 1 swxY w Y   t          ||||           d S )NFr_   r  r-   r  r>   r)   r$  enable_cython_pairwise_distTrf   )rD   rE   rF   rI   rm   r)  r*  r   rN   r(  r   rs   rt   r   rv   r   )r1   ry   r+  rz   r:   r{   rd   rL   r   r   r/  r-  r%  r>   r   legacy_brute_dstlegacy_brute_idxpdr_brute_dstpdr_brute_idxs                      r7   test_kneighbors_brute_backendr@    s    )

 2
3
3Chhy*--44\4NNGXXk:..55l5OOF 4^^
&wqqq*}'=>>%fQQQ
]&;<<+++C-#26:FF+ 
 
c1%%*#'
 
 
 			'>>> 	 	161A1A 2B 2 2..	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 === 	 	+0+;+; ,< , ,(M=	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	*m-=}	
 	
 	
 	
1
 
s$   E,,E0	3E0	F..F2	5F2	c                     d } t           j                            d                              dd          }t	          j        dd|           }t	          j        dd|           }|                    |           |                    |           |                    |          \  }}|                    |          \  }}t          ||           d S )	Nc                 `    t          j        t          j        | dz  |dz  z                       S )Nr-   )rD   r  r4  )x1x2s     r7   custom_metricz+test_callable_metric.<locals>.custom_metric  s(    wrvb!eb!em,,---r9   r   r  r-   r.   r+   rc   r)   )	rD   rE   rF   rI   r   rs   rt   rv   r   )rE  r}   nbrs1nbrs2r   r   r   r   s           r7   test_callable_metricrH     s    . . . 		b!!&&r1--A&  E &  E 
IIaLLL	IIaLLL""1%%KE4""1%%KE4E5!!!!!r9      c                    t          ||           }t                              ||                              | d          } ||          }t	          ||          }|dk    rt                              d          }t                              d          }	t          j        |d          }
t          j        |	|d          }t          j	        dd	          }|
                    |
           |                    |           d S |D ]}t          j	        dd
||          }|dk    r.t          d d          }t          j        |d d |f                   }|
                    |           |                    |           |t          d         v r?t          j	        dd
|          
                    |          }|                    |           d S )NFr_   r   r   r   r   r   r.   r  r+   rd   re   r1   r%  r  r-   r)   rc   )r8   rL   rI   rm   rN   r   r   r   r   rs   rt   rv   r)  rD   r*  r   )ry   r1   r   rz   r:   r}   r  r-  X_precomputedY_precomputedr   r   nb_pr%  r   r/  s                   r7   *test_valid_brute_metric_for_auto_algorithmrO    s    6<00FJ''..|%.HHA=D26:FF))'22))&11({KKK(=
 
 
 )aNNN 0 	$ 	$M+ +	  B $$"4^^
(111j=)9::FF1IIIMM!-g666/ !VF  #d))  d###'	$ 	$r9   c                  2   t                               dd          } t                               ddd          }t          j        ddi          }t          j        t                    5  |                    | |           d d d            d S # 1 swxY w Y   d S )Nr\   r   r-   r>   r.   )r%  )	rL   rI   r   r   r   rq   r  SyntaxWarningrt   )r}   r   r   s      r7   test_metric_params_interfacerR  E  s    AAAq!A

(Qx
@
@
@C	m	$	$  1                 s   (BBBc                    t           j                            d          }|                    dd          }|                    ddd          }t          j        dd          }t          j        dd          }||fD ]g}|                    ||           t          j
        t                    5  |                     | |                     d d d            n# 1 swxY w Y   hd S )Nr   r\   r-   r,   r*   r  r(   )rD   rE   rF   rI   r   r   r   r   rt   rq   r   r   r   )r   rL   r}   r   rF  rG  r  s          r7    test_predict_sparse_ball_kd_treerT  M  s   
)


"
"CAAAq!A*1	BBBE)!{CCCE , ,		!Q]:&& 	, 	,MM--**+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,, ,s   .CC	 C	c                     t           j                            d          } |                     dd          }t	          |                                          }t          j        |           |d         }dD ]}t          j        |d|dd          	                                }t          j
        d|	                              |          }t          ||                    |          	                                           dD ]}t          j        |||dd          	                                }t          j
        ||
                              |          }t          ||                    |          	                                           t          j
        dd	          }|                    |           t          j        t                     5  t          j        |dd           d d d            n# 1 swxY w Y   t          j
        |d          }|                    |           t          j        t                     5  t          j        ||d           d d d            d S # 1 swxY w Y   d S )Nr   r\   rf  )	manhattan	chebyshevr.   r  T)r1   r   r  r  )r1   r   rV  r   r   )r   r1   )rD   rE   rF   rI   r   flattenr  r   r   r   rs   rt   r   r   rq   r   r   )rL   r}   
dist_arrayr   r1   
nbrs_graphrF  X_nbrss           r7   test_non_euclidean_kneighborsr\  Z  s   
)


"
"CAA $A&&..00JGJ^F - L L/qn4
 
 

')) 	 *qHHHLLQOO:u'='=a'@'@'H'H'J'JKKKK - R R5vf>
 
 

')) 	 *&HHHLLQOO:u'C'CA'F'F'N'N'P'PQQQQ 'AkJJJF
JJqMMM	z	"	" B B"61[AAAAB B B B B B B B B B B B B B B'vkJJJF
JJqMMM	z	"	" M M(LLLLM M M M M M M M M M M M M M M M M Ms$   G77G;>G;I++I/2I/c                 \    t          |           D ]\  }}t          |||                    d S r   )	enumerater   )nparray
list_checkr(  eles       r7   check_object_arraysrb  ~  s>    g&& 1 1S3
300001 1r9   c            	      >   t           D ]} t          j        d|           }dgdgg}|                    |           dgdgg}|                    |          \  }}t          |dgdgg           t          |dgdgg           |                    dgdggd          \  }}t          |dgddgg           t          |dgddgg           t          |                    |          	                                ddgddgg           t          |                    dgdggd	
          	                                t          j        ddgddgg                     |                    dgdggd          }t          |	                                ddgddgg           d S )Nr,   r  r   r-   r=   r   r  rR   rX   r   )rn   r   rs   rt   rv   r   r!  rb  r   r   rD   r  r   )re   r   r}   	test_datarT   r(  rL   s          r7   .test_k_and_radius_neighbors_train_is_not_queryre    s      < <	'AKKKS1#J
q			S1#J	 MM),,	c41#s,,,3!qc
+++''!qc
3'??	cDA3A-000C1#1v/// 		**2244SzC:6N	
 	
 	
 	!qc
<<DDFFHsCj3*-..	
 	
 	
 ''!qc
3'??3;;==Aq6Aq6*:;;;;1< <r9   c           	         t          j        d|           }dgdgg}|                    |           |                                \  }}t	          |dgdgg           t	          |dgdgg           |                    d d          \  }}t          |dgdgg           t          |dgdgg           |                    d d          }|                    d           }||fD ]X}t	          |	                                ddgddgg           t	          |j
        ddg           t	          |j        ddg           Yddgddgddgg}t          j        d|           }|                    |           t	          |                                	                                t          j        g dg dg d	g                     d S )
Nr,   r  r   r=   r   r-   r  )rR   r  rR   )rR   rR   r   )r   rs   rt   rv   r   r!  rb  r   r   r   r   r   rD   r  )re   r   r}   rT   r(  rL   kngr  s           r7   "test_k_and_radius_neighbors_X_Nonerh    s    
	#Y	G	G	GB
qc
AFF1IIIID#tqcA3Z(((saS1#J'''##D#55ID#sQCj)))qcA3Z((( 
#
#D
#
5
5C


d
#
#Cs 2 25==??aVaV,<===5:1v...5=1a&1111
Q!Q!Q A		#Y	G	G	GBFF1III
%%''
///???MMMBCC    r9   c           	         t          j        d|           }dgdgdgg}|                    |           |                    |d          }t	          |                                t          j        g dg dg dg                     t	          |j        g d           t	          |j	        g d           |
                    dgdggd	
          \  }}t          |ddgddgg           t          |ddgddgg           |                    |d	
          }t	          |                                t          j        g dg dg dg                     |                    dgdggd	d          }|                                 t	          |                                g dg dg           t	          |j	        g d           t	          |j        g d           t          j        d          }t          j        dd          }|                    |           |                                \  }}t	          |t          j        d                     t	          |dgdgdgg           |                    d          }t	          |                                t          j        d                     t	          |j        t          j        d                     t	          |j	        g d           t	          |                                                                t          j        g dg dg dg                     d S )Nr,   r  r   r.   rX   r   r  r   r=   r   r   )r  r  rR   r  rA  )r,   r   r   )r   r,   r   r,   )r   r,   r,   r   )r.   r,   r)   r   )r,   r   r,   )r  rR   r  )rR   r  r  )r   rs   rt   r   r   r   rD   r  r   r   r!  rb  r   sort_indicesr  rv   zeros)re   r   
duplicatesrg  rT   r(  rL   r}   s           r7   &test_k_and_radius_neighbors_duplicatesrm    s4    
	#Y	G	G	GB#sQCJFF: 

jz

:
:Crx///??? STT   CHooo...CK+++##aS1#Js#;;ID#1v1v.///q!fq!f-...

#
#Js
#
;
;Crx///??? STT   
#
#aS1#Js
#
L
LCCKKMMIIIyyy#9:::CK...CHlll+++ 	A		#W	E	E	EBFF1IIIID#D"(6**+++C1#sQC))) 

:

.
.CCKKMM28F#3#3444CHbhqkk***CK+++
%%''
///???OOODEE    r9   c                     ddgddgg} t          j        | dd                                          }t          j        | dd                                          }t          |d	d
gd
d	gg           t          |d
d	gd	d
gg           t          j        | dd                                          }t          j        | dd                                          }t          |d	d	gd	d	gg           t          |d
d	gd	d
gg           d S )Nr-   r.   r/   r\   r,   T)r  FrR   r  r  )r   r   r   r   r   )r}   rg  kng_not_selfrL   rng_not_selfs        r7   !test_include_self_neighbors_graphrq    s#   
Q!QA

$Q
=
=
=
E
E
G
GC-aGGGOOQQLsc3Z#s4555|sCj3*%=>>>

*1c
E
E
E
M
M
O
OC3	3U  gii  sc3Z#s4555|sCj3*%=>>>>>r9   c                    t          j        dddd          \  }}t          ||          \  }}}}t          j        d|           }|                    ||           |                    |          }|                    |          \  }}	|                    |d          	                                }
|
                    d	           |                    ||           |                    |          }|                    |          \  }}|                    |d          	                                }t          ||           t          ||           t          |	|           t          |
|           d S )
Nr  r\   r   rz   r:   n_redundantr&  r.   r  rX   r   n_jobs)r   make_classificationr   r   r   rt   r   rv   r   r   r  r   r   )re   r}   r   r   r   r  r  rU  rT   r(  r  
y_paralleldist_parallelind_parallelgraph_parallels                  r7   test_same_knn_parallelr|    sl   '  DAq (81'='=$GVWf

(Q)
L
L
LCGGGWFAv&&ID#  j 99AACCENN!NGGGWV$$J"%.."8"8M<))&z)BBJJLLNq*%%%D-(((sL)))E>*****r9   c                 \   t          j        dddd          \  }}t          ||          \  }}}}t          j        d|           }|                    ||           |                    |          }|                    |          \  }}	|                    |d          	                                }
|
                    d	
           |                    ||           |                    |          }|                    |          \  }}|                    |d          	                                }t          ||           t          t          |                    D ]:}t          ||         ||                    t          |	|         ||                    ;t          |
|           d S )Nr  r\   r   rs  rZ   r  rX   r   r.   ru  )r   rw  r   r   r   rt   r   r!  r   r   r  r   rw   rx   r   )re   r}   r   r   r   r  r  rU  rT   r(  r  rx  ry  rz  r{  r   s                   r7   #test_same_radius_neighbors_parallelr~    s   '  DAq (81'='=$GVWf

-R9
M
M
MCGGGWFA$$V,,ID#&&vJ&??GGIIENN!NGGGWV$$J"%"6"6v">">M<//Z/HHPPRRNq*%%%3t99 4 4Qq!12223q6<?3333E>*****r9   backend	threadinglokyc                    t          j        |           5  t          j        dddd          \  }}t	          ||          \  }}}}t          j        d|d          }|                    ||           |                    |           |	                    |           |
                    |d	           d d d            d S # 1 swxY w Y   d S )
Nr  r\   r   rs  r.   r-   )rd   re   rv  rX   r   )joblibparallel_backendr   rw  r   r   r   rt   r   rv   r   )	r  re   r}   r   r   r   r  r  rU  s	            r7   test_knn_forcing_backendr  8  s(    
	 	)	) 6 6+QAA
 
 
1 ,<Aq+A+A(&,Yq
 
 
 	!!!FvV*5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   BCCCc                      t          j        d          } d}t          j        |          }d dd |         D             }|                     ||                              |          }t          ||           d S )Nr,   r   rf  c                     g | ]}|S  r  )r  chs     r7   r  z&test_dtype_convert.<locals>.<listcomp>Q  s    888888r9   ABCDEFGHIJKLMNOPQRSTU)r   r   rD   rK   rt   r   r   )
classifierCLASSESr}   r   results        r7   test_dtype_convertr  M  s{    /A>>>JG
wA88-hwh7888A^^Aq!!))!,,Fvq!!!!!r9   c                 ,   d } | g dg dg dg          } | g dg dg          }t          j        dd|	                              |          }|                    |d
          }t	          j        ddgddgg          }t          ||           d S )Nc                     t          |           rt          |          sJ |                     |j                                                                                  S r   )r   dotrJ   r   item)xr   s     r7   sparse_metricz2test_sparse_metric_callable.<locals>.sparse_metricY  sI    {{*x{{***uuQSzz!!##((***r9   )r,   r,   r,   r,   r,   )r,   r   r,   r   r,   )r   r   r,   r   r   )r,   r,   r   r,   r,   )r,   r   r   r,   r,   r)   r-   )re   rd   r1   Frf   r,   )r   rs   rt   rv   rD   r  r   )r   r  r}   r   r   Ngold_standard_nns          r7   test_sparse_metric_callabler  W  s    + + + 		///???;	 	A 	899A		#q
 
 
	c!ff  	a//A x!Q!Q 011q*+++++r9   z0ignore::sklearn.exceptions.DataConversionWarningc                     t           j                            d          } |                     d          }t          j        } |dd                              |          } |dd                              |          }t          |                    |          d         |                    |          d                    d S )Nr   )rX  r\   r   jaccardr)   r  r(   )	rD   rE   rF   rW   r   rs   rt   r   rv   )rL   r}   NNnn1nn2s        r7   test_pairwise_boolean_distancer  o  s    
 )


"
"C  A		#B
"I
1
1
1
5
5a
8
8C
"I
5
5
5
9
9!
<
<Cs~~a((+S^^A->->q-ABBBBBr9   c            	      
   t          d          D ]} t          j        ddddd|           \  }}t          ||d          \  }}}}t	          d| z
            }t          j        d|          }|                    ||           |                    |          }	|	                    |          }
|

                    d	
          }t          j        |
                    d	
          dk    ||          }t          |	|           d S )Nr\   r   r.   r   )rz   r:   n_informativert  	n_classesr&  r  r-   r]  r,   r0  )rw   r   rw  r   r5  r   r   rt   r   rB  argmaxrD   wherer4  r   )r
  r}   r   X_trX_tey_try_terJ  rU  rq  rp  proba_labels               r7   #test_radius_neighbors_predict_probar  }  s   a . .+
 
 
1 "2!QQ!G!G!GdD$AH1-XXXd{{4  !!$''lll**huyyay00A5}kRR4----#. .r9   c                     t           j                            d          } d|                     dd          z  dz
  }d|                     dd          z  dz
  }|                     dd          }d}d}d}t	          j        |d	          }t	          j        t          ||z            d	          }t	          j        |d
          }	t	          j        t          ||z            d
          }
t	          j        |          }t	          j	        |          }||f||f|	|f|
|fg}|D ]\  }}t          |          }t          |          }|                    d           t          t          |          |          }|                    ||                              |          }|                    ||                              |          }t          ||           d S )Nr   r-   r.  r\   r,   rI  r=   rX   )rd   r   r  r   r   r   r   )rD   rE   rF   rI   r   KNeighborsTransformerr5  RadiusNeighborsTransformerr   r   r	   r  r   rt   r   r   )rL   r}   r  r   rd   r   factork_transk_trans_factorr_transr_trans_factork_regr_reg	test_listtransregreg_compactreg_precomp	reg_chainy_pred_chainy_pred_compacts                        r7   0test_pipeline_with_nearest_neighbors_transformerr    s   
)


"
"C	CHHROOaA	
SXXb!__	q	 BQAKF F-+JWWWG4f,--J  N 2&zRRRG96F?##*  N )kBBBE.f===E 
%		%		I   
6 
6
sCjjCjjm444!%,,<<	 }}Q**22266$A..66r::n5555
6 
6r9   z'X, metric, metric_params, expected_algor   r   rZ  r@   rA   correlationc                 z    t          j        dd||          }|                    |            |j        |k    sJ d S )Nr/   r+   rK  )r   rs   rt   r  )r}   r1   r%  expected_algor  s        r7   test_auto_algorithmr    sO     &m  E 
IIaLLL------r9   rR   c           	      x   t           j                            |          }|                    ||                              |d          }|                    ||                              |d          }	| dk    rLt          d d          }
t          j        |d d |
f                   }t          j        |	d d |
f                   }	t          | |          }|D ]}|                    dd          }t          j
        |d| ||          }|                    |           t          d          5  |                    |	d	
          \  }}d d d            n# 1 swxY w Y   t          d	          5  |                    |	d	
          \  }}d d d            n# 1 swxY w Y   t          |||||d           d S )NFr_   r  r-   r>   r)   )r   re   r1   r>   r%  r:  Trf   )r   check_sorted)rD   rE   rF   rI   rm   r)  r*  rN   r(  r   rs   rt   r   r!  r   )r1   r+  ry   rz   r:   r{   r   rL   r   r   r/  r-  r%  r>   r   r<  r=  r>  r?  s                      r7   #test_radius_neighbors_brute_backendr    s~    )

 2
3
3C hhy*--44\4NNGXXk:..55l5OOF 4^^
&wqqq*}'=>>%fQQQ
]&;<<26:FF+ 
 
c1%%*'
 
 
 			'>>> 	 	161G1G 2H 2 2..	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 === 	 	+0+A+A ,B , ,(M=	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)	
 	
 	
 	
 	
1
 
s$   0EE	E	2FF	 F	c                      t           j                                        D ]1} t          |           t          t	          |                     k    sJ 2d S r   )r   r'  valuesrx   set)vals    r7   #test_valid_metrics_has_no_duplicater  	  sP    &--// ) )3xx3s3xx==((((() )r9   c                      ddgddgddgddgg} g d}d }t          dd|	          }|                    | |           t          |                    dd
gg          dg           dS )ztEnsures that `predict` works for array-likes when `weights` is a callable.

    Non-regression test for #22687.
    r\   r,   r.   r/   r   )r-   r.   r\   rX  c                 *    t          j        |           S r   )rD   	ones_likerT   s    r7   _weightsz6test_regressor_predict_on_arraylikes.<locals>._weights 	  s    |D!!!r9   r)   )rd   re   r-  rx  rX  N)r   rt   r   r   )r}   r   r  r   s       r7   $test_regressor_predict_on_arraylikesr  	  s    
 Q!Q!Q!Q(AA" " " !w
Q
Q
QCGGAqMMMCKK!S
++aS11111r9   zEstimator, paramsr   r=   c                    ddgdt           j        gddgddgg}g d}|                    ddi             |             j        di |                    ||          }d	D ]}t          ||          r t          ||          |          }t          |d
          r.t          j        |j                  	                                rJ it          j        |          	                                rJ dS )zyCheck that the different neighbor estimators are lenient towards `nan`
    values if using `metric="nan_euclidean"`.
    r   r,   r-   r.   r\   r   r   r,   r,   r1   nan_euclidean)rv   r   	transformfit_predictr   Nr  )
rD   nanupdater  rt   hasattrr   r  r   any)r  paramsr}   r   	estimatorresponse_methodoutputs          r7   test_nan_euclidean_supportr  (	  s   " Q!RVq!fq!f-AA
MM8_-...&		&000044Q::IP 2 29o.. 	28WY88;;Fvy)) 28FK00446666668F++//111112 2r9   c            	      D   t          j        d          } |                     t          j        ddgddgddgdd	gg          d
dg          }t          j        g d          }t          j        d                              ||          }|                    |           dS )z[Check that KNN predict works with dataframes

    non-regression test for issue #26768
    pandasr,   r-   r.   r/   r\   rX  rY  rZ  rc  b)columns)r,   r-   r.   r/   r   N)	rq   importorskip	DataFramerD   r  r   r   rt   r   )pdr}   r   r9  s       r7   test_predict_dataframer  H	  s    
 
	X	&	&B
RX1v1v1v1v>??#sTTA
A

(Q
7
7
7
;
;Aq
A
ACKKNNNNNr9   c                     t          j        ddgddgddgg          } t          j        ddddi          }|                    |            |                    | d                             d	d
          dd          }t          |d         g d           |                    | d                             d	d
          d          }t          |d         g d           dS )zCheck that NearestNeighbors works with :math:`p \in (0,1)` when `algorithm`
    is `"auto"` or `"brute"` regardless of the dtype of X.

    Non-regression test for issue #26548
    rR   r  r.   r)   r>   r  )rd   re   r%  r   r,   rK  r/   F)r   rg   r   rf   N)	rD   r  r   rs   rt   r!  r   r   rv   )r}   r   r   s      r7   0test_nearest_neighbours_works_with_p_less_than_1r  V	  s     	3*sCj3*566A&c
  E 
IIaLLLqt||Ar221eTTAAaD)))$$$1a,,eDDAAaD)))$$$$$r9   c                     ddgddgddgddgg} g d}d }t          j        d|          }|                    | |           d	}t          j        t
          |
          5  |                    ddgg           ddd           n# 1 swxY w Y   t          j        t
          |
          5  |                    ddgg           ddd           dS # 1 swxY w Y   dS )zrCheck that `predict` and `predict_proba` raises on sample of all zeros weights.

    Related to Issue #25854.
    r   r,   r-   r.   r/   r  c                 >     t          j        d           |           S )Nc                     | dk    rdndS )Nr  r   r,   r  )r  s    r7   <lambda>zWtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weights.<locals>.<lambda>r	  s    1s77aa r9   )rD   	vectorizer  s    r7   r  zEtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weightsq	  s     :r|99::4@@@r9   )rd   r-  zAll neighbors of some sample is getting zero weights. Please modify 'weights' to avoid this case if you are using a user-defined function.r   rz  N)r   r   rt   rq   r   r   r   rB  )r}   r   r  r   r  s        r7   3test_KNeighborsClassifier_raise_on_all_zero_weightsr  i	  s   
 Q!Q!Q!Q(AAA A A 
(Q
I
I
ICGGAqMMM	)  
z	-	-	- " "c3ZL!!!" " " " " " " " " " " " " " " 
z	-	-	- ( (C:,'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s$   BBB*CCCnn_modelr   c                    t          j        dddd          \  }}t          |                               |          } d|                                 v rVt          |                                          }||dk             }|                     t          j        |d          	           t          | ||t                      
          }|                     ||           t          ||                     d          |k               t          j        |          t          j        |                     d|                    k    sJ |                     d|          |                     ||          k     sJ dS )a  Check that `predict` and related functions work fine with X=None

    Calling predict with X=None computes a prediction for each training point
    from the labels of its neighbors (without the label of the data point being
    predicted upon). This is therefore mathematically equivalent to
    leave-one-out cross-validation without having do any retraining (rebuilding
    a KD-tree or Ball-tree index) or any data reshuffling.
    rf  r\   r-   r   )rz   centersr:   r&  r  r   P   r   cvN)r   
make_blobsr	   r  
get_paramsr   ravelrD   
percentiler   r   rt   r   r   r  rq   approxr  r  re   r}   r   distsloocvs         r7   test_neighbor_classifiers_loocvr  	  sX   " Q1STUUUDAqX))I)>>H
 8&&(((("1%%++--eai 2=#;#;<<<Ha{}}===ELLAE8++D11Q677775>>V]8>>$+B+BCCCCCC
 >>$""X^^Aq%9%9999999r9   c                    t          j        ddd          \  }}t          |                               |          } d|                                 v rVt          |                                          }||dk             }|                     t          j        |d                     t          | ||t                      	          }|                     ||           t          ||                     d
                     d
S )z@Check that `predict` and related functions work fine with X=Nonerf  r-   r   )rz   r:   r&  r  r   r  r   r  N)r   make_regressionr	   r  r  r   r  rD   r  r   r   rt   r   r   r  s         r7   test_neighbor_regressors_loocvr  	  s     #bQQOOODAq X))I)>>H
 8&&(((("1%%++--eai 2=#;#;<<<h1???ELLAE8++D1122222r9   r   )r  r\   r-   r  r   )r.  r\   rZ   r\   r   )r.  r\   rZ   r  r   )r.  r\   rZ   r.   r   )r.  r.   rZ   r  r   )r.  r\   rZ   r   )r  )r  r.   r-   r\   )r8  r  r\   r\   )r  rI  )r8  r  r\   rR   )r  r  	itertoolsr   r  numpyrD   rq   scipy.sparser   sklearnr   r   r   r   sklearn.baser	   sklearn.exceptionsr
   r   sklearn.metrics._dist_metricsr   sklearn.metrics.pairwiser   r   'sklearn.metrics.tests.test_dist_metricsr   7sklearn.metrics.tests.test_pairwise_distances_reductionr   r   sklearn.model_selectionr   r   r   r   sklearn.neighborsr   r   sklearn.neighbors._baser   r   r   r   sklearn.pipeliner   sklearn.utils._testingr   r   r   sklearn.utils.fixesr    r!   r"   r#   r$   r%   r&   sklearn.utils.validationr'   rE   rF   rL   	load_irisr  permutationr   r   permr   load_digitsr  tupler  r  r  rn   sortedr  intersectionmapr'  r  COMMON_VALID_METRICSrH   r   r   r   DISTANCE_METRIC_OBJSr6  r8   r5  rN   rV   WEIGHTSmarkthread_unsafeparametrizer   r   r   r   r   rs   r   r   filterwarningsr   r   r   r   r   r   r   r  r  r  r  r,  r<  r?  rF  rI  rV  rr  rv  r  r  r  r  r%  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r6  DeprecationWarningr@  rH  rO  rR  rT  r\  rb  re  rh  rm  rq  r|  r~  r  r  r  r  r  r  r   r   r  r  r  r  r  r  LocalOutlierFactorr  r  r  r  r  r  r  r9   r7   <module>r      sa   				              ! ! ! ! ! !                  @ @ @ @ @ @ @ @      T S S S S S S S @ @ @ @ @ @                                     + * * * * *         
                  8 7 7 7 7 7iAx
t{'((IdO	k$ 
			
v})**k$d#u  	
   "*.6
vCcc#y6==??@@A   1a -_Y-GHH	 #2?93S#T#T	   ''  #    c s    :	 	 	 j,
/
 5  )E4=99#7:N#NOOJ
 J
 PO :9  J
Z (  #7:N#NOO.0R0R0RSS&%+*	 @
 @
  TS PO $@
F &%" ' ' '*- - - 6774( 4( 874(n3 3 3  //3 3 0/3" //3 3 0/3" .99! ! :9!0 677&>@R%STT.99" " :9 UT 87"" 677.998 8 :9 8786 .99K K :9K& 7.H    677.992 2 :9 87208 8 8$ WX' ' ' 'T j11G,,
 3 3 3 -, 213> / / / /( '  '  'F j11G,,
 3 3 3 -, 2138 j11G,,---88  98 -, 21< j11G,,z z -, 21zzE E E09 9 9B/ / /$ .990 0 :90, &G&G&GHH- - IH- (D-0/00	
 	
  	 	 "% "% "%J#1 #1 #1N LM7 7 7 7()3 )3 )3Z LM8 8 8 80, , ,4 LM7 7 7 74 IJ$& $& $& $&N, , ,8 =>7 7 7 7. 677KLL L L 87L>M M M&& & &*D D D@ 			22.*!=>>.99
 
 
 :9 ?> 32

 
 
 			22.*!=>>.99
 
 
 :9 ?> 32
 &+%*	  .99" " :9 "J &+%*	  3x00vw&788( ( 98 10 (( &+%*	  3x00y+&>??  @? 10  4 4 4 
FI#K011>>#G,	
 	
 #x','
(
(	)  	 	 K; K; K;	 	K;b ,---ffSS09::SS-=Q=QQRR  4
 4
 4
  .-4
n" " "* i%g.1EE  .99BD)$ )$ )$ :9 )$X   .99	, 	, :9	,!M !M !MH1 1 1
< < << j11  21> j11. . 21.b? ? ?  j11+ + 21+0 j11+ + 21+6 [&$9::j116 6 21 ;: 6$" " " .99, , :9,. NOO
C 
C PO
C. . .*+6 +6 +6\ -			2H		-	-}dGL	R	 	 +tW=	A		T7;	Q		dI>	Q		aS1W~{K	Q		g>
 
. .
 
. ,---ffSS09::SS-=Q=QQRR  6
 6
 6
  .-6
r) ) )
2 2 2  		'-);<		&(:;		+R0		,b1		(=!*<=		-#?		%q'9: 2 2 2(  % % %&( ( (6 &	&2666+	+--  j11: : 21 :B %	%"555*	*,,  j113 3 21 3 3 3r9   