o
    \iE                     @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ g d	ZdRdededefddZdd Z dd Z!		dSddZ"dddddddddZ#			dTddZ$ddd Z%d!dd Z&eej'fee"fi e&eej(fee"fi e%eej'fee$fi e&eej(fee$fi e%iZ)d"d# Z*ej+,d$dd%gd&d' Z-ej+,d(ed)d* Z.d+d, Z/d-d. Z0d/d0 Z1d1d2 Z2ej+,d3eegej+,d4ej'ej(g	5dUd6d7Z3ej+,d3eegej+,d4ej'ej(g	5dUd8d9Z4ej+,d:eej'feej(feej(feej'fgej+,d(ed;d< Z5ej+,d3eeg	dVd=d>Z6ej+,deej+,d?d@ej+,d4ej'ej(gej+,d(e	A	5	dWdBdCZ7ej+,deej+,d?d@ej+,d4ej'ej(g	A	5dXdDdEZ8ej+,d3eegej+,ddFdGgej+,d4ej'ej(gdHdI Z9ej+,d4ej'ej(gej+,d(edJdK Z:dLdM Z;ej+,dNg dOdPdQ Z<dS )Y    N)partial)cdist)euclidean_distancespairwise_distances)ArgKminArgKminClassMode BaseDistancesReductionDispatcherRadiusNeighborsRadiusNeighborsClassModesqeuclidean_row_norms)assert_allcloseassert_array_equalcreate_memmap_backed_data)CSR_CONTAINERS)_get_threadpool_controller)
braycurtiscanberra	chebyshev	cityblock	euclidean	minkowski
seuclidean   metric
n_featuresseedc              	   C   sn   t j|}| dkr'tddtddtddtt jdtd||dg}|S | dkr4t||dgS i gS )	z5Return list of dummy DistanceMetric kwargs for tests.r   g      ?)p      )r   wr   )V)nprandomRandomStatedictinfrand)r   r   r   rngminkowski_kwargs r)   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_pairwise_distances_reduction.py_get_metric_params_list+   s   
r+   c                 C   s   t t||}t t||}t|t|}	|	D ]8}
||
 }||
 }z
t||||d W q tyQ } ztd|  d|
 d| d| d| d| d|d	}~ww d	S )
zCheck that the distances of common neighbors are equal up to tolerance.

    This does not check if there are missing neighbors in either result set.
    Missingness is handled by assert_no_missing_neighbors.
    )rtolatolQuery vector with index z< lead to different distances for common neighbor with index z	: dist_a=z vs dist_b=z (with atol=z
 and rtol=)N)r$   zipsetintersectionr   AssertionError)	query_idx
dist_row_a
dist_row_bindices_row_aindices_row_br,   r-   indices_to_dist_aindices_to_dist_bcommon_indicesidxdist_adist_ber)   r)   r*   *assert_same_distances_for_common_neighborsD   s6   r@   c           
      C   s   ||k }||k }t || |}t || |}	t|	dks$t|dkr>td|  d|	 d| d| d| d| d| d	d
S )a  Compare the indices of neighbors in two results sets.

    Any neighbor index with a distance below the precision threshold should
    match one in the other result set. We ignore the last few neighbors beyond
    the threshold as those can typically be missing due to rounding errors.

    For radius queries, the threshold is just the radius minus the expected
    precision level.

    For k-NN queries, it is the maximum distance to the k-th neighbor minus the
    expected precision level.
    r   r.   zC lead to mismatched result indices:
neighbors in b missing from a: z 
neighbors in a missing from b: z
dist_row_a=z
dist_row_b=z
indices_row_a=z
indices_row_b=
N)r!   	setdiff1dlenr3   )
r4   r5   r6   r7   r8   	thresholdmask_amask_bmissing_from_bmissing_from_ar)   r)   r*   assert_no_missing_neighborsj   s*   rI   h㈵>ư>c              	   C   s   dd }| j |j   kr|j   kr|j ksJ d J d| j \}}t|D ]M}	| |	 }
||	 }||	 }||	 }||
sEJ d|	 ||sPJ d|	 t|	|
||||| d| tt|
t| | }t|	|
|||| q(dS )a  Assert that argkmin results are valid up to rounding errors.

    This function asserts that the results of argkmin queries are valid up to:
    - rounding error tolerance on distance values;
    - permutations of indices for distances values that differ up to the
      expected precision level.

    Furthermore, the distances must be sorted.

    To be used for testing neighbors queries on float32 datasets: we accept
    neighbors rank swaps only if they are caused by small rounding errors on
    the distance computations.
    c                 S      t | d d | dd  kS Nr   r!   allar)   r)   r*   <lambda>       z3assert_compatible_argkmin_results.<locals>.<lambda>z+Arrays of results have incompatible shapes.Distances aren't sorted on row r   N)shaperanger@   r!   maximummaxrI   )neighbors_dists_aneighbors_dists_bneighbors_indices_aneighbors_indices_br,   r-   	is_sorted	n_queries_r4   r5   r6   r7   r8   rD   r)   r)   r*   !assert_compatible_argkmin_results   sV   

ra   
   )XYr   precomputed_distsexpected_n_neighborsn_subsampled_queriesc                 K   s   |d us|d usJ d|d u r(| d usJ |d usJ t | |fd|i|}n|d |  }|jdd |d d |f  S )Nz4Either metric or precomputed_dists must be provided.r   r   axis)r   copysortmean)rc   rd   r   re   rf   rg   metric_kwargssampled_distsr)   r)   r*   _non_trivial_radius   s   ro   Tc              	   C   sv  dd }t | t |  krt |  krt |ksJ  J t | }	t|	D ]}
| |
 }||
 }||
 }||
 }|rQ||sFJ d|
 ||sQJ d|
 t |t |ks[J t |t |kseJ t |dkrt|}||ksJ d| d| d|
 t |dkrt|}||ksJ d| d| d|
 t|
|||||| d| | | }t|
||||| q'd	S )
a&  Assert that radius neighborhood results are valid up to:

      - relative and absolute tolerance on computed distance values
      - permutations of indices for distances values that differ up to
        a precision level
      - missing or extra last elements if their distance is
        close to the radius

    To be used for testing neighbors queries on float32 datasets: we
    accept neighbors rank swaps only if they are caused by small
    rounding errors on the distance computations.

    Input arrays must be sorted w.r.t distances.
    c                 S   rL   rM   rO   rQ   r)   r)   r*   rS     rT   z2assert_compatible_radius_results.<locals>.<lambda>rU   r   zLargest returned distance z not within requested radius z on row r   N)rC   rW   r!   rY   r@   rI   )rZ   r[   r\   r]   radiuscheck_sortedr,   r-   r^   r_   r4   r5   r6   r7   r8   
max_dist_a
max_dist_brD   r)   r)   r*    assert_compatible_radius_results   sp   




rt   Hz>r-   r,   g&.>c               
   C   s  d} d}t | |d}| d }d| }d| }d| }d| }tdd|d|g||d	||gg}tg d
g dg}	t|||	|	| ttdd|d|ggtdd|d|ggtg d
gtg dgfi | ttdddd|ggtddd|dggtg d
gtg dgfi | tt|d	|||ggtd	d	d	d	|ggtg dgtg dgfi | tt|d	|||ggt|d	d	d	|ggtg dgtg dgfi | td}
tjt|
d1 ttdd|d|ggtdd|d|ggtg d
gtg dgfi | W d    n	1 s'w   Y  td}
tjt|
d1 ttdd|d|ggtdd|d|ggtg d
gtg dgfi | W d    n	1 smw   Y  td}
tjt|
d1 tt|d|d|ggtdd|ddggtg d
gtg dgfi | W d    n	1 sw   Y  td}
tjt|
d1 tt|d|ddggtdd|d|ggtg dgtg dgfi | W d    n	1 sw   Y  d}
tjt|
d2 ttdd|d|ggtdd|d|ggtg d
gtg dgfi | W d    d S 1 s=w   Y  d S ) Nru           rv   r         ?ffffff@333333?      @r   r   r   r                  	   rb   )r   r   r~   r}   r   g      @)r   r   r   r   r   )r   r   r   rb   r   r   r   r   r   rb   )"      r         )*   r         r   pQuery vector with index 0 lead to different distances for common neighbor with index 1: dist_a=1.2 vs dist_b=2.5matchr   r   r   r}   r~   zFneighbors in b missing from a: [12]
neighbors in a missing from b: [1])r   r   r}      r   zDneighbors in b missing from a: []
neighbors in a missing from b: [3]r   )r   r   r}   r~   r   zDneighbors in b missing from a: [5]
neighbors in a missing from b: [])r   r   r   r}   r   )r   r   r~   r   r}    Distances aren't sorted on row 0r   r   r}   r~   r   )	r$   r!   arrayra   reescapepytestraisesr3   )r-   r,   tolseps_1m_1p_6_1m_6_1pref_distref_indicesmsgr)   r)   r*   &test_assert_compatible_argkmin_results_  s   





$r   rq   Fc                 C   s>  d}d}t ||d}|d }d| }d| }d| }d| }tdd|d|gt|d	||gg}	tg d
tg dg}
t|	|	|
|
fd| d| tttdd|d|ggttdd|d|ggttg d
gttg dgfd| d| ttt||d	||ggtt||d	||ggttg dgttg dgfd| d| td}tjt|d@ tttdd|d|ggttdd|d|ggttg d
gttg dgfd| d| W d    n	1 sw   Y  tttdd|d||ggttdd|dggttg dgttg dgf|| d| td}tjt|d: tttg dgttddggttg dgttd	dggfd| d| W d    n	1 sw   Y  td}tjt|d: tttg dgttg dgttg dgttg dgfd| d| W d    n	1 sw   Y  td}tjt|d@ tttdd|d|ggttdd|ddggttg d
gttg dgfd| d| W d    n	1 s8w   Y  tjt|d@ tttdd|ddggttdd|d|ggttg d
gttg dgfd| d| W d    n	1 sw   Y  | rd }tjt|dA tttdd|d|ggttdd|d|ggttg d
gttg dgf|d!d| W d    d S 1 sw   Y  d S tttdd|d|ggttdd|d|ggttg d
gttg dgf|d"d| d S )#Nru   rw   rv   r   rx   ry   rz   r{   r   r|   )r   r   r   r   g      @)rp   rq   )r   r   r}   r~   r   r   r   r   r   r   )r   r   r   r}   r~   r   )r   r   r   r   zQuery vector with index 0 lead to mismatched result indices:
neighbors in b missing from a: []
neighbors in a missing from b: [3])rz   r{   r   )r   r   r   r   zQuery vector with index 0 lead to mismatched result indices:
neighbors in b missing from a: [4]
neighbors in a missing from b: [2])rz   g @r{   )rz   r   r{   )r   r}   r   zTLargest returned distance 6.100000033333333 not within requested radius 6.1 on row 0r   r   TF)	r$   r!   r   rt   r   r   r   r   r3   )rq   r-   r,   r   r   r   r   r   r   r   r   r   r)   r)   r*   %test_assert_compatible_radius_results  sB  	

$
r   csr_containerc           	      C   s  t jd}|dd}|dd}| |}| |}d}t|||s%J t|||s.J t|||s7J t|||s@J t|t j|t j|sQJ t|t j|t j|sbJ t|t j	|t j	|rsJ tj||ddr}J t|t j||rJ t||t j
|rJ tt |||rJ tj||ddsJ tj||ddsJ tj||ddrJ tj||ddrJ | |d }t|||rJ | |}|jt j	|_t|||rJ d S )	Nr   d   rb   	manhattanpyfunc)r   r   sqeuclidean)r!   r"   r#   r&   r   is_usable_forastypefloat64float32int64int32asfortranarrayindices)	r   r'   rc   rd   X_csrY_csrr   X_csr_0_nnzX_csr_int64r)   r)   r*   /test_pairwise_distances_reduction_is_usable_for  sX   


r   c            	      C   s  t jd} | dd}| dd}d}d}d}tjt|d tj|	t j
|||d W d    n1 s7w   Y  d	}tjt|d tj||	t j||d W d    n1 s]w   Y  tjtd
d tj||d|d W d    n1 s}w   Y  tjtdd tj||d|d W d    n1 sw   Y  tjtdd tj|||dd W d    n1 sw   Y  tjtdd tjt ddg|||d W d    n1 sw   Y  tjtdd tjt ||||d W d    n	1 sw   Y  ddi}d}tjt|d tj|||||d W d    n	1 s.w   Y  dt|ddd}d}tjt|d tj|||||d W d    n	1 s[w   Y  dt|ddi}t  tjdtd tj|||||d W d    n	1 sw   Y  t|ddt|ddd}t  tjdtd tj|||||d W d    d S 1 sw   Y  d S ) Nr   r   rb   r~   r   kOnly float64 or float32 datasets pairs are supported at this time, got: X.dtype=float32 and Y.dtype=float64r   )rc   rd   kr   iOnly float64 or float32 datasets pairs are supported at this time, got: X.dtype=float64 and Y.dtype=int32k == -1, must be >= 1.rN   k == 0, must be >= 1.r   Unrecognized metricwrong metric;Buffer has wrong number of dimensions \(expected 2, got 1\)rx          @ndarray is not C-contiguousr   r   4Some metric_kwargs have been passed \({'p': 3}\) but)rc   rd   r   r   rm   r   num_threadsr   Y_norm_squared?Some metric_kwargs have been passed \({'p': 3, 'Y_norm_squared'X_norm_squarederrorcategoryr   r   )r!   r"   r#   r&   r   r   
ValueErrorr   computer   r   r   r   r   warnsUserWarningr   warningscatch_warningssimplefilter)	r'   rc   rd   r   r   r   unused_metric_kwargsmessagerm   r)   r)   r*   (test_argkmin_factory_method_wrong_usages  sv   





$r   c               
   C   s  t jd} | dd}| dd}d}d}d}| jdddd}t |}d	}tjt|d
 t	j
|t j||||||d W d    n1 sIw   Y  d}tjt|d
 t	j
||t j|||||d W d    n1 srw   Y  tjtdd
 t	j
||d||||d W d    n1 sw   Y  tjtdd
 t	j
||d||||d W d    n1 sw   Y  tjtdd
 t	j
|||d|||d W d    n1 sw   Y  tjtdd
 t	j
t ddg||||||d W d    n	1 sw   Y  tjtdd
 t	j
t |||||||d W d    n	1 s+w   Y  d}	d|	 d}
tjt|
d
 t	j
|||||	||d W d    d S 1 sXw   Y  d S )Nr   r   rb   r~   r   uniformr   lowhighsizer   r   )rc   rd   r   r   weightsY_labelsunique_Y_labelsr   r   rN   r   r   r   r   rx   r   r   non_existent_weights_strategy[Only the 'uniform' or 'distance' weights options are supported at this time. Got: weights=''.)r!   r"   r#   r&   randintuniquer   r   r   r   r   r   r   r   r   r   )r'   rc   rd   r   r   r   r   r   r   r   r   r)   r)   r*   2test_argkmin_classmode_factory_method_wrong_usages  s   


$r   c            	      C   sF  t jd} | dd}| dd}d}d}d}tjt|d tj|	t j
|||d W d    n1 s7w   Y  d	}tjt|d tj||	t j||d W d    n1 s]w   Y  tjtd
d tj||d|d W d    n1 s}w   Y  tjtdd tj|||dd W d    n1 sw   Y  tjtdd tjt ddg|||d W d    n1 sw   Y  tjtdd tjt ||||d W d    n1 sw   Y  ddi}d}tjt|d tj|||||d W d    n	1 sw   Y  dt|ddd}d}tjt|d tj|||||d W d    n	1 s:w   Y  t|ddt|ddd}t  tjdtd tj|||||d W d    n	1 smw   Y  dt|ddi}t  tjdtd tj|||||d W d    d S 1 sw   Y  d S )Nr   r   rb   r~   r   r   r   )rc   rd   rp   r   r   radius == -1.0, must be >= 0.rN   r   r   r   rx   r   r   r   r   r   )rc   rd   rp   r   rm   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'   rc   rd   rp   r   r   r   r   rm   r)   r)   r*   1test_radius_neighbors_factory_method_wrong_usages  s   	








$r   c            
      C   s  t jd} | dd}| dd}d}d}d}| jdddd}t |}d	}tjt|d
 t	j
|t j||||||d d W d    n1 sJw   Y  d}tjt|d
 t	j
||t j|||||d d W d    n1 stw   Y  tjtdd
 t	j
||d||||d d W d    n1 sw   Y  tjtdd
 t	j
||dd|||d d W d    n1 sw   Y  tjtdd
 t	j
t ddg||||||d d W d    n1 sw   Y  tjtdd
 t	j
t |||||||d d W d    n	1 sw   Y  d}	d|	 d}tjt|d
 t	j
|||d|	||d d W d    d S 1 s;w   Y  d S )Nr   r   rb   r~   r   r   r   r   r   r   )rc   rd   rp   r   r   r   r   outlier_labelr   r   rN   r   wrong_metricr   rx   r   r   r   r   r   )r!   r"   r#   r&   r   r   r   r   r   r
   r   r   r   r   r   r   )
r'   rc   rd   rp   r   r   r   r   r   r   r)   r)   r*   ;test_radius_neighbors_classmode_factory_method_wrong_usages  s   


$r   
Dispatcherdtyper   c                 C   s   t j| }d}|jg dddd\}}||||| }||||| }	|tu r5d}
i }i }nt||	dd}|}
d	|i}d
di}|j||	|
fdddd|\}}|j||	|
fdddd|\}}t	||f ||||fi | dS )z3Check that results do not depend on the chunk size.r   a   r   e     r   Fr   replacerb   r   rc   rd   r   rp   sort_resultsT   r   )
chunk_sizer   return_distance)   N)
r!   r"   r#   choicer&   r   r   ro   r   ASSERT_RESULT)global_random_seedr   r   r   r'   spreadn_samples_Xn_samples_Yrc   rd   	parametercheck_parameterscompute_parametersrp   r   r   distr   r)   r)   r*   test_chunk_size_agnosticism_  sP   	





r   c                 C   s  t j| }|jg dddd\}}d}||||| }||||| }	|tu r5d}
i }i }nt||	dd}|}
d	|i}d
di}|j||	|
fddd|\}}t	 j
ddd |j||	|
fddd|\}}W d   n1 syw   Y  t||f ||||fi | dS )z:Check that results do not depend on the number of threads.r   r   Fr   r   rb   r   r   rp   r   T   r   r   r   openmp)limitsuser_apiN)r!   r"   r#   r   r&   r   r   ro   r   r   limitr   )r   r   r   r   r'   r   r   r   rc   rd   r   r   r   rp   r   r   r   r   r)   r)   r*   test_n_threads_agnosticism  sP   	
	


r  zDispatcher, dtypec                 C   s  t j| }d}d\}}||||| }||||| }	||}
||	}|tu r5d}i }i }nt||	dd}|}d|i}ddi}|j||	|fd	dd
|\}}t	||
f|	|fD ],\}}||u rm||	u rmq`|j|||fd	dd
|\}}t
||f ||||fi | q`dS )zLCheck that results do not depend on the format (dense, sparse) of the input.r   )r   r   rb   r   r   rp   r   T2   r  N)r!   r"   r#   r&   r   r   ro   r   	itertoolsproductr   )r   r   r   r   r'   r   	n_samplesr   rc   rd   r   r   r   r   r   rp   
dist_denseindices_dense_X_Yr   r   r)   r)   r*   test_format_agnosticism  s^   
	

r  c                 C   sr  t j| }|t jg dtd}|jg dddd\}}d}||||| }	||||| }
|dkrTt |	d	d	d	df }	t |
d	d	d	df }
|t	u r_d
}i }i }nt
|	|
|d}|}d|i}ddi}|j|	|
|f|t||| dd |d ddd|\}}|j|	|
|f|t||| dd |d ddd|\}}t||f ||||fi | d	S )z:Check that the results do not depend on the strategy used.)r   r   r   	haversiner   r   r   Fr   r   r  Nrb   r   rp   r   Tr   r   r}   parallel_on_X)r   rm   r   strategyr   parallel_on_Y)r!   r"   r#   r   r   objectr&   r   ascontiguousarrayr   ro   r   r+   r   )r   global_dtyper   r   r'   r   r   r   r   rc   rd   r   r   r   rp   
dist_par_Xindices_par_X
dist_par_Yindices_par_Yr)   r)   r*   test_strategies_consistency  sz   



r  r  )r  r  r~   c                 C   s  t j| }|ddg}	|ddg}
d}|
|||	||  }|
|||	||  }||}||}|dkrVt |d d d df }t |d d d df }t||	d }|dkrgt||}nt	||fd	|i|}t j
|d
dd d d |f }t j|jt jd}t|jd D ]}|||| f ||< qt||f||fD ] \}}tj|||||d|d |d\}}tt|f |||| qd S )Nr  r   r       .A  r  r   r   r   r   rh   r  Tr}   )r   rm   r   r   r  )r!   r"   r#   r   r&   r   r  r+   r   r   argsortzerosrV   r   rW   r  r	  r   r   r   )r   r   r  r   r   r_   r
  r   r'   r   translationr   rc   rd   r   r   rm   dist_matrixargkmin_indices_refargkmin_distances_refrow_idxr  r  argkmin_distancesargkmin_indicesr)   r)   r*   test_pairwise_distances_argkminV  sN   



r)  c                 C   sH  t j| }|ddg}|ddg}d}	||||||	  }
||||||	  }t||| dd }|dkrCt|
|}nt|
|fd|i|}t	|d	}g }g }|D ]*}t 
|jd ||k }|| }t |}|| || }}|| || qYtj|
||||d
|d |d
d	\}}tt|f ||||| d S )Nr  r   r   r  r  r  r   r   )re   Tr}   )r   rm   r   r   r  r   )r!   r"   r#   r   r&   r   r+   r   r   ro   arangerV   r   appendr	   r   r   )r   r   r  r   r_   r
  r'   r   r"  r   rc   rd   rm   r#  rp   neigh_indices_refneigh_distances_refrowindr   rk   neigh_distancesneigh_indicesr)   r)   r*   (test_pairwise_distances_radius_neighbors  sL   





r2  r   r   c                 C   s   t jd}d}d\}}||||| }||||| }t||g\}	}
|tu r5d}i }i }ndt | }|}d|i}ddi}|j|||f| dd|\}}|j|	|
|f| dd|\}}t	||f ||||fi | d	S )
zACheck that the results do not depend on the datasets writability.r   r   )   rb   rb   rp   r   T)r   r   N)
r!   r"   r#   r&   r   r   r   logr   r   )r   r   r   r'   r   r
  r   rc   rd   X_mmY_mmr   r   r   rp   r   r   dist_mm
indices_mmr)   r)   r*   test_memmap_backed_data  sN   	
	

	
r9  c                 C   s   t j| }d}|g d}|g d}|g d}||||| }||}	t jj|ddd }
t||d}t|	|d}t	|
| t	|
| t
t t |}t||d W d    d S 1 shw   Y  d S )	Nr   )r   r   r   r  )r~   rb   r   )r   r   r   r   rh   r   r   )r!   r"   r#   r   r&   r   linalgnormr   r   r   r   r   r   )r   r   r   r'   r   r
  r   r   rc   r   sq_row_norm_referencesq_row_normsq_row_norm_csrr)   r)   r*   test_sqeuclidean_row_norms  s    


"r?  c            
   
   C   s   t jd} | dd}| dd}d}d}d}| jdddd}t |}tj|||||||d	d
}tj|||||||dd
}	t||	 d S )Nr   r   rb   r~   r   r   r   r   r  )rc   rd   r   r   r   r   r   r  r  )	r!   r"   r#   r&   r   r   r   r   r   )
r'   rc   rd   r   r   r   r   r   	results_X	results_Yr)   r)   r*   *test_argkmin_classmode_strategy_consistent)  s:   


rB  r   )Nr   r   r   r   c                 C   s   t jd}|dd}|dd}d}d}d}|jdddd}t |}tj|||||||| d	d
	}	tj|||||||| dd
	}
t|	|
 d S )Nr   r   rb   r~   r   r   r   r   r  )	rc   rd   rp   r   r   r   r   r   r  r  )	r!   r"   r#   r&   r   r   r
   r   r   )r   r'   rc   rd   rp   r   r   r   r   r@  rA  r)   r)   r*   3test_radius_neighbors_classmode_strategy_consistentJ  s>   
rC  )r   )rJ   rK   )TrJ   rK   )r   )rb   )r~   r   rb   )r~   r   )=r  r   r   	functoolsr   numpyr!   r   scipy.spatial.distancer   sklearn.metricsr   r   -sklearn.metrics._pairwise_distances_reductionr   r   r   r	   r
   r   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   sklearn.utils.parallelr   1CDIST_PAIRWISE_DISTANCES_REDUCTION_COMMON_METRICSstrintr+   r@   rI   ra   ro   rt   FLOAT32_TOLSFLOAT64_TOLSr   r   r   r   markparametrizer   r   r   r   r   r   r   r  r  r  r)  r2  r9  r?  rB  rC  r)   r)   r)   r*   <module>   s     &)
L#
U 
 #
DMv\n0/	:O?<1!