U
    }h+                    @   s  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	m
Z
mZmZmZmZ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mZ d dlmZ d dlmZ d d	l m!Z! d d
l"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 ej89d Z:e; Z<e:=e<j>j?Z@e<jAe@ e<_Ae<j>e@ e<_>eB ZCe:=eCj>j?Z@eCjAe@ eC_AeCj>e@ eC_>e	e
eeeefZDeDejEf ZFdZGeHeIjJeKeIejLM  ZNddddejOfZPe2ejQe_Qe2ejRe_ReSeTdddZUdd ZVddeVgZWejXYdddgejXYd d!d"gejXYd#eNd$d% ZZejXYd&d'd(gejXYd#eNejXYd)d*d+d,gejXYd-ej[ej'ej\ej]gd.d/ Z^ejXYd0ej[ej'ej_gd1d2 Z`d3d4 ZaejXbd5d6d7 Zcd8d9 ZdejXYd:d;d<gd=d> ZeejXYd:d;d<gd?d@ ZfdAdB ZgejXbd5ejXYdCe,e*gdDdE ZhejXbd5dFdG ZidHdI ZjejXYdJee	egdKdL ZkejXbd5dMdN ZldOdP ZmddTdUZnejXYdVeGejXYdWeWddZd[Zodd\d]Zpd^d_ ZqejXYdVeGejXYdWeWdd`daZrejXYdVeGejXYdWeWejXYdbd dcdgddde ZsejXYdVeGejXYdWeWdfdg Ztdhdi Zudjdk Zvdldm Zwdndo ZxejXYdVdpdqdrgdsdt ZyejXYdVd#gdudvdwdxgdydz Zzd{d| Z{dd}d~Z|dd Z}dddZ~dd ZdddZdddZdd ZdddZejXbd5dddZdd Zdd Zdd ZejXYddddgejXYdddgdddZdd ZejXYddddgejXYdddgdddZejXYdej[ej\ej'ej]gdd ZejXYdej[ej\ej'ej]gejXYdddgejXYdVddrgdd ZejXYdej[ej\ej'ej]gejXYdddgejXYdVdqdpgdd Zdd ZejXYd#eHeIejLdp JejLdr eIde dddZejXYd#eHeIejLdr eIdg dddZdd ZejXYd#ejLdr d ddZdd Zdd Zdd Zdd Zdd ZejXYdVeGddÄ ZejXYdVeGddń ZddǄ ZejXYdVeGddɄ ZejXYdVeGdd˄ ZejXYdddgejXYdVeGddЄ Zdd҄ ZddԄ Ze2edՍddׄ Zddل Zddۄ ZejXYdej8jdYddލdddrfej8dYdQdddrfej8ddRdddrfej8dYdRdddqfej8dYdRdddgdR idpfej8dYdRdddrfgdd ZejXYd#eHeIejLdr eIdg dddZdd Zdd Zdd Zdd ZdS (      N)product)
bsr_matrix
coo_matrix
csc_matrix
csr_matrix
dia_matrix
dok_matrixissparse
lil_matrix)config_contextdatasetsmetrics	neighbors)clone)DataConversionWarningEfficiencyWarningNotFittedError)pairwise_distances)BOOL_METRICS)(assert_radius_neighbors_results_equality)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)parse_version
sp_version)check_random_state)	ball_treebrutekd_treeauto            )metric
n_featuresc                 C   s   t jd}| dkrbtddtddtddtt jdg}ttdkr^|td||d |S | d	kr|t||d
gS | dkr|||}||j	 dt 
|  }t|dgS i gS )z/Return list of DistanceMetric kwargs for tests.r)   	minkowski      ?)pr*   r+   z
1.8.0.dev0)r1   w
seuclidean)VZmahalanobis)VI)nprandomRandomStatedictinfr#   r"   appendrandTeye)r-   r.   rngZminkowski_kwargsAr5    rA   J/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/neighbors/tests/test_neighbors.py_generate_test_params_forO   s    &rC   c              	   C   s(   t jdd d|  }W 5 Q R X |d S )zWeight function to replace lambda d: d ** -2.
    The lambda function is not valid because:
    if d==0 then 0^-2 is not valid.ignore)divide      ?r*   )r6   errstate)distretvalrA   rA   rB   _weight_funcl   s    rJ   uniformdistancez/n_samples, n_features, n_query_pts, n_neighbors)d   rM   
   rM   )     rM   r)   query_is_trainFTr-   c              	   C   sV  t jd}|||j| dd}|r*|n|||j| dd}	g }
g }tD ]F}tj|||d}|| |
	|j
|	dd |	|j
|	dd qLtt|d D ]}t| }t|d  }|
| }|| d ||d  d  }}|| d ||d  d  }}t||d| d	d
 t||d| d| dd
 t||d| d| ddd qd S )Nr   Fcopyn_neighbors	algorithmr-   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ư>)r[   Zatol)r6   r7   r8   r<   astype
ALGORITHMSr   NearestNeighborsfitr;   
kneighborsrangelenr    r   )global_dtype	n_samplesr.   n_query_ptsrU   rQ   r-   	local_rngXqueryZresults_nodistresultsrV   neighinext_algorithmZindices_no_dist	distancesZnext_distancesindicesZnext_indicesrA   rA   rB   test_unsupervised_kneighbors{   sN      

rp   z"n_samples, n_features, n_query_pts)rM   rM   rN   )rO   rP   rM   zn_neighbors, radius)r)   rM   )2   i  )rM   rO   NeighborsMixinSubclassc              	   C   s   t jd}|||j| dd}	|jd|d}
|||j| dd}g }t|trX|n|}tD ].}||||d}|	|	|
 |
|| q`tt|d D ]J}t| }t|d  }|| ||d   }}t||d| d	| d
d qd S )Nr   FrR   r+   sizerV   r-   r)   rY   r\   z*' algorithms return different predictions.rZ   )r6   r7   r8   r<   r]   randint
issubclassr   r^   r`   r;   predictrb   rc   r   )rd   re   r.   rf   r-   rU   radiusrr   rg   rh   yri   Zpredict_resultsZ	parameterrV   rk   rl   rm   ZpredictionsZnext_predictionsrA   rA   rB   ,test_neigh_predictions_algorithm_agnosticity   s(     r{   KNeighborsMixinSubclassc                 C   s   t dj| dd}t jddd}tjdd}|| ||\}}|dd}|t|t	|fD ]2}||| ||\}	}
t
||	 t||
 qfd S )	NrN   r+   FrR   r+   rN   rs   r)   rU   )r?   random_sampler]   rv   r   r_   r`   ra   ZBallTreeZKDTreer   r    )rd   r|   rh   rz   Znbrs_fiddist1ind1nbrsdatadist2ind2rA   rA   rB   test_unsupervised_inputs  s    


r   c               	   C   sT   dgg} t  }tt ||  W 5 Q R X tt ||  W 5 Q R X d S )Nr)   )r   r_   pytestraisesr   kneighbors_graphradius_neighbors_graph)rh   Z
neighbors_rA   rA   rB   !test_not_fitted_error_gets_raised(  s    r   zignore:EfficiencyWarningc              
   C   s  t jd}|d}|d}| ||\}}dD ]}tjdd}|| t|||\}	}
tjdddd	}|| t|||\}}t|	| t	|
| tjdd
dd	}|| t|||\}}t|	| t	|
| t||d\}	}
t||d\}}t|	| t	|
| t
t t||| W 5 Q R X q2t |jd }|D ]P}|dd}d |_|_||||}d|_||||}t|| qRdS )z;Tests unsupervised NearestNeighbors with a distance matrix.*   rN   r,   r+   r,   )ra   r+   r~   r&   precomputedrT   r(   Nr   	euclideanr-   r)   )r6   r7   r8   r   r   r_   r`   getattrr   r    r   r   
ValueErrorarangeshapery   rU   rx   r-   )make_train_test
estimatorsr?   rh   YDXXDYXmethodZnbrs_XZdist_XZind_XZnbrs_DZdist_DZind_DtargetEstestZpred_XZpred_DrA   rA   rB   check_precomputed1  sP    



  


  





r   c                  C   s*   dd } t jt jt jt jg}t| | d S )Nc                 S   s   t | t || fS N)r   r   )X_trainX_testrA   rA   rB   r   j  s    
z/test_precomputed_dense.<locals>.make_train_test)r   KNeighborsClassifierr   RadiusNeighborsClassifierRadiusNeighborsRegressorr   )r   r   rA   rA   rB   test_precomputed_densei  s    r   fmtZcsrZlilc                    s&    fdd}t jt jg}t|| d S )Nc                    s:   t jdd| }|j| dd |j|dd fS )Nr,   r~   rL   mode)r   r_   r`   r   asformatr   r   nnr   rA   rB   r   {  s    z4test_precomputed_sparse_knn.<locals>.make_train_test)r   r   r   r   r   r   r   rA   r   rB   test_precomputed_sparse_knny  s
    
r   c                    s&    fdd}t jt jg}t|| d S )Nc                    s:   t jdd| }|j| dd |j|dd fS )Nr)   ry   rL   r   )r   r_   r`   r   r   r   r   rA   rB   r     s    z7test_precomputed_sparse_radius.<locals>.make_train_test)r   r   r   r   r   rA   r   rB   test_precomputed_sparse_radius  s
    
r   c                  C   s   t td} t| std| d< t| r.tt dddgdddgdddgdddgg} t| sbtddddgddddgddddg  }}}t |||fd	d
} t| std S )NrN   rP   r   r*   r   r)   r*   r+   r,   r+   r+   )r   )r   r6   r   r   AssertionError)rh   r   ro   ZindptrrA   rA   rB   test_is_sorted_by_data  s    ((r   functionc                 C   s   t ttjddd}t|r*t| |}t|s>ttjdjddd}|	 }d||dk< t |}t|r|t| |}t|std S )Nr   rN   r*   rN   rN   rs   r   r)   )
r   r6   absr7   r8   randnr   r   rv   toarray)r   rh   ZXtmaskrA   rA   rB   test_sort_graph_by_row_values  s    r   c               	   C   s   t ttjddd} t| r*t|  }t	|j
|j
ksFt|  }t	|ddj
|j
ksft|  }t	|ddj
|j
k	st|  }t|j
|j
k	stt	| dd tjtdd t	| dd W 5 Q R X d S )Nr   rN   FrR   Tz%Use copy=True to allow the conversionmatch)r   r6   r   r7   r8   r   r   r   rS   r   r   r   Ztocscr   r   r   )ZX_rh   rA   rA   rB   "test_sort_graph_by_row_values_copy  s    r   c               	   C   s   t ttjddd} t| r*ttj	t
dd t| dd W 5 Q R X tj	t
dd t| ddd W 5 Q R X tj	t
dd t|  W 5 Q R X t  td t| dd	d W 5 Q R X d S )
Nr   rN   zwas not sorted by row valuesr   TrR   )rS   Zwarn_when_not_sortederrorF)r   r6   r   r7   r8   r   r   r   r   warnsr   r   r   warningscatch_warningssimplefilter)rh   rA   rA   rB   %test_sort_graph_by_row_values_warning  s    

r   formatc              	   C   sf   | t t jddd}tjtdd t| W 5 Q R X tjtdd t	| W 5 Q R X d S )Nr   rN   zformat is not supportedr   )
r6   r   r7   r8   r   r   r   	TypeErrorr   r   )r   rh   rA   rA   rB   /test_sort_graph_by_row_values_bad_sparse_format  s
    r   c               	   C   s&  t dddgdddgdddgg} t| }tjddd}|| |jd dd |jt dddggd	d t dddgdddgdddgg} t| }|| d
}tjt	|d |jd dd W 5 Q R X t dddgdddgdddgg} t| }d}tjt	|d |j|dd W 5 Q R X d S )N               @rF         @r)   r   rU   r-   r~   r*   zB2 neighbors per samples are required, but some samples have only 1r         @g       z>Negative values in data passed to precomputed distance matrix.)
r6   arrayr   r   r_   r`   ra   r   r   r   )rH   Zdist_csrrk   msgrA   rA   rB   test_precomputed_sparse_invalid  s"    "
"
"r   c                  C   sz   t jd} | dd}t|dd}| jddd}tjtjtj	tj
fD ].}t| ||}t|dd||}t|| qFd S )	Nr      r*   r   r   r+   rs   r   )r6   r7   r8   r<   r   rv   r   r   r   r   r   r   r    )r?   rh   Drz   r   Zmetric_scoreZprecomp_scorerA   rA   rB   !test_precomputed_cross_validation  s    r   r   rP         ?c              
   C   s  t j|}|||j| dd}|||j| dd}tD ]F}	g }
tD ]}tj|||	d}|	| |j
|dd}|j
|dd\}}t|||D ]B\}}}| }|| |d d < || |d d < || |d d < q|
||f tt t|t t| qJtt|
d D ]l}tt t|
| d t t|
|d  d f tt t|
| d t t|
|d  d  qq<d S )NFrR   )ry   rV   r1   rW   Tr)   r   )r6   r7   r8   r<   r]   Pr^   r   r_   r`   radius_neighborszipZargsortr;   r   Zconcatenatelistrb   rc   )rd   re   r.   rf   ry   random_stater?   rh   testr1   rj   rV   rk   r   rH   inddrl   i1jrA   rA   rB   "test_unsupervised_radius_neighbors+  s4    

 r   rV   weights(   rN   c                 C   s   t j|}d|||j| dd d }	|	d jdddk t}
|
t}tj	|||d}|
|	|
 dd|d| d  }||	d | | }t||
d |  |
|	| ||	d | | }t||d |  d S )	Nr*   FrR   r)   Zaxisr   rU   r   rV   h㈵>)r6   r7   r8   r<   r]   sumintstrr   r   r`   rx   r    )rd   rV   r   re   r.   
n_test_ptsrU   r   r?   rh   rz   y_strknnepsilony_predrA   rA   rB   test_kneighbors_classifierU  s     
  r   c                 C   s   t j|}d|||j| dd d }|d jdddk t}tj|d}	|		||t
 dd|d| d  }
|	|d | |
 }t||d |  d S )	Nr*   FrR   r)   r   r   r~   r   )r6   r7   r8   r<   r]   r   r   r   r   r`   floatrx   r    )rd   re   r.   r   rU   r   r?   rh   rz   r   r   r   rA   rA   rB   'test_kneighbors_classifier_float_labelst  s    	r   c              
   C   sP  t dddgdddgdddgdddgdddgdddggj| dd}t ddddddg}tjddd	}||| ||}t dddgdddgdddgdddgdddgdddggd
 }t|| |||t ||}t|| tjdddd}||| |t dddgdddgg}t dddgdddgg}t	|| d S )Nr   r*   r)   FrR   r,   rP   r+   )rU   r1   r   rL   )rU   r1   r   g?g333333?)
r6   r   r]   r   r   r`   predict_probar    r   r   )rd   rh   rz   clsZy_probZ	real_probrA   rA   rB   (test_kneighbors_classifier_predict_proba  s>    2 




 r   c                 C   s   t j|}d|||j| dd d }	|	d jdd|k t}
|
t}tj	|||d}|
|	|
 dd|d| d  }||	d | | }t||
d |  |
|	| ||	d | | }t||d |  d S )Nr*   FrR   r)   r   ry   r   rV   r   )r6   r7   r8   r<   r]   r   r   r   r   r   r`   rx   r    )rd   rV   r   re   r.   r   ry   r   r?   rh   rz   r   rk   r   r   rA   rA   rB    test_radius_neighbors_classifier  s     
  r   outlier_labelc              	   C   s   t jddgddgg| d}t ddg}d}t jddgddgg| d}t jddgd	d	gg| d}tj}	|	||||d
}
|
|| tt ddg|
| |d krtt	 |
| W 5 Q R X d S )NrF   r   dtyper)   r*   皙?)\(?Gz @ffffff?ry   r   rV   r   )
r6   r   r   r   r`   r    rx   r   r   r   )rd   rV   r   r   rh   rz   ry   z1z2ZrncclfrA   rA   rB   2test_radius_neighbors_classifier_when_no_neighbors  s"    	r  c                    s  t jddgddgddgddgddgg| dt dddddgd	}t jd
d
gddgg| d}t jddgd
d
gddgg| d}t ddg}t dddg}t ddg}tj|||dd}	|	 t||	| tjt	dd t||	| W 5 Q R X tjt	dd t
||	|d  W 5 Q R X 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
| dt ddddddddddg
 fdd}
tt |
  W 5 Q R X  fdd}tt |  W 5 Q R X  ddd}	|	 |	dgdgg}t|dd d f ddddg  ddd}	|	 |	dgdgg}t|dd d f ddddg |	dgdgg}t|ddg  fdd }tt	 |  W 5 Q R X 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}	|	 |	dgdgg}t|d dd d f ddddg |	dgdgg}t|dd d f ddg ddgddgddgddgddgddgddgddgddgddgg
 dddgd}	|	 |	dgdgg}t|d dd d f ddddg t|d dd d f ddddg |	dgdgg}t|dd d f ddg  fd!d"}tt |  W 5 Q R X d S )#NrF   r   gGz?g\(\?r   r   r)   r*   r   r   r   r   r   r   z+Outlier label -1 is not in training classesr   r+   r,   rP            	   c                     s     ddggd} |   d S )Nr)   rP   ry   r   r`   r   RNCrh   rz   rA   rB   check_array_exception  s    zPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_array_exceptionc                     s    ddd} |   d S )Nr)   ar  r  r  r	  rA   rB   check_dtype_exception  s    zPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_dtype_exceptionZmost_frequentr     c                     s.    ddd} |   | dgdgg d S )Nr)   r,   r  r  )r`   r   r  r	  rA   rB   check_warning/  s    zHtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_warningc                     s"    ddddgd} |   d S )Nr)   r   r*   r  r  r  )r
  rh   y_multirA   rB   check_exceptiona  s    zJtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_exception)r6   r   r   r   r`   r    rx   r   r   UserWarningr   r   r   r   r   )rd   rV   r   ry   r   r   correct_labels1Zcorrect_labels2Zoutlier_probar   r  r  probapredr  r  rA   )r
  rh   rz   r  rB   1test_radius_neighbors_classifier_outlier_labeling  s         6"""r  c            	      C   s   t ddgddgg} t ddg}d}t ddgddgg}t ddg}t}tD ]X}dd|fD ]H}tj|||d	}|| | t jd
d t||	| W 5 Q R X qbqTd S )NrF   r   r)   r*   r   r   rK   rL   r   rD   )invalid)
r6   r   rJ   r^   r   r   r`   rG   r    rx   )	rh   rz   ry   r   r  weight_funcrV   r   r   rA   rA   rB   .test_radius_neighbors_classifier_zero_distancei  s       r  c                  C   s  t ddgddgddgddgg} t ddddg}d}t ddgddgg}t ddg}t ddg}t ddg}tD ]}d	D ]0}tj|||d
}	|	| | t||	| qtddg||gD ]4\}}
tj	d||d}|| | t|
|| qq|d S )NrF   r         @r0   r   皙?g?g      ?rK   rL   r   rK   rL   r*   r   )
r6   r   r^   r   r   r`   r   rx   r   r   )rh   rz   ry   zZrnn_correct_labelsZknn_correct_unifZknn_correct_distrV   r   rnnZcorr_labelsr   rA   rA   rB   'test_neighbors_regressors_zero_distance  s6    "     r  c                  C   s|   t dgdgdgg} d}tD ]X}tj||d| }|jdggdd}|jdksVt|j	t
ksdtt|d	 d	d
g qdS )zTest whether points lying on boundary are handled consistently

    Also ensures that even with only one query point, an object array
    is returned rather than a 2d array.
    r0   r   gGz@ry   rV   r   FrW   )r)   r   r)   N)r6   r   r^   r   r_   r`   r   r   r   r   objectr    )rh   ry   rV   r   rj   rA   rA   rB   'test_radius_neighbors_boundary_handling  s    r"  c                  C   s   t td} | ddddg tjddddd| }|j| dd	\}}tj| j	d t
d
}tdgtdgtdgtdgg|d d < tj| j	d t
d
}tdgtdgtdgtdgg|d d < t|| t|| d S )N)r,   r,   r   r   r(      r   )ry   rV   Z	leaf_sizer-   TrW   r   r)   r*   r+   )r   r6   onesZsetdiagr   r_   r`   r   emptyr   r!  r   r    )rh   r   Z
neigh_distZ	neigh_indZexpected_distZexpected_indrA   rA   rB   .test_radius_neighbors_returns_array_of_objects  s"       44
r&  r%   r'   r&   c                 C   s|   t ddgg}t ddgddgddgddgg}d}t ddgg}tj| d|}t |j||dd}t|| d S )Nr   r)   r   r*   rV   F)rU   rX   )r6   r   r   r_   r`   sortra   r    )rV   Zquery_pointZequidistant_pointskZknn_indicesr   ro   rA   rA   rB   test_query_equidistant_kth_nn  s    "r*  )r%   r   )r'   r   )r&   r   )r&   r   c           
   	   C   s   d}t jd}||df}|dkr8tj|t jdd}tj| |d}|| |j	|t jdd	\}}t
|D ]}t|| t ||  qn|dkrtjtd
d |j	|t jddd W 5 Q R X |j|t jddd}	t|	std S )NrN   r   r,   r   rL   ry   r   ru   T)rh   ry   sort_resultszreturn_distance must be Truer   F)rh   ry   r,  rX   )rh   ry   r   r,  )r6   r7   r8   r   r   r   r:   r_   r`   r   rb   r    r(  r   r   r   r   r   )
rV   r-   re   r?   rh   modelrn   ro   iigraphrA   rA   rB   "test_radius_neighbors_sort_results  s2    
      r0  c                  C   s  t d} d}d}d}| ||}| dd||f}t||dd\}}}}	d ddtg}
tt|
D ]\}}
g }t|D ]:}tj	|
|d}|
||d d |f  ||| qrt|j}|j|	jksttj	|
|d}|
|| ||}|j|	jkstt|| q^d S )	Nr   r*   r   r+   r   rK   rL   r   rV   )r$   r<   rv   r   rJ   r   r^   rb   r   r   r`   r;   rx   r6   vstackr=   r   r   r    )r?   r.   re   n_outputrh   rz   r   r   y_trainy_testr   rV   	y_pred_soor  Zrnn_mo	y_pred_morA   rA   rB   *test_RadiusNeighborsClassifier_multioutput   s6      
r:  c                 C   s   t j|}d|| | d }||dk9 }|d jdddk t}tD ]|}tj	|dd}	|	
||| dd|d| d  }
tt jf D ]4}||d | |
 }|	|}t||d |  qqJd S )	Nr*   r)   r  r   r   r(   rU   rV   r   )r6   r7   r8   r<   r   r]   r   SPARSE_TYPESr   r   r`   asarrayrx   r    )re   r.   r   rU   r   r?   rh   rz   	sparsematr   r   sparsevZX_epsr   rA   rA   rB   !test_kneighbors_classifier_sparse&  s    
r@  c                  C   sr  t d} d}d}d}| ||}| dd||f}t||dd\}}}}	d ddtg}
tt|
D ]\}}
g }g }t|D ]J}tj	|
|d}|
||d d |f  ||| ||| qxt|j}|j|	jkstt||ksttj	|
|d}|
|| ||}|j|	jks&tt|| ||}t||ksLtt||D ]\}}t|| qVq^d S )	Nr   rP   rq   r+   r1  rK   rL   r2  )r$   r<   rv   r   rJ   r   r^   rb   r   r   r`   r;   rx   r   r6   r3  r=   r   r   rc   r    r   )r?   r.   re   r4  rh   rz   r   r   r5  r6  r   rV   r7  Zy_pred_proba_sor8  r   Zknn_mor9  Zy_pred_proba_moZproba_moZproba_sorA   rA   rB   %test_KNeighborsClassifier_multioutput:  s8    


rA  c                 C   s   t j|}d|| | d }t |d d}||  }|d | }t}	tD ]x}
dd|	fD ]h}t	j
|||
d}||| dd|d| d  }||d | | }t t|| dk sbtqbqTd S Nr*   r)   rK   rL   r   r   333333?)r6   r7   r8   r<   sqrtr   maxrJ   r^   r   r   r`   rx   allr   r   )re   r.   r   rU   r   r?   rh   rz   y_targetr  rV   r   r   r   r   rA   rA   rB   test_kneighbors_regressorf  s"      rH  c                     s   t d} d}d}d}| ||}| ||}t||dd\}} }ttd dgD ]|\}	}
tj|
|	d}||  |j|dd	}t	
 fd
d|D }||}|j|jkst|j|jkstt|| qPd S )Nr   rP   r   r,   r1  rK   r2  FrW   c                    s   g | ]}t j | d dqS r   r   r6   mean.0idxr5  rA   rB   
<listcomp>  s     zGtest_KNeighborsRegressor_multioutput_uniform_weight.<locals>.<listcomp>)r$   r<   r   r   r^   r   r   r`   ra   r6   r   rx   r   r   r   )r?   r.   re   r4  rh   rz   r   r   r6  rV   r   r   	neigh_idx
y_pred_idxr   rA   rO  rB   3test_KNeighborsRegressor_multioutput_uniform_weight~  s     
rS  c                 C   s   t j|}d|| | d }t |d d}||  }t ||gj}|d | }ddt	g}	t
t|	D ]~\}
}	tj||	|
d}||| dd|d| d  }||d | | }|j|jkstt t || dk sptqpd S rB  )r6   r7   r8   r<   rD  r   rE  r3  r=   rJ   r   r^   r   r   r`   rx   r   r   rF  r   )re   r.   r   rU   r   r?   rh   rz   rG  r   rV   r   r   r   rA   rA   rB   %test_kneighbors_regressor_multioutput  s$    
  rT  c              
   C   sN  t j|}d|| | d }t |d d}||  }|d | }t}	tD ]|}
dd|	fD ]l}t	j
|||
d}||| dd|d| d  }||d | | }t t|| |d k sbtqbqTdD ]r}t	j
||dd}||| t d|fd	}d
}tjtt|d ||}W 5 Q R X t t |stqd S )Nr*   r)   rK   rL   r   r   r  r(   g      zNOne or more samples have no neighbors within specified radius; predicting NaN.r   )r6   r7   r8   r<   rD  r   rE  rJ   r^   r   r   r`   rx   rF  r   r   fullr   r   r  reescapeisnan)re   r.   r   ry   r   r?   rh   rz   rG  r  rV   r   rk   r   r   Z
X_test_nanZempty_warning_msgr  rA   rA   rB   test_radius_neighbors_regressor  s<      "  rY  c                     s   t d} d}d}d}| ||}| ||}t||dd\}} }ttd dgD ]\}	}
tj|
|	d}||  |j|dd	}t	
 fd
d|D }t	
|}||}|j|jkst|j|jkstt|| qPd S )Nr   rP   r   r,   r1  rK   r2  FrW   c                    s   g | ]}t j | d dqS rI  rJ  rL  rO  rA   rB   rP    s     zQtest_RadiusNeighborsRegressor_multioutput_with_uniform_weight.<locals>.<listcomp>)r$   r<   r   r   r^   r   r   r`   r   r6   r   rx   r   r   r   )r?   r.   re   r4  rh   rz   r   r   r6  rV   r   r  rQ  rR  r   rA   rO  rB   =test_RadiusNeighborsRegressor_multioutput_with_uniform_weight  s"    

rZ  c                 C   s   t j|}d|| | d }t |d d}||  }t ||gj}|d | }ddt	g}t
t|D ]|\}	}tj||	d}
|
|| dd|d| d  }|
|d | | }|j|jkstt t || dk sptqpd S )Nr*   r)   rK   rL   r2  r   rC  )r6   r7   r8   r<   rD  r   rE  r3  r=   rJ   r   r^   r   r   r`   rx   r   r   rF  r   )re   r.   r   r   r?   rh   rz   rG  r   rV   r  r   r   rA   rA   rB   )test_RadiusNeighborsRegressor_multioutput  s    
r[  c                 C   s   t j|}d|| | d }|d jdddk t}tD ]}tj	|dd}	|	
||| tj	|dd}
|

t|d	d
| tD ]}||}t |	| |kdkst|t|d	d
}|tthkrd}tjt|d |
| W 5 Q R X qt |
| |kdkstqq>d S )Nr*   r)   r   g      ?r(   r;  r   r   r   r   ffffff?z3not supported due to its handling of explicit zerosr   )r6   r7   r8   r<   r   r]   r   r<  r   r   r`   r   SPARSE_OR_DENSErK  rx   roundr   r   r   r   r   r   )re   r.   r   rU   r   r?   rh   rz   r>  r   Zknn_prer?  X2ZX2_prer   rA   rA   rB    test_kneighbors_regressor_sparse	  s(      r`  c                  C   s   t D ]} tjd| d}|tjtj t|tjtj |j	d| d |tjtj t
|tjtjkdksxttjd| d}|tjtj t
|tj tjkdkstqd S )Nr)   r;  r  r\  rP   )r^   r   r   r`   irisr   r   r    rx   
set_paramsr6   rK  r   r   r^  )rV   r   ZrgsrA   rA   rB   test_neighbors_iris)  s     rc  c                  C   s   t jd} t j}| j\}}t|d }td|}t||}| | || | | || f\}}}	}
tj	ddd}|
|||	|
}|
|jtdd||	jtdd|
}||kstd S )	NZuint8g?r   r)   r&   r;  FrR   )digitsr   r]   r   r   r   r6   r   r   r   r`   Zscorer   r   )rh   r   re   r.   Ztrain_test_boundaryZtrainr   r   ZY_trainr   ZY_testr   Zscore_uint8Zscore_floatrA   rA   rB   test_neighbors_digits<  s    
$ re  c                  C   s(  t ddgddgddgg} tj| dddd}t| t |jd  tj| dd	d
}t| dddgdddgdddgg tj| dddd}t| dddgdddgdddgg tj| dd	d
}t| dddgdddgdddgg tj| dddd}t| dddgdddgdddgg d S )Nr   r)   r   rF   r*   connectivityTr   include_selfrL   r   r   z?gw@r+   )	r6   r   r   r   r    r   r>   r   r   rh   r@   rA   rA   rB   test_kneighbors_graphQ  s(     &
rk  rU   r   rf  $   c                 C   sN   t j|}|dd}t|}ttj|| |d tj|| |d  d S NrN   r   )	r6   r7   r8   r   r   r   r   r   r   rU   r   seedr?   rh   XcsrrA   rA   rB   test_kneighbors_graph_sparseq  s    rq  c                  C   s   t ddgddgddgg} tj| dddd	}t| ddd
gdddgd
ddgg tj| ddd}t| d
dd
gdd
dgd
dd
gg d S )Nr   r)   r   rF   r*   r0   rf  Trg  r   rL   r   ri  )r6   r   r   r   r    r   r   rj  rA   rA   rB   test_radius_neighbors_graph  s    & rr  c                 C   sN   t j|}|dd}t|}ttj|| |d tj|| |d  d S rm  )	r6   r7   r8   r   r   r   r   r   r   rn  rA   rA   rB   "test_radius_neighbors_graph_sparse  s    rs  	Estimatorc              	   C   s  t d}t|}t d}td}| ddd}d}tjt|d || W 5 Q R X d	}tjt|d t	|
|| W 5 Q R X | dd
d}|
|| d}tjt|d || W 5 Q R X |  }td}tjt|d |
tdtd W 5 Q R X d}tjt|d$ |
|dddddf | W 5 Q R X |
|| td}tjt|d |g g W 5 Q R X dS )z`Additional parameter validation for *Neighbors* estimators not covered by common
    validation.rN   r*   r}   rN   r%   	haversineru   zinstance is not fitted yetr   z.Metric 'haversine' not valid for sparse input.r&   r-   rV   z-Haversine distance only valid in 2 dimensionszFound array with 0 sample(s)r   r   zFound array with dim 3NzFound array with 0 feature(s))r?   r   r   r6   r$  r   r   r   rx   r!   r`   rV  rW  )rt  rh   ZXsparseZX3rz   r   r   rA   rA   rB   "test_neighbors_validate_parameters  s6    



"(
rx  r.   rM   r(   c              	   C   s`   t d|f}td}| d|d}d}tjt|d ||| W 5 Q R X |jdks\t	dS )z
    Validation of all classes extending NeighborsBase with
    Minkowski semi-metrics (i.e. when 0 < p < 1). That proper
    Warning is raised for `algorithm="auto"` and "brute".
    rN   r   )r1   rV   zwMind that for 0 < p < 1, Minkowski metrics are not distance metrics. Continuing the execution with `algorithm='brute'`.r   r&   N)
r?   r   r6   r$  r   r   r  r`   _fit_methodr   rt  r.   rV   rh   rz   r-  r   rA   rA   rB   -test_neighbors_minkowski_semimetric_algo_warn  s    
r{  c              	   C   sV   t d}td}| |dd}d| d}tjt|d ||| W 5 Q R X dS )	zECheck that we raise a proper error if `algorithm!='brute'` and `p<1`.ru  rN   r   )rV   r1   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)r?   r   r6   r$  r   r   r   r`   rz  rA   rA   rB   .test_neighbors_minkowski_semimetric_algo_error  s    


r|  c               	   C   sp   t d} t | }d}tjt|d |j| dd W 5 Q R X tjt|d |j	| dd W 5 Q R X dS )z'Validate parameter of NearestNeighbors.ru  zUUnsupported mode, must be one of "connectivity", or "distance" but got "blah" insteadr   Zblahr   N)
r?   r   r   r_   r`   r   r   r   r   r   )rh   r   r   rA   rA   rB   &test_nearest_neighbors_validate_params  s    
r}  pyfuncc                 C   s  dddg}t ||j| dd}t ||j| dd}t||}	|	D ]>}
|tjd kpfd|kofd|
k}i }|
dd	}|D ]}tj|||||
d
}|r|dkrt	t
 || W 5 Q R X q||dkrtd d	}t|d d |f }t|d d |f }|| |j|dd||< q||d \}}|d \}}t|| t|| |sD|d \}}t|| t|| t|| t|| qDd S )Nr&   r%   r'   FrR   r/   r2   r1   r*   rU   rV   r-   r1   metric_paramsrv  TrW   )r?   r<   r]   rC   r   VALID_METRICSpopr_   r   r   r   r`   slicer6   ascontiguousarrayra   r   r    )rd   r-   re   r.   rf   rU   Z
algorithmsr   r   metric_params_listr  Zexclude_kd_treerj   r1   rV   rk   
feature_slZ	brute_dstZ	brute_idxZball_tree_dstZball_tree_idxZkd_tree_dstZkd_tree_idxrA   rA   rB   test_neighbors_metrics  sL    










r  r     r#  c              
   C   s  t ||j| dd}t ||j| dd}|dkrjtd d}t|d d |f }t|d d |f }t||}	|	D ]}
|
dd}tj	|d|||
d}|
| tdd |j|d	d
\}}W 5 Q R X td	d |j|d	d
\}}W 5 Q R X t|| t|| qxd S )NFrR   rv  r*   r1   r&   r  Zenable_cython_pairwise_distTrW   )r?   r<   r]   r  r6   r  rC   r  r   r_   r`   r   ra   r   r    )rd   r-   re   r.   rf   rU   r   r   r  r  r  r1   rk   legacy_brute_dstlegacy_brute_idxpdr_brute_dstpdr_brute_idxrA   rA   rB   test_kneighbors_brute_backendS  s:    


  
r  c                  C   sz   dd } t jddd}tjdd| d}tjdd	| d}|| || ||\}}||\}}t|| d S )
Nc                 S   s   t t | d |d  S )Nr*   )r6   rD  r   )x1Zx2rA   rA   rB   custom_metric  s    z+test_callable_metric.<locals>.custom_metricr   r   r*   r+   r(   rT   r&   )	r6   r7   r8   r<   r   r_   r`   ra   r   )r  rh   nbrs1nbrs2r   r   r   r   rA   rA   rB   test_callable_metric  s"        

r     c                 C   s  t ||j| dd}t|}t||}|dkrt d}t d}tj|dd}	tj||dd}
tj	ddd	}|
|	 ||
 n|D ]~}tj	dd
||d}|dkrtd d}t|d d |f }|
| || |td krtj	dd
|d
|}|| qd S )NFrR   r   r   r   r   r   r+   r   r(   rU   rV   r-   r  rv  r*   r&   rT   )r?   r<   r]   r   rC   r   r   r   r   r_   r`   ra   r  r6   r  r   )rd   r-   re   r.   rh   rp  r  ZX_precomputedZY_precomputedr   r   Znb_pr  r   r  rA   rA   rB   *test_valid_brute_metric_for_auto_algorithm  sH    


  



  r  c               	   C   sP   t dd} t ddd}tjddid}tt || | W 5 Q R X d S )NrP   r   r*   r1   r+   )r  )	r?   r<   rv   r   r   r   r   SyntaxWarningr`   )rh   rz   r   rA   rA   rB   test_metric_params_interface  s
    r  c               
   C   s   t jd} | dd}| ddd}tjddd}tjddd}||fD ]4}||| t	
t |t| W 5 Q R X qJd S )Nr   rP   r*   r)   r'   r'  r%   )r6   r7   r8   r<   rv   r   r   r   r`   r   r   r   rx   r   )r?   rh   rz   r  r  r-  rA   rA   rB    test_predict_sparse_ball_kd_tree  s    r  c               	   C   sJ  t jd} | dd}t| }t | |d }dD ]D}tj|d|ddd	 }tj
d|d	|}t|||	  q:dD ]D}tj|||ddd	 }tj
||d
|}t|||	  qtj
ddd	}|| tt tj|ddd W 5 Q R X tj
|dd}|| tt tj||dd W 5 Q R X d S )Nr   rP   r  )	manhattanZ	chebyshevr+   rf  T)r-   r   rh  r   )r-   ry   r  r   r   )ry   r-   )r6   r7   r8   r<   r   flattenr(  r   r   r   r_   r`   r    r   r   r   r   )r?   rh   Z
dist_arrayry   r-   Z
nbrs_graphr  ZX_nbrsrA   rA   rB   test_non_euclidean_kneighbors  sB    
    
    


r  c                 C   s$   t | D ]\}}t|||  qd S r   )	enumerater    )ZnparrayZ
list_checkr   ZelerA   rA   rB   check_object_arrays  s    r  c                  C   s6  t D ]*} tjd| d}dgdgg}|| dgdgg}||\}}t|dgdgg t|dgdgg |jdgdggdd\}}t|dgddgg t|dgddgg t||	 ddgddgg t|jdgdggd	d
	 t
ddgddgg |jdgdggdd}t|	 ddgddgg qd S )Nr)   r;  r   r*   r0   r   r   rF   rL   r   )r^   r   r_   r`   ra   r    r   r  r   r   r6   r   r   )rV   r   rh   Z	test_datarH   r   r?   rA   rA   rB   .test_k_and_radius_neighbors_train_is_not_query  s*    

 r  c              	   C   sL  t jd| d}dgdgg}|| | \}}t|dgdgg t|dgdgg |jd dd\}}t|dgdgg t|dgdgg |jd dd}|d }||fD ]>}t|	 ddgddgg t|j
ddg t|jddg qddgddgddgg}t jd| d}|| t| 	 tdddgdddgdddgg d S )	Nr)   r;  r   r0   r   r*   r   rF   )r   r_   r`   ra   r    r   r  r   r   r   r   ro   r6   r   )rV   r   rh   rH   r   r?   kngr/  rA   rA   rB   "test_k_and_radius_neighbors_X_None  s,    



 r  c              	   C   s8  t jd| d}dgdgdgg}|| |j|dd}t| tdddgdddgdddgg t|jdddg t|j	dddg |j
dgdggd	d
\}}t|ddgddgg t|ddgddgg |j|d	d
}t| tdddgdddgdddgg |jdgdggd	dd}|  t| dddgdddgg t|j	ddddg t|jddddg td}t jddd}|| | \}}t|td t|dgdgdgg |jdd}t| td t|jtd t|j	dddg t|  tdddgdddgdddgg d S )Nr)   r;  r   r+   rL   r   r   r*   r0   r   rF   r+  )r+   r)   r&   r   )r   r_   r`   r   r   r   r6   r   r   ro   r   r  r   Zsort_indicesr$  ra   zeros)rV   r   
duplicatesr  rH   r   r?   rh   rA   rA   rB   &test_k_and_radius_neighbors_duplicates<  sJ    
    


 r  c                  C   s   ddgddgg} t j| ddd }t j| ddd }t|d	d
gd
d	gg t|d
d	gd	d
gg t j| ddd }t j| ddd }t|d	d	gd	d	gg t|d
d	gd	d
gg d S )Nr*   r+   r,   rP   r)   T)rh  FrF   r   r   )r   r   r   r    r   )rh   r  Zkng_not_selfr?   Zrng_not_selfrA   rA   rB   !test_include_self_neighbors_graphn  s      
r  c                 C   s   t jddddd\}}t||\}}}}tjd| d}||| ||}||\}}	|j|dd	 }
|j
dd	 ||| ||}||\}}|j|dd	 }t|| t|| t|	| t|
| d S )
Nr#  rP   r   re   r.   n_redundantr   r+   r;  rL   r   n_jobs)r   make_classificationr   r   r   r`   rx   ra   r   r   rb  r    r   )rV   rh   rz   r   r   r5  r6  r   rH   r   r/  
y_paralleldist_parallelind_parallelgraph_parallelrA   rA   rB   test_same_knn_parallel~  s*       





r  c                 C   s   t jddddd\}}t||\}}}}tjd| d}||| ||}||\}}	|j|dd	 }
|j
d	d
 ||| ||}||\}}|j|dd	 }t|| tt|D ](}t|| ||  t|	| ||  qt|
| d S )Nr#  rP   r   r  rN   r   rL   r   r+   r  )r   r  r   r   r   r`   rx   r   r   r   rb  r    rb   rc   r   )rV   rh   rz   r   r   r5  r6  r   rH   r   r/  r  r  r  r  rl   rA   rA   rB   #test_same_radius_neighbors_parallel  s,       



r  backend	threadingZlokyc           	   	   C   s   t | l tjddddd\}}t||\}}}}tjd|dd}||| || |	| |j
|dd	 W 5 Q R X d S )
Nr#  rP   r   r  r+   r*   )rU   rV   r  rL   r   )joblibZparallel_backendr   r  r   r   r   r`   rx   ra   r   )	r  rV   rh   rz   r   r   r5  r6  r   rA   rA   rB   test_knn_forcing_backend  s"       
  

r  c                  C   sP   t jdd} d}t|}dd dd | D }| |||}t|| d S )Nr)   r~   r  c                 S   s   g | ]}|qS rA   rA   )rM  chrA   rA   rB   rP    s     z&test_dtype_convert.<locals>.<listcomp>ZABCDEFGHIJKLMNOPQRSTU)r   r   r6   r>   r`   rx   r    )
classifierZCLASSESrh   rz   resultrA   rA   rB   test_dtype_convert  s    
r  c                  C   s   dd } t dddddgdddddgdddddgg}t dddddgdddddgg}tjdd| d|}|j|dd	}tddgddgg}t|| d S )
Nc                 S   s(   t | rt |st| |j  S r   )r	   r   dotr=   r   item)xrz   rA   rA   rB   sparse_metric  s    z2test_sparse_metric_callable.<locals>.sparse_metricr)   r   r&   r*   )rV   rU   r-   FrW   )r   r   r_   r`   ra   r6   r   r    )r  rh   r   r   NZgold_standard_nnrA   rA   rB   test_sparse_metric_callable  s    &   r  )categoryc                  C   sd   t jd} | jdd}tj}|ddd|}|ddd|}t||d ||d  d S )Nr   )r  rP   rs   Zjaccardr&   rw  r%   )	r6   r7   r8   rK   r   r_   r`   r    ra   )r?   rh   ZNNZnn1Znn2rA   rA   rB   test_pairwise_boolean_distance  s    r  c               	   C   s   t dD ]} tjddddd| d\}}t||dd\}}}}td|  }tjd|d}||| ||}	|	|}
|
j
d	d
}t|
jd	d
dk||}t|	| qd S )NrP   rq   r+   r   )re   r.   Zn_informativer  Z	n_classesr   r1  r*   r  r)   r   )rb   r   r  r   r   r   r   r`   rx   r   Zargmaxr6   wherer   r    )ro  rh   rz   ZX_trZX_teZy_trZy_ter   r   r  r  Zproba_labelrA   rA   rB   #test_radius_neighbors_predict_proba  s$    


r  c                  C   s2  t jd} d| dd d }d| dd d }| dd}d}d}d}tj|dd	}tjt|| dd	}tj|dd
}	tjt|| dd
}
tj|d}tj	|d}||f||f|	|f|
|fg}|D ]`\}}t
|}t
|}|jdd tt
||}||||}||||}t|| qd S )Nr   r*   r   rP   r)   r  r0   rL   )rU   r   r+  r~   r   r   r   )r6   r7   r8   r<   r   ZKNeighborsTransformerr   ZRadiusNeighborsTransformerr   r   r   rb  r   r`   rx   r   )r?   rh   r_  rz   rU   ry   ZfactorZk_transZk_trans_factorZr_transZr_trans_factorZk_regZr_regZ	test_listZtransregZreg_compactZreg_precompZ	reg_chainZy_pred_chainZy_pred_compactrA   rA   rB   0test_pipeline_with_nearest_neighbors_transformer	  s@    
 
 r  z'X, metric, metric_params, expected_algor   rs   r   r  r3   r4   Zcorrelationc                 C   s.   t jdd||d}||  |j|ks*td S )Nr,   r(   r  )r   r_   r`   ry  r   )rh   r-   r  Zexpected_algor-  rA   rA   rB   test_auto_algorithm7  s       
r  rF   c              
   C   s   t ||}t ||}| dkrVtd d}t|d d |f }t|d d |f }t| |}	|	D ]}
|
dd}tj||d| ||
d}|	| t
dd |j|dd	\}}W 5 Q R X t
dd |j|dd	\}}W 5 Q R X t|||||d
 qdd S )Nrv  r*   r1   r&   )rU   ry   rV   r-   r1   r  Fr  TrW   r   )r?   r<   r  r6   r  rC   r  r   r_   r`   r   r   r   )r-   re   r.   rf   rU   ry   r   r   r  r  r  r1   rk   r  r  r  r  rA   rA   rB   #test_radius_neighbors_brute_backendJ  sF    

	
  r  c                  C   s,   t j D ]} t| tt| ks
tq
d S r   )r   r  valuesrc   setr   )valrA   rA   rB   #test_valid_metrics_has_no_duplicate  s    r  c                  C   sf   ddgddgddgddgg} ddddg}dd	 }t dd
|d}|| | t|ddggdg dS )ztEnsures that `predict` works for array-likes when `weights` is a callable.

    Non-regression test for #22687.
    rP   r)   r+   r,   r   r*   r  c                 S   s
   t | S r   )r6   Z	ones_like)rH   rA   rA   rB   _weights  s    z6test_regressor_predict_on_arraylikes.<locals>._weightsr&   )rU   rV   r   r  N)r   r`   r   rx   )rh   rz   r  r   rA   rA   rB   $test_regressor_predict_on_arraylikes  s    r  c                  C   sn   t d} | jtddgddgddgdd	ggd
dgd}tddddg}tjdd||}|| dS )z[Check that KNN predict works with dataframes

    non-regression test for issue #26768
    Zpandasr)   r*   r+   r,   rP   r  r  r  r  b)columnsr~   N)	r   ZimportorskipZ	DataFramer6   r   r   r   r`   rx   )pdrh   rz   r   rA   rA   rB   test_predict_dataframe  s
    
0r  c                  C   s   t ddgddgddgg} tjddddid}||  |j| d d	d
ddd}t|d dd	dg |j| d d	d
dd}t|d dd	dg dS )zCheck that NearestNeighbors works with :math:`p \in (0,1)` when `algorithm`
    is `"auto"` or `"brute"` regardless of the dtype of X.

    Non-regression test for issue #26548
    rF   r   r+   r&   r1   r   )rU   rV   r  r   r)   r   r,   F)ry   rX   r*   rW   N)	r6   r   r   r_   r`   r   Zreshaper   ra   )rh   rk   rz   rA   rA   rB   0test_nearest_neighbours_works_with_p_less_than_1  s      
r  )r   rP   r*   r   r   )r   rP   rN   rP   r   )r   rP   rN   rP   r   )r   rP   rN   r   r   )r   rP   rN   rP   r   )r   rP   rN   r+   r   )r   rP   rN   r+   r   )r   r+   rN   r   r   )r   rP   rN   r   )r   rP   rN   rP   r   )rl  )rl  )r~  )r   r+   r*   rP   )r  r#  rM   rP   )r   r  )r  r#  rM   rP   rF   )rV  r   	itertoolsr   r  Znumpyr6   r   Zscipy.sparser   r   r   r   r   r   r	   r
   Zsklearnr   r   r   r   Zsklearn.baser   Zsklearn.exceptionsr   r   r   Zsklearn.metrics.pairwiser   Z'sklearn.metrics.tests.test_dist_metricsr   Z7sklearn.metrics.tests.test_pairwise_distances_reductionr   Zsklearn.model_selectionr   r   Zsklearn.neighborsr   r   Zsklearn.neighbors._baser   r   r   r   Zsklearn.pipeliner   Zsklearn.utils._testingr   r    r!   Zsklearn.utils.fixesr"   r#   Zsklearn.utils.validationr$   r7   r8   r?   Z	load_irisra  Zpermutationr   rt   permr   Zload_digitsrd  r<  r=  r]  r^   sortedr  intersectionmapr  r  ZCOMMON_VALID_METRICSr:   r   r   r   r   r   rC   rJ   ZWEIGHTSmarkZparametrizerp   r   r   r   r{   r_   r   r   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r&  r*  r0  r:  r@  rA  rH  rS  rT  rY  rZ  r[  r`  rc  re  rk  rq  rr  rs  rx  r{  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rv   r   r  r  r  r  r  r  rA   rA   rA   rB   <module>   s`  (
E	0
	

7





	

         
*          
#     }!
	
'         
-         
         
         
'       

          	
%		

       7        +  *$

1



.
     7