
    rhR                    |   d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: ejv                  jy                  d       Z= ej|                         Z?e=j                  e?j                  j                        ZCe?j                  eC   e?_D        e?j                  eC   e?_A         ej                         ZFe=j                  eFj                  j                        ZCeFj                  eC   eF_D        eFj                  eC   eF_A         eGe2e3z   e4z   e5z   e7z   e8z         ZHeHej                  fz   ZJdZK eL eMj                   eOeMej                  j                                      ZRddddej                  fZT e0ej                        e_U         e0ej                        e_V        dgZWddeXfdZYdeXdeZf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eReWz         d%                      Z`ej                  j                  d&d'd(g      ej                  j                  deReWz         ej                  j                  d)g d*      ej                  j                  d+ej                  ejJ                  ej                  ej                  g      d,                             Zdej                  j                  d-ej                  ejJ                  ej                  g      d.        Zfd/ Zgej                  j                  d0      d1        Zid2 Zjej                  j                  d3d4d5g      d6        Zkej                  j                  d3d4d5g      d7        Zlej                  j                  d8e5      d9        Zmej                  j                  d0      ej                  j                  d:e*e(g      ej                  j                  d8e5      d;                      Znej                  j                  d0      ej                  j                  d8e5      d<               Zoej                  j                  d8e5      d=        Zpej                  j                  d>e7e2z   e6z         d?        Zqej                  j                  d0      ej                  j                  d8e5      d@               ZrdA Zs	 ddDZtej                  j                  dEeK      ej                  j                  dFe]      	 	 	 	 	 ddH              Zu	 	 	 	 	 ddIZvdJ Zwej                  j                  dEeK      ej                  j                  dFe]      	 	 	 	 	 ddK              Zxej                  j                  dEeK      ej                  j                  dFe]      ej                  j                  dLg dM      dN                      Zyej                  j                  dEeK      ej                  j                  dFe]      dO               ZzdP Z{dQ Z|dR Z}ej                  j                  d8e5      dS        Z~ej                  j                  dEg dT      dU        Zej                  j                  dEdg e edVdWgeW            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 eL eMej                  dv         j                  ej                  ds          eMdyge      z
        eWz         	 	 	 	 ddz       Z e0e{      ej                  j                  d eL eMej                  ds          eMd|g      z
              	 	 	 	 dd}              Zd~ Zej                  j                  dej                  ds   eWz         ej                  j                  d8e5      	 dd              Zd Zej                  j                  d8e5      d        Zd Zd Zd Zej                  j                  dEeK      d        Zej                  j                  dEeK      d        Zd Zej                  j                  dEeK      d        Zej                  j                  dEeK      d        Zej                  j                  dddg      ej                  j                  dEeK      d               Zd Zej                  j                  d8e5      d        Zej                  j                  d      d        Zd Zd Zej                  j                  dejv                  jW                  dGd      d|ddsfejv                  jY                  dGdB      dWddsfejv                  jY                  ddC      dWddsfejv                  jY                  dGdC      dWddufejv                  jY                  dGdC      dddgdCz  idvfejv                  jY                  dGdC      dddsfg      d        Z e0e{      ej                  j                  d eL eMej                  ds          eMd|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jb                  dhdifejd                  ddifejf                  dhdifg      d        Zd Zd Zd Zej                  j                  d ej                  dG       ej                         g      ej                  j                  dEeK      d               Zej                  j                  d ejJ                  dG       ej                         g      ej                  j                  dEeK      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)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.

    Nr.   DM_dtype)r   
get_metric)r1   r5   s     y/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/sklearn/neighbors/tests/test_neighbors.py_parse_metricr8   c   s0     bqzU((5AAM    
n_featuresc           
         t         j                  j                  d      }| dk(  rWt        d      t        d      t        d      t        t         j                        t        d|j                  |            g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-   r.   )r>   w
seuclidean)Vmahalanobis)VI)nprandomRandomStatedictinfrandTeye)r1   r:   rngArC   s        r7   _generate_test_params_forrN   r   s     ))


"C3K1I1I266N1,-
 	
 sxx
+,--HHZ,Wq266*---} 4Kr9   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-   )rD   errstate)distretvals     r7   _weight_funcrV      s=     
H	% t1919s   *7uniformdistancez/n_samples, n_features, n_query_pts, n_neighbors)d   rY   
   rY   )     rY   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	algorithmr1   return_distanceTr,   The 'zE' algorithm returns differentindices depending on 'return_distances'.err_msg' and 'z&' algorithms return different indices.z(' algorithms return different distances.gư>)rj   atol)r8   rD   rE   rF   rI   astype
ALGORITHMS
isinstancer   float32pytestskipr   NearestNeighborsfitappend
kneighborsrangelenr   r   )global_dtype	n_samplesr:   n_query_ptsrd   r]   r1   	local_rngXqueryresults_nodistresultsre   neighinext_algorithmindices_no_dist	distancesnext_distancesindicesnext_indicess                        r7   test_unsupervised_kneighborsr      s   , 6<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 	
/
r9   z"n_samples, n_features, n_query_pts)rY   rY   rZ   )r[   r\   rY   zn_neighbors, radius))r,   rY   )2   i  )rY   r[   NeighborsMixinSubclassc           
         t        ||       }t        |t              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   Fr_   r.   sizera   rb   re   r1   r,   rh   rk   z*' algorithms return different predictions.ri   )r8   ro   r   __name__rq   rr   rD   rE   rF   rI   rm   randint
issubclassr   rn   rp   rt   ru   predictrw   rx   r   )ry   rz   r:   r{   r1   rd   radiusr   r|   r}   yr~   predict_results	parameterre   r   r   r   predictionsnext_predictionss                       r7   ,test_neigh_predictions_algorithm_agnosticityr      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 :; ;		

r9   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rZ   r.   Fr_   r.   rZ   r   r,   rd   )rL   random_samplerm   r   r   rs   rt   rv   BallTreeKDTreer   r   )ry   r   r}   r   nbrs_fiddist1ind1nbrsdatadist2ind2s              r7   test_unsupervised_inputsr   I  s     	'")),U)CAABA))a8HLLO%%a(KE4"q1D9--a0)2B2B12EF 'qooa(tu%4&'r9   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   rs   rq   raisesr   kneighbors_graphradius_neighbors_graph)r}   
neighbors_s     r7   !test_not_fitted_error_gets_raisedr   f  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.*   rZ   r/   r.   r/   )rv   r.   r   r)   precomputedrc   r+   Nr   	euclideanr1   r,   )rD   rE   rF   r   r   rs   rt   getattrr   r   rq   r   
ValueErrorarangeshaper   rd   r   r1   )make_train_test
estimatorsrL   r}   YDXXDYXmethodnbrs_Xdist_Xind_Xnbrs_Ddist_Dind_DtargetEstestpred_Xpred_Ds                      r7   check_precomputedr   o  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     r7   r   z/test_precomputed_dense.<locals>.make_train_test  s*    &&w/&&vw7
 	
r9   )r   KNeighborsClassifierr   RadiusNeighborsClassifierRadiusNeighborsRegressorr   )r   r   s     r7   test_precomputed_denser     s@    
 	&&%%++**	J oz2r9   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 )Nr/   r   rX   mode)r   rs   rt   r   asformatr   r   nnr   s      r7   r   z4test_precomputed_sparse_knn.<locals>.make_train_test  sd    ''E:>>wGj9BB3GZ8AA#F
 	
r9   )r   r   r   r   r   r   r   s   `  r7   test_precomputed_sparse_knnr     s/    
 	&&%%J oz2r9   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   rX   r   )r   rs   rt   r   r   r   s      r7   r   z7test_precomputed_sparse_radius.<locals>.make_train_test  sd    ''q155g>%%gJ%?HHM%%f:%>GGL
 	
r9   )r   r   r   r   r   s   `  r7   test_precomputed_sparse_radiusr     s/    
 	++**J oz2r9   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 )NrZ   r,   r\   r   r-   r   r,   r-   )r.   r   r   )r.   r/   r   r,   r   r-   )r   r/   r-   r-   )r   r,   r,   r,   )r   r-   r-   r/   r.   r.   )r   )rD   r   reshaper   )r   r}   r   r   indptrs        r7   test_is_sorted_by_datar     s     	biim++Ar23Aa   AdG!!$$$ 	y)Y	BCAa    ),6'DtWf-V<Aa   r9   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   rZ   r-   rZ   rZ   r   r   r,   )rD   absrE   rF   randnr   r   toarray)r   r   r}   Xtmasks        r7   test_sort_graph_by_row_valuesr     s    
 	bffRYY2226<<RDEFA!!$$$	!Bb!!! 99  $,,QX,>D			AAdaiLaA!!$$$	!Bb!!!r9   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   rZ   Fr_   Tz%Use copy=True to allow the conversionmatch)rD   r   rE   rF   r   r   r`   r   r   r   tocscrq   r   r   )r   X_r}   s      r7   "test_sort_graph_by_row_values_copyr     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   rZ   zwas not sorted by row valuesr   Tr_   )r`   warn_when_not_sortederrorF)rD   r   rE   rF   r   r   rq   warnsr
   r   r   warningscatch_warningssimplefilter)r   r}   s     r7   %test_sort_graph_by_row_values_warningr  %  s    	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   rZ   zformat is not supportedr   )
rD   r   rE   rF   r   rq   r   	TypeErrorr   r   )r	  r}   s     r7   /test_sort_graph_by_row_values_bad_sparse_formatr  9  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)               @rR   )r  r        @)rR   r  r  r,   r   rd   r1   r   r  r  r  r-   )r  r  r  )r  r  r  zB2 neighbors per samples are required, but some samples have only 1r   )      @r  rR   )g       r  r  z>Negative values in data passed to precomputed distance matrix.)	rD   arrayr   rs   rt   rv   rq   r   r   )r   rT   dist_csrr   msgs        r7   test_precomputed_sparse_invalidr  E  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   r.   r   r   )rD   rE   rF   rI   r   r   r   r   r   r   r   r   r   )rL   r}   Dr   r   metric_scoreprecomp_scores          r7   !test_precomputed_cross_validationr  _  s    
))


"CQA1[1AABA&&++%%**	 8 'sua3'=(A1aH<78r9   r  r\   c                 T   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                      t        t        j                  t!        |
|   d               t        j                  t!        |
|dz      d                        y )NFr_   )r   re   r>   rf   Tr,   r   )rD   rE   rF   rI   rm   Prn   r   rs   rt   radius_neighborszipargsortru   r   concatenatelistrw   rx   )ry   rz   r:   r{   r   random_staterL   r}   testr>   r   re   r   r   rT   inddr   i1js                       r7   "test_unsupervised_radius_neighborsr+  p  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	+r9   re   weightsrZ   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-   Fr_   r,   axis      ?rd   r,  re   h㈵>)rD   rE   rF   rI   rm   sumintstrr   r   rt   r   r   )ry   re   r,  rz   r:   
n_test_ptsrd   r%  rL   r}   r   y_strknnepsilony_preds                  r7   test_kneighbors_classifierr;    s    ))


-C	CHHY
+22<e2L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2r9   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-   Fr_   r,   r.  r0  r   r2  )rD   rE   rF   rI   rm   r3  r4  r   r   rt   floatr   r   )ry   rz   r:   r6  rd   r%  rL   r}   r   r8  r9  r:  s               r7   'test_kneighbors_classifier_float_labelsr>    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*~.r9   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,   Fr_   )r/   r/   r\   r\   r,   r,   r.   r,   )rd   r>   )r,   r-   r   r   r   )r-   r,   r   r  r-   rX   )rd   r>   r,  )r-   r-   r-   r   r,   r   )r   g?g333333?)
rD   r  rm   r   r   rt   predict_probar   r5  r   )ry   r}   r   clsy_prob	real_probs         r7   (test_kneighbors_classifier_predict_probarE    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&r9   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-   Fr_   r,   r.  r   r,  re   r2  )rD   rE   rF   rI   rm   r3  r4  r5  r   r   rt   r   r   )ry   re   r,  rz   r:   r6  r   r%  rL   r}   r   r7  r   r9  r:  s                  r7    test_radius_neighbors_classifierrH    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2r9   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)NrR   r  r4   r,   r-   皙?)\(?Gz @ffffff?r   r,  re   rI  )
rD   r  r   r   rt   r   r   rq   r   r   )ry   re   r,  rI  r}   r   r   z1z2rncclfs              r7   2test_radius_neighbors_classifier_when_no_neighborsrU    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)%NrR   r  gGz?g\(\?rN  r4   )r,   r-   r,   r,   r-   rL  rM  rO  r,   r-   )rJ  r,   r-   r   rJ  rP  z+Outlier label -1 is not in training classesr   r.   r/   r\            	   )
r   r-   r-   r,   r,   r,   r.   r.   r.   r.   c                  B     ddgg      } | j                         y )Nr,   r\   r   rI  rt   rT  RNCr}   r   s    r7   check_array_exceptionzPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_array_exceptionV  s     A3%01r9   c                  >     dd      } | j                         y )Nr,   ar\  r]  r^  s    r7   check_dtype_exceptionzPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_dtype_exception^  s    #.1r9   most_frequentr\     )r   r   r   r,   )r   r,   r   r   c                  h     dd      } | j                         | j                  dgdgg       y )Nr,   r/   r\  re  )rt   rA  r^  s    r7   check_warningzHtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_warningt  s2    !,1A3+&r9   )r,   r   r   r   c                  B     dg d      } | j                         y )Nr,   r   r\  r]  )rT  r_  r}   y_multis    r7   check_exceptionzJtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_exception  s    )47r9   )rD   r  r   r   rt   r   r   rq   r  UserWarningr   rA  r   r  r   )ry   re   r,  r   rQ  rR  correct_labels1correct_labels2outlier_probarT  r`  rc  probapredrg  rj  r_  r}   r   ri  s                   @@@@r7   1test_radius_neighbors_classifier_outlier_labelingrq  /  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)NrR   r  r,   r-   rL  rM  rW   rX   rG  rP   )invalid)
rD   r  rV   rn   r   r   rt   rS   r   r   )	r}   r   r   rQ  rl  weight_funcre   r,  rT  s	            r7   .test_radius_neighbors_classifier_zero_distanceru    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 )NrR   r        @)rR   r=   r  r  皙?皙?g      ?rW   rX   rG  rW   rX   r-   r1  )
rD   r  rn   r   r   rt   r   r   r!  r   )r}   r   r   zrnn_correct_labelsknn_correct_unifknn_correct_distre   r,  rnncorr_labelsr8  s               r7   '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9r9   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   re   r  Frf   )r,   r   r,   N)rD   r  rn   r   rs   rt   r   r   r5   objectr   )r}   r   re   r   r   s        r7   'test_radius_neighbors_boundary_handlingr    s     	3%#'(AF /	))9MQQRST''#'G}}$$$}}&&&71:1v./r9   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)r/   r/   )r   r   r   r   r0  r+      r   )r   re   	leaf_sizer1   Trf   r   r4   r,   r-   r.   )rD   onessetdiagr   rs   rt   r   emptyr   r  r  r   )r   r}   r   
neigh_dist	neigh_indexpected_distexpected_inds          r7   .test_radius_neighbors_returns_array_of_objectsr    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,/r9   )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,   rJ  r-   re   F)rd   rg   )rD   r  r   rs   rt   sortrv   r   )re   query_pointequidistant_pointskknn_indicesr   r   s          r7   test_query_equidistant_kth_nnr    s     ((QF8$KAq6Aq6B7QG"DE 	
A((QF8$K		#	#i	8	<	<=O	PBggbmmKQPUmVWGw,r9   )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   rZ   r   r/   r   rX   r   r   r   T)r}   r   sort_resultszreturn_distance must be Truer   F)r}   r   r  rg   )r}   r   r   r  )r8   rD   float64ro   r   rq   rr   rE   rF   r   r   r   rH   rs   rt   r   rw   r   r  r   r   r   )
re   r1   rz   rL   r}   modelr   r   iigraphs
             r7   "test_radius_neighbors_sort_resultsr    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-   (   r.   r%  rW   rX   r,  re   )r'   rI   r   r   rV   r   rn   rw   r   r   rt   ru   r   rD   vstackrJ   r   r   )rL   r:   rz   n_outputr}   r   r   r   y_trainy_testr,  re   	y_pred_soor  rnn_mo	y_pred_mos                    r7   *test_RadiusNeighborsClassifier_multioutputr  Q  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+1r9   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,   rx  r.  r0  r+   rd   re   r2  )rD   rE   rF   rI   r3  rm   r4  SPARSE_TYPESr   r   rt   asarrayr   r   )rz   r:   r6  rd   r%  rL   r}   r   	sparsematr8  r9  sparsevX_epsr:  s                 r7   !test_kneighbors_classifier_sparser  w  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	7r9   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   r.   r  rW   rX   r  )r'   rI   r   r   rV   r   rn   rw   r   r   rt   ru   r   rA  rD   r  rJ   r   rx   r   r!  )rL   r:   rz   r  r}   r   r   r   r  r  r,  re   r  y_pred_proba_sor  r8  knn_mor  y_pred_proba_moproba_moproba_sos                        r7   %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3r9   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,   rW   rX   r1  r2  333333?)rD   rE   rF   rI   sqrtr3  maxrV   rn   r   r   rt   r   allr   )rz   r:   r6  rd   r%  rL   r}   r   y_targetrt  re   r,  r8  r9  r:  s                  r7   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8r9   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  r/   r  rW   r  Frf   r.  )r'   rI   r   r   rn   r   r   rt   rv   rD   r  meanr   r   r   )rL   r:   rz   r  r}   r   r   r   r  r  re   r,  r8  	neigh_idxidx
y_pred_idxr:  s                    r7   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  )rD   rE   rF   rI   r  r3  r  r  rJ   rV   r   rn   r   r   rt   r   r   r  r   )rz   r:   r6  rd   r%  rL   r}   r   r  r,  re   r8  r9  r:  s                 r7   %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	7r9   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,   rW   rX   rG  r2  rz  r+   g      zNOne or more samples have no neighbors within specified radius; predicting NaN.r   )rD   rE   rF   rI   r  r3  r  rV   rn   r   r   rt   r   r  r   fullrq   r  rk  reescapeisnan)rz   r:   r6  r   r%  rL   r}   r   r  rt  re   r,  r   r9  r:  
X_test_nanempty_warning_msgrp  s                     r7   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'   rI   r   r   rn   r   r   rt   r   rD   r  r  r   r   r   )rL   r:   rz   r  r}   r   r   r   r  r  re   r,  r  r  r  r  r:  s                    r7   =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,   rW   rX   r  r2  r  )rD   rE   rF   rI   r  r3  r  r  rJ   rV   r   rn   r   r   rt   r   r   r  r   )rz   r:   r6  r%  rL   r}   r   r  r,  re   r  r9  r:  s                r7   )test_RadiusNeighborsRegressor_multioutputr  C  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7r9   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,   r.  g      ?r+   r  r   r  r   r   ffffff?z3not supported due to its handling of explicit zerosr   )rD   rE   rF   rI   r3  rm   r4  r  r   r   rt   r   SPARSE_OR_DENSEr  r   roundr%   r    rq   r   r  )rz   r:   r6  rd   r%  rL   r}   r   r  r8  knn_prer  X2X2_prer  s                  r7    test_kneighbors_regressor_sparser  Z  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  rZ  r  r\   )rn   r   r   rt   irisr   r   r   r   
set_paramsrD   r  r   r  )re   rT  rgss      r7   test_neighbors_irisr  z  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r9   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  Fr_   )digitsr   rm   r   r   r4  rD   r   r   r   rt   scorer=  )r}   r   rz   r:   train_test_boundarytrainr&  r   Y_trainr   Y_testrT  score_uint8score_floats                 r7   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 +%%%r9   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,   rM  rR   r-   connectivityTr   include_selfrX   r   r  rM  r  )rM  r  r  r  z?r  rR   rR   r  r  rR   rR   )r  rM  w@rM  r  r  )r  r  r  r.   )r,   r,   r,   )	rD   r  r   r   r   r   rK   r   r   r}   rM   s     r7   test_kneighbors_graphr    s   
1a&4+1v./A 	""1an4PAqyy{BFF1771:$67""1aj9A			')9;RS
 	""1an4PAqyy{_o$WX""1aj9A			##)	
 	""1an4PAAIIK)Y	!BCr9   rd   )r,   r-   r.   r   r  c                    t         j                  j                  |      }|j                  dd      } ||      }t	        t        j                  || |      j                         t        j                  || |      j                                y NrZ   r   )rD   rE   rF   r   r   r   r   r   rd   r   r   seedrL   r}   Xcsrs          r7   test_kneighbors_graph_sparser    sp     ))


%C		"bAD""1k=EEG""44@HHJr9   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,   rM  rR   r-   r=   r  Tr  r  )rR   rR   rR   r  rX   r   r  r  r  )rD   r  r   r   r   r   r   r  s     r7   test_radius_neighbors_graphr    s    
1a&4+1v./A((CnSWXAqyy{_o$WX((CjAA			&(?AWXr9   c                    t         j                  j                  |      }|j                  dd      } ||      }t	        t        j                  || |      j                         t        j                  || |      j                                y r   )rD   rE   rF   r   r   r   r   r   r  s          r7   "test_radius_neighbors_graph_sparser    sp     ))


%C		"bAD((KdCKKM(({FNNPr9   	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.rZ   r-   r   rZ   r(   	haversiner   zinstance is not fitted yetr   Nz.Metric 'haversine' not valid for sparse input.r)   r1   re   z-Haversine distance only valid in 2 dimensionszFound array with 0 sample(s)r   r   zFound array with dim 3zFound array with 0 feature(s))rL   r   rD   r  rq   r   r   r   r   rt   r  r  )r	  r   r}   XsparseX3r   r   r  s           r7   "test_neighbors_validate_parametersr    s    	'"A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=rY   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".
    rZ   rL  )r>   re   zwMind that for 0 < p < 1, Minkowski metrics are not distance metrics. Continuing the execution with `algorithm='brute'`.r   Nr)   )	rL   r   rD   r  rq   r  rk  rt   _fit_methodr	  r:   re   r}   r   r  r  s          r7   -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  rZ   rL  )re   r>   zalgorithm="zv" does not support 0 < p < 1 for the Minkowski metric. To resolve this problem either set p >= 1 or algorithm="brute".r   N)rL   r   rD   r  rq   r   r   rt   r  s          r7   .test_neighbors_minkowski_semimetric_algo_errorr  =  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)
rL   r   r   rs   rt   rq   r   r   r   r   )r}   r   r  s      r7   &test_nearest_neighbors_validate_paramsr  X  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*   Fr_   r*   r<   r?   r>   r-   ra   rb   rd   re   r1   r>   metric_paramsr  Trf   r)   r(   gHz>g-C6?)rtol)rD   rE   rF   r8   rI   rm   rN   ro   r   r   VALID_METRICSpoprp   rq   rr   rs   r   r   rt   sliceascontiguousarrayrv   r  r   r   )ry   global_random_seedr1   rz   r:   r{   rd   rL   
algorithmsr   r   metric_params_listr  exclude_kd_treer   r>   re   r   
feature_sl	brute_dst	brute_idxball_tree_dstball_tree_idxr  kd_tree_dstkd_tree_idxs                             r7   test_neighbors_metricsr.  g  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)NFr_   r  r-   r0  r>   r)   r  enable_cython_pairwise_distTrf   )rD   rE   rF   rI   rm   r!  r"  r   rN   r   r   rs   rt   r   rv   r   )r1   ry   r#  rz   r:   r{   rd   rL   r   r   r'  r%  r  r>   r   legacy_brute_dstlegacy_brute_idxpdr_brute_dstpdr_brute_idxs                      r7   test_kneighbors_brute_backendr7    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-   )rD   r  r3  )x1x2s     r7   custom_metricz+test_callable_metric.<locals>.custom_metric  s&    wwrvvb!eb!em,--r9   r   r  r-   r.   r+   rc   r)   )	rD   rE   rF   rI   r   rs   rt   rv   r   )r<  r}   nbrs1nbrs2r   r   r   r   s           r7   test_callable_metricr?    s    . 			b!&&r1-A&&E &&E 
IIaL	IIaL""1%KE4""1%KE4E5!r9   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 )NFr_   r   r   r   r   r   r.   r  r+   rd   re   r1   r  r  r-   r)   rc   )r8   rL   rI   rm   rN   r   r   r   r   rs   rt   rv   r!  rD   r"  r   )ry   r1   r   rz   r:   r}   r  r%  X_precomputedY_precomputedr   r   nb_pr  r   r'  s                   r7   *test_valid_brute_metric_for_auto_algorithmrE    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#'	$r9   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>   r.   )r  )	rL   rI   r   r   r   rq   r  SyntaxWarningrt   )r}   r   r   s      r7   test_metric_params_interfacerH  B  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(   )rD   rE   rF   rI   r   r   r   r   rt   rq   r   r   r   )r   rL   r}   r   r=  r>  r  s          r7    test_predict_sparse_ball_kd_treerJ  J  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\   re  )	manhattan	chebyshevr.   r  T)r1   r   r  r  )r1   r   rL  r   r   )r   r1   )rD   rE   rF   rI   r   flattenr  r   r   r   rs   rt   r   r   rq   r   r   )rL   r}   
dist_arrayr   r1   
nbrs_graphr=  X_nbrss           r7   test_non_euclidean_kneighborsrR  W  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       r7   check_object_arraysrX  {  s(    g& 1S3
301r9   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  rR   rX   r   )rn   r   rs   rt   rv   r   r   rX  r   r   rD   r  r   )re   r   r}   	test_datarT   r'  rL   s          r7   .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<r9   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  )rR   r  rR   )rR   rR   r   )r   rs   rt   rv   r   r   rX  r   r   r   r   r   rD   r  )re   r   r}   rT   r'  rL   kngr  s           r7   "test_k_and_radius_neighbors_X_Noner^    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r9   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   r.   rX   r   r  r   r=   r   r  )r  r  rR   r  r@  )r,   r   r   )r   r,   r   r,   )r   r,   r,   r   )r.   r,   r)   r   )r,   r   r,   )r  rR   r  )rR   r  r  )r   rs   rt   r   r   r   rD   r  r   r   r   rX  r   sort_indicesr  rv   zeros)re   r   
duplicatesr]  rT   r'  rL   r}   s           r7   &test_k_and_radius_neighbors_duplicatesrc    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r9   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-   r.   r/   r\   r,   T)r  FrR   r  r  )r   r   r   r   r   )r}   r]  kng_not_selfrL   rng_not_selfs        r7   !test_include_self_neighbors_graphrg    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*%=>r9   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   rz   r:   n_redundantr%  r.   r  rX   r   n_jobs)r   make_classificationr   r   r   rt   r   rv   r   r   r  r   r   )re   r}   r   r   r   r  r  rT  rT   r'  r  
y_paralleldist_parallelind_parallelgraph_parallels                  r7   test_same_knn_parallelrr     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>*r9   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   ri  rZ   r  rX   r   r.   rk  )r   rm  r   r   r   rt   r   r   r   r   r  r   rw   rx   r   )re   r}   r   r   r   r  r  rT  rT   r'  r  rn  ro  rp  rq  r   s                   r7   #test_same_radius_neighbors_parallelrt    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>*r9   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   ri  r.   r-   )rd   re   rl  rX   r   )joblibparallel_backendr   rm  r   r   r   rt   r   rv   r   )	ru  re   r}   r   r   r   r  r  rT  s	            r7   test_knn_forcing_backendr{  3  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   re  ABCDEFGHIJKLMNOPQRSTU)r   r   rD   rK   rt   r   r   )
classifierCLASSESr}   chr   results         r7   test_dtype_convertr  G  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   dotrJ   r   item)xr   s     r7   sparse_metricz2test_sparse_metric_callable.<locals>.sparse_metricS  s9    {x{**uuQSSz!!#((**r9   )r,   r,   r,   r,   r,   )r,   r   r,   r   r,   )r   r   r,   r   r   )r,   r,   r   r,   r,   )r,   r   r   r,   r,   r)   r-   )re   rd   r1   Frf   r,   )r   rs   rt   rv   rD   r  r   )r   r  r}   r   r   Ngold_standard_nns          r7   test_sparse_metric_callabler  Q  s    + 		/?;	A 	89A		#	#q
	c!f  	a/A xx!Q!Q 01q*+r9   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   )rW  r\   r   jaccardr)   r  r(   )	rD   rE   rF   rW   r   rs   rt   r   rv   )rL   r}   NNnn1nn2s        r7   test_pairwise_boolean_distancer  i  s    
 ))


"C A		#	#B
I
1
5
5a
8C
I
5
9
9!
<Cs~~a(+S^^A->q-ABr9   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   r.   r   )rz   r:   n_informativerj  	n_classesr%  r  r-   r\  r,   r.  )rw   r   rm  r   r4  r   r   rt   r   rA  argmaxrD   wherer3  r   )r  r}   r   X_trX_tey_try_terI  rT  rp  ro  proba_labels               r7   #test_radius_neighbors_predict_probar  w  s    a .++
1 "2!QQ!GdD$AH11-Xd{{4 !!$'lll*hhuyyay0A5}kR4-#.r9   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=   rX   )rd   r   r  r   r   r   r   )rD   rE   rF   rI   r   KNeighborsTransformerr4  RadiusNeighborsTransformerr   r   r	   r  r   rt   r   r   )rL   r}   r  r   rd   r   factork_transk_trans_factorr_transr_trans_factork_regr_reg	test_listtransregreg_compactreg_precomp	reg_chainy_pred_chainy_pred_compacts                        r7   0test_pipeline_with_nearest_neighbors_transformerr    s   
))


"C	CHHR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
6r9   z'X, metric, metric_params, expected_algor   r   rY  r@   rA   correlationc                 z    t        j                  dd||      }|j                  |        |j                  |k(  sJ y )Nr/   r+   rA  )r   rs   rt   r  )r}   r1   r  expected_algor  s        r7   test_auto_algorithmr    s>     &&mE 
IIaL---r9   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)NFr_   r  r-   r>   r)   )r   re   r1   r>   r  r1  Trf   )r   check_sorted)rD   rE   rF   rI   rm   r!  r"  rN   r   r   rs   rt   r   r   r   )r1   r#  ry   rz   r:   r{   r   rL   r   r   r'  r%  r  r>   r   r3  r4  r5  r6  s                      r7   #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  valuesrx   set)vals    r7   #test_valid_metrics_has_no_duplicater  	  s:    &&--/ )3x3s3x=((()r9   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,   r.   r/   r   )r-   r.   r\   rW  c                 ,    t        j                  |       S r   )rD   	ones_likerT   s    r7   _weightsz6test_regressor_predict_on_arraylikes.<locals>._weights	  s    ||D!!r9   r)   )rd   re   r,  rw  rW  N)r   rt   r   r   )r}   r   r  r   s       r7   $test_regressor_predict_on_arraylikesr  	  sd    
 Q!Q!Q!Q(AA" !w
QCGGAqMCKK!S
+aS1r9   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-   r.   r\   r   r   r,   r,   r1   nan_euclidean)rv   r   	transformfit_predictr   N )
rD   nanupdater  rt   hasattrr   r  r   any)r	  paramsr}   r   	estimatorresponse_methodoutputs          r7   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2r9   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-   r.   r/   r\   rW  rX  rY  rb  b)columns)r,   r-   r.   r/   r   N)	rq   importorskip	DataFramerD   r  r   r   rt   r   )pdr}   r   r8  s       r7   test_predict_dataframer  B	  s    
 
		X	&B
RXX1v1v1v1v>?#sTA
A

(
(Q
7
;
;Aq
ACKKNr9   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
    rR   r  r.   r)   r>   r0  )rd   re   r  r   r,   rJ  r/   F)r   rg   r   rf   N)	rD   r  r   rs   rt   r   r   r   rv   )r}   r   r   s      r7   0test_nearest_neighbours_works_with_p_less_than_1r  P	  s     	3*sCj3*56A&&c
E 
IIaLqt||Ar21eTAAaD)$1a,eDAAaD)$r9   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-   r.   r/   r  c                 :     t        j                  d       |       S )Nc                     | dkD  rdS dS )Nr0  r   r,   r  )r  s    r7   <lambda>zWtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weights.<locals>.<lambda>l	  s    1s7a  r9   )rD   	vectorizer  s    r7   r  zEtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weightsk	  s    :r||9:4@@r9   )rd   r,  zAll neighbors of some sample is getting zero weights. Please modify 'weights' to avoid this case if you are using a user-defined function.r   ry  N)r   r   rt   rq   r   r   r   rA  )r}   r   r  r   r  s        r7   3test_KNeighborsClassifier_raise_on_all_zero_weightsr  c	  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.
    re  r\   r-   r   )rz   centersr:   r%  r  r   P   r   cvN)r   
make_blobsr	   r  
get_paramsr   ravelrD   
percentiler   r   rt   r   r   r  rq   approxr  r  re   r}   r   distsloocvs         r7   test_neighbor_classifiers_loocvr  ~	  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9r9   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=Nonere  r-   r   )rz   r:   r%  r  r   r  r   r  N)r   make_regressionr	   r  r  r   r  rD   r  r   r   rt   r   r   r  s         r7   test_neighbor_regressors_loocvr  	  s     ##bQQODAq X))I)>H
 8&&(("1%++-eai 2==#;<h1?ELLAE8++D12r9   r   )r  r\   r-   r0  r   )r  r\   rZ   r\   r   )r  r\   rZ   r0  r   )r  r\   rZ   r.   r   )r  r.   rZ   r0  r   )r  r\   rZ   r   )$   )r  r.   r-   r\   )  r  r\   r\   )r  r  )r  r  r\   rR   )r  r  	itertoolsr   ry  numpyrD   rq   scipy.sparser   sklearnr   r   r   r   sklearn.baser	   sklearn.exceptionsr
   r   sklearn.metrics._dist_metricsr   sklearn.metrics.pairwiser   r   'sklearn.metrics.tests.test_dist_metricsr   7sklearn.metrics.tests.test_pairwise_distances_reductionr   r   sklearn.model_selectionr   r   r   r   sklearn.neighborsr   r   sklearn.neighbors._baser   r   r   r   sklearn.pipeliner   sklearn.utils._testingr   r   r   sklearn.utils.fixesr    r!   r"   r#   r$   r%   r&   sklearn.utils.validationr'   rE   rF   rL   	load_irisr  permutationr   r   permr   load_digitsr  tupler  r  r  rn   sortedr  intersectionmapr  r  COMMON_VALID_METRICSrH   r  r   r   DISTANCE_METRIC_OBJSr5  r8   r4  rN   rV   WEIGHTSmarkparametrizer   r   r   r   r   rs   r   r   filterwarningsr   r   r   r   r   r   r   r  r  r  r  r+  r;  r>  rE  rH  rU  rq  ru  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.  DeprecationWarningr7  r?  rE  rH  rJ  rR  rX  r[  r^  rc  rg  rr  rt  r{  r  r  r  r  r  r   r   r  r  r  r  r  r  LocalOutlierFactorr  r  r  r  r  r  r  r9   r7   <module>r     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3r9   