o
    tBh                     @   s
  d dl Z d dlmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dl
mZmZmZ zd dl
mZ W n eyI   d dl
mZ Y nw d d	lmZmZ d dlZd d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl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' d dlm(Z( d dlm)Z) d dlm*Z* d dlm+Z+ d dlm,Z, d dlm-Z- d dlm.Z. d dlm/Z/ d dlm0Z0 d d lm1Z1 d d!lm2Z2 d d"lm3Z3 d d#lm4Z4 d d$lm5Z5 d d%lm6Z6 d d&lm7Z7 d d'lm8Z8 d d(lm9Z9 d d)lm:Z: d d*lm;Z; d d+l<m=Z= d d,l>m?Z? d-d. Z@ejABd/e4d0d1 ZCd2d3 ZDejABd4e-e1gd5d6 ZEd7d8 ZFeGd9d:jHd;d<d=d9d>ZIeGd9d:jHd;d<d=d9d>ZJd?d@ ZKejALdAejABdBe-dCi feMe-eeIeMe-dDeIejMe-eeJejAjNeedEkdFdGdHejMe-dIeJejAjNeedEkdFdGdHe1dJdKd9ife1eKdLdMifgejABdNejOePgdOdP ZQdQdR ZRejABd/g dSdTdU ZSdVdW ZTdXdY ZUejABdZe5V d[d\ ZWd]d^ ZXejABdNejYejOfd_d` ZZdadb Z[dcdd Z\dedf Z]ejABdgdhdi djdi dkdi dldi dmdi gdndo Z^ejABdpdqdi e_drfdsdi e_dtfdudi e_dvfdwdi e`dxfdydi e`dzfd{di e`d|fgd}d~ ZadddZbejABd/ddd ZcejABd/ddd Zdedd ZeejAjBdejfegddgdejAjBdejfegddgddd ZgejABdNejYejOgejAjBdejfegddgddd Zhdd ZiejABdNejYejOgejAjBdejfegddgdejAjBdejfegddgddd ZjejABdNejYejOgejAjBdejfegddgddd ZkejABdg dejAjBdejfegddgdejAjBdejfegddgddd ZlejABdg dejAjBdejfegddgddd ZmejABdejYddfejMejOddejAjnddGdHgejABdd9dgdd ZoejABddd<gdd ZpejABdefejqd ggefd ejq gggejABdefejqd ggefd ejq ggdgdd ZrejABdefd d9gd9d ggesdejtfefd d9gd9ejtggesdejtfefejtd9gd9ejtggejtejtfefejtd9gejtd ggesdejtfefd ejtgd9ejtggesdejtfefd d9gd9d ggesddfefd d9gd9dggesddfefdd9gd9dggejtdfefdd9gdd ggesddfefd dgd9dggesddfg
dd ZuejABdejtdgdd ZvejABdejtdgdd ZwejABdejtdgdd Zxdd Zydd Zzdd Z{dd Z|ddĄ Z}ejABde$e'e(e)e*e+fddǄ Z~ejABde$e'e(e)e*e+fddɄ Zdd˄ Zdd̈́ Zddτ ZejABdde$fde+fgddԄ Zddք Zdd؄ Zddڄ Zdd܄ Zddބ Zdd Zdd Zdd Zdd ZejABdd9dgejABd/ddgejABde-e.gdd ZejABd/ddgdd ZejABd/g dejABdNejYejOgejAjBddd<gddgddd ZdS )    N)GeneratorType)linalg)
dok_matrix
csr_matrixissparse)cosine	cityblock	minkowski)cdistpdist
squareform)
wminkowski)r	   )
sp_versionparse_version)config_context)assert_array_almost_equal)assert_allclose)assert_almost_equal)assert_array_equal)ignore_warnings)euclidean_distances)nan_euclidean_distances)manhattan_distances)haversine_distances)linear_kernel)chi2_kerneladditive_chi2_kernel)polynomial_kernel)
rbf_kernel)laplacian_kernel)sigmoid_kernel)cosine_similarity)cosine_distancespairwise_distances)pairwise_distances_chunked)pairwise_distances_argmin_min)pairwise_distances_argmin)pairwise_kernels)PAIRWISE_KERNEL_FUNCTIONS)PAIRWISE_DISTANCE_FUNCTIONS)PAIRWISE_BOOLEAN_FUNCTIONS)PAIRED_DISTANCES)check_pairwise_arrays)check_paired_arrays)paired_distances)paired_euclidean_distances)paired_manhattan_distances)_euclidean_distances_upcast)	normalize)DataConversionWarningc                  C   s  t jd} | d}t|dd}t|}t|| | d}t||dd}t||}t|| | d}| d}t j|d< t j|d< t||dd}t||}t|| t	dd	 |D }	t	d
d	 |D }
t|	|
dd}t|| | d}|d d df d d t j
 d |d d df< |d d df d d t j
 |d d df< t|dd}t|}t|| | d}|d d df d d t j
 d |d d df< |d d df d d t j
 |d d df< t||dd}t||}t|| t|dd}t|td}|jd |jd ksJ |jd |jd ksJ t|| t||dd}t||td}|jd |jd ks;J |jd |jd ksHJ t|| t||dd}t||td}|jd |jd kshJ |jd |jd ksuJ t|| t|}t|}t||dd}t||}t|| t||dd}t||}t|| t|| dd}t| | }t|| t||}t|| ddi}t||fddi|}t||fdti|}t|| ddi}t|fddi|}t|fdti|}t|| tt t|dd W d    n	1 sw   Y  tt t||dd W d    n	1 s5w   Y  tt t||dd W d    d S 1 sSw   Y  d S )Nr         	euclideanmetric   r7   r   r   nan_euclideanc                 S      g | ]}t d d |D qS )c                 S      g | ]}|qS  rA   .0vrA   rA   z/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_pairwise.py
<listcomp>U       6test_pairwise_distances.<locals>.<listcomp>.<listcomp>tuplerC   rowrA   rA   rE   rF   U       z+test_pairwise_distances.<locals>.<listcomp>c                 S   r?   )c                 S   r@   rA   rA   rB   rA   rA   rE   rF   V   rG   rH   rI   rK   rA   rA   rE   rF   V   rM   r6   r<   g      ?r<      	haversine)r<   r<   r   	manhattanr   p       @r:   r	   blah)nprandomRandomStaterandom_sampler$   r   r   nanr   rJ   pir   r   shaper   r   r"   tocscr   tobsrtocoor	   pytestraises	TypeError
ValueError)rngXSS2YX_maskedY_maskedS_masked	S2_maskedX_tuplesY_tuplesX_sparseY_sparsekwdsrA   rA   rE   test_pairwise_distances=   s   












.*

.*













$rq   r:   c                 C   sj  t jd}|dd}| }d|d  |d< ttd( |d fD ]}t||| d}d|t |< t 	|dkdks=J q"W d    n1 sHw   Y  d|  }t
jt|d	 t|| d W d    n1 siw   Y  t
jt|d	 t|t|| d
 W d    n1 sw   Y  t  tdt t|t| d W d    d S 1 sw   Y  d S )Nr   r6   r7   rO   r=   )categoryr9   z+Data was converted to boolean for metric %smatchrg   r:   error)rU   rV   rW   randncopyr   r4   r$   isnansumr_   warnsastypeboolwarningscatch_warningssimplefilter)r:   rc   rd   rg   ZresmsgrA   rA   rE   test_pairwise_boolean_distance   s,   
"r   c                  C   s^   t jd} | dd}t  tdt t|dd W d    d S 1 s(w   Y  d S )Nr   r6   r7   rv   r	   r9   )	rU   rV   rW   rw   r~   r   r   r4   r$   )rc   rd   rA   rA   rE   test_no_data_conversion_warning   s   
"r   funcc                 C   sj  t jtdd | tddd W d    n1 sw   Y  t jtdd | tdtddd W d    n1 s?w   Y  t jtdd | tdtddd W d    n1 scw   Y  td}| |dd}||u syJ td}| |td	dd}||u sJ | tjd
ggdddd}d|jjksJ | dggdd}t|tj	sJ d S )Nz.* shape .*rs   )r6      precomputedr9   )r7   r7   )r7   r   r6   r6   )r   r   rO   intdtypef      ?)
r_   r`   rb   rU   zerosarrayr   kind
isinstancendarray)r   re   rf   rA   rA   rE   test_pairwise_precomputed   s&   

r   c                   C   sH   t jtdd ttdddd W d    d S 1 sw   Y  d S )Nz.* non-negative values.*rs   r   r   r9   )r_   r`   rb   r$   rU   fullrA   rA   rA   rE   &test_pairwise_precomputed_non_negative   s   "r   rO   r6   doubleFrx   )wrR   c                 K   s"   t t| t|fi |}|S N)r   rU   
atleast_2d)xyrp   KrA   rA   rE   callable_rbf_kernel   s   r   z/ignore:WMinkowskiDistance:FutureWarning:sklearnzfunc, metric, kwdsr8   r	   z1.6.0z;wminkowski is now minkowski and it has been already tested.)reason)marksr   
polynomialdegreegamma皙?r   c           	      C   s   t jd}t jd|d |d}t jd|d |d}| |f|dd|}| |f|dd|}t|| | ||f|dd|}| ||f|dd|}t|| d S )	Nr   r6   r5   r   r   r7   rO   r:   n_jobsr<   )rU   rV   rW   r   rX   r   )	r   r:   rp   r   rc   rd   rg   re   rf   rA   rA   rE   test_pairwise_parallel  s   '
r   c                   C   s$   t dggdd dd dksJ d S )Nr   c                 S      dS )Nr6   rA   r   r   rA   rA   rE   <lambda>9      z9test_pairwise_callable_nonstrict_metric.<locals>.<lambda>r9   r=   r6   r#   rA   rA   rA   rE   'test_pairwise_callable_nonstrict_metric5  s   $r   )rbf	laplaciansigmoidr   linearchi2additive_chi2c                 C   s  t jd}|d}|d}t|  }t|| d}||}t|| t||| d}|||d}t|| tdd |D }td	d |D }t||| d}t|| t|}	t|}
| d
v r~t	
t t|	|
| d W d    d S 1 sww   Y  d S t|	|
| d}t|| d S )Nr   r5   r;   r9   ru   rg   c                 S   r?   )c                 S   r@   rA   rA   rB   rA   rA   rE   rF   Q  rG   4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>rI   rK   rA   rA   rE   rF   Q  rM   z)test_pairwise_kernels.<locals>.<listcomp>c                 S   r?   )c                 S   r@   rA   rA   rB   rA   rA   rE   rF   R  rG   r   rI   rK   rA   rA   rE   rF   R  rM   )r   r   )rU   rV   rW   rX   r)   r(   r   rJ   r   r_   r`   rb   )r:   rc   rd   rg   functionK1K2rl   rm   rn   ro   rA   rA   rE   test_pairwise_kernels=  s2   





r   c                  C   s   t jd} | d}| d}t}ddi}t|f||d|}t|fd|i|}t|| t|f||d|}t|fd|i|}t|| d S )Nr   r5   r;   r   r   ru   rg   )rU   rV   rW   rX   r   r(   r   r   )rc   rd   rg   r:   rp   r   r   rA   rA   rE   test_pairwise_kernels_callableb  s   


r   c                  C   s   t jd} | d}| d}t||dd}ddd}t||fdd	d
|}t|| tt	 t||fddi| W d    d S 1 sIw   Y  d S )Nr   r5   r;   r   r   z:))r   blablar   T)r:   filter_paramsr:   )
rU   rV   rW   rX   r   r(   r   r_   r`   ra   )rc   rd   rg   r   paramsr   rA   rA   rE   "test_pairwise_kernels_filter_paramu  s   



"r   zmetric, funcc           	      C   s   t jd}|d}|d}t||| d}|||}t|| |t|t|}t|| | tv rFt|  ||}t |}t|| d S d S )Nr   r5   r9   )	rU   rV   rW   rX   r/   r   r   r*   diag)	r:   r   rc   rd   rg   re   rf   S3	distancesrA   rA   rE   test_paired_distances  s   





r   c                  C   s   t jd} | d}| d}t||dd}t||dd d}t|| | d}tt t|| W d    d S 1 s@w   Y  d S )Nr   r5   rQ   r9   c                 S   s   t | | jddS )Nr   axis)rU   absrz   r   rA   rA   rE   r         z0test_paired_distances_callable.<locals>.<lambda>r   )	rU   rV   rW   rX   r/   r   r_   r`   rb   )rc   rd   rg   re   rf   rA   rA   rE   test_paired_distances_callable  s   



"r   c                 C   sp  t jdgdgg| d}t jdgdgg| d}t|}t|t jd}ddg}ddg}ddg}t||dd	\}}	t||dd	}
t|| t|
| t|	| t||dd	\}}t|| t|| t|t j	kshJ t|t j	ksqJ t||d
d	\}}	t||dddid\}
}t||d
d	}t||dddid}t|	| t|| t|| t|
| t|| t|| t||dd	\}}	t||dd	}
t|| t|
| t|	| t||dd	\}}t|| t|| t||t
ddid\}}	t|| t|	| t||dddid\}}	t|| t|	| t jd}|dd}|dd}t||dd	}|jdd}||tt|f }t||ddd\}}t jj||dd t jj||dd t||dd\}}t||dd\}}t|| t|| t||dd\}}t||dd\}}t|| t|| t||dd}t||dd}t|| t||dd}t||dd}t|| d S )Nr   rO   r   r   r<   r7   r8   r9   sqeuclideansquaredT)r:   metric_kwargsrQ   rR   r	   a      o   r   )r   r:      decimal)rU   asarrayr   r   float32r&   r'   r   typer   r	   rV   rW   rw   r$   argminrangelentestingr   r   r   )r   rd   rg   XspYspexpected_idxexpected_valsexpected_vals_sqidxvalsidx2idxspvalsspvals2idx3idx4rc   distdist_orig_inddist_orig_valdist_chunked_inddist_chunked_valargmin_0dist_0argmin_1dist_1rA   rA   rE   "test_pairwise_distances_argmin_min  s   




























r   c                 C   s   | d d d df S )Nd   rA   r   startrA   rA   rE   _reduce_func  s   r   c                  C   s|   t jd} | d}t|d d d df }t|d tdd}t|ts&J t	|}t
|dks2J tt ||dd d S )	Nr   )i  r7   r         >reduce_funcworking_memoryrO   Hz>atol)rU   rV   rW   rX   r$   r%   r   r   r   listr   r   vstack)rc   rd   re   S_chunksrA   rA   rE   &test_pairwise_distances_chunked_reduce  s   
r  c                  C   sj   t jd} | d}t|d dd dd}t|tsJ t|}t|dks(J t	dd	 |D s3J d S )
Nr   
   r7   c                 S   s   d S r   rA   r   rA   rA   rE   r   2  r   z=test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>r   r   rO   c                 s   s    | ]}|d u V  qd S r   rA   )rC   chunkrA   rA   rE   	<genexpr>7      z>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>)
rU   rV   rW   rX   r%   r   r   r   r   all)rc   rd   r   rA   rA   rE   +test_pairwise_distances_chunked_reduce_none-  s   
r  good_reducec                 C      t | S r   r   Dr   rA   rA   rE   r   =      r   c                 C   s
   t | S r   )rU   r   r  rA   rA   rE   r   >  s   
 c                 C   r
  r   )r   r  rA   rA   rE   r   ?  r  c                 C   s   t | t | fS r   r  r  rA   rA   rE   r   @  rG   c                 C   s   t | t| t| fS r   )r   rU   r   r   r  rA   rA   rE   r   A  s    c                 C   s.   t ddd}t|d | dd}t| d S )Nr  r   rO   @   r   )rU   arangereshaper%   next)r	  rd   r   rA   rA   rE   ,test_pairwise_distances_chunked_reduce_valid:  s
   r  )
bad_reduceerr_typemessagec                 C   s   t | | dd  gS Nr   rU   concatenater  srA   rA   rE   r   P  r   zlength 11\..* input: 10\.c                 C   s   | t | | dd  gfS r  r  r  rA   rA   rE   r   U      z!length \(10, 11\)\..* input: 10\.c                 C   s   | d d | fS )N	   rA   r  rA   rA   rE   r   Y  rG   z length \(9, 10\)\..* input: 10\.c                 C   r   )Nr   rA   r  rA   rA   rE   r   [  r   z2returned 7\. Expected sequence\(s\) of length 10\.c                 C   r   )N)r      rA   r  rA   rA   rE   r   `  r   z9returned \(7, 8\)\. Expected sequence\(s\) of length 10\.c                 C   s   t ddfS )Nr  r  )rU   r  r  rA   rA   rE   r   e  s    z-, 9\)\. Expected sequence\(s\) of length 10\.c                 C   s^   t ddd}t|d | dd}tj||d t| W d    d S 1 s(w   Y  d S )Nr  r   rO   r  r   rs   )rU   r  r  r%   r_   r`   r  )r  r  r  rd   r   rA   rA   rE   .test_pairwise_distances_chunked_reduce_invalidL  s    
"r  c           
      C   s   t | |||d}t|tsJ t|}|d u r| n|}t|d d }|D ]}|j}|t||d ks5J q%t|}t	| ||d}	t
||	 d S )Nr   r:   r  g      >i   r9   )r%   r   r   r   r   nbytesmaxrU   r   r$   r   )
rd   rg   r   r:   genblockwise_distancesmin_block_mibblockmemory_usedre   rA   rA   rE    check_pairwise_distances_chunkedt  s   
r(  )r8   l2r   c                 C   sZ   t jd}|jddd}tt|d| d}t|dksJ tt t 	|ddd d S )	Nr     r      _BsizescalerO   r   r  r   )
rU   rV   rW   normalr   r%   r   r   r   r   )r:   rc   rd   chunksrA   rA   rE   (test_pairwise_distances_chunked_diagonal  s
   r2  c                 C   s@   t jd}|jddd}t|| dd}tt |ddd d S )	Nr   r*  r,  r-  r<   r   g|=r   )rU   rV   rW   r0  r$   r   r   )r:   rc   rd   r   rA   rA   rE   )test_parallel_pairwise_distances_diagonal  s   r3  c                  C   sX  t jd} | d}t|d ddd tddD ]}t|d d| dd qt| d ddd | d}t||ddd t| | ddd t||d	dd t||dd
d tt	 t
t||dd W d    n1 sqw   Y  t|}t|ddd}t|tsJ t
||u sJ tt t
| W d    d S 1 sw   Y  d S )Nr   )   r7   rO   r8   r   ir<   )r   r7   i'  r   rT   r9   r   r   )rU   rV   rW   rX   r(  r   tolistr_   r`   rb   r  r%   r$   r   r   StopIteration)rc   rd   powerrg   r  r#  rA   rA   rE   test_pairwise_distances_chunked  s6   


"r8  x_array_constrdensesparse)idsy_array_constrc                 C   s:   | dgg}|dgdgg}t ||}t|ddgg d S Nr   rO   r<   r   rS   )r   r   )r9  r=  rd   rg   r  rA   rA   rE   %test_euclidean_distances_known_result  s   
r?  c                 C   s&  t jd}|dj| dd}|dj| dd}|t jd jdddd	}|t jd jdddd	}||}t||}t|||d
}t|||d}	t||||d}
t	|| t	|	| t	|
| t||t 
|t 
|d}tt t	|| W d    d S 1 sw   Y  d S )Nr   r  r  Fr      r  r<   rO   r   r   X_norm_squaredY_norm_squaredrD  rF  )rU   rV   rW   rX   r|   float64rz   r  r   r   
zeros_liker_   r`   AssertionError)r   r=  rc   rd   rg   	X_norm_sq	Y_norm_sqD1D2D3D4wrong_DrA   rA   rE   #test_euclidean_distances_with_norms  s,     



"rR  c                  C   s2  t jd} | d}| d}|d jdd}|d jdd}t||||d}t|||dd|ddd}t|||dd|ddd}t|| t|| tj	t
d	d
 t|||d d d W d    n1 sow   Y  tj	t
dd
 t|||d d d W d    d S 1 sw   Y  d S )Nr   r@  rA  r<   rO   r   rG  r   zIncompatible dimensions for Xrs   r6   rC  zIncompatible dimensions for YrE  )rU   rV   rW   rX   rz   r   r  r   r_   r`   rb   )rc   rd   rg   rD  rF  rM  rN  rO  rA   rA   rE   $test_euclidean_distances_norm_shapes  s8   







"rS  c                 C   s   t jd}|dj| dd}d||dk < |dj| dd}d||dk < t||}||}||}t||}t||dd |j| ksFJ d S )	Nr   r   r  Fr   皙?r@  ư>rtol)	rU   rV   rW   rX   r|   r
   r   r   r   )r   r9  r=  rc   rd   rg   expectedr   rA   rA   rE   test_euclidean_distances  s   


rZ  c                 C   sh   t jd}|dj| dd}d||dk < tt|}||}t|}t||dd |j	| ks2J d S )Nr   rT  Fr   rU  rV  rW  )
rU   rV   rW   rX   r|   r   r   r   r   r   )r   r9  rc   rd   rY  r   rA   rA   rE   test_euclidean_distances_sym-  s   r[  
batch_size)Nr6   r   e   c                 C   s   t jd}|dt j}d||dk < |dt j}d||dk < t||}||}||}t||| d}t t 	|d}t
||dd d S )Nr   rT  rU  r@  rg   r\  rV  rW  )rU   rV   rW   rX   r|   r   r
   r2   sqrtmaximumr   )r\  r9  r=  rc   rd   rg   rY  r   rA   rA   rE   test_euclidean_distances_upcastC  s   	
ra  c                 C   sp   t jd}|dt j}d||dk < tt|}||}t||| d}t 	t 
|d}t||dd d S )Nr   rT  rU  r^  rV  rW  )rU   rV   rW   rX   r|   r   r   r   r2   r_  r`  r   )r\  r9  rc   rd   rY  r   rA   rA   rE   #test_euclidean_distances_upcast_sym^  s   rb  zdtype, eps, rtolg-C6?h㈵>g:0yE>gGz?z failing due to lack of precisiondimi@B c                 C   sV   t jdg| g| d}t jd| g| g| d}t||}t||}t||dd d S )Nr   r   rc  rW  )rU   r   r   r
   r   )r   epsrX  rd  rd   rg   r   rY  rA   rA   rE   'test_euclidean_distances_extreme_valuess  s
   

rf  r   Tc                 C   sN   t jd}|dd}|dd}t||| d}t||| d}t|| d S )N9  r   r7   )rg   r   )rU   rV   rW   rw   r   r   r   )r   rc   rd   rg   normal_distancenan_distancerA   rA   rE   8test_nan_euclidean_distances_equal_to_euclidean_distance  s   rj  rd   rg   c                 C   sP   t t}t| |d W d    n1 sw   Y  d}|t|jks&J d S )Nr   zBInput contains infinity or a value too large for dtype('float64').)r_   r`   rb   r   strvalue)rd   rg   excinfoexp_msgrA   rA   rE   ,test_nan_euclidean_distances_infinite_values  s
   ro  zX, X_diag, missing_valuer<   r   c                 C   s   t d|g|dgg}t| |d}t|| t| d|d}t|d | t| | |d}t|| t| |  |d}t|| d S )N        r   missing_valuesTr   rr  r<   )rU   r   r   r   rx   )rd   X_diagmissing_valueexp_distr   dist_sqdist_twodist_two_copyrA   rA   rE    test_nan_euclidean_distances_2x2  s   

rz  ru  c                 C   sh   t | | gddgg}t t jt jgt jdgg}t|| d}t|| t|| | d}t|| d S )Nr   rO   rq  )rU   r   rY   r   r   rx   )ru  rd   rv  r   rA   rA   rE   )test_nan_euclidean_distances_complete_nan  s   
r{  c           
   	   C   sH  t d| dddg| ddd| gd| | | dgg}t | dd| dg| | dddg| | | ddgg}t||| d}t||| d}t||j tt|d d	 |d d	 d
| ddgg tt|d	d |d	d d| dt dgg t|| d}t||| d}t|| | d}t|| t|| t||d
d}t||dd}	t||	 d S )Nr   g      @g      @rS   g      @g      @g      @rq  rO   Trs  g      D@r<   Fg      9@r   )rU   r   r   r   Tr   r_  rx   )
ru  rd   rg   rM  rN  rO  rP  D5D6D7rA   rA   rE   'test_nan_euclidean_distances_not_trival  sF   	

r  c                 C   sZ   t dd| dgd| d| gg}t|| dd}t |dksJ t|| dd}t|d	 d S )
NgzG^g     @@gB@g|ï@T)rr  r   r   Frp  )rU   r   r   r  r   )ru  rd   dist_squaredr   rA   rA   rE   7test_nan_euclidean_distances_one_feature_match_positive  s   

r  c                  C   s8  t jd} t | d}t ||g}t|}t|ddgddgg t |dks-J t |dks6J t|t 	| ddg t || g}t|}t |dksWJ t |dks`J t|ddgddgg t | dd}t|}t|t 	| dg|j
d   t |dksJ t |dksJ d S )Nrg  i  rp  rS   r+  i  r   )rU   rV   rW   r   randr   r"   r   r  diag_indices_fromr[   )rc   r   XAr  XBrN  rd   rA   rA   rE   test_cosine_distances  s$    r  c                     s   dd t jd} | d}| d t  fdd|D }t| }t|| | d}d	}tjt	|d
 t| W d    d S 1 sIw   Y  d S )Nc                 S   sx   |d | d  }|d | d  }t |d d t | d t |d  t |d d   }dt t | }|S )Nr   rO   r<   )rU   sincosarcsinr_  )r   r   diff_latdiff_lonacrA   rA   rE   slow_haversine_distances:  s   ,z:test_haversine_distances.<locals>.slow_haversine_distancesr   rN   )r  r<   c                    s    g | ]  fd dD qS )c                    s   g | ]} |qS rA   rA   )rC   r   )r  r   rA   rE   rF   F  r   z7test_haversine_distances.<locals>.<listcomp>.<listcomp>rA   )rC   rg   r  )r   rE   rF   F  s     z,test_haversine_distances.<locals>.<listcomp>)r  r   z-Haversine distance only valid in 2 dimensionsrs   )
rU   rV   rW   rX   r   r   r   r_   r`   rb   )rc   rd   rM  rN  err_msgrA   r  rE   test_haversine_distances8  s   	





"r  c                  C   4   dgdgg} dgdgg}t | |}t|ddg d S r>  )r0   r   rd   rg   r  rA   rA   rE   test_paired_euclidean_distancesS     
r  c                  C   r  r>  )r1   r   r  rA   rA   rE   test_paired_manhattan_distances[  r  r  c                  C   sV  t jd} | d}| d}t||}d}t|||d}|jtks%J t|D ]4\}}t|D ]+\}}	t 	||	 d ||	   }
t 
||
 }t|||f |
 t|||f | q1q)t|}tt |d t |dkssJ t |t t | dk sJ | dt j}| dt j}t||}|jt jksJ | dt j}t||}t | sJ |jtksJ dd	gd
dgg}ddgddgg}t||}|d |d ksJ |d |d ksJ tt tddgg W d    n	1 sw   Y  tt tddggddgg W d    n	1 s#w   Y  tt tddggddgg W d    n	1 sDw   Y  tt tddggg dg W d    n	1 sew   Y  tt tt|t| W d    n	1 sw   Y  tt tt|t| W d    d S 1 sw   Y  d S )Nr   r5   r  r   r   r<   rO   g333333?gffffff?r   g?r=   )r   rO   )rO   rO   )rO   r   r   )皙?r  g333333?)rU   rV   rW   rX   r   r   r   float	enumeraterz   expr   r   r   r  r|   r   int32isfiniter_   r`   rb   r   )rc   rd   rg   K_addr   r   ir   jr   r   chi2_exprA   rA   rE   test_chi_square_kernelc  sb   


"


$r  kernelc                 C   s2   t jd}|d}| ||}t||jd d S )Nr   r5      )rU   rV   rW   rX   r   r|  )r  rc   rd   r   rA   rA   rE   test_kernel_symmetry  s   

r  c                 C   s@   t jd}|d}t|}| ||}| ||}t|| d S Nr   r5   )rU   rV   rW   rX   r   r   )r  rc   rd   rn   r   r   rA   rA   rE   test_kernel_sparse  s   


r  c                  C   sD   t jd} | d}t||}t|jd d d dd |D  d S )Nr   r5      c                 S   s   g | ]	}t |d  qS )r<   )r   norm)rC   r   rA   rA   rE   rF     r  z&test_linear_kernel.<locals>.<listcomp>)rU   rV   rW   rX   r   r   flatrc   rd   r   rA   rA   rE   test_linear_kernel  s   

$r  c                  C   s@   t jd} | d}t||}t|jd d d t d d S )Nr   r5   r  r6   )rU   rV   rW   rX   r   r   r  onesr  rA   rA   rE   test_rbf_kernel  s   

 r  c                  C   sn   t jd} | d}t||}tt |t d t |dks$J t |t t | dk s5J d S )Nr   r5   r6   rO   )	rU   rV   rW   rX   r   r   r   r  r  r  rA   rA   rE   test_laplacian_kernel  s   

&r  zmetric, pairwise_funcr   r   c           
      C   s   t jd}|d}|d}t|}t|}|||dd}t|s%J |||dd}t|r2J t| | t||| d}	t| |	 d S )Nr   r5   r   F)dense_outputTru   )	rU   rV   rW   rX   r   r   r   todenser(   )
r:   pairwise_funcrc   rd   rg   XcsrYcsrr   r   K3rA   rA   rE   &test_pairwise_similarity_sparse_output  s   

r  c            	      C   s   t jd} | d}| d}t|}t|}|d f||f|d f||ffD ]#\}}t||dd}t|}|d ur=t|}t||dd}t|| q&d S )Nr   r5   r   r   ru   r   )rU   rV   rW   rX   r   r(   r3   r   )	rc   rd   rg   r  r  X_Y_r   r   rA   rA   rE   test_cosine_similarity  s   

$r  c                  C   s:   t t dd} t| d \}}||u sJ t| | d S N(   r6   r  )rU   resizer  r-   r   )r  
XA_checked
XB_checkedrA   rA   rE   test_check_dense_matrices  s   r  c                  C   s~   t t dd} t t dd}t| |\}}t| | t|| t t dd}t| |\}}t| | t|| d S )Nr  r      r7   r  )rU   r  r  r-   r   r.   r  r  r  r  rA   rA   rE   test_check_XB_returned  s   


r  c                  C   s   t t dd} t t dd}tt t| | W d    n1 s'w   Y  t t dd}tt t| | W d    d S 1 sKw   Y  d S )N-   )r6   r  r  r  $   )r7   r  )rU   r  r  r_   r`   rb   r-   r.   r  r  rA   rA   rE   test_check_different_dimensions'  s   "r  c                  C   s   t ddd} t ddd}tt t| | W d    n1 s'w   Y  t ddd} t ddd}tt t| | W d    d S 1 sTw   Y  d S )Nr  r  r6   r  r7   r  )rU   r  r  r_   r`   rb   r-   r  rA   rA   rE   test_check_invalid_dimensions3  s   "r  c                  C   s   t jd} | d}t|}| d}t|}t||\}}t|s%J t||  dks1J t|s7J t||  dksCJ t||\}}t|sPJ t||  dks\J t|sbJ t||  dksnJ d S r  )	rU   rV   rW   rX   r   r-   r   r   rz   )rc   r  	XA_sparser  	XB_sparser  r  XA_2_checkedrA   rA   rE   test_check_sparse_arraysA  s   

r  c                 C   s6   | j }t|dkrtdd | D S tdd | D S )NrO   c                 s   s    | ]}t |V  qd S r   )tuplifyrK   rA   rA   rE   r  \  r  ztuplify.<locals>.<genexpr>c                 s   s    | ]}|V  qd S r   rA   )rC   rrA   rA   rE   r  _  s    )r[   r   rJ   )rd   r  rA   rA   rE   r  W  s   r  c                  C   sV   t jd} | d}t|}| d}t|}t||\}}t|| t|| d S r  )rU   rV   rW   rX   r  r-   r   )rc   r  	XA_tuplesr  	XB_tuplesr  r  rA   rA   rE   test_check_tuple_inputb  s   


r  c                  C   s   t t ddt j} t t ddt j}t| d \}}|jt jks)J t| |\}}|jt jks8J |jt jks@J t| t|\}}|jtksQJ |jtksXJ t| |t\}}|jtksiJ |jtkspJ d S r  )rU   r  r  r|   r   r-   r   r  r  rA   rA   rE   test_check_preserve_typen  s   r  r   
seuclideanmahalanobisdist_functionc              	   C   sx   t dd- tjd}|d}tt||d}tt|||| d}t	|| W d    d S 1 s5w   Y  d S )Nr   )r   r   rT  r9   r   )
r   rU   rV   rW   rX   r   r   r   rJ   r   )r   r:   r  rc   rd   expected_distr   rA   rA   rE   +test_pairwise_distances_data_derived_params  s   
"r  c                 C   sj   t jd}|d}|d}tjtd|  dd t||| d W d    d S 1 s.w   Y  d S )Nr   rT  z+The '(V|VI)' parameter is required for the z metricrs   r9   )rU   rV   rW   rX   r_   r`   rb   r$   )r:   rc   rd   rg   rA   rA   rE   1test_pairwise_distances_data_derived_params_error  s   


"r  )
braycurtiscanberra	chebyshevcorrelationhammingr  r	   r  r   r   r   r8   y_is_xzY is Xz
Y is not Xc           
   	   C   s   t jd}|d|}i }|r|}tt|| d}n;|d|}t||| d}| dkrBdt jt 	||gddt j
di}n| dkrXd	t jt t 	||gjji}t||fd
| i|}|t ju rjdnd}	t|||	d d S )Nr   r5   r9   r  VrO   )r   ddofr   r  VIr:   rc  r   rW  )rU   rV   rW   rX   r|   r   r   r
   varr   rH  r   invcovr|  r$   r   r   )
r:   r   r  rc   rd   r   rg   r  r   rX  rA   rA   rE   )test_numeric_pairwise_distances_datatypes  s   $$r  )r8   )r~   typesr   numpyrU   r   scipy.sparser   r   r   scipy.spatial.distancer   r   r	   r
   r   r   r   ImportErrorsklearn.utils.fixesr   r   r_   sklearnr   sklearn.utils._testingr   r   r   r   r   sklearn.metrics.pairwiser   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   r1   r2   sklearn.preprocessingr3   sklearn.exceptionsr4   rq   markparametrizer   r   r   r   r  r|   _minkowski_kwds_wminkowski_kwdsr   filterwarningsparamskipifrH  r   r   r   r   r   r   itemsr   r   r   r   r   r  r  r  rb   ra   r  r(  r2  r3  r8  r   r?  rR  rS  rZ  r[  ra  rb  xfailrf  rj  infro  r_  rY   rz  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   rA   rA   rE   <module>   sH   m
	


	
	$
!

m



	


' "

.0	"$"&&    


4
<

	
	
