o
    \iR                    @   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	 d dl
mZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: ej;<d Z=e> Z?e=@e?jAjBZCe?jDeC e?_De?jAeC e?_AeE ZFe=@eFjAjBZCeFjDeC eF_DeFjAeC eF_AeGe2e3 e4 e5 e7 e8 ZHeHejIf ZJdZKeLeMjNeOeMejPQ  ZRddddejSfZTe0ejUe_Ue0ejVe_VdgZWddeXfddZYdeXdeZfddZ[dd Z\d d!e\gZ]ej^_d"d#d$gej^_d%d&d'gej^_deReW d(d) Z`ej^_d*d+d,gej^_deReW ej^_d-g d.ej^_d/ejaej%ejbejcgd0d1 Zdej^_d2ejaej%ejegd3d4 Zfd5d6 Zgej^hd7d8d9 Zid:d; Zjej^_d<d=d>gd?d@ Zkej^_d<d=d>gdAdB Zlej^_dCe5dDdE Zmej^hd7ej^_dFe*e(gej^_dCe5dGdH Znej^hd7ej^_dCe5dIdJ Zoej^_dCe5dKdL Zpej^_dMe7e2 e6 dNdO Zqej^hd7ej^_dCe5dPdQ ZrdRdS Zs	 ddWdXZtej^_dYeKej^_dZe]	[	U	\	U	 dd]d^Zu	[	U	\	U	 dd_d`Zvdadb Zwej^_dYeKej^_dZe]	[	U	\	V	 ddcddZxej^_dYeKej^_dZe]ej^_deg dfdgdh Zyej^_dYeKej^_dZe]didj Zzdkdl Z{dmdn Z|dodp Z}ej^_dCe5dqdr Z~ej^_dYg dsdtdu Zej^_dYdgeedvdwgeWR dxdyg dzd{ Zd|d} Z	 dd~dZdd Z	 dddZdd Z	 dddZ	 dddZdd Z	 dddZej^hd7	 dddZdd Zdd Zdd Zej^_dg dej^_ddd!gej^_dCe5d	ddZdd Zej^_dg dej^_ddd!gej^_dCe5d	ddZej^_dejaejbej%ejcgej^_dCe5dd Zej^_dejaejbej%ejcgej^_dddgej^_dYddgdd Zej^_dejaejbej%ejcgej^_dddgej^_dYddgdd Zdd Zej^_deLeMejPd NejPd eMdge eW 	T			Ud
ddZe0edej^_deLeMejPd eMdg 			U	UdddZdd Zej^_dejPd eW ej^_dCe5	dddZdd Zej^_dCe5dd Zdd ZddĄ ZddƄ Zej^_dYeKddȄ Zej^_dYeKddʄ Zdd̄ Zej^_dYeKdd΄ Zej^_dYeKddЄ Zej^_dddgej^_dYeKddՄ Zddׄ Zej^_dCe5ddل Zej^hdڡdd܄ Zddބ Zdd Zej^_dej;jd\dddddfej;d\dTdwddfej;ddUdwddfej;d\dUdwddfej;d\dUdddgdU idfej;d\dUdddfgdd Ze0edej^_deLeMejPd eMdg 			U	dddZdd Zdd Zej^_dejaddifej%ddifejci fejbi fejddifejddifejddifgdd Zdd Zdd Zdd Zej^_dejad\deb gej^_dYeKdd Zej^_dej%d\dec gej^_dYeKd d ZdS (      N)product)issparse)config_contextdatasetsmetrics	neighbors)clone)EfficiencyWarningNotFittedError)DistanceMetric)PAIRWISE_BOOLEAN_FUNCTIONSpairwise_distances)BOOL_METRICS)!assert_compatible_argkmin_results assert_compatible_radius_results)LeaveOneOutcross_val_predictcross_val_scoretrain_test_split)VALID_METRICS_SPARSEKNeighborsRegressor)KNeighborsMixin_check_precomputed_is_sorted_by_datasort_graph_by_row_values)make_pipeline)assert_allcloseassert_array_equalignore_warnings)BSR_CONTAINERSCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDIA_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)check_random_state)	ball_treebrutekd_treeauto            DM_euclideanmetricc                 C   s*   | dd dkrt j| d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)r0   r3    r5   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/neighbors/tests/test_neighbors.py_parse_metricc   s   
r7   
n_featuresc              	   C   s   t jd}| dkr%tddtddtddtt jdtd||dgS | dkr2t||d	gS | d
krN|||}||j dt |  }t|d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)r0   r8   rngAr@   r5   r5   r6   _generate_test_params_forr   s   
rK   c                 C   sB   t jdd d|  }W d   |d S 1 sw   Y  |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      ?Nr,   )rA   errstate)distretvalr5   r5   r6   _weight_func   s   

rR   uniformdistancez/n_samples, n_features, n_query_pts, n_neighbors)d   rU   
   rU   )     rU   r+   query_is_trainFTc              	   C   s  t || }tjd}|||j| dd}|r|n
|||j| dd}	g }
g }tD ]6}t|tr@| tj	kr@d|v r@t
d tj|||d}|| |
|j|	dd ||j|	dd q+tt|d	 D ]V}t| }t|d	  }|
| }|| d ||d	  d }}|| d	 ||d	  d	 }}t||d
| dd t||d
| d| dd t||d
| d| ddd qjd S )Nr   FcopytreeCNeither KDTree nor BallTree support 32-bit distance metric objects.n_neighbors	algorithmr0   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ư>)re   atol)r7   rA   rB   rC   rF   astype
ALGORITHMS
isinstancer   float32pytestskipr   NearestNeighborsfitappend
kneighborsrangelenr   r   )global_dtype	n_samplesr8   n_query_ptsr_   rY   r0   	local_rngXqueryresults_nodistresultsr`   neighinext_algorithmindices_no_dist	distancesnext_distancesindicesnext_indicesr5   r5   r6   test_unsupervised_kneighbors   sX   


r   z"n_samples, n_features, n_query_pts)rU   rU   rV   )rW   rX   rU   zn_neighbors, radius))r+   rU   )2   i  )rU   rW   NeighborsMixinSubclassc              	   C   sR  t || }t|trd|jv rtd d|jv rtd tjd}|	||j
| dd}	|jd|d	}
|	||j
| dd}g }t|trJ|n|}tD ]*}t|trc| tjkrcd
|v rctd ||||d}||	|
 ||| qNtt|d D ]%}t| }t|d  }|| ||d  }}t||d| d| dd qd S )N
ClassifierzGMetrics of type `DistanceMetric` are not yet supported for classifiers.RadiusVMetrics of type `DistanceMetric` are not yet supported for radius-neighbor estimators.r   FrZ   r-   sizer\   r]   r`   r0   r+   rc   rf   z*' algorithms return different predictions.rd   )r7   rj   r   __name__rl   rm   rA   rB   rC   rF   rh   randint
issubclassr   ri   rk   ro   rp   predictrr   rs   r   )rt   ru   r8   rv   r0   r_   radiusr   rw   rx   yry   predict_results	parameterr`   r|   r}   r~   predictionsnext_predictionsr5   r5   r6   ,test_neigh_predictions_algorithm_agnosticity   sH   



r   KNeighborsMixinSubclassc                 C   s   t dj| dd}t jddd}tjdd}|| ||\}}|dd}|t|t	|fD ]}||| ||\}	}
t
||	 t||
 q3d S )	NrV   r-   FrZ   r-   rV   r   r+   r_   )rI   random_samplerh   r   r   rn   ro   rq   BallTreeKDTreer   r   )rt   r   rx   r   nbrs_fiddist1ind1nbrsdatadist2ind2r5   r5   r6   test_unsupervised_inputsI  s   


r   c                  C   s~   dgg} t  }tt ||  W d    n1 sw   Y  tt ||  W d    d S 1 s8w   Y  d S )Nr+   )r   rn   rl   raisesr
   kneighbors_graphradius_neighbors_graph)rx   
neighbors_r5   r5   r6   !test_not_fitted_error_gets_raisedf  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 d   n1 sw   Y  qt |jd }|D ]'}|dd}d |_|_||||}d|_||||}t|| qdS )z;Tests unsupervised NearestNeighbors with a distance matrix.*   rV   r.   r-   r.   )rq   r-   r   r(   precomputedr^   r*   Nr   	euclideanr0   r+   )rA   rB   rC   r   r   rn   ro   getattrr   r   rl   r   
ValueErrorarangeshaper   r_   r   r0   )make_train_test
estimatorsrI   rx   YDXXDYXmethodnbrs_Xdist_Xind_Xnbrs_Ddist_Dind_DtargetEstestpred_Xpred_Dr5   r5   r6   check_precomputedo  sN   











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_testr5   r5   r6   r     s   
z/test_precomputed_dense.<locals>.make_train_test)r   KNeighborsClassifierr   RadiusNeighborsClassifierRadiusNeighborsRegressorr   )r   r   r5   r5   r6   test_precomputed_dense  s   r   fmtcsrlilc                    &    fdd}t jt jg}t|| d S )Nc                    :   t jdd| }|j| dd |j|dd fS )Nr.   r   rT   mode)r   rn   ro   r   asformatr   r   nnr   r5   r6   r        z4test_precomputed_sparse_knn.<locals>.make_train_test)r   r   r   r   r   r   r   r5   r   r6   test_precomputed_sparse_knn  
   
r   c                    r   )Nc                    r   )Nr+   r   rT   r   )r   rn   ro   r   r   r   r   r5   r6   r     r   z7test_precomputed_sparse_radius.<locals>.make_train_test)r   r   r   r   r   r5   r   r6   test_precomputed_sparse_radius  r   r   csr_containerc                 C   s   | t ddd}t|sJ d|d< t|rJ | g dg dg dg dg}t|s1J g d	g d
g d}}}| |||fdd}t|sNJ d S )NrV   r+   rX   r   r,   r   r+   r,   )r-   r   r   )r-   r.   r   r+   r   r,   )r   r.   r,   r,   )r   r+   r+   r+   )r   r,   r,   r.   r-   r-   )r   )rA   r   reshaper   )r   rx   r   r   indptrr5   r5   r6   test_is_sorted_by_data  s    r   functionc                 C   s   |t t jddd}t|rJ | |}t|sJ t jdjddd}| }d||dk< ||}t|r>J | |}t|sHJ d S )Nr   rV   r,   rV   rV   r   r   r+   )rA   absrB   rC   randnr   r   toarray)r   r   rx   Xtmaskr5   r5   r6   test_sort_graph_by_row_values  s   r   c                 C   s   | t t jddd}t|rJ | }t|j|ju s#J | }t|ddj|ju s3J | }t|ddj|jusCJ | }t	|j|jusQJ t|
 dd tjtdd t|
 dd W d    d S 1 stw   Y  d S )Nr   rV   FrZ   Tz%Use copy=True to allow the conversionmatch)rA   r   rB   rC   r   r   r[   r   r   r   tocscrl   r   r   )r   X_rx   r5   r5   r6   "test_sort_graph_by_row_values_copy  s   "r   c                 C   s  | t t jddd}t|rJ tjtdd t	|dd W d    n1 s-w   Y  tjtdd t	|ddd W d    n1 sKw   Y  tjtdd t
| W d    n1 sfw   Y  t  td t	|dd	d W d    d S 1 sw   Y  d S )
Nr   rV   zwas not sorted by row valuesr   TrZ   )r[   warn_when_not_sortederrorF)rA   r   rB   rC   r   r   rl   warnsr	   r   r   warningscatch_warningssimplefilter)r   rx   r5   r5   r6   %test_sort_graph_by_row_values_warning%  s   


"r   sparse_containerc                 C   s   | t t jddd}tjtdd t| W d    n1 s%w   Y  tjtdd t	| W d    d S 1 sAw   Y  d S )Nr   rV   zformat is not supportedr   )
rA   r   rB   rC   r   rl   r   	TypeErrorr   r   )r   rx   r5   r5   r6   /test_sort_graph_by_row_values_bad_sparse_format9  s   

"r   c                 C   s<  t g dg dg dg}| |}tjddd}|| |jd dd |jt g dgd	d t g d
g dg dg}| |}|| d}tjt|d |jd dd W d    n1 sdw   Y  t g dg dg dg}| |}d}tjt|d |j|dd W d    d S 1 sw   Y  d S )N)               @rN   )r   r         @)rN   r   r   r+   r   r_   r0   r   r   r   r   r,   )r   r   r   )r   r   r   zB2 neighbors per samples are required, but some samples have only 1r   )      @r   rN   )g       r   r   z>Negative values in data passed to precomputed distance matrix.)	rA   arrayr   rn   ro   rq   rl   r   r   )r   rP   dist_csrr|   msgr5   r5   r6   test_precomputed_sparse_invalidE  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|| q#d S )	Nr      r,   r   r   r-   r   r   )rA   rB   rC   rF   r   r   r   r   r   r   r   r   r   )rI   rx   Dr   r   metric_scoreprecomp_scorer5   r5   r6   !test_precomputed_cross_validation_  s   r  r  rX         ?c              
   C   s  t j|}|||j| dd}|||j| dd}tD ]}	g }
tD ]]}tj|||	d}|	| |j
|dd}|j
|dd\}}t|||D ]!\}}}| }|| |d d < || |d d < || |d d < qI|
||f tt t|t t| q$tt|
d D ]4}tt t|
| d t t|
|d  d  tt t|
| d t t|
|d  d  qqd S )NFrZ   )r   r`   r;   ra   Tr+   r   )rA   rB   rC   rF   rh   Pri   r   rn   ro   radius_neighborszipargsortrp   r   concatenatelistrr   rs   )rt   ru   r8   rv   r   random_staterI   rx   testr;   r{   r`   r|   r   rP   inddr}   i1jr5   r5   r6   "test_unsupervised_radius_neighborsp  s8   
 r  r`   weights(   rV   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,   FrZ   r+   axisr  r_   r  r`   h㈵>)rA   rB   rC   rF   rh   sumintstrr   r   ro   r   r   )rt   r`   r  ru   r8   
n_test_ptsr_   r  rI   rx   r   y_strknnepsilony_predr5   r5   r6   test_kneighbors_classifier  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,   FrZ   r+   r  r  r   r   )rA   rB   rC   rF   rh   r!  r"  r   r   ro   floatr   r   )rt   ru   r8   r$  r_   r  rI   rx   r   r&  r'  r(  r5   r5   r6   'test_kneighbors_classifier_float_labels  s   	r+  c              	   C   s(  t g dg dg dg dg dg dgj| dd}t g d	}tjd
dd}||| ||}t g dg dg dg dg dg dgd }t|| |||t ||}t|| tjdddd}||| |t g dg dg}t g dg dg}t	|| d S )N)r   r,   r   )r   r,   r+   )r,   r   r   )r,   r,   r   )r   r   r,   )r   r   r+   FrZ   )r.   r.   rX   rX   r+   r+   r-   r+   )r_   r;   )r+   r,   r   r   r   )r,   r+   r   r   r,   rT   )r_   r;   r  )r,   r,   r,   r   r+   r   )r   g?g333333?)
rA   r  rh   r   r   ro   predict_probar   r#  r   )rt   rx   r   clsy_prob	real_probr5   r5   r6   (test_kneighbors_classifier_predict_proba  s<   &




r1  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,   FrZ   r+   r  r   r  r`   r   )rA   rB   rC   rF   rh   r!  r"  r#  r   r   ro   r   r   )rt   r`   r  ru   r8   r$  r   r  rI   rx   r   r%  r|   r'  r(  r5   r5   r6    test_radius_neighbors_classifier  s   
r3  outlier_label)r   Nc                 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 u rott	 |
| W d    d S 1 shw   Y  d S d S )NrN   r   r2   r+   r,   皙?)\(?Gz @ffffff?r   r  r`   r4  )
rA   r  r   r   ro   r   r   rl   r   r   )rt   r`   r  r4  rx   r   r   z1z2rncclfr5   r5   r6   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 g d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 g d}t ddg}tj|||dd}	|	 t||	| tjt	dd t||	| W d    n1 sw   Y  tjt	dd t
||	|d  W d    n1 sw   Y  tj t jdgdgdgdgdgdgdgdgdgdgg
| dt g d fdd}
tt |
  W d    n1 sw   Y   fdd}tt |  W d    n	1 s	w   Y   ddd }	|	 |	dgd!gg}t|dd d f g d"  ddd }	|	 |	dgd!gg}t|dd d f g d# |	dgd!gg}t|ddg  fd$d%}tt	 |  W d    n	1 s~w   Y  ddgddgddgddgddgddgddgddgddgddgg
 ddd }	|	 |	dgd!gg}t|d dd d f g d# |	dgd!gg}t|dd d f ddg ddgddgddgddgddgddgddgddgddgddgg
 dddgd }	|	 |	dgd!gg}t|d dd d f g d& t|d dd d f g d# |	dgd!gg}t|dd d f ddg  fd'd(}tt |  W d    d S 1 sew   Y  d S ))NrN   r   gGz?g\(\?r8  r2   )r+   r,   r+   r+   r,   r6  r7  r9  r+   r,   )r5  r+   r,   r   r5  r:  z+Outlier label -1 is not in training classesr   r-   r.   rX            	   )
r   r,   r,   r+   r+   r+   r-   r-   r-   r-   c                     s     ddggd} |   d S )Nr+   rX   r   r4  ro   r>  RNCrx   r   r5   r6   check_array_exceptionV     zPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_array_exceptionc                     s    ddd} |   d S )Nr+   arD  rE  rF  rG  r5   r6   check_dtype_exception^  s   zPtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_dtype_exceptionmost_frequentrD     )r   r   r   r+   )r   r+   r   r   c                     s.    ddd} |   | dgdgg d S )Nr+   r.   rD  rN  )ro   r-  rF  rG  r5   r6   check_warningt  s   zHtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_warning)r+   r   r   r   c                     s     dg dd} |   d S )Nr+   r   rD  rE  rF  )rH  rx   y_multir5   r6   check_exception  rJ  zJtest_radius_neighbors_classifier_outlier_labeling.<locals>.check_exception)rA   r  r   r   ro   r   r   rl   r   UserWarningr   r-  r   r   r   )rt   r`   r  r   r;  r<  correct_labels1correct_labels2outlier_probar>  rI  rL  probapredrO  rQ  r5   )rH  rx   r   rP  r6   1test_radius_neighbors_classifier_outlier_labeling/  s     6$rX  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 ]6}dd|fD ].}tj|||d	}|| | t jd
d t||	| W d    n1 sZw   Y  q1q*d S )NrN   r   r+   r,   r6  r7  rS   rT   r2  rL   )invalid)
rA   r  rR   ri   r   r   ro   rO   r   r   )	rx   r   r   r;  rS  weight_funcr`   r  r>  r5   r5   r6   .test_radius_neighbors_classifier_zero_distance  s$   r[  c                  C   s   t ddgddgddgddgg} t g d}d}t ddgddgg}t ddg}t ddg}t ddg}tD ]A}dD ]}tj|||d	}	|	| | t||	| q@td
dg||gD ]\}}
tj	d||d}|| | t|
|| qbq<d S )NrN   r         @)rN   r:   r   r   皙?皙?g      ?rS   rT   r2  rS   rT   r,   r  )
rA   r  ri   r   r   ro   r   r   r  r   )rx   r   r   zrnn_correct_labelsknn_correct_unifknn_correct_distr`   r  rnncorr_labelsr&  r5   r5   r6   'test_neighbors_regressors_zero_distance  s0   "rf  c                  C   s|   t dgdgdgg} d}tD ],}tj||d| }|jdggdd}|jdks+J |jt	ks2J 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.
    r:   r   gGz@r   r`   r   Fra   )r+   r   r+   N)rA   r  ri   r   rn   ro   r  r   r3   objectr   )rx   r   r`   r   r{   r5   r5   r6   'test_radius_neighbors_boundary_handling  s   ri  c                 C   s   | t d}|g d 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   r  r*      r   )r   r`   	leaf_sizer0   Tra   r   r2   r+   r,   r-   )rA   onessetdiagr   rn   ro   r  emptyr   rh  r  r   )r   rx   r   
neigh_dist	neigh_indexpected_distexpected_indr5   r5   r6   .test_radius_neighbors_returns_array_of_objects  s   44
rs  )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+   r5  r,   r`   F)r_   rb   )rA   r  r   rn   ro   sortrq   r   )r`   query_pointequidistant_pointskknn_indicesr   r   r5   r5   r6   test_query_equidistant_kth_nn  s   "rz  )r)   r'   r(   r   )r(   r   )r(   r   c           
      C   s  t |tj}t|trtd d}tjd}|	|df}|dkr,t
j|tjdd}t
j| |d}|| |j|tjd	d
\}}t|D ]}t|| t||  qG|dkr{tjtdd |j|tjd	dd W d    n1 svw   Y  |j|tjdd	d}	t|	sJ d S )Nr   rV   r   r.   r   rT   r   r   r   T)rx   r   sort_resultszreturn_distance must be Truer   F)rx   r   r|  rb   )rx   r   r   r|  )r7   rA   float64rj   r   rl   rm   rB   rC   r   r   r   rE   rn   ro   r  rr   r   ru  r   r   r   )
r`   r0   ru   rI   rx   modelr   r   iigraphr5   r5   r6   "test_radius_neighbors_sort_results  s2   



r  c                  C   s  t d} d}d}d}| ||}| dd||f}t||dd\}}}}	d ddtg}
tt|
D ]U\}}
g }t|D ]}tj	|
|d}|
||d d |f  ||| q9t|j}|j|	jkseJ tj	|
|d}|
|| ||}|j|	jksJ t|| q/d S )	Nr   r,   r  r-   r  rS   rT   r  r`   )r&   rF   r   r   rR   r   ri   rr   r   r   ro   rp   r   rA   vstackrG   r   r   )rI   r8   ru   n_outputrx   r   r   r   y_trainy_testr  r`   	y_pred_soord  rnn_mo	y_pred_mor5   r5   r6   *test_RadiusNeighborsClassifier_multioutputQ  s4   
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 ]}||d | |
 }|	|}t||d |  qHq%d S )	Nr,   r+   r]  r  r  r*   r_   r`   r   )rA   rB   rC   rF   r!  rh   r"  SPARSE_TYPESr   r   ro   asarrayr   r   )ru   r8   r$  r_   r  rI   rx   r   	sparsematr&  r'  sparsevX_epsr(  r5   r5   r6   !test_kneighbors_classifier_sparsew  s   
r  c                  C   sj  t d} d}d}d}| ||}| dd||f}t||dd\}}}}	d ddtg}
tt|
D ]\}}
g }g }t|D ]%}tj	|
|d}|
||d d |f  ||| ||| q;t|j}|j|	jksoJ t||kswJ tj	|
|d}|
|| ||}|j|	jksJ t|| ||}t||ksJ t||D ]	\}}t|| qq/d S )	Nr   rX   r   r-   r  rS   rT   r  )r&   rF   r   r   rR   r   ri   rr   r   r   ro   rp   r   r-  rA   r  rG   r   rs   r   r  )rI   r8   ru   r  rx   r   r   r   r  r  r  r`   r  y_pred_proba_sor  r&  knn_mor  y_pred_proba_moproba_moproba_sor5   r5   r6   %test_KNeighborsClassifier_multioutput  s<   


r  c                 C   s   t j|}d|| | d }t |d d}||  }|d | }t}	tD ]<}
dd|	fD ]4}t	j
|||
d}||| dd|d| d  }||d | | }t t|| dk seJ q1q*d S Nr,   r+   rS   rT   r  r   333333?)rA   rB   rC   rF   sqrtr!  maxrR   ri   r   r   ro   r   allr   )ru   r8   r$  r_   r  rI   rx   r   y_targetrZ  r`   r  r&  r'  r(  r5   r5   r6   test_kneighbors_regressor  s"   r  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sYJ |j|jksaJ t|| q(d S )Nr   rX   r  r.   r  rS   r  Fra   c                       g | ]}t j | d dqS r   r  rA   mean.0idxr  r5   r6   
<listcomp>      zGtest_KNeighborsRegressor_multioutput_uniform_weight.<locals>.<listcomp>)r&   rF   r   r   ri   r   r   ro   rq   rA   r  r   r   r   )rI   r8   ru   r  rx   r   r   r   r  r`   r  r&  	neigh_idx
y_pred_idxr(  r5   r  r6   3test_KNeighborsRegressor_multioutput_uniform_weight  s"   
r  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siJ t t || dk swJ q8d S r  )rA   rB   rC   rF   r  r!  r  r  rG   rR   r   ri   r   r   ro   r   r   r  r   )ru   r8   r$  r_   r  rI   rx   r   r  r  r`   r&  r'  r(  r5   r5   r6   %test_kneighbors_regressor_multioutput  s"   
r  c              	   C   sb  t j|}d|| | d }t |d d}||  }|d | }t}	tD ]>}
dd|	fD ]6}t	j
|||
d}||| dd|d| d  }||d | | }t t|| |d k sgJ q1q*dD ]C}t	j
||dd}||| t d|fd	}d
}tjtt|d ||}W d    n1 sw   Y  t t |sJ qkd S )Nr,   r+   rS   rT   r2  r   r_  r*   g      zNOne or more samples have no neighbors within specified radius; predicting NaN.r   )rA   rB   rC   rF   r  r!  r  rR   ri   r   r   ro   r   r  r   fullrl   r   rR  reescapeisnan)ru   r8   r$  r   r  rI   rx   r   r  rZ  r`   r  r|   r'  r(  
X_test_nanempty_warning_msgrW  r5   r5   r6   test_radius_neighbors_regressor  s:    
r  c                     s   t d} d}d}d}| ||}| ||}t||dd\}} }ttd dgD ]C\}	}
tj|
|	d}||  |j|dd	}t	
 fd
d|D }t	
|}||}|j|jks^J |j|jksfJ t|| q(d S )Nr   rX   r  r.   r  rS   r  Fra   c                    r  r  r  r  r  r5   r6   r  9  r  zQtest_RadiusNeighborsRegressor_multioutput_with_uniform_weight.<locals>.<listcomp>)r&   rF   r   r   ri   r   r   ro   r  rA   r  r   r   r   )rI   r8   ru   r  rx   r   r   r   r  r`   r  rd  r  r  r(  r5   r  r6   =test_RadiusNeighborsRegressor_multioutput_with_uniform_weight(  s$   

r  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shJ t t || dk svJ q8d S )Nr,   r+   rS   rT   r  r   r  )rA   rB   rC   rF   r  r!  r  r  rG   rR   r   ri   r   r   ro   r   r   r  r   )ru   r8   r$  r  rI   rx   r   r  r  r`   rd  r'  r(  r5   r5   r6   )test_RadiusNeighborsRegressor_multioutputC  s   
r  c              
   C   s4  t j|}d|| | d }|d jdddk t}tD ]x}tj	|dd}	|	
||| tj	|dd}
|

t|d	d
| tD ]S}||}t |	| |kdksYJ |t|d	d
}|tt v rd}tjt|d |
| W d    n1 sw   Y  qCt |
| |kdksJ qCqd S )Nr,   r+   r  g      ?r*   r  r   r  r   r   ffffff?z3not supported due to its handling of explicit zerosr   )rA   rB   rC   rF   r!  rh   r"  r  r   r   ro   r   SPARSE_OR_DENSEr  r   roundr$   r   rl   r   r   )ru   r8   r$  r_   r  rI   rx   r   r  r&  knn_prer  X2X2_prer  r5   r5   r6    test_kneighbors_regressor_sparseZ  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s<J tjd| d}|tjtj t
|tj tjkdks]J qd S )Nr+   r  rC  r  rX   )ri   r   r   ro   irisr   r   r   r   
set_paramsrA   r  r   r  )r`   r>  rgsr5   r5   r6   test_neighbors_irisz  s    &r  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s]J d S )	Nuint8g?r   r+   r(   r  FrZ   )digitsr   rh   r   r   r"  rA   r   r   r   ro   scorer*  )rx   r   ru   r8   train_test_boundarytrainr  r   Y_trainr   Y_testr>  score_uint8score_floatr5   r5   r6   test_neighbors_digits  s   
$r  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| g dg dg dg tj| dddd}t| g dg dg dg tj| dd	d
}t| g dg dg dg tj| dddd}t| g dg dg dg d S )Nr   r+   r7  rN   r,   connectivityTr   include_selfrT   r   r   r7  r   )r7  r   r   r   z?r   rN   rN   r   r   rN   rN   )r   r7  w@r7  r   r  )r  r  r   r-   )r+   r+   r+   )	rA   r  r   r   r   r   rH   r   r   rx   rJ   r5   r5   r6   test_kneighbors_graph  s&    
$r  r_   )r+   r,   r-   r   r  $   c                 C   N   t j|}|dd}||}ttj|| |d tj|| |d  d S NrV   r   )rA   rB   rC   r   r   r   r   r   r_   r   r   seedrI   rx   Xcsrr5   r5   r6   test_kneighbors_graph_sparse     r  c                  C   s   t ddgddgddgg} tj| dddd	}t| g d
g dg dg tj| ddd}t| g dg dg dg d S )Nr   r+   r7  rN   r,   r:   r  Tr  r  )rN   rN   rN   r  rT   r   r  r  r  )rA   r  r   r   r   r   r   r  r5   r5   r6   test_radius_neighbors_graph  s    r  c                 C   r  r  )rA   rB   rC   r   r   r   r   r   r  r5   r5   r6   "test_radius_neighbors_graph_sparse  r  r  	Estimatorc                 C   s   t d}||}t d}td}| ddd}d}tjt|d || W d	   n1 s2w   Y  d
}tjt|d t|	|| W d	   n1 sSw   Y  | ddd}|	|| d}tjt|d || W d	   n1 s}w   Y  |  }t
d}tjt|d |	tdtd W d	   n1 sw   Y  d}tjt|d |	|d	d	d	d	d	f | W d	   n1 sw   Y  |	|| t
d}tjt|d |g g W d	   d	S 1 sw   Y  d	S )z`Additional parameter validation for *Neighbors* estimators not covered by common
    validation.rV   r,   r   rV   r'   	haversiner   zinstance is not fitted yetr   Nz.Metric 'haversine' not valid for sparse input.r(   r0   r`   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))rI   r   rA   rl  rl   r   r   r   r   ro   r  r  )r  r   rx   XsparseX3r   r   r  r5   r5   r6   "test_neighbors_validate_parameters  sB   



 
"r  rU   r*   r(   c                 C   st   t d|f}td}| d|d}d}tjt|d ||| W d   n1 s,w   Y  |jdks8J 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".
    rV   r6  )r;   r`   zwMind that for 0 < p < 1, Minkowski metrics are not distance metrics. Continuing the execution with `algorithm='brute'`.r   Nr(   )	rI   r   rA   rl  rl   r   rR  ro   _fit_methodr  r8   r`   rx   r   r~  r  r5   r5   r6   -test_neighbors_minkowski_semimetric_algo_warn  s   
r  r)   r'   c                 C   sl   t d}td}| |dd}d| d}tjt|d ||| W d   dS 1 s/w   Y  dS )	zECheck that we raise a proper error if `algorithm!='brute'` and `p<1`.r  rV   r6  )r`   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)rI   r   rA   rl  rl   r   r   ro   r  r5   r5   r6   .test_neighbors_minkowski_semimetric_algo_error=  s   


"r  c                  C   s   t d} t | }d}tjt|d |j| dd W d   n1 s'w   Y  tjt|d |j	| dd W d   dS 1 sFw   Y  dS )z'Validate parameter of NearestNeighbors.r  zUUnsupported mode, must be one of "connectivity", or "distance" but got "blah" insteadr   blahr   N)
rI   r   r   rn   ro   rl   r   r   r   r   )rx   r   r  r5   r5   r6   &test_nearest_neighbors_validate_paramsX  s   
"r  pyfuncc              
   C   s   t j|}t|| }g d}|||j| dd}	|||j| dd}
t||}|D ]}t|tr5dn|t	j
d vpCd|v oCd|v }i }|dd}|D ]m}t|trc| t jkrcd	|v rctd
 t	j|||||d}|r|dkrtt ||	 W d    n1 sw   Y  qN|dkrtd d}t |	d d |f }	t |
d d |f }
||	 |j|
dd||< qN|d \}}|d \}}| t jkrdnd}t|||d t|| |s|d \}}t|||d t|| t|||d t|| q,d S )N)r(   r'   r)   FrZ   r)   r9   r<   r;   r,   r\   r]   r_   r`   r0   r;   metric_paramsr  Tra   r(   r'   gHz>g-C6?)rtol)rA   rB   rC   r7   rF   rh   rK   rj   r   r   VALID_METRICSpoprk   rl   rm   rn   r   r   ro   sliceascontiguousarrayrq   r}  r   r   )rt   global_random_seedr0   ru   r8   rv   r_   rI   
algorithmsr   r   metric_params_listr  exclude_kd_treer{   r;   r`   r|   
feature_sl	brute_dst	brute_idxball_tree_dstball_tree_idxr  kd_tree_dstkd_tree_idxr5   r5   r6   test_neighbors_metricsg  sf   






r  )categoryr     rj  c              	   C   sV  t j|}|||j|dd}|||j|dd}	| dkr;td d}
t |d d |
f }t |	d d |
f }	| tv rG|dk}|	dk}	t| |}|D ]Z}|	dd}t
j|d| ||d}|| tdd	 |j|	d
d\}}W d    n1 s~w   Y  td
d	 |j|	d
d\}}W d    n1 sw   Y  t|||| qNd S )NFrZ   r  r,   r  r;   r(   r  enable_cython_pairwise_distTra   )rA   rB   rC   rF   rh   r  r  r   rK   r  r   rn   ro   r   rq   r   )r0   rt   r  ru   r8   rv   r_   rI   r   r   r  r  r  r;   r|   legacy_brute_dstlegacy_brute_idxpdr_brute_dstpdr_brute_idxr5   r5   r6   test_kneighbors_brute_backend  sF   


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,   )rA   r  r!  )x1x2r5   r5   r6   custom_metric  s   z+test_callable_metric.<locals>.custom_metricr   r  r,   r-   r*   r^   r(   )	rA   rB   rC   rF   r   rn   ro   rq   r   )r  rx   nbrs1nbrs2r   r   r   r   r5   r5   r6   test_callable_metric  s   

r     c                 C   s  t || }t||j| dd}||}t||}|dkrItd}td}	tj|dd}
tj|	|dd}tj	ddd	}|
|
 || d S |D ]?}tj	dd
||d}|dkrjtd d}t|d d |f }|
| || |td v rtj	dd
|d
|}|| qKd S )NFrZ   r   r   r   r   r   r-   r  r*   r_   r`   r0   r  r  r,   r(   r^   )r7   rI   rF   rh   rK   r   r   r   r   rn   ro   rq   r  rA   r  r   )rt   r0   r   ru   r8   rx   r  r  X_precomputedY_precomputedr   r   nb_pr  r   r  r5   r5   r6   *test_valid_brute_metric_for_auto_algorithm  sF   








r  c                  C   sf   t dd} t ddd}tjddid}tt || | W d    d S 1 s,w   Y  d S )NrX   r   r,   r;   r-   )r  )	rI   rF   r   r   r   rl   r   SyntaxWarningro   )rx   r   r   r5   r5   r6   test_metric_params_interfaceB  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 ]$}||| t	
t || | W d    n1 sDw   Y  q%d S )Nr   rX   r,   r+   r)   rt  r'   )rA   rB   rC   rF   r   r   r   r   ro   rl   r   r   r   )r   rI   rx   r   r  r  r~  r5   r5   r6    test_predict_sparse_ball_kd_treeJ  s   r  c                  C   st  t jd} | dd}t| }t | |d }dD ]"}tj|d|ddd	 }tj
d|d	|}t|||	  qdD ]"}tj|||ddd	 }tj
||d
|}t|||	  qBtj
ddd	}|| tt tj|ddd W d    n1 sw   Y  tj
|dd}|| tt tj||dd W d    d S 1 sw   Y  d S )Nr   rX   rN  )	manhattan	chebyshevr-   r  T)r0   r   r  r  )r0   r   r  r   r   )r   r0   )rA   rB   rC   rF   r   flattenru  r   r   r   rn   ro   r   r   rl   r   r   )rI   rx   
dist_arrayr   r0   
nbrs_graphr  X_nbrsr5   r5   r6   test_non_euclidean_kneighborsW  s>   




"r"  c                 C   s$   t | D ]\}}t|||  qd S r   )	enumerater   )nparray
list_checkr  eler5   r5   r6   check_object_arrays{  s   r'  c                  C   s4  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,   r:   r   r   rN   rT   r   )ri   r   rn   ro   rq   r   r  r'  r   r   rA   r  r   )r`   r   rx   	test_datarP   r  rI   r5   r5   r6   .test_k_and_radius_neighbors_train_is_not_query  s*   
r)  c                 C   sF  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 qUddgddgddgg}t jd| d}|| t| 	 tg dg dg d	g d S )
Nr+   r  r   r:   r   r,   r  )rN   r   rN   )rN   rN   r   )r   rn   ro   rq   r   r  r'  r   r   r   r   r   rA   r  )r`   r   rx   rP   r  rI   kngr  r5   r5   r6   "test_k_and_radius_neighbors_X_None  s,   



r+  c                 C   s  t jd| d}dgdgdgg}|| |j|dd}t| tg dg dg dg t|jg d t|j	g d |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g dg dg dg |jdgdggd	dd}|  t| g dg dg t|j	g d t|jg d 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	g d t|  tg dg dg dg d S )Nr+   r  r   r-   rT   r   r  r   r:   r   r  )r   r   rN   r{  r,  )r+   r   r   )r   r+   r   r+   )r   r+   r+   r   )r-   r+   r(   r   )r+   r   r+   )r   rN   r   )rN   r   r   )r   rn   ro   r   r   r   rA   r  r   r   r  r'  r   sort_indicesrl  rq   zeros)r`   r   
duplicatesr*  rP   r  rI   rx   r5   r5   r6   &test_k_and_radius_neighbors_duplicates  sF   
  


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.   rX   r+   T)r  FrN   r   r  )r   r   r   r   r   )rx   r*  kng_not_selfrI   rng_not_selfr5   r5   r6   !test_include_self_neighbors_graph  s   r2  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 )
Nrj  rX   r   ru   r8   n_redundantr  r-   r  rT   r   n_jobs)r   make_classificationr   r   r   ro   r   rq   r   r   r  r   r   )r`   rx   r   r   r   r  r  r>  rP   r  r  
y_paralleldist_parallelind_parallelgraph_parallelr5   r5   r6   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|	| ||  qbt|
| d S )Nrj  rX   r   r3  rV   rg  rT   r   r-   r5  )r   r7  r   r   r   ro   r   r  r   r   r  r   rr   rs   r   )r`   rx   r   r   r   r  r  r>  rP   r  r  r8  r9  r:  r;  r}   r5   r5   r6   #test_same_radius_neighbors_parallel  s&   



r=  backend	threadinglokyc           	      C   s   t | < tjddddd\}}t||\}}}}tjd|dd}||| || |	| |j
|dd	 W d    d S 1 sDw   Y  d S )
Nrj  rX   r   r3  r-   r,   )r_   r`   r6  rT   r   )joblibparallel_backendr   r7  r   r   r   ro   r   rq   r   )	r>  r`   rx   r   r   r   r  r  r>  r5   r5   r6   test_knn_forcing_backend3  s   


"rC  c                  C   sP   t jdd} d}t|}dd dd | D }| |||}t|| d S )Nr+   r   rN  c                 S   s   g | ]}|qS r5   r5   )r  chr5   r5   r6   r  K      z&test_dtype_convert.<locals>.<listcomp>ABCDEFGHIJKLMNOPQRSTU)r   r   rA   rH   ro   r   r   )
classifierCLASSESrx   r   resultr5   r5   r6   test_dtype_convertG  s   
rJ  c                 C   s~   dd }| g dg dg dg}| g dg d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
J | |j  S r   )r   dotrG   r   item)xr   r5   r5   r6   sparse_metricS  s   z2test_sparse_metric_callable.<locals>.sparse_metric)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_   r0   Fra   r+   )r   rn   ro   rq   rA   r  r   )r   rN  rx   r   r   Ngold_standard_nnr5   r5   r6   test_sparse_metric_callableQ  s   rQ  z0ignore::sklearn.exceptions.DataConversionWarningc                  C   sd   t jd} | jdd}tj}|ddd|}|ddd|}t||d ||d  d S )Nr   )r@  rX   r   jaccardr(   r  r'   )	rA   rB   rC   rS   r   rn   ro   r   rq   )rI   rx   NNnn1nn2r5   r5   r6   test_pairwise_boolean_distancei  s   "rV  c               	   C   s   t dD ]O} 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 )NrX   r   r-   r   )ru   r8   n_informativer4  	n_classesr  r  r,   rD  r+   r  )rr   r   r7  r   r"  r   r   ro   r   r-  argmaxrA   wherer!  r   )r  rx   r   X_trX_tey_try_ter4  r>  rW  rV  proba_labelr5   r5   r6   #test_radius_neighbors_predict_probaw  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 ]0\}}t
|}t
|}|jdd tt
||}||||}||||}t|| qfd S )Nr   r,   r  rX   r+   r  r:   rT   )r_   r   r{  r   r   r   r   )rA   rB   rC   rF   r   KNeighborsTransformerr"  RadiusNeighborsTransformerr   r   r   r  r   ro   r   r   )rI   rx   r  r   r_   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_compactr5   r5   r6   0test_pipeline_with_nearest_neighbors_transformer  s>   rr  z'X, metric, metric_params, expected_algor   r   rB  r=   r>   correlationc                 C   s.   t jdd||d}||  |j|ksJ d S )Nr.   r*   r  )r   rn   ro   r  )rx   r0   r  expected_algor~  r5   r5   r6   test_auto_algorithm  s
   
ru  rN   c              	   C   sD  t j|}|||j|dd}|||j|dd}	| dkr;t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 d    n1 srw   Y  td	d |j|	d	d
\}}W d    n1 sw   Y  t|||||dd qBd S )NFrZ   r  r,   r;   r(   )r   r`   r0   r;   r  r  Tra   )r   check_sorted)rA   rB   rC   rF   rh   r  r  rK   r  r   rn   ro   r   r  r   )r0   r  rt   ru   r8   rv   r   rI   r   r   r  r  r  r;   r|   r  r	  r
  r  r5   r5   r6   #test_radius_neighbors_brute_backend  sJ   


rw  c                  C   s,   t j D ]} t| tt| ksJ qd S r   )r   r  valuesrs   set)valr5   r5   r6   #test_valid_metrics_has_no_duplicate	  s   r{  c                  C   sb   ddgddgddgddgg} g d}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.
    rX   r+   r-   r.   r   )r,   r-   rX   r@  c                 S   s
   t | S r   )rA   	ones_likerP   r5   r5   r6   _weights	  s   
z6test_regressor_predict_on_arraylikes.<locals>._weightsr(   )r_   r`   r  r\  r@  N)r   ro   r   r   )rx   r   r~  r   r5   r5   r6   $test_regressor_predict_on_arraylikes	  s   r  zEstimator, paramsr   r:   c                 C   s   ddgdt jgddgddgg}g d}|ddi |  jdi |||}d	D ]'}t||rPt|||}t|d
rGt |j	 rFJ q)t |	 rPJ q)dS )zyCheck that the different neighbor estimators are lenient towards `nan`
    values if using `metric="nan_euclidean"`.
    r   r+   r,   r-   rX   r   r   r+   r+   r0   nan_euclidean)rq   r   	transformfit_predictr   Nr5   )
rA   nanupdater  ro   hasattrr   r  r   any)r  paramsrx   r   	estimatorresponse_methodoutputr5   r5   r6   test_nan_euclidean_support"	  s   

r  c                  C   sj   t d} | jtddgddgddgdd	ggd
dgd}tg d}tjdd||}|| dS )z[Check that KNN predict works with dataframes

    non-regression test for issue #26768
    pandasr+   r,   r-   r.   rX   r@  rA  rB  rK  b)columns)r+   r,   r-   r.   r   N)	rl   importorskip	DataFramerA   r  r   r   ro   r   )pdrx   r   r&  r5   r5   r6   test_predict_dataframeB	  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 g d |j| d d	d
dd}t|d g d dS )zCheck that NearestNeighbors works with :math:`p \in (0,1)` when `algorithm`
    is `"auto"` or `"brute"` regardless of the dtype of X.

    Non-regression test for issue #26548
    rN   r   r-   r(   r;   r  )r_   r`   r  r   r+   r5  r.   F)r   rb   r   ra   N)	rA   r  r   rn   ro   r  r   r   rq   )rx   r|   r   r5   r5   r6   0test_nearest_neighbours_works_with_p_less_than_1P	  s   

r  c                  C   s   ddgddgddgddgg} g d}dd }t jd|d	}|| | d
}tjt|d |ddgg W d   n1 s?w   Y  tjt|d |ddgg W d   dS 1 s_w   Y  dS )zrCheck that `predict` and `predict_proba` raises on sample of all zeros weights.

    Related to Issue #25854.
    r   r+   r,   r-   r.   r  c                 S   s   t dd | S )Nc                 S   s   | dkrdS dS )Nr  r   r+   r5   )rM  r5   r5   r6   <lambda>l	  rE  zWtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weights.<locals>.<lambda>)rA   	vectorizer}  r5   r5   r6   r~  k	  s   zEtest_KNeighborsClassifier_raise_on_all_zero_weights.<locals>._weights)r_   r  zAll neighbors of some sample is getting zero weights. Please modify 'weights' to avoid this case if you are using a user-defined function.r   r^  N)r   r   ro   rl   r   r   r   r-  )rx   r   r~  r   r  r5   r5   r6   3test_KNeighborsClassifier_raise_on_all_zero_weightsc	  s   "r  nn_modelr   c                 C   s   t jddddd\}}t| j|d} d|  v r/t| }||dk }| jt|dd	 t	| ||t
 d
}| || t|| d|k t|t| d|ksXJ | d|| ||k sfJ dS )a  Check that `predict` and related functions work fine with X=None

    Calling predict with X=None computes a prediction for each training point
    from the labels of its neighbors (without the label of the data point being
    predicted upon). This is therefore mathematically equivalent to
    leave-one-out cross-validation without having do any retraining (rebuilding
    a KD-tree or Ball-tree index) or any data reshuffling.
    rN  rX   r,   r   )ru   centersr8   r  rt  r   P   r   cvN)r   
make_blobsr   r  
get_paramsr   ravelrA   
percentiler   r   ro   r   r   r  rl   approxr  r  r`   rx   r   distsloocvr5   r5   r6   test_neighbor_classifiers_loocv~	  s     r  c                 C   s   t jdddd\}}t| j|d} d|  v r.t| }||dk }| jt|dd t	| ||t
 d	}| || t|| d
 d
S )z@Check that `predict` and related functions work fine with X=NonerN  r,   r   )ru   r8   r  rt  r   r  r   r  N)r   make_regressionr   r  r  r   r  rA   r  r   r   ro   r   r   r  r5   r5   r6   test_neighbor_regressors_loocv	  s   

r  r   )r  rX   r,   r  r   )r  rX   rV   rX   r   )r  rX   rV   r  r   )r  rX   rV   r-   r   )r  r-   rV   r  r   )r  rX   rV   r   )r  )r  r-   r,   rX   )r  rj  rX   rX   )r  r  )r  rj  rX   rN   )r  r   	itertoolsr   rA  numpyrA   rl   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&   rB   rC   rI   	load_irisr  permutationr   r   permr   load_digitsr  tupler  r  r  ri   sortedry  intersectionmapr  rx  COMMON_VALID_METRICSrE   r  r   r   DISTANCE_METRIC_OBJSr#  r7   r"  rK   rR   WEIGHTSmarkparametrizer   r   r   r   r   rn   r   r   filterwarningsr   r   r   r   r   r   r   r   r   r  r  r  r)  r+  r1  r3  r?  rX  r[  rf  ri  rs  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  DeprecationWarningr  r  r  r  r  r"  r'  r)  r+  r/  r2  r<  r=  rC  rJ  rQ  rV  r`  rr  r   r   ru  rw  r{  r  ra  rb  LocalOutlierFactorr  r  r  r  r  r  r5   r5   r5   r6   <module>   s   $	
M	C

	
7







	*#}!



%'-'
 	%		Q7,
$

1





.
9

!
