
    sgVT                       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l1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< ejz                  j}                  d       Z? ej                         ZAe?j                  eAj                  j                        ZEeAj                  eE   eA_F        eAj                  eE   eA_C         ej                         ZHe?j                  eHj                  j                        ZEeHj                  eE   eH_F        eHj                  eE   eH_C         eIe2e3z   e4z   e5z   e7z   e8z         ZJeJej                  fz   ZLdZM eN eOj                   eQeOej                  j                                      ZTddddej                  fZV e0ej                        e_W         e0ej                        e_X        dgZYddeZfdZ[deZde\fdZ]d Z^dde^gZ_ej                  j                  dd d!g      ej                  j                  d"d#d$g      ej                  j                  deTeYz         d%                      Zbej                  j                  d&d'd(g      ej                  j                  deTeYz         ej                  j                  d)g d*      ej                  j                  d+ej                  ejJ                  ej                  ej                  g      d,                             Zfej                  j                  d-ej                  ejJ                  ej                  g      d.        Zhd/ Ziej                  j                  d0      d1        Zkd2 Zlej                  j                  d3d4d5g      d6        Zmej                  j                  d3d4d5g      d7        Znej                  j                  d8e5      d9        Zoej                  j                  d0      ej                  j                  d:e*e(g      ej                  j                  d8e5      d;                      Zpej                  j                  d0      ej                  j                  d8e5      d<               Zqej                  j                  d8e5      d=        Zrej                  j                  d>e7e2z   e6z         d?        Zsej                  j                  d0      ej                  j                  d8e5      d@               ZtdA Zu	 ddDZvej                  j                  dEeM      ej                  j                  dFe_      	 	 	 	 	 ddH              Zw	 	 	 	 	 ddIZxdJ Zyej                  j                  dEeM      ej                  j                  dFe_      	 	 	 	 	 ddK              Zzej                  j                  dEeM      ej                  j                  dFe_      ej                  j                  dLg dM      dN                      Z{ej                  j                  dEeM      ej                  j                  dFe_      dO               Z|dP Z}dQ Z~dR Zej                  j                  d8e5      dS        Zej                  j                  dEg dT      dU        Zej                  j                  dEdg e edVdWgeY            dXdYgz         dZ        Zd[ Z	 dd\Zd] Z	 dd^Zd_ Z	 dd`Z	 ddaZdb Z	 ddcZej                  j                  d0      	 ddd       Zde Zdf Zdg Zej                  j                  dhg di      ej                  j                  djdkdg      ej                  j                  d8e5      ddl                     Zdm Zej                  j                  dhg di      ej                  j                  djdkdg      ej                  j                  d8e5      ddn                     Zej                  j                  doej                  ej                  ejJ                  ej                  g      ej                  j                  d8e5      dp               Zej                  j                  doej                  ej                  ejJ                  ej                  g      ej                  j                  dddqg      ej                  j                  dEdrdsg      dt                      Zej                  j                  doej                  ej                  ejJ                  ej                  g      ej                  j                  dddqg      ej                  j                  dEdudvg      dw                      Zdx Zej                  j                  d eN eOej                  dv         j                  ej                  ds          eOdyge      z
        eYz         	 	 	 	 ddz       Z e0e{      ej                  j                  d eN eOej                  ds          eOd|g      z
              	 	 	 	 dd}              Zd~ Zej                  j                  dej                  ds   eYz         ej                  j                  d8e5      	 dd              Zd Zej                  j                  d8e5      d        Zd Zd Zd Zej                  j                  dEeM      d        Zej                  j                  dEeM      d        Zd Zej                  j                  dEeM      d        Zej                  j                  dEeM      d        Zej                  j                  dddg      ej                  j                  dEeM      d               Zd Zej                  j                  d8e5      d        Zej                  j                  d      d        Zd Zd Zej                  j                  dejz                  j[                  dGd      d|ddsfejz                  j]                  dGdB      dWddsfejz                  j]                  ddC      dWddsfejz                  j]                  dGdC      dWddufejz                  j]                  dGdC      dddgdCz  idvfejz                  j]                  dGdC      dddsfg      d        Z e0e{      ej                  j                  d eN eOej                  ds          eOd|g      z
              	 	 	 	 dd              Zd Zd Zej                  j                  dej                  dhdifejJ                  dhdifej                  i fej                  i fejf                  dhdifejh                  ddifejj                  dhdifg      d        Zd Zd Zd Zej                  j                  d ej                  dG       ej                         g      ej                  j                  dEeM      d               Zej                  j                  d ejJ                  dG       ej                         g      ej                  j                  dEeM      d               Zy)    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parse_version
sp_version)check_random_state)	ball_treebrutekd_treeauto            DM_euclideanmetricc                 J    | 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.

    Nr0   DM_dtype)r   
get_metric)r3   r7   s     Y/var/www/html/venv/lib/python3.12/site-packages/sklearn/neighbors/tests/test_neighbors.py_parse_metricr:   e   s0     bqzU((5AAM    
n_featuresc                     t         j                  j                  d      }| dk(  r{t        d      t        d      t        d      t        t         j                        g}t
        t        d      k\  r+|j                  t        d|j                  |                   |S | d	k(  rt        |j                  |      
      gS | dk(  rG|j                  ||      }||j                  z   dt        j                  |      z  z   }t        |      gS i gS )z/Return list of DistanceMetric kwargs for tests.r.   	minkowski      ?)pr/   r0   z
1.8.0.dev0)r@   w
seuclidean)Vmahalanobis)VI)nprandomRandomStatedictinfr(   r'   appendrandTeye)r3   r<   rngminkowski_kwargsArE   s         r9   _generate_test_params_forrR   t   s     ))


"C 3KD1Itbff~N|44 ##D10D$EFsxx
+,--HHZ,Wq266*---} 4Kr;   c                 t    t        j                  d      5  d| z  }ddd       |dz  S # 1 sw Y   dz  S xY w)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/   )rF   errstate)distretvals     r9   _weight_funcrZ      s=     
H	% t1919s   *7uniformdistancez/n_samples, n_features, n_query_pts, n_neighbors)d   r]   
   r]   )     r]   r.   query_is_trainFTc           
         t        ||       }t        j                  j                  d      }|j	                  ||      j                  | d      }|r|n"|j	                  ||      j                  | d      }	g }
g }t        D ]  }t        |t              r,| t        j                  k(  rd|v rt        j                  d       t        j                  |||      }|j                  |       |
j                  |j!                  |	d             |j                  |j!                  |	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        y )Nr   FcopytreeCNeither KDTree nor BallTree support 32-bit distance metric objects.n_neighbors	algorithmr3   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ư>)rn   atol)r:   rF   rG   rH   rL   astype
ALGORITHMS
isinstancer   float32pytestskipr   NearestNeighborsfitrK   
kneighborsrangelenr   r   )global_dtype	n_samplesr<   n_query_ptsrh   ra   r3   	local_rngXqueryresults_nodistresultsri   neighinext_algorithmindices_no_dist	distancesnext_distancesindicesnext_indicess                        r9   test_unsupervised_kneighborsr      s   , 6<0F 		%%a(Iy*-44\4NA  	
^^K4;;Lu;U 
 NG F	fn-,"**2L"  **#y
 			!e..ue.LMu''t'DEF 3w<!#$ 
qM	#AE*(+$+AJqM71q5>!3D>	 '
1wq1u~a/@	{ #; ;		
 		{'.)9 :7 7		
 		{'.)9 :9 9 	
/
r;   z"n_samples, n_features, n_query_pts)r]   r]   r^   )r_   r`   r]   zn_neighbors, radius))r.   r]   )2   i  )r]   r_   NeighborsMixinSubclassc           
         t        ||       }t        |t              rFd|j                  v rt	        j
                  d       d|j                  v rt	        j
                  d       t        j                  j                  d      }|j                  ||      j                  | d      }	|j                  d|	      }
|j                  ||      j                  | d      }g }t        |t              r|n|}t        D ]{  }t        |t              r,| t        j                  k(  rd
|v rt	        j
                  d        ||||      }|j!                  |	|
       |j#                  |j%                  |             } t'        t)        |      dz
        D ]9  }t        |   }t        |dz      }||   ||dz      }}t+        ||d| d| d       ; y )N
ClassifierzGMetrics of type `DistanceMetric` are not yet supported for classifiers.RadiusVMetrics of type `DistanceMetric` are not yet supported for radius-neighbor estimators.r   Frc   r0   sizere   rf   ri   r3   r.   rl   ro   z*' algorithms return different predictions.rm   )r:   rs   r   __name__ru   rv   rF   rG   rH   rL   rq   randint
issubclassr   rr   rt   rx   rK   predictrz   r{   r   )r|   r}   r<   r~   r3   rh   radiusr   r   r   yr   predict_results	parameterri   r   r   r   predictionsnext_predictionss                       r9   ,test_neigh_predictions_algorithm_agnosticityr      s   > 6<0F&.)1:::KK  -666KK/ 		%%a(Iy*-44\4NA!),ANN;
3::<e:TEO ""8/JPV    
5	fn-,"**2L"  'yIfU		!Qu}}U34
5 3'!+, 
qM	#AE*(7(:OAPQE<R%	{'.)9 :; ;		

r;   KNeighborsMixinSubclassc                    t         j                  d      j                  | d      }t         j                  dd      }t	        j
                  d      }|j                  |       |j                  |      \  }} |d      }|t	        j                  |      t	        j                  |      fD ]@  }|j                  ||       |j                  |      \  }	}
t        ||	       t        ||
       B y )	Nr^   r0   Frc   r0   r^   r   r.   rh   )rO   random_samplerq   r   r   rw   rx   ry   BallTreeKDTreer   r   )r|   r   r   r   nbrs_fiddist1ind1nbrsdatadist2ind2s              r9   test_unsupervised_inputsr   K  s     	'")),U)CAABA))a8HLLO%%a(KE4"q1D9--a0)2B2B12EF 'qooa(tu%4&'r;   c                  0   dgg} t        j                         }t        j                  t              5  |j                  |        d d d        t        j                  t              5  |j                  |        d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nr.   )r   rw   ru   raisesr   kneighbors_graphradius_neighbors_graph)r   
neighbors_s     r9   !test_not_fitted_error_gets_raisedr   h  s|    
A++-J	~	& '##A&'	~	& -))!,- -' '- -s   B %B B	Bzignore:EfficiencyWarningc                    t         j                  j                  d      }|j                  d      }|j                  d      } | ||      \  }}dD ]a  }t	        j
                  d      }|j                  |        t        ||      |      \  }	}
t	        j
                  ddd	      }|j                  |        t        ||      |      \  }}t        |	|       t        |
|       t	        j
                  dd
d	      }|j                  |        t        ||      |      \  }}t        |	|       t        |
|        t        ||      d      \  }	}
 t        ||      d      \  }}t        |	|       t        |
|       t        j                  t              5   t        ||      |       ddd       d t        j                  |j                  d         }|D ]n  } |d      }dx|_        |_        |j                  ||      j#                  |      }d|_        |j                  ||      j#                  |      }t        ||       p y# 1 sw Y   xY w)z;Tests unsupervised NearestNeighbors with a distance matrix.*   r^   r1   r0   r1   )ry   r0   r   r+   precomputedrg   r-   Nr   	euclideanr3   r.   )rF   rG   rH   r   r   rw   rx   getattrr   r   ru   r   
ValueErrorarangeshaper   rh   r   r3   )make_train_test
estimatorsrO   r   YDXXDYXmethodnbrs_Xdist_Xind_Xnbrs_Ddist_Dind_DtargetEstestpred_Xpred_Ds                      r9   check_precomputedr   q  s4    ))


#C'"A&!Aq!$HC $' ++:

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

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

3//4'5%( 0/5//5'5%( ]]:& 	'#GFF#A&	' 	'G$'L YYqwwqz"F (%'((
S_F#++A."
f%--c2'(		' 	's   II	c                      d } t         j                  t         j                  t         j                  t         j                  g}t        | |       y )Nc                 X    t        j                  |       t        j                  ||       fS N)r   r   )X_trainX_tests     r9   r   z/test_precomputed_dense.<locals>.make_train_test  s*    &&w/&&vw7
 	
r;   )r   KNeighborsClassifierr   RadiusNeighborsClassifierRadiusNeighborsRegressorr   )r   r   s     r9   test_precomputed_denser     s@    
 	&&%%++**	J oz2r;   fmtcsrlilc                 h      fd}t         j                  t         j                  g}t        ||       y )Nc                     t        j                  d      j                  |       }|j                  | d      j	                        |j                  |d      j	                        fS )Nr1   r   r\   mode)r   rw   rx   r   asformatr   r   nnr   s      r9   r   z4test_precomputed_sparse_knn.<locals>.make_train_test  sd    ''E:>>wGj9BB3GZ8AA#F
 	
r;   )r   r   r   r   r   r   r   s   `  r9   test_precomputed_sparse_knnr     s/    
 	&&%%J oz2r;   c                 h      fd}t         j                  t         j                  g}t        ||       y )Nc                     t        j                  d      j                  |       }|j                  | d      j	                        |j                  |d      j	                        fS )Nr.   r   r\   r   )r   rw   rx   r   r   r   s      r9   r   z7test_precomputed_sparse_radius.<locals>.make_train_test  sd    ''q155g>%%gJ%?HHM%%f:%>GGL
 	
r;   )r   r   r   r   r   s   `  r9   test_precomputed_sparse_radiusr     s/    
 	++**J oz2r;   csr_containerc                 &    | t        j                  d      j                  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 y )Nr^   r.   r`   r   r/   r   r.   r/   )r0   r   r   )r0   r1   r   r.   r   r/   )r   r1   r/   r/   )r   r.   r.   r.   )r   r/   r/   r1   r0   r0   )r   )rF   r   reshaper   )r   r   r   r   indptrs        r9   test_is_sorted_by_datar     s     	biim++Ar23Aa   AdG!!$$$ 	y)Y	BCAa    ),6'DtWf-V<Aa   r;   functionc                     |t        j                  t         j                  j                  d      j	                  dd                  }t        |      rJ  | |      }t        |      sJ t         j                  j                  d      j                  dd      }|j                         }d||dk(  <    ||      }t        |      rJ  | |      }t        |      sJ y )Nr   r^   r/   r^   r^   r   r   r.   )rF   absrG   rH   randnr   r   toarray)r   r   r   Xtmasks        r9   test_sort_graph_by_row_valuesr     s    
 	bffRYY2226<<RDEFA!!$$$	!Bb!!! 99  $,,QX,>D			AAdaiLaA!!$$$	!Bb!!!r;   c                     | t        j                  t         j                  j                  d      j	                  dd                  }t        |      rJ |j                         }t        |      j                  |j                  u sJ |j                         }t        |d      j                  |j                  u sJ |j                         }t        |d      j                  |j                  usJ |j                         }t        |      j                  |j                  usJ t        |j                         d       t        j                  t        d      5  t        |j                         d       d d d        y # 1 sw Y   y xY w)Nr   r^   Frc   Tz%Use copy=True to allow the conversionmatch)rF   r   rG   rH   r   r   rd   r   r   r   tocscru   r   r   )r   X_r   s      r9   "test_sort_graph_by_row_values_copyr  
  s1    
rvvbii33B7==b"EF	GB!"%%% 		A#A&++qvv555
	A#AE277166AAA
	A#AD166affDDD 		Aa %%QVV333 QWWYT2 
z)P	Q 8 78 8 8s   FF
c                     | t        j                  t         j                  j                  d      j	                  dd                  }t        |      rJ t        j                  t        d      5  t        |d       d d d        t        j                  t        d      5  t        |dd       d d d        t        j                  t        d      5  t        |       d d d        t        j                         5  t        j                  d       t        |dd	       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   y xY w)
Nr   r^   zwas not sorted by row valuesr   Trc   )rd   warn_when_not_sortederrorF)rF   r   rG   rH   r   r   ru   warnsr
   r   r   warningscatch_warningssimplefilter)r   r   s     r9   %test_sort_graph_by_row_values_warningr  '  s    	bffRYY2226<<RDEFA!!$$$ 
'/M	N / ./	'/M	N J DIJ	'/M	N 1 
	 	 	" Kg& EJK K/ /J J K Ks0   1D)"D5E<$E)D25D>E
Esparse_containerc                     | t        j                  t         j                  j                  d      j	                  dd                  }t        j                  t        d      5  t        |       d d d        t        j                  t        d      5  t        |       d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Nr   r^   zformat is not supportedr   )
rF   r   rG   rH   r   ru   r   	TypeErrorr   r   )r  r   s     r9   /test_sort_graph_by_row_values_bad_sparse_formatr  ;  s    
 			 5 5b 9 ? ?B GHIA	y(A	B $ #$	y(A	B 1 $ $ s   $B(B4(B14B=c                    t        j                  g dg dg dg      } | |      }t        j                  dd      }|j	                  |       |j                  d d       |j                  t        j                  g dg      d	       t        j                  g d
g dg dg      } | |      }|j	                  |       d}t        j                  t        |      5  |j                  d d       d d d        t        j                  g dg dg dg      } | |      }d}t        j                  t        |      5  |j                  |d       d d d        y # 1 sw Y   ixY w# 1 sw Y   y xY w)N)               @rV   )r  r        @)rV   r  r  r.   r   rh   r3   r   r  r  r  r/   )r  r  r  )r  r  r  zB2 neighbors per samples are required, but some samples have only 1r   )      @r  rV   )g       r  r  z>Negative values in data passed to precomputed distance matrix.)	rF   arrayr   rw   rx   ry   ru   r   r   )r   rX   dist_csrr   msgs        r9   test_precomputed_sparse_invalidr  G  s=    88_oGHDT"H&&1]KE	IIh	Tq)	RXX/0a@ 88_oGHDT"H	IIh
NC	z	- .1-. 88_&6HIDT"H
JC	z	- 2q12 2. .2 2s   E>E'E$'E0c                     t         j                  j                  d      } | j                  dd      }t	        |d      }| j                  dd      }t        j                  t        j                  t        j                  t        j                  fD ]4  }t         |       ||      }t         |d      ||      }t        ||       6 y )	Nr      r/   r   r   r0   r   r   )rF   rG   rH   rL   r   r   r   r   r   r   r   r   r   )rO   r   Dr   r   metric_scoreprecomp_scores          r9   !test_precomputed_cross_validationr   a  s    
))


"CQA1[1AABA&&++%%**	 8 'sua3'=(A1aH<78r;   r  r`   c                 V   t         j                  j                  |      }|j                  ||      j	                  | d      }|j                  ||      j	                  | d      }t
        D ]  }	g }
t        D ]  }t        j                  |||	      }|j                  |       |j                  |d      }|j                  |d      \  }}t        |||      D ].  \  }}}|j                         }||   |d d  ||   |d d  ||   |d d  0 |
j                  ||f       t        t        j                  t!        |            t        j                  t!        |                    t#        t%        |
      dz
        D ]  }t        t        j                  t!        |
|   d               t        j                  t!        |
|dz      d                     f t        t        j                  t!        |
|   d               t        j                  t!        |
|dz      d                        y )NFrc   )r   ri   r@   rj   Tr.   r   )rF   rG   rH   rL   rq   Prr   r   rw   rx   radius_neighborszipargsortrK   r   concatenatelistrz   r{   )r|   r}   r<   r~   r   random_staterO   r   testr@   r   ri   r   r   rX   inddr   i1js                       r9   "test_unsupervised_radius_neighborsr.  r  s    ))


-CJ'..|%.HA88K,33Lu3MD # 	SI..f	UVWEIIaL))$)FD ..tT.JID#c40 1bIIKt!t!11	
 NND#;'BNN495r~~d4j7QR!	S$ s7|a'( 	AtGAJqM23tGAEN1$567  tGAJqM23tGAEN1$567	+r;   ri   weightsr^   c                 Z   t         j                  j                  |      }d|j                  ||      j	                  | d      z  dz
  }	|	dz  j                  d      dk  j	                  t              }
|
j	                  t              }t        j                  |||      }|j                  |	|
       dd|j                  d|      z  dz
  z  }|j                  |	d | |z         }t        ||
d |        |j                  |	|       |j                  |	d | |z         }t        ||d |        y )	Nr/   Frc   r.   axis      ?rh   r/  ri   h㈵>)rF   rG   rH   rL   rq   sumintstrr   r   rx   r   r   )r|   ri   r/  r}   r<   
n_test_ptsrh   r(  rO   r   r   y_strknnepsilony_preds                  r9   test_kneighbors_classifierr>    s    ))


-C	CHHY
+22<e2LLqPA
Q$	c	!))#.AHHSME

(
(IC GGAqMa#((1j11A56G[[;J'12Fvq*~.GGAu[[;J'12Fvu[j12r;   c                    t         j                  j                  |      }d|j                  ||      j	                  | d      z  dz
  }|dz  j                  d      dk  j	                  t              }t        j                  |      }	|	j                  ||j	                  t                     dd|j                  d|      z  dz
  z  }
|	j                  |d | |
z         }t        ||d |        y )	Nr/   Frc   r.   r1  r3  r   r5  )rF   rG   rH   rL   rq   r6  r7  r   r   rx   floatr   r   )r|   r}   r<   r9  rh   r(  rO   r   r   r;  r<  r=  s               r9   'test_kneighbors_classifier_float_labelsrA    s     ))


-C	CHHY
+22<e2LLqPA
Q$	c	!))#.A

(
([
ACGGAqxxa#((1j11A56G[[;J'12Fvq*~.r;   c           	         t        j                  g dg dg dg dg dg dg      j                  | d      }t        j                  g d	      }t        j                  d
d      }|j                  ||       |j                  |      }t        j                  g dg dg dg dg dg dg      dz  }t        ||       |j                  ||j                  t                     |j                  |      }t        ||       t        j                  ddd      }|j                  ||       |j                  t        j                  g dg dg            }t        j                  g dg dg      }t        ||       y )N)r   r/   r   )r   r/   r.   )r/   r   r   )r/   r/   r   )r   r   r/   )r   r   r.   Frc   )r1   r1   r`   r`   r.   r.   r0   r.   )rh   r@   )r.   r/   r   r   r   )r/   r.   r   r  r/   r\   )rh   r@   r/  )r/   r/   r/   r   r.   r   )r   g?g333333?)
rF   r  rq   r   r   rx   predict_probar   r8  r   )r|   r   r   clsy_prob	real_probs         r9   (test_kneighbors_classifier_predict_probarH    s;   
	Iy)Y	J	f\f&  	#$A

(
(Q!
<CGGAqMq!F
		
 
	  y&)GGAqxx}q!Fy&)

(
(Q!Z
PCGGAqMrxxI(>?@F)]34IIv&r;   c                 Z   t         j                  j                  |      }d|j                  ||      j	                  | d      z  dz
  }	|	dz  j                  d      |k  j	                  t              }
|
j	                  t              }t        j                  |||      }|j                  |	|
       dd|j                  d|      z  dz
  z  }|j                  |	d | |z         }t        ||
d |        |j                  |	|       |j                  |	d | |z         }t        ||d |        y )Nr/   Frc   r.   r1  r   r/  ri   r5  )rF   rG   rH   rL   rq   r6  r7  r8  r   r   rx   r   r   )r|   ri   r/  r}   r<   r9  r   r(  rO   r   r   r:  r   r<  r=  s                  r9    test_radius_neighbors_classifierrK    s    ))


-C	CHHY
+22<e2LLqPA
Q$	f	$,,S1AHHSME//w)E 
IIaOa#((1j11A56G]]1[j>G34Fvq*~.	IIa]]1[j>G34Fvu[j12r;   outlier_label)r   Nc                 $   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                  }	 |	||||
      }
|
j	                  ||       t        t        j                  ddg      |
j                  |             |4t        j                  t              5  |
j                  |       d d d        y y # 1 sw Y   y xY w)NrV   r  r6   r.   r/   皙?)\(?Gz @ffffff?r   r/  ri   rL  )
rF   r  r   r   rx   r   r   ru   r   r   )r|   ri   r/  rL  r   r   r   z1z2rncclfs              r9   2test_radius_neighbors_classifier_when_no_neighborsrX    s    	3*sCj)>A
!QAF 
D$<$.l	CB 
D$<#s,L	AB

-
-C
#	C GGAqMrxxA'R9]]:& 	KKO	 	 	 	s   *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      }	|	j	                         t        ||	j                  |             t        j                  t        d      5  t        ||	j                  |             d d d        t        j                  t        d      5  t        ||	j                  |      d          d d d        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        fd}t        j                  t              5   |        d d d         dd      }	|	j	                         |	j                  dgdgg      }t        |dd d f   g d         dd      }	|	j	                         |	j                  dgdgg      }t        |dd d f   g d!       |	j                  dgdgg      }t        |ddg       fd"}t        j                  t              5   |        d d d        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      }	|	j	                         |	j                  dgdgg      }t        |d   dd d f   g d!       |	j                  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      }	|	j	                         |	j                  dgdgg      }t        |d   dd d f   g d#       t        |d   dd d f   g d!       |	j                  dgdgg      }t        |dd d f   ddg       fd$}t        j                  t              5   |        d d d        y # 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)%NrV   r  gGz?g\(\?rQ  r6   )r.   r/   r.   r.   r/   rO  rP  rR  r.   r/   )rM  r.   r/   r   rM  rS  z+Outlier label -1 is not in training classesr   r0   r1   r`            	   )
r   r/   r/   r.   r.   r.   r0   r0   r0   r0   c                  B     ddgg      } | j                         y )Nr.   r`   r   rL  rx   rW  RNCr   r   s    r9   check_array_exceptionzPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_array_exceptionX  s     A3%01r;   c                  >     dd      } | j                         y )Nr.   ar_  r`  ra  s    r9   check_dtype_exceptionzPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_dtype_exception`  s    #.1r;   most_frequentr_     )r   r   r   r.   )r   r.   r   r   c                  h     dd      } | j                         | j                  dgdgg       y )Nr.   r1   r_  rh  )rx   rD  ra  s    r9   check_warningzHtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_warningv  s2    !,1A3+&r;   )r.   r   r   r   c                  B     dg d      } | j                         y )Nr.   r   r_  r`  )rW  rb  r   y_multis    r9   check_exceptionzJtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_exception  s    )47r;   )rF   r  r   r   rx   r   r   ru   r  UserWarningr   rD  r   r  r   )r|   ri   r/  r   rT  rU  correct_labels1correct_labels2outlier_probarW  rc  rf  probapredrj  rm  rb  r   r   rl  s                   @@@@r9   1test_radius_neighbors_classifier_outlier_labelingrt  1  s    	
sc3Z$d|dD\J	A 	!AF 
D$<$.l	CB 
C:d|dD\:,	OBhh1v&Ohhz*OHHaV$M

-
-w)2C GGAqMB8	k)V	W =?CKKO<=	k)V	W As'8'8'<Q'?@A 
-
-C
1#sQC!qcA3aS1#sC<XA
/0A 
y	!    
y	!    Qo
6CGGAqMsRDk*EuQT{L1 Qa
(CGGAqMsRDk*EuQT{L1;;bT{#DtaV$'
 
k	" 
 
A	
A	
A	
A	
A	
A	
A	
A	
A	
AG Qa
(CGGAwsRDk*EuQx1~|4;;bT{#DtAqDzAq6* 
A	
A	
A	
A	
A	
A	
A	
A	
A	
AG Qq!f
-CGGAwsRDk*EuQx1~|4uQx1~|4;;bT{#DtAqDzAq6* 
z	"  = =A A      . b sH   'R&R?R)/R6S>SRR&)R36S SS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 ]p  }dd|fD ]f  }t	        j
                  |||	      }|j                  | |       t        j                  d
      5  t        ||j                  |             d d d        h r y # 1 sw Y   uxY w)NrV   r  r.   r/   rO  rP  r[   r\   rJ  rT   )invalid)
rF   r  rZ   rr   r   r   rx   rW   r   r   )	r   r   r   rT  ro  weight_funcri   r/  rW  s	            r9   .test_radius_neighbors_classifier_zero_distancerx    s     	3*sCj)*A
!QAF	D$<#s,	-Bhh1v&OK 	E	!:{; 	EG55w)C GGAqMX. E #?CKKODE E	E	EE Es   >C''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 ]G  }t        j                  |||	      }	|	j                  | |       t        ||	j                  |             I t        d
dg||g      D ]J  \  }}
t        j                  d||      }|j                  | |       t        |
|j                  |             L  y )NrV   r        @)rV   r?   r  r  皙?皙?g      ?r[   r\   rJ  r[   r\   r/   r4  )
rF   r  rr   r   r   rx   r   r   r$  r   )r   r   r   zrnn_correct_labelsknn_correct_unifknn_correct_distri   r/  rnncorr_labelsr;  s               r9   'test_neighbors_regressors_zero_distancer    sT    	3*sCj3*sCjABA
%&AF
3*sCj)*A4+.xxs,xxs, 9	 / 	@G44w)C GGAqM.A?	@ %(
#&68H%I%
 	9 G[ //w)C GGAqMKQ8	99r;   c                  8   t        j                  dgdgdgg      } d}t        D ]t  }t        j                  ||      j                  |       }|j                  dggd      }|j                  dk(  sJ |j                  t        k(  sJ t        |d	   d	d
g       v y)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   ri   r  Frj   )r.   r   r.   N)rF   r  rr   r   rw   rx   r#  r   r7   objectr   )r   r   ri   r   r   s        r9   'test_radius_neighbors_boundary_handlingr    s     	3%#'(AF /	))9MQQRST''#'G}}$$$}}&&&71:1v./r;   c                     | t        j                  d            }|j                  g d       t        j                  dddd      j                  |      }|j                  |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        ||       y )N)r1   r1   )r   r   r   r   r3  r-      r   )r   ri   	leaf_sizer3   Trj   r   r6   r.   r/   r0   )rF   onessetdiagr   rw   rx   r#  emptyr   r  r  r   )r   r   r   
neigh_dist	neigh_indexpected_distexpected_inds          r9   .test_radius_neighbors_returns_array_of_objectsr    s    	bggfo&AIIl%%f=	c!f 	 !11!T1JJ	HHQWWQZv6M!rxx}bhhsmRXXqc]SM!88AGGAJf5Lxx}bhhsmRXXqc]BHHaSMRLOz=1y,/r;   )r*   r,   r+   c                 Z   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                  |       j	                  |      }t        j
                  |j                  ||d            }t        ||       y )Nr   r.   rM  r/   ri   F)rh   rk   )rF   r  r   rw   rx   sortry   r   )ri   query_pointequidistant_pointskknn_indicesr   r   s          r9   test_query_equidistant_kth_nnr    s     ((QF8$KAq6Aq6B7QG"DE 	
A((QF8$K		#	#i	8	<	<=O	PBggbmmKQPUmVWGw,r;   )r,   r*   r+   r   )r+   r   )r+   r   c                 T   t        |t        j                        }t        |t              rt        j                  d       d}t        j                  j                  d      }|j                  |df      }|dk(  r&t        j                  |t        j                  d      }t        j                  | |      }|j                  |       |j                  |t        j                  d	
      \  }}t!        |      D ]'  }t#        ||   t        j$                  ||                ) |dk7  rGt        j&                  t(        d      5  |j                  |t        j                  d	d       d d d        |j                  |t        j                  dd	      }	t+        |	      sJ y # 1 sw Y   :xY w)Nr   r^   r   r1   r   r\   r   r   r   T)r   r   sort_resultszreturn_distance must be Truer   F)r   r   r  rk   )r   r   r   r  )r:   rF   float64rs   r   ru   rv   rG   rH   r   r   r   rJ   rw   rx   r#  rz   r   r  r   r   r   )
ri   r3   r}   rO   r   modelr   r   iigraphs
             r9   "test_radius_neighbors_sort_resultsr  !  sq     62::.F&.)	
 I
))


#C9a.)A,,QrvvJO&&6JE	IIaL //!BFFQU/VIwI B9R="'')B-*@AB ]]:-KL 	""BFFu # 	 ((
BFF$ ) E e$$$	 	s   $FF'c                     t        d      } d}d}d}| j                  ||      }| j                  dd||f      }t        ||d      \  }}}}	d ddt        g}
t        t        |
      D ]  \  }}
g }t        |      D ]R  }t        j                  |
|      }|j                  ||d d |f          |j                  |j                  |             T t        j                  |      j                  }|j                   |	j                   k(  sJ t        j                  |
|      }|j                  ||       |j                  |      }|j                   |	j                   k(  sJ t#        ||        y )	Nr   r/   (   r0   r(  r[   r\   r/  ri   )r)   rL   r   r   rZ   r   rr   rz   r   r   rx   rK   r   rF   vstackrM   r   r   )rO   r<   r}   n_outputr   r   r   r   y_trainy_testr/  ri   	y_pred_soor  rnn_mo	y_pred_mos                    r9   *test_RadiusNeighborsClassifier_multioutputr  S  s_   
Q
CJIHJ'AAq9h/0A'711'M$GVWfY
L9G%j': 1	7	x 	2A559C GGGWQT]+S[[01	2 IIi(**	&,,... 44y
 	

7G$NN6*	&,,...9i0+1r;   c                    t         j                  j                  |      }d|j                  | |      z  dz
  }||dkD  z  }|dz  j	                  d      dk  j                  t              }t        D ]  }t        j                  |d      }	|	j                   ||      |       dd|j                  d|      z  dz
  z  }
t        t         j                  fz   D ]0  } ||d | |
z         }|	j                  |      }t        ||d |        2  y )	Nr/   r.   r{  r1  r3  r-   rh   ri   r5  )rF   rG   rH   rL   r6  rq   r7  SPARSE_TYPESr   r   rx   asarrayr   r   )r}   r<   r9  rh   r(  rO   r   r   	sparsematr;  r<  sparsevX_epsr=  s                 r9   !test_kneighbors_classifier_sparser  y  s   
 ))


-C	CHHY
++a/ASLA
Q$	c	!))#.A! 7	,,PVW	!a !chhq*559:#rzzm3 	7GAkzNW45E[['Fvq*~6	7	7r;   c                     t        d      } d}d}d}| j                  ||      }| j                  dd||f      }t        ||d      \  }}}}	d ddt        g}
t        t        |
      D ]v  \  }}
g }g }t        |      D ]r  }t        j                  |
|      }|j                  ||d d |f          |j                  |j                  |             |j                  |j                  |             t t        j                  |      j                   }|j"                  |	j"                  k(  sJ t%        |      |k(  sJ t        j                  |
|      }|j                  ||       |j                  |      }|j"                  |	j"                  k(  sJ t'        ||       |j                  |      }t%        |      |k(  sJ t)        ||      D ]  \  }}t'        ||        y y )	Nr   r`   r   r0   r  r[   r\   r  )r)   rL   r   r   rZ   r   rr   rz   r   r   rx   rK   r   rD  rF   r  rM   r   r{   r   r$  )rO   r<   r}   r  r   r   r   r   r  r  r/  ri   r  y_pred_proba_sor  r;  knn_mor  y_pred_proba_moproba_moproba_sos                        r9   %test_KNeighborsClassifier_multioutputr    s   
Q
CJIHJ'AAq9h/0A'711'M$GVWfY
L9G%j': 3	7	x 	>A00IVCGGGWQT]+S[[01""3#4#4V#<=		> IIi(**	&,,...?#x/// //9U

7G$NN6*	&,,...9i0 !..v6?#x///"%o"G 	3Hhx2	353r;   c                 *   t         j                  j                  |      }d|j                  | |      z  dz
  }t        j                  |dz  j                  d            }||j                         z  }|d | }t        }	t        D ]  }
dd|	fD ]  }t        j                  |||
      }|j                  ||       dd|j                  d|      z  dz
  z  }|j                  |d | |z         }t        j                  t        ||z
        dk        rJ   y Nr/   r.   r[   r\   r4  r5  333333?)rF   rG   rH   rL   sqrtr6  maxrZ   rr   r   r   rx   r   allr   )r}   r<   r9  rh   r(  rO   r   r   y_targetrw  ri   r/  r;  r<  r=  s                  r9   test_kneighbors_regressorr    s    ))


-C	CHHY
++a/A
A

1ALA*~HK 8	!:{; 	8G//'IC GGAqMa#((1j"99A=>G[[;J'!9:F66#fx/036777	88r;   c            
      f   t        d      } d}d}d}| j                  ||      }| j                  ||      }t        ||d      \  }}}}	t        t        d dg      D ]  \  }
}t        j                  ||
      }|j                  ||       |j                  |d	      }t        j                  |D cg c]  }t        j                  ||   d
       c}      }|j                  |      }|j                  |	j                  k(  sJ |j                  |	j                  k(  sJ t        ||        y c c}w Nr   r`   r  r1   r  r[   r  Frj   r1  )r)   rL   r   r   rr   r   r   rx   ry   rF   r  meanr   r   r   )rO   r<   r}   r  r   r   r   r   r  r  ri   r/  r;  	neigh_idxidx
y_pred_idxr=  s                    r9   3test_KNeighborsRegressor_multioutput_uniform_weightr    s   
Q
CJIHJ'AH%A'711'M$GVWf%j42CD ,	7++GyQ!NN65NA	XX	Rrwwws|!<RS
V$||v||+++6<<///
+,
 Ss   0!D.
c                    t         j                  j                  |      }d|j                  | |      z  dz
  }t        j                  |dz  j                  d            }||j                         z  }t        j                  ||g      j                  }|d | }ddt        g}	t        t        |	      D ]  \  }
}	t        j                  ||	|
      }|j                  ||       dd|j                  d|      z  dz
  z  }|j                  |d | |z         }|j                   |j                   k(  sJ t        j"                  t        j$                  ||z
        dk        rJ  y r  )rF   rG   rH   rL   r  r6  r  r  rM   rZ   r   rr   r   r   rx   r   r   r  r   )r}   r<   r9  rh   r(  rO   r   r   r  r/  ri   r;  r<  r=  s                 r9   %test_kneighbors_regressor_multioutputr    s>    ))


-C	CHHY
++a/A
A

1ALA
		1a&A*~H*l3G%j': 	7	7++#W	
 	1!chhq*559:Q{
^g56||x~~---vvbffVh./#5666	7r;   c                    t         j                  j                  |      }d|j                  | |      z  dz
  }t        j                  |dz  j                  d            }||j                         z  }|d | }t        }	t        D ]  }
dd|	fD ]  }t        j                  |||
      }|j                  ||       dd|j                  d|      z  dz
  z  }|j                  |d | |z         }t        j                  t        ||z
        |dz  k        rJ   dD ]  }t        j                  ||d      }|j                  ||       t        j                  d|fd	      }d
}t!        j"                  t$        t'        j(                  |            5  |j                  |      }d d d        t        j                  t        j*                              rJ  y # 1 sw Y   6xY w)Nr/   r.   r[   r\   rJ  r5  r}  r-   g      zNOne or more samples have no neighbors within specified radius; predicting NaN.r   )rF   rG   rH   rL   r  r6  r  rZ   rr   r   r   rx   r   r  r   fullru   r  rn  reescapeisnan)r}   r<   r9  r   r(  rO   r   r   r  rw  ri   r/  r   r<  r=  
X_test_nanempty_warning_msgrs  s                     r9   test_radius_neighbors_regressorr    s    ))


-C	CHHY
++a/A
A

1ALA*~HK ?	!:{; 	?G66w)E IIaOa#((1j"99A=>G]]1[j>G#;<F66#fx/06A:=>>>	?? + &227f
 			!QWWa_d3
7 	 \\+RYY7H-IJ 	-==,D	-vvbhhtn%%%&	- 	-s   GG	c            
         t        d      } d}d}d}| j                  ||      }| j                  ||      }t        ||d      \  }}}}	t        t        d dg      D ]  \  }
}t        j                  ||
      }|j                  ||       |j                  |d	      }t        j                  |D cg c]  }t        j                  ||   d
       c}      }t        j                  |      }|j                  |      }|j                  |	j                  k(  sJ |j                  |	j                  k(  sJ t        ||        y c c}w r  )r)   rL   r   r   rr   r   r   rx   r#  rF   r  r  r   r   r   )rO   r<   r}   r  r   r   r   r   r  r  ri   r/  r  r  r  r  r=  s                    r9   =test_RadiusNeighborsRegressor_multioutput_with_uniform_weightr  *  s+    Q
CJIHJ'AH%A'711'M$GVWf%j42CD ,	700IV!(((G	XX	Rrwwws|!<RS
XXj)
V$6<<///||v||+++
+,
 Ss   0!E
c                    t         j                  j                  |      }d|j                  | |      z  dz
  }t        j                  |dz  j                  d            }||j                         z  }t        j                  ||g      j                  }|d | }ddt        g}t        t        |      D ]  \  }	}t        j                  ||	      }
|
j                  ||       dd|j                  d|      z  dz
  z  }|
j                  |d | |z         }|j                   |j                   k(  sJ t        j"                  t        j$                  ||z
        dk        rJ  y )Nr/   r.   r[   r\   r  r5  r  )rF   rG   rH   rL   r  r6  r  r  rM   rZ   r   rr   r   r   rx   r   r   r  r   )r}   r<   r9  r(  rO   r   r   r  r/  ri   r  r<  r=  s                r9   )test_RadiusNeighborsRegressor_multioutputr  E  s7    ))


-C	CHHY
++a/A
A

1ALA
		1a&A*~H*l3G%j': 7	700IV1!chhq*559:Q{
^g56||x~~---vvbffVh./#56667r;   c                    t         j                  j                  |      }d|j                  | |      z  dz
  }|dz  j	                  d      dk  j                  t              }t        D ]G  }t        j                  |d      }	|	j                   ||      |       t        j                  |d      }
|
j                  t        |d	
      |       t        D ]  } ||      }t        j                  |	j                  |      j                         |k(        dkD  sJ  |t        |d	
            }|t         t"        z   v r8d}t%        j&                  t(        |      5  |
j                  |       d d d        t        j                  |
j                  |      j                         |k(        dkD  rJ  J y # 1 sw Y   xY w)Nr/   r.   r1  g      ?r-   r  r   r  r   r   ffffff?z3not supported due to its handling of explicit zerosr   )rF   rG   rH   rL   r6  rq   r7  r  r   r   rx   r   SPARSE_OR_DENSEr  r   roundr%   r    ru   r   r  )r}   r<   r9  rh   r(  rO   r   r   r  r;  knn_prer  X2X2_prer  s                  r9    test_kneighbors_regressor_sparser  \  s    ))


-C	CHHY
++a/A
Q$	d	"**3/A! L	++vV	!a //#M
 	&q=qA& 
	LGB773;;r?002a784???/+FGF.>99K]]9C8 ,OOF+, , wwwv6<<>!CDtKKK
	LL , ,s   F55F>c                  ^   t         D ]  } t        j                  d|       }|j                  t        j
                  t        j                         t        |j                  t        j
                        t        j                         |j                  d|        |j                  t        j
                  t        j                         t        j                  |j                  t        j
                        t        j                  k(        dkD  sJ t        j                  d|       }|j                  t        j
                  t        j                         t        j                  |j                  t        j
                        j                         t        j                  k(        dkD  rJ  y )Nr.   r  r]  r  r`   )rr   r   r   rx   irisr   r   r   r   
set_paramsrF   r  r   r  )ri   rW  rgss      r9   test_neighbors_irisr  |  s	   
   M	,,iP		4;;'3;;tyy14;;?1	:		4;;'wws{{499-<=DDD++YO		4;;'wws{{499-335DELLLMr;   c                  :   t         j                  j                  d      } t         j                  }| j                  \  }}t        |dz        }t        j                  d|      }t        j                  ||      }| |   ||   | |   ||   f\  }}}	}
t        j                  dd      }|j                  ||      j                  |	|
      }|j                  |j                  t        d      |      j                  |	j                  t        d      |
      }||k(  sJ y )	Nuint8g?r   r.   r+   r  Frc   )digitsr   rq   r   r   r7  rF   r   r   r   rx   scorer@  )r   r   r}   r<   train_test_boundarytrainr)  r   Y_trainr   Y_testrW  score_uint8score_floats                 r9   test_neighbors_digitsr    s    
 	7#AAggY
i#o.IIa,-E99()4D)*51U8QtWag)M&Wgvv

(
(Q'
JC'''7+11&&AK'''..U.;WEKKe%(&K +%%%r;   c                     t        j                  ddgddgddgg      } t        j                  | ddd      }t	        |j                         t        j                  |j                  d                t        j                  | dd	
      }t        |j                         g dg dg dg       t        j                  | ddd      }t	        |j                         g dg dg dg       t        j                  | dd	
      }t        |j                         g dg dg dg       t        j                  | ddd      }t        |j                         g dg dg dg       y )Nr   r.   rP  rV   r/   connectivityTr   include_selfr\   r   r  rP  r  )rP  r  r  r  z?r  rV   rV   r  r  rV   rV   )r  rP  w@rP  r  r  )r  r  r  r0   )r.   r.   r.   )	rF   r  r   r   r   r   rN   r   r   r   rQ   s     r9   test_kneighbors_graphr    s   
1a&4+1v./A 	""1an4PAqyy{BFF1771:$67""1aj9A			')9;RS
 	""1an4PAqyy{_o$WX""1aj9A			##)	
 	""1an4PAAIIK)Y	!BCr;   rh   )r.   r/   r0   r   r  c                    t         j                  j                  |      }|j                  dd      } ||      }t	        t        j                  || |      j                         t        j                  || |      j                                y Nr^   r   )rF   rG   rH   r   r   r   r   r   rh   r   r   seedrO   r   Xcsrs          r9   test_kneighbors_graph_sparser    sp     ))


%C		"bAD""1k=EEG""44@HHJr;   c                  .   t        j                  ddgddgddgg      } t        j                  | ddd	      }t	        |j                         g d
g dg dg       t        j                  | dd      }t        |j                         g dg dg dg       y )Nr   r.   rP  rV   r/   r?   r  Tr  r  )rV   rV   rV   r  r\   r   r  r  r  )rF   r  r   r   r   r   r   r   s     r9   test_radius_neighbors_graphr	    s    
1a&4+1v./A((CnSWXAqyy{_o$WX((CjAA			&(?AWXr;   c                    t         j                  j                  |      }|j                  dd      } ||      }t	        t        j                  || |      j                         t        j                  || |      j                                y r  )rF   rG   rH   r   r   r   r   r   r  s          r9   "test_radius_neighbors_graph_sparser    sp     ))


%C		"bAD((KdCKKM(({FNNPr;   	Estimatorc                     t         j                  d      } ||      }t         j                  d      }t        j                  d      } | dd      }d}t	        j
                  t        |      5  |j                  |       d	d	d	       d
}t	        j
                  t        |      5  t        |j                  ||             d	d	d	        | dd      }|j                  ||       d}t	        j
                  t        |      5  |j                  |       d	d	d	        |        }t        j                  d      }t	        j
                  t        |      5  |j                  t        j                  d      t        j                  d             d	d	d	       d}t	        j
                  t        |      5  |j                  |d	d	d	d	d	f   |       d	d	d	       |j                  ||       t        j                  d      }t	        j
                  t        |      5  |j                  g g       d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   <xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y	xY w)z`Additional parameter validation for *Neighbors* estimators not covered by common
    validation.r^   r/   r   r^   r*   	haversiner   zinstance is not fitted yetr   Nz.Metric 'haversine' not valid for sparse input.r+   r3   ri   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))rO   r   rF   r  ru   r   r   r   r   rx   r  r  )r  r   r   XsparseX3r   r   r  s           r9   "test_neighbors_validate_parametersr    s    	'"AAG			7	#B
A{;?D
&C	z	- Q
:C	z	- .!,-. K7;DHHRO
9C	z	- R ;D
))2
3C	z	- ."''!*-. #C	z	- #1a:"#HHQN
))3
4C	z	- bT / . . 
. .# #
 sH   /H5&II9I2I(I45H?III%(I14I=r]   r-   r+   c                    t         j                  d|f      }t        j                  d      } | d|      }d}t	        j
                  t        |      5  |j                  ||       ddd       |j                  dk(  sJ y# 1 sw Y   xY w)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".
    r^   rO  )r@   ri   zwMind that for 0 < p < 1, Minkowski metrics are not distance metrics. Continuing the execution with `algorithm='brute'`.r   Nr+   )	rO   r   rF   r  ru   r  rn  rx   _fit_methodr  r<   ri   r   r   r  r  s          r9   -test_neighbors_minkowski_semimetric_algo_warnr     s    " 	2z*+A
Ay1E	G  
k	- 		!Q ''' s   BB
r,   r*   c                     t         j                  d      }t        j                  d      } | |d      }d| d}t	        j
                  t        |      5  |j                  ||       ddd       y# 1 sw Y   yxY w)	zECheck that we raise a proper error if `algorithm!='brute'` and `p<1`.r  r^   rO  )ri   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)rO   r   rF   r  ru   r   r   rx   r  s          r9   .test_neighbors_minkowski_semimetric_algo_errorr  ?  su     	'"A
A	S1E
i[ !+ 	+ 
 
z	- 		!Q  s   A22A;c                     t         j                  d      } t        j                         j	                  |       }d}t        j                  t        |      5  |j                  | d       ddd       t        j                  t        |      5  |j                  | d       ddd       y# 1 sw Y   AxY w# 1 sw Y   yxY w)z'Validate parameter of NearestNeighbors.r  zUUnsupported mode, must be one of "connectivity", or "distance" but got "blah" insteadr   blahr   N)
rO   r   r   rw   rx   ru   r   r   r   r   )r   r   r  s      r9   &test_nearest_neighbors_validate_paramsr  Z  s    '"A%%'++A.D	  
z	- .af-.	z	- 4##AF#34 4. .4 4s   B*B6*B36B?pyfuncc           	         t         j                  j                  |      }t        ||       }g d}|j	                  ||      j                  | d      }	|j	                  ||      j                  | d      }
t        ||      }|D ]  }t        |t              rdn |t        j                  d   vxs
 d|v xr d|v }i }|j                  dd      }|D ]  }t        |t              r,| t         j                  k(  rd	|v rt        j                  d
       t        j                  |||||      }|r9|dk(  r4t        j                   t"              5  |j%                  |	       d d d        |dk(  rDt'        d d      }t        j(                  |	d d |f         }	t        j(                  |
d d |f         }
|j%                  |	       |j+                  |
d      ||<    |d   \  }}|d   \  }}| t         j,                  k(  rdnd}t/        |||       t1        ||       |r|d   \  }}t/        |||       t1        ||       t/        |||       t1        ||        y # 1 sw Y   xY w)N)r+   r*   r,   Frc   r,   r>   rA   r@   r/   re   rf   rh   ri   r3   r@   metric_paramsr  Trj   r+   r*   gHz>g-C6?)rtol)rF   rG   rH   r:   rL   rq   rR   rs   r   r   VALID_METRICSpoprt   ru   rv   rw   r   r   rx   sliceascontiguousarrayry   r  r   r   )r|   global_random_seedr3   r}   r<   r~   rh   rO   
algorithmsr   r   metric_params_listr   exclude_kd_treer   r@   ri   r   
feature_sl	brute_dst	brute_idxball_tree_dstball_tree_idxr!  kd_tree_dstkd_tree_idxs                             r9   test_neighbors_metricsr1  i  st   & ))

 2
3C6<0F 3Jhhy*-44\4NGXXk:.55l5OF26:F+ 7; &.1 y66yAA @v%>#*>	 	 c1%# 	PI&.1lbjj6PY&KK$ ..'#+E 9	#9]]:. 'IIg&' $"4^
..wq*}/EF--fQ
].CDIIg!&!1!1&$!1!OGI7	P:  'w/	9'.{';$} $rzz1tt	=t<9m4'.y'9$KI{>y+6M;TB}k:o7;4' 's   II()categoryr   c                    t         j                  j                  |      }|j                  ||      j	                  |d      }|j                  ||      j	                  |d      }	| dk(  rDt        d d      }
t        j                  |d d |
f         }t        j                  |	d d |
f         }	| t        v r
|dkD  }|	dkD  }	t        | |      }|D ]  }|j                  dd      }t        j                  |d| ||      }|j                  |       t        d	      5  |j                  |	d
      \  }}d d d        t        d
	      5  |j                  |	d
      \  }}d d d        t                y # 1 sw Y   ExY w# 1 sw Y   &xY w)NFrc   r  r/   r3  r@   r+   r  enable_cython_pairwise_distTrj   )rF   rG   rH   rL   rq   r$  r%  r   rR   r#  r   rw   rx   r   ry   r   )r3   r|   r&  r}   r<   r~   rh   rO   r   r   r*  r(  r   r@   r   legacy_brute_dstlegacy_brute_idxpdr_brute_dstpdr_brute_idxs                      r9   test_kneighbors_brute_backendr:    s    ))

 2
3Chhy*-44\4NGXXk:.55l5OF 4^
&&wq*}'=>%%fQ
]&;<++C-#26:F+ 
c1%**#'
 			'> 	161A1A 2B 2..	
 = 	+0+;+; ,< ,(M=	 	*m-=}	
1
	 	
	 	s   E6F6E?	F	c                  t   d } t         j                  j                  d      j                  dd      }t	        j
                  dd|       }t	        j
                  dd|       }|j                  |       |j                  |       |j                  |      \  }}|j                  |      \  }}t        ||       y )	Nc                 d    t        j                  t        j                  | dz  |dz  z               S )Nr/   )rF   r  r6  )x1x2s     r9   custom_metricz+test_callable_metric.<locals>.custom_metric   s&    wwrvvb!eb!em,--r;   r   r  r/   r0   r-   rg   r+   )	rF   rG   rH   rL   r   rw   rx   ry   r   )r?  r   nbrs1nbrs2r   r   r   r   s           r9   test_callable_metricrB    s    . 			b!&&r1-A&&E &&E 
IIaL	IIaL""1%KE4""1%KE4E5!r;   c                 (   t        ||       }t        j                  ||      j                  | d      } ||      }t	        ||      }|dk(  rt        j                  d      }t        j                  d      }	t        j                  |d      }
t        j                  |	|d      }t        j                  dd	      }|j                  |
       |j                  |       y |D ]  }t        j                  dd
||      }|dk(  r(t        d d      }t        j                  |d d |f         }|j                  |       |j                  |       |t        d   v swt        j                  dd
|      j                  |      }|j                  |        y )NFrc   r   r   r   r   r   r0   r  r-   rh   ri   r3   r   r  r/   r+   rg   )r:   rO   rL   rq   rR   r   r   r   r   rw   rx   ry   r$  rF   r%  r   )r|   r3   r   r}   r<   r   r  r(  X_precomputedY_precomputedr   r   nb_pr   r   r*  s                   r9   *test_valid_brute_metric_for_auto_algorithmrH    st    6<0FJ'..|%.HAD26:F))'2))&1(({K((=
 ))aN 0 	$M++ +	B $"4^
((1j=)9:FF1IMM!-g66// !VF#d)  d#'	$r;   c                     t         j                  dd      } t         j                  ddd      }t        j                  ddi      }t        j                  t              5  |j                  | |       d d d        y # 1 sw Y   y xY w)Nr`   r   r/   r@   r0   )r   )	rO   rL   r   r   r   ru   r  SyntaxWarningrx   )r   r   r   s      r9   test_metric_params_interfacerK  D  se    AAAq!A

(
(Qx
@C	m	$ 1  s   A;;Bc                    t         j                  j                  d      }|j                  dd      }|j	                  ddd      }t        j                  dd      }t        j                  dd      }||fD ]M  }|j                  ||       t        j                  t              5  |j                   | |             d d d        O y # 1 sw Y   ZxY w)Nr   r`   r/   r.   r,   r  r*   )rF   rG   rH   rL   r   r   r   r   rx   ru   r   r   r   )r   rO   r   r   r@  rA  r  s          r9    test_predict_sparse_ball_kd_treerM  L  s    
))


"CAAAq!A**1	BE))!{CE ,		!Q]]:& 	,MM-*+	, 	,,	, 	,s   %CC	c                  |   t         j                  j                  d      } | j                  dd      }t	        |      j                         }t        j                  |       |d   }dD ]y  }t        j                  |d|dd      j                         }t        j                  d|	      j                  |      }t        ||j                  |      j                                { dD ]y  }t        j                  |||dd      j                         }t        j                  ||
      j                  |      }t        ||j                  |      j                                { t        j                  dd	      }|j                  |       t        j                  t               5  t        j                  |dd       d d d        t        j                  |d      }|j                  |       t        j                  t               5  t        j                  ||d       d d d        y # 1 sw Y   lxY w# 1 sw Y   y xY w)Nr   r`   rh  )	manhattan	chebyshevr0   r  T)r3   r   r  r  )r3   r   rO  r   r   )r   r3   )rF   rG   rH   rL   r   flattenr  r   r   r   rw   rx   r   r   ru   r   r   )rO   r   
dist_arrayr   r3   
nbrs_graphr@  X_nbrss           r9   test_non_euclidean_kneighborsrU  Y  s   
))


"CAA $A&..0JGGJ^F - L//qn4

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

') 	 **&HLLQO:u'C'CA'F'N'N'PQR ''AkJF
JJqM	z	" B""61[AB''vkJF
JJqM	z	" M((LM M	B BM Ms   "H&H2&H/2H;c                 H    t        |       D ]  \  }}t        |||           y r   )	enumerater   )nparray
list_checkr*  eles       r9   check_object_arraysr[  }  s(    g& 1S3
301r;   c            	         t         D ]U  } t        j                  d|       }dgdgg}|j                  |       dgdgg}|j	                  |      \  }}t        |dgdgg       t        |dgdgg       |j                  dgdggd      \  }}t        |dgddgg       t        |dgddgg       t        |j                  |      j                         ddgddgg       t        |j                  dgdggd	
      j                         t        j                  ddgddgg             |j                  dgdggd      }t        |j                         ddgddgg       X y )Nr.   r  r   r/   r?   r   r  rV   r\   r   )rr   r   rw   rx   ry   r   r#  r[  r   r   rF   r  r   )ri   r   r   	test_datarX   r*  rO   s          r9   .test_k_and_radius_neighbors_train_is_not_queryr^    s~      <	''AKS1#J
q	S1#J	 MM),	c41#s,3!qc
+''!qc
3'?	cDA3A-0C1#1v/ 		*224SzC:6N	
 	!qc
<DDFHHsCj3*-.	
 ''!qc
3'?3;;=Aq6Aq6*:;1<r;   c           	         t        j                  d|       }dgdgg}|j                  |       |j                         \  }}t	        |dgdgg       t	        |dgdgg       |j                  d d      \  }}t        |dgdgg       t        |dgdgg       |j                  d d      }|j                  d       }||fD ]R  }t	        |j                         ddgddgg       t	        |j                  ddg       t	        |j                  ddg       T ddgddgddgg}t        j                  d|       }|j                  |       t	        |j                         j                         t        j                  g dg dg d	g             y )
Nr.   r  r   r?   r   r/   r  )rV   r  rV   )rV   rV   r   )r   rw   rx   ry   r   r#  r[  r   r   r   r   r   rF   r  )ri   r   r   rX   r*  rO   kngr  s           r9   "test_k_and_radius_neighbors_X_Nonera    s    
	#	#Y	GB
qc
AFF1IID#tqcA3Z(saS1#J'##D#5ID#sQCj)qcA3Z( 
#
#D
#
5C


d
#Cs 25==?aVaV,<=5::1v.5==1a&12
 Q!Q!Q A		#	#Y	GBFF1I
%%'
/?MBCr;   c           	         t        j                  d|       }dgdgdgg}|j                  |       |j                  |d      }t	        |j                         t        j                  g dg dg dg             t	        |j                  g d       t	        |j                  g d       |j                  dgdggd	
      \  }}t        |ddgddgg       t        |ddgddgg       |j                  |d	
      }t	        |j                         t        j                  g dg dg dg             |j                  dgdggd	d      }|j                          t	        |j                         g dg dg       t	        |j                  g d       t	        |j                  g d       t        j                  d      }t        j                  dd      }|j                  |       |j                         \  }}t	        |t        j                   d             t	        |dgdgdgg       |j                  d      }t	        |j                         t        j                   d             t	        |j                  t        j                   d             t	        |j                  g d       t	        |j                         j                         t        j                  g dg dg dg             y )Nr.   r  r   r0   r\   r   r  r   r?   r   r  )r  r  rV   r  rC  )r.   r   r   )r   r.   r   r.   )r   r.   r.   r   )r0   r.   r+   r   )r.   r   r.   )r  rV   r  )rV   r  r  )r   rw   rx   r   r   r   rF   r  r   r   r#  r[  r   sort_indicesr  ry   zeros)ri   r   
duplicatesr`  rX   r*  rO   r   s           r9   &test_k_and_radius_neighbors_duplicatesrf    sV    
	#	#Y	GB#sQCJFF: 

jz

:Crxx/? ST CHHo.CKK+##aS1#Js#;ID#1v1v./q!fq!f-.

#
#Js
#
;Crxx/? ST 
#
#aS1#Js
#
LCCKKMIy#9:CKK.CHHl+ 	A		#	#W	EBFF1IID#D"((6*+C1#sQC) 

:

.CCKKM288F#34CHHbhhqk*CKK+
%%'
/?ODEr;   c                     ddgddgg} t        j                  | dd      j                         }t        j                  | dd      j                         }t        |d	d
gd
d	gg       t        |d
d	gd	d
gg       t        j                  | dd      j                         }t        j                  | dd      j                         }t        |d	d	gd	d	gg       t        |d
d	gd	d
gg       y )Nr/   r0   r1   r`   r.   T)r  FrV   r  r  )r   r   r   r   r   )r   r`  kng_not_selfrO   rng_not_selfs        r9   !test_include_self_neighbors_graphrj    s    
Q!QA

$
$Q
=
E
E
GC--aGOOQLsc3Z#s45|sCj3*%=>

*
*1c
E
M
M
OC33	3Ugi  sc3Z#s45|sCj3*%=>r;   c                 p   t        j                  dddd      \  }}t        ||      \  }}}}t        j                  d|       }|j                  ||       |j                  |      }|j                  |      \  }}	|j                  |d      j                         }
|j                  d	       |j                  ||       |j                  |      }|j                  |      \  }}|j                  |d      j                         }t        ||       t        ||       t        |	|       t        |
|       y )
Nr  r`   r   r}   r<   n_redundantr(  r0   r  r\   r   n_jobs)r   make_classificationr   r   r   rx   r   ry   r   r   r  r   r   )ri   r   r   r   r   r  r  rW  rX   r*  r  
y_paralleldist_parallelind_parallelgraph_parallels                  r9   test_same_knn_parallelru    s   ''DAq (81'=$GVWf

(
(Q)
LCGGGWFAv&ID#  j 9AACENN!NGGGWV$J"%.."8M<))&z)BJJLNq*%D-(sL)E>*r;   c                    t        j                  dddd      \  }}t        ||      \  }}}}t        j                  d|       }|j                  ||       |j                  |      }|j                  |      \  }}	|j                  |d      j                         }
|j                  d	
       |j                  ||       |j                  |      }|j                  |      \  }}|j                  |d      j                         }t        ||       t        t        |            D ]&  }t        ||   ||          t        |	|   ||          ( t        |
|       y )Nr  r`   r   rl  r^   r  r\   r   r0   rn  )r   rp  r   r   r   rx   r   r#  r   r   r  r   rz   r{   r   )ri   r   r   r   r   r  r  rW  rX   r*  r  rq  rr  rs  rt  r   s                   r9   #test_same_radius_neighbors_parallelrw    sF   ''DAq (81'=$GVWf

-
-R9
MCGGGWFA$$V,ID#&&vJ&?GGIENN!NGGGWV$J"%"6"6v">M<//Z/HPPRNq*%3t9 4Qq!123q6<?34 E>*r;   backend	threadinglokyc                 p   t        j                  |       5  t        j                  dddd      \  }}t	        ||      \  }}}}t        j                  d|d      }|j                  ||       |j                  |       |j                  |       |j                  |d	       d d d        y # 1 sw Y   y xY w)
Nr  r`   r   rl  r0   r/   )rh   ri   ro  r\   r   )joblibparallel_backendr   rp  r   r   r   rx   r   ry   r   )	rx  ri   r   r   r   r   r  r  rW  s	            r9   test_knn_forcing_backendr~  5  s    
 
	 	 	) 6++QAA
1 ,<Aq+A(&,,Yq
 	!FvV*56 6 6s   BB,,B5c                      t        j                  d      } d}t        j                  |      }dd | D cg c]  }| }}| j	                  ||      j                  |      }t        ||       y c c}w )Nr.   r   rh  ABCDEFGHIJKLMNOPQRSTU)r   r   rF   rN   rx   r   r   )
classifierCLASSESr   chr   results         r9   test_dtype_convertr  I  sh    //A>JG
wA-hw788A8^^Aq!))!,Fvq! 	9s   	A.c                 
   d } | g dg dg dg      } | g dg dg      }t        j                  dd|	      j                  |      }|j                  |d
      }t	        j
                  ddgddgg      }t        ||       y )Nc                     t        |       rt        |      sJ | j                  |j                        j                         j	                         S r   )r   dotrM   r   item)xr   s     r9   sparse_metricz2test_sparse_metric_callable.<locals>.sparse_metricU  s9    {x{**uuQSSz!!#((**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/   )ri   rh   r3   Frj   r.   )r   rw   rx   ry   rF   r  r   )r   r  r   r   r   Ngold_standard_nns          r9   test_sparse_metric_callabler  S  s    + 		/?;	A 	89A		#	#q
	c!f  	a/A xx!Q!Q 01q*+r;   z0ignore::sklearn.exceptions.DataConversionWarningc                  J   t         j                  j                  d      } | j                  d      }t        j
                  } |dd      j                  |      } |dd      j                  |      }t        |j                  |      d   |j                  |      d          y )Nr   )rZ  r`   r   jaccardr+   r  r*   )	rF   rG   rH   r[   r   rw   rx   r   ry   )rO   r   NNnn1nn2s        r9   test_pairwise_boolean_distancer  k  s    
 ))


"C A		#	#B
I
1
5
5a
8C
I
5
9
9!
<Cs~~a(+S^^A->q-ABr;   c            	         t        d      D ]  } t        j                  ddddd|       \  }}t        ||d      \  }}}}t	        d| z
        }t        j                  d|      }|j                  ||       |j                  |      }	|j                  |      }
|
j                  d	
      }t        j                  |
j                  d	
      dk(  ||      }t        |	|        y )Nr`   r   r0   r   )r}   r<   n_informativerm  	n_classesr(  r  r/   r_  r.   r1  )rz   r   rp  r   r7  r   r   rx   r   rD  argmaxrF   wherer6  r   )r  r   r   X_trX_tey_try_terL  rW  rs  rr  proba_labels               r9   #test_radius_neighbors_predict_probar  y  s    a .++
1 "2!QQ!GdD$AH11-Xd{{4 !!$'lll*hhuyyay0A5}kR4-#.r;   c                  X   t         j                  j                  d      } d| j                  dd      z  dz
  }d| j                  dd      z  dz
  }| j                  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        |      }|j                  d       t        t        |      |      }|j                  ||      j                  |      }|j                  ||      j                  |      }t        ||        y )Nr   r/   r  r`   r.      r?   r\   )rh   r   r  r   r   r   r   )rF   rG   rH   rL   r   KNeighborsTransformerr7  RadiusNeighborsTransformerr   r   r	   r  r   rx   r   r   )rO   r   r  r   rh   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                        r9   0test_pipeline_with_nearest_neighbors_transformerr    s   
))


"C	CHHROaA	
SXXb!_	q	 BQAKF F--+JWG44f,-JN 22&zRG996F?#*N ))kBE..f=E 
%		%		I   
6
sCjCjm4!%,<	 }}Q*2226$A.66r:n5
6r;   z'X, metric, metric_params, expected_algor   r   r\  rB   rC   correlationc                 z    t        j                  dd||      }|j                  |        |j                  |k(  sJ y )Nr1   r-   rD  )r   rw   rx   r  )r   r3   r   expected_algor  s        r9   test_auto_algorithmr    s>     &&mE 
IIaL---r;   c           	         t         j                  j                  |      }|j                  ||      j	                  |d      }|j                  ||      j	                  |d      }	| dk(  rDt        d d      }
t        j                  |d d |
f         }t        j                  |	d d |
f         }	t        | |      }|D ]  }|j                  dd      }t        j                  |d| ||      }|j                  |       t        d      5  |j                  |	d	
      \  }}d d d        t        d	      5  |j                  |	d	
      \  }}d d d        t        |d        y # 1 sw Y   HxY w# 1 sw Y   )xY w)NFrc   r  r/   r@   r+   )r   ri   r3   r@   r   r4  Trj   )r   check_sorted)rF   rG   rH   rL   rq   r$  r%  rR   r#  r   rw   rx   r   r#  r   )r3   r&  r|   r}   r<   r~   r   rO   r   r   r*  r(  r   r@   r   r6  r7  r8  r9  s                      r9   #test_radius_neighbors_brute_backendr    s    ))

 2
3C hhy*-44\4NGXXk:.55l5OF 4^
&&wq*}'=>%%fQ
]&;<26:F+ 
c1%**'
 			'> 	161G1G 2H 2..	
 = 	+0+A+A ,B ,(M=	 	)	
1
	 	
	 	s   	E'4E3'E0	3E<	c                      t         j                  j                         D ]$  } t        |       t        t	        |             k(  r$J  y r   )r   r"  valuesr{   set)vals    r9   #test_valid_metrics_has_no_duplicater  	  s:    &&--/ )3x3s3x=((()r;   c                      ddgddgddgddgg} g d}d }t        dd|	      }|j                  | |       t        |j                  dd
gg      dg       y)ztEnsures that `predict` works for array-likes when `weights` is a callable.

    Non-regression test for #22687.
    r`   r.   r0   r1   r   )r/   r0   r`   rZ  c                 ,    t        j                  |       S r   )rF   	ones_likerX   s    r9   _weightsz6test_regressor_predict_on_arraylikes.<locals>._weights	  s    ||D!!r;   r+   )rh   ri   r/  rz  rZ  N)r   rx   r   r   )r   r   r  r   s       r9   $test_regressor_predict_on_arraylikesr  	  sd    
 Q!Q!Q!Q(AA" !w
QCGGAqMCKK!S
+aS1r;   zEstimator, paramsr   r?   c                    ddgdt         j                  gddgddgg}g d}|j                  ddi         |        j                  di |j	                  ||      }d	D ]  }t        ||      s t        ||      |      }t        |d
      r0t        j                  |j                        j                         s\J t        j                  |      j                         sJ  y)zyCheck that the different neighbor estimators are lenient towards `nan`
    values if using `metric="nan_euclidean"`.
    r   r.   r/   r0   r`   r   r   r.   r.   r3   nan_euclidean)ry   r   	transformfit_predictr   N )
rF   nanupdater  rx   hasattrr   r  r   any)r  paramsr   r   	estimatorresponse_methodoutputs          r9   test_nan_euclidean_supportr  $	  s    " Q!RVVq!fq!f-AA
MM8_-.&	&&0044Q:IP 29o.8WY8;Fvy)88FKK04466688F+//1112r;   c            	      2   t        j                  d      } | j                  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      j                  ||      }|j                  |       y)z[Check that KNN predict works with dataframes

    non-regression test for issue #26768
    pandasr.   r/   r0   r1   r`   rZ  r[  r\  re  b)columns)r.   r/   r0   r1   r   N)	ru   importorskip	DataFramerF   r  r   r   rx   r   )pdr   r   r;  s       r9   test_predict_dataframer  D	  s    
 
		X	&B
RXX1v1v1v1v>?#sTA
A

(
(Q
7
;
;Aq
ACKKNr;   c                  t   t        j                  ddgddgddgg      } t        j                  ddddi      }|j	                  |        |j                  | d   j                  d	d
      dd      }t        |d   g d       |j                  | d   j                  d	d
      d      }t        |d   g d       y)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
    rV   r  r0   r+   r@   r3  )rh   ri   r   r   r.   rM  r1   F)r   rk   r   rj   N)	rF   r  r   rw   rx   r#  r   r   ry   )r   r   r   s      r9   0test_nearest_neighbours_works_with_p_less_than_1r  R	  s     	3*sCj3*56A&&c
E 
IIaLqt||Ar21eTAAaD)$1a,eDAAaD)$r;   c                     ddgddgddgddgg} g d}d }t        j                  d|      }|j                  | |       d	}t        j                  t
        |
      5  |j                  ddgg       ddd       t        j                  t
        |
      5  |j                  ddgg       ddd       y# 1 sw Y   BxY w# 1 sw Y   yxY w)zrCheck that `predict` and `predict_proba` raises on sample of all zeros weights.

    Related to Issue #25854.
    r   r.   r/   r0   r1   r  c                 :     t        j                  d       |       S )Nc                     | dkD  rdS dS )Nr3  r   r.   r  )r  s    r9   <lambda>zWtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weights.<locals>.<lambda>n	  s    1s7a  r;   )rF   	vectorizer  s    r9   r  zEtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weightsm	  s    :r||9:4@@r;   )rh   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   r|  N)r   r   rx   ru   r   r   r   rD  )r   r   r  r   r  s        r9   3test_KNeighborsClassifier_raise_on_all_zero_weightsr  e	  s    
 Q!Q!Q!Q(AAA 
(
(Q
ICGGAqM	)  
z	- "c3ZL!" 
z	- (C:,'( (" "( (s   B2B>2B;>Cnn_modelr   c                 z   t        j                  dddd      \  }}t        |       j                  |      } d| j	                         v rGt        |      j                         }||dkD     }| j                  t        j                  |d      	       t        | ||t               
      }| j                  ||       t        || j                  d      |k(         t        j                  |      t        j                   | j#                  d|            k(  sJ | j#                  d|      | j#                  ||      k  sJ y)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.
    rh  r`   r/   r   )r}   centersr<   r(  r  r   P   r   cvN)r   
make_blobsr	   r  
get_paramsr   ravelrF   
percentiler   r   rx   r   r   r  ru   approxr  r  ri   r   r   distsloocvs         r9   test_neighbor_classifiers_loocvr  	  s   " Q1STUDAqX))I)>H
 8&&(("1%++-eai 2==#;<Ha{}=ELLAE8++D1Q67775>V]]8>>$+BCCCC
 >>$"X^^Aq%9999r;   c                    t        j                  ddd      \  }}t        |       j                  |      } d| j	                         v rGt        |      j                         }||dkD     }| j                  t        j                  |d             t        | ||t               	      }| j                  ||       t        || j                  d
             y
)z@Check that `predict` and related functions work fine with X=Nonerh  r/   r   )r}   r<   r(  r  r   r  r   r  N)r   make_regressionr	   r  r  r   r  rF   r  r   r   rx   r   r   r  s         r9   test_neighbor_regressors_loocvr  	  s     ##bQQODAq X))I)>H
 8&&(("1%++-eai 2==#;<h1?ELLAE8++D12r;   r   )r  r`   r/   r3  r   )r  r`   r^   r`   r   )r  r`   r^   r3  r   )r  r`   r^   r0   r   )r  r0   r^   r3  r   )r  r`   r^   r   )$   )r  r0   r/   r`   )  r  r`   r`   )r  r  )r  r  r`   rV   )r  r  	itertoolsr   r|  numpyrF   ru   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&   r'   r(   sklearn.utils.validationr)   rG   rH   rO   	load_irisr  permutationr   r   permr   load_digitsr  tupler  r  r  rr   sortedr  intersectionmapr"  r  COMMON_VALID_METRICSrJ   r"  r   r   DISTANCE_METRIC_OBJSr8  r:   r7  rR   rZ   WEIGHTSmarkparametrizer   r   r   r   r   rw   r   r   filterwarningsr   r   r   r   r   r   r  r  r  r  r   r.  r>  rA  rH  rK  rX  rt  rx  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  r1  DeprecationWarningr:  rB  rH  rK  rM  rU  r[  r^  ra  rf  rj  ru  rw  r~  r  r  r  r  r  r   r   r  r  r  r  r  r  LocalOutlierFactorr  r  r  r  r  r  r  r;   r9   <module>r     s   	      !   @ T @   + 

 
 
 8iiAx
t{{''(IIdO	kk$ 
			
v}}))*kk$d#  	
  "**.6
Cc#y66==?@A  1a -Y-G-GH	 #293S3S#T	   '' # c s :	 j,
/ 5 )E4=9#7:N#NOJ
 P :J
Z ( #7:N#NO.0RS&&%%++**	@
 T P$@
F &&%%""''*- 674( 84(n3  /3 03" /3 03" .9! :!0 67&>@R%ST.9" : U 8"" 67.98 : 886 .9K :K& 7.H 67.92 : 8208$ WX'T j1G,
 3 - 23> /( 'F j1G,
 3 - 238 j1G,-8 9 - 2< j1G,z - 2zzE09B/$ .90 :0, &GH- I- (-0/0	
 	 	"%"%J#1N LM7()3Z LM80,4 LM74 IJ$&N,8 =>7. 67KLL 8L>M&&*D@ 	2.*!=>.9
 : ? 3

 	2.*!=>.9
 : ? 3
 &&++%%**	 .9" :"J &&++%%**	 3x0vw&78( 9 1(( &&++%%**	 3x0y+&>? @ 1 4 
I##K01>>##G,	
 x','
(	) 	 K;	K;b ,-fS009:S-=QQR 4
 .4
n"* i%%g.1EE .9BD)$ :)$X .9	, :	,!MH1
<< j1 2> j1. 2.b?  j1+ 2+0 j1+ 2+2 [&$9:j16 2 ;6$" .9, :,. NO
C P
C.*+6\ -			2H		-}dGL	R	 +tW=	A	T7;	Q	dI>	Q	aS1W~{K	Q	g>
.
. ,-fS009:S-=QQR 6
 .6
r)
2  		'	'-);<		&	&(:;		+	+R0		,	,b1		(	(=!*<=		-	-#?		%	%q'9:22(%&(6 &	&&26+	++- j1: 2:B %	%%"5*	**, j13 23r;   