U
    -e                     @   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mZmZmZ zd dl
mZ W n  ek
r   d dl
mZ Y nX d dlZd dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z? d dl@mAZAmBZB dd ZCejDEdddgdd ZFejDEdedd ZGdd ZHejDEde.e2gdd ZIdd ZJeKd d!jLd"dd#d d$ZMeKd d!jLd"dd#d d$ZNd%d& ZOejDEd'e.d(i fePe.eeMePe.d)eMejPe.eeNejDjQe?e>d*kd+d,d-ejPe.d.eNejDjQe?e>d*kd+d,d-e2d/d0d ife2eOd1d2ifgejDEd3ejRejSeTgd4d5 ZUd6d7 ZVejDEdd8d9d:d/d;d<d=gd>d? ZWd@dA ZXdBdC ZYejDEdDeZ dEdF Z[dGdH Z\dIdJ Z]dKdL Z^dMdN Z_dOdP Z`ejDEdQdRdS dTdS dUdS dVdS dWdS gdXdY ZaejDEdZd[dS ebd\fd]dS ebd^fd_dS ebd`fdadS ecdbfdcdS ecddfdedS ecdffgdgdh ZdddidjZeejDEddkdldm ZfejDEddkdndo Zge<dpdq ZhejDjEdrejiegdsdtgduejDjEdvejiegdsdtgdudwdx ZjejDjEdvejiegdsdtgdudydz Zkd{d| ZlejDjEdrejiegdsdtgduejDjEdvejiegdsdtgdud}d~ ZmejDjEdrejiegdsdtgdudd ZnejDEddd!ddgejDjEdrejiegdsdtgduejDjEdvejiegdsdtgdudd ZoejDEddd!ddgejDjEdrejiegdsdtgdudd ZpejDEdejSddfejPejRddejDjqdd,d-gejDEdd dgdd ZrejDEdddgdd ZsejDEdeiejtd ggeid ejt gggejDEdeiejtd ggeid ejt ggdgdd ZuejDEdeid d gd d ggevdejwfeid d gd ejwggevdejwfeiejwd gd ejwggejwejwfeiejwd gejwd ggevdejwfeid ejwgd ejwggevdejwfeid d gd d ggevddfeid d gd dggevddfeidd gd dggejwdfeidd gdd ggevddfeid dgd dggevddfg
dd ZxejDEdejwdgdd ZyejDEdejwdgdd ZzejDEdejwdgdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd ZejDEde'e3e4e&e5e#fdd ZejDEde'e3e4e&e5e#fdd Zdd Zdd Zdd ZejDEdd;e'fde#fgdd Zdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Zdd̈́ Zddτ Zddф ZejDEdd dgejDEdddgejDEde.e1gddׄ ZejDEdddgddل ZejDEdddddddd)ddddd(gejDjEdddgddgdudd Zdd ZdS )    N)GeneratorType)linalg)
csr_matrix
dok_matrixissparse)cdist	cityblockcosine	minkowskipdist
squareform)
wminkowski)r
   )config_context)DataConversionWarning)PAIRED_DISTANCESPAIRWISE_BOOLEAN_FUNCTIONSPAIRWISE_DISTANCE_FUNCTIONSPAIRWISE_KERNEL_FUNCTIONS_euclidean_distances_upcastadditive_chi2_kernelcheck_paired_arrayscheck_pairwise_arrayschi2_kernelcosine_distancescosine_similarityeuclidean_distanceshaversine_distanceslaplacian_kernellinear_kernelmanhattan_distancesnan_euclidean_distancespaired_cosine_distancespaired_distancespaired_euclidean_distancespaired_manhattan_distancespairwise_distancespairwise_distances_argminpairwise_distances_argmin_minpairwise_distances_chunkedpairwise_kernelspolynomial_kernel
rbf_kernelsigmoid_kernel)	normalize)assert_allcloseassert_almost_equalassert_array_equalignore_warnings)parse_version
sp_version)Paralleldelayedc              	   C   s@  t jd}|dj| dd}t|dd}t|}t|| |j|j  krV| ks\n t	|dj| dd}t||dd}t||}t|| |j|j  kr| ksn t	|dj| dd}|dj| dd}t j
|d< t j
|d< t||d	d}t||}	t||	 |j|	j  kr*| ks0n t	td
d |D }
tdd |D }t|
|dd}t|| |j|j  kr| ksn t	|dj| d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j| d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st	|jd |jd kst	t|| t||dd}t||td}|jd |jd ks2t	|jd |jd ksLt	t|| t||dd}t||td}|jd |jd kst	|jd |jd kst	t|| t|}t|}t||dd}t||}t|| |j|j  kr| ksn t	t||dd}t||}t|| |j|j  krB| ksHn t	t|| dd}t| | }t|| | t jkr|j|j  kr| ksn t	n8tt	( |j|j  kr| ksn t	W 5 Q R X t||}t|| | t jkr"|j|j  kr| ksZn t	n8tt	( |j|j  krJ| ksPn t	W 5 Q R X 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 5 Q R X tt t||dd W 5 Q R X tt t||dd W 5 Q R X d S )Nr         Fcopy	euclideanmetric   r8   r   r   Znan_euclideanc                 S   s   g | ]}t d d |D qS )c                 S   s   g | ]}|qS  rA   .0vrA   rA   d/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/metrics/tests/test_pairwise.py
<listcomp>b   s     6test_pairwise_distances.<locals>.<listcomp>.<listcomp>tuplerC   rowrA   rA   rE   rF   b   s     z+test_pairwise_distances.<locals>.<listcomp>c                 S   s   g | ]}t d d |D qS )c                 S   s   g | ]}|qS rA   rA   rB   rA   rA   rE   rF   c   s     rG   rH   rJ   rA   rA   rE   rF   c   s     r7   r?         ?r?      Z	haversine)r?   r?   r   	manhattanr	   p       @r=   r
   blah)nprandomRandomStaterandom_sampleastyper%   r   r.   dtypeAssertionErrornanr    rI   pir   r   shaper	   r   r   Ztocscr   ZtobsrZtocoofloat64pytestraisesr
   	TypeError
ValueError)global_dtyperngXSS2YZX_maskedZY_maskedZS_maskedZ	S2_maskedX_tuplesY_tuplesX_sparseY_sparsekwdsrA   rA   rE   test_pairwise_distancesE   s    






"
".*
.*






"

"
$,

$,

rm   sum_over_featuresTFc              	   C   sL   ddgddgg}ddgddgg}t jtdd t||| d W 5 Q R X d S )	NrN   r?      r8   r   zT`sum_over_features` is deprecated in version 1.2 and will be removed in version 1.4.match)rn   )r^   warnsFutureWarningr   )rn   rd   rg   rA   rA   rE   5test_manhattan_distances_deprecated_sum_over_features   s    rt   r=   c              	   C   s  t jd}|dd}| }d|d  |d< ttdL |d fD ]<}t||| d}t j|ddddd	 t 	|dkdksDt
qDW 5 Q R X d
|  }tjt|d t|| d W 5 Q R X tjt|d t|t|| d W 5 Q R X t $ tdt t|t| d W 5 Q R X d S )Nr   r7   r8   rN   r@   )categoryr<   F)rZ   ZposinfZneginfr:   z+Data was converted to boolean for metric %srp   rg   r=   error)rS   rT   rU   randnr:   r1   r   r%   Z
nan_to_numsumrY   r^   rr   rW   boolwarningscatch_warningssimplefilter)r=   rc   rd   rg   ZresmsgrA   rA   rE   test_pairwise_boolean_distance   s"    "
r   c               	   C   sH   t jd} | dd}t  tdt t|dd W 5 Q R X d S )Nr   r7   r8   rw   r
   r<   )	rS   rT   rU   rx   r{   r|   r}   r   r%   )rc   rd   rA   rA   rE   test_no_data_conversion_warning   s
    
r   funcc              	   C   s2  t jtdd | tddd W 5 Q R X t jtdd  | tdtddd W 5 Q R X t jtdd  | tdtddd W 5 Q R X td}| |dd}||ksttd}| |td	dd}||kst| tjd
ggdddd}d|jjkst| dggdd}t	|tj
s.td S )Nz.* shape .*rp   )r7   ro   precomputedr<   )r8   r8   )r8   ro   r7   r7   )ro   ro   rN   intrX   f      ?)r^   r_   ra   rS   ZzerosrY   arrayrX   kind
isinstancendarray)r   re   rf   rA   rA   rE   test_pairwise_precomputed	  s     $$

r   c                	   C   s2   t jtdd ttdddd W 5 Q R X d S )Nz.* non-negative values.*rp   r   r   r<   )r^   r_   ra   r%   rS   fullrA   rA   rA   rE   &test_pairwise_precomputed_non_negative'  s    r   rN   r7   doubler9   )wrP   c                 K   s"   t t| t|f|}| S N)r+   rS   Z
atleast_2ditem)xyrl   KrA   rA   rE   callable_rbf_kernel1  s    r   zfunc, metric, kwdsr;   r
   z1.6.0z;wminkowski is now minkowski and it has been already tested.)reason)Zmarksr   Z
polynomialZdegreegamma皙?rX   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   r7   r6   r   ro   r8   rN   r=   n_jobsr?   )rS   rT   rU   r   rV   r.   )	r   r=   rl   rX   rc   rd   rg   re   rf   rA   rA   rE   test_pairwise_parallel8  s    &
r   c                   C   s$   t dggdd dd dks td S )Nr   c                 S   s   dS )Nr7   rA   r   r   rA   rA   rE   <lambda>o      z9test_pairwise_callable_nonstrict_metric.<locals>.<lambda>r<   r@   r7   )r%   rY   rA   rA   rA   rE   'test_pairwise_callable_nonstrict_metrick  s    r   rbfZ	laplacianZsigmoid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
krd S t|	|
| d}t|| d S )Nr   r6   r>   r<   rv   rg   c                 S   s   g | ]}t d d |D qS )c                 S   s   g | ]}|qS rA   rA   rB   rA   rA   rE   rF     s     4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>rH   rJ   rA   rA   rE   rF     s     z)test_pairwise_kernels.<locals>.<listcomp>c                 S   s   g | ]}t d d |D qS )c                 S   s   g | ]}|qS rA   rA   rB   rA   rA   rE   rF     s     r   rH   rJ   rA   rA   rE   rF     s     )r   r   )	rS   rT   rU   rV   r   r)   r.   rI   r   )r=   rc   rd   rg   functionK1K2rh   ri   rj   rk   rA   rA   rE   test_pairwise_kernelss  s(    




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   r6   r>   r   r   rv   rg   )rS   rT   rU   rV   r   r)   r+   r.   )rc   rd   rg   r=   rl   r   r   rA   rA   rE   test_pairwise_kernels_callable  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 5 Q R X d S )Nr   r6   r>   r   r   z:))r   Zblablar   T)r=   Zfilter_paramsr=   )
rS   rT   rU   rV   r+   r)   r.   r^   r_   r`   )rc   rd   rg   r   paramsr   rA   rA   rE   "test_pairwise_kernels_filter_param  s    



r   zmetric, funcc           	      C   s   t jd}|d}|d}t||| d}|||}t|| |t|t|}t|| | tkrt|  ||}t |}t|| d S )Nr   r6   r<   )	rS   rT   rU   rV   r"   r.   r   r   diag)	r=   r   rc   rd   rg   re   rf   ZS3	distancesrA   rA   rE   test_paired_distances  s    





r   c              	   C   s   t jd}|dj| dd}|dj| dd}t||dd}t||dd d}t|| |d	}tt	 t|| W 5 Q R X d S )
Nr   r6   Fr9   rO   r<   c                 S   s   t | | jddS )Nr   axis)rS   absry   r   rA   rA   rE   r     r   z0test_paired_distances_callable.<locals>.<lambda>r   )
rS   rT   rU   rV   rW   r"   r.   r^   r_   ra   )rb   rc   rd   rg   re   rf   rA   rA   rE   test_paired_distances_callable  s    

r   c                 C   s  t jdgdgg| d}t jdgdgg| d}t|}t|| d}ddg}ddg}ddg}t||dd	\}}	t||dd	}
t|| t|
| t|	| t||dd	\}}t||dd	}t|| t|| t|| t|t jkst	t|t jkst	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||dd	}t|| 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||dd t||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|| t||}tt |t |}t|| d S )Nr   rN   r   ro   r?   r8   r;   r<   sqeuclideansquaredT)r=   Zmetric_kwargsrO   rP   r
   a      o   r   )r   r=   Hz>rtol)rS   Zasarrayr   r   r'   r&   r.   typer   rY   r
   rT   rU   rx   r%   Zargminrangelenr0   Zasfortranarray)rb   rd   rg   ZXspZYspZexpected_idxZexpected_valsZexpected_vals_sqidxvalsZidx2ZidxspZvalsspZidxsp2Zvals2Zidx3Zidx4rc   distZdist_orig_indZdist_orig_valZdist_chunked_indZdist_chunked_valZargmin_0Zdist_0Zargmin_1Zdist_1Zargmin_C_contiguousZargmin_F_contiguousrA   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_funcY  s    r   c                 C   s   t jd}|dj| dd}t|d d d df }t|d tdd}t|t	sVt
t|}t|dksnt
|d j|jkst
tt ||d	d
 d S )Nr   )i  r8   Fr9   r         >Zreduce_funcworking_memoryrN   r   Zatol)rS   rT   rU   rV   rW   r%   r(   r   r   r   rY   listr   rX   r.   vstack)rb   rc   rd   re   S_chunksrA   rA   rE   &test_pairwise_distances_chunked_reduce]  s       r   c                 C   st   t jd}|dj| dd}t|d dd dd}t|tsBtt	|}t
|d	ksZttd
d |D sptd S )Nr   
   r8   Fr9   c                 S   s   d S r   rA   r   rA   rA   rE   r   s  r   z=test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>r   r   rN   c                 s   s   | ]}|d kV  qd S r   rA   )rC   chunkrA   rA   rE   	<genexpr>x  s     z>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>)rS   rT   rU   rV   rW   r(   r   r   rY   r   r   all)rb   rc   rd   r   rA   rA   rE   +test_pairwise_distances_chunked_reduce_nonen  s       r   good_reducec                 C   s   t | S r   r   Dr   rA   rA   rE   r   ~  r   r   c                 C   s
   t | S r   )rS   r   r   rA   rA   rE   r     r   c                 C   s   t | S r   )r   r   rA   rA   rE   r     r   c                 C   s   t | t | fS r   r   r   rA   rA   rE   r     r   c                 C   s   t | t| t| fS r   )r   rS   r   r   r   rA   rA   rE   r     r   c                 C   s.   t ddd}t|d | dd}t| d S )Nr   r   rN   @   r   )rS   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   rS   Zconcatenater   srA   rA   rE   r     r   zlength 11\..* input: 10\.c                 C   s   | t | | dd  gfS r   r   r   rA   rA   rE   r     r   z!length \(10, 11\)\..* input: 10\.c                 C   s   | d d | fS )N	   rA   r   rA   rA   rE   r     r   z length \(9, 10\)\..* input: 10\.c                 C   s   dS )N   rA   r   rA   rA   rE   r     r   z2returned 7\. Expected sequence\(s\) of length 10\.c                 C   s   dS )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   )rS   r   r   rA   rA   rE   r     r   z-, 9\)\. Expected sequence\(s\) of length 10\.c              	   C   sR   t dddj| dd}t|d |dd}tj||d t| W 5 Q R X d S )	Nr   r   rN   Fr9   r   r   rp   )rS   r   r   rW   r(   r^   r_   r   )rb   r   r   r   rd   r   rA   rA   rE   .test_pairwise_distances_chunked_reduce_invalid  s    "   r   c           
      C   s   t | |||d}t|tstt|}|d kr2| n|}t|d d }|D ] }|j}|t||d ksJtqJt	|}t
| ||d}	t||	dd d S )Nr   r=   r   g      >i   r<   r   r   )r(   r   r   rY   r   r   nbytesmaxrS   r   r%   r.   )
rd   rg   r   r=   genZblockwise_distancesZmin_block_mibblockZmemory_usedre   rA   rA   rE    check_pairwise_distances_chunked  s    
r   )r;   l2r   c                 C   sd   t jd}|jdddj|dd}tt|d| d}t|dksFtt	t 
t |dd	d
 d S )Nr     r       _BsizescaleFr9   rN   r   绽|=r   )rS   rT   rU   normalrW   r   r(   r   rY   r.   r   r   )r=   rb   rc   rd   chunksrA   rA   rE   (test_pairwise_distances_chunked_diagonal  s
    r   c                 C   sJ   t jd}|jdddj|dd}t|| dd}tt |dd	d
 d S )Nr   r   r   r   Fr9   r?   r   r   r   )rS   rT   rU   r   rW   r%   r.   r   )r=   rb   rc   rd   r   rA   rA   rE   )test_parallel_pairwise_distances_diagonal  s    r  c              	   C   sF  t jd}|dj| dd}t|d ddd tddD ]}t|d d	| dd q:t| d ddd |d
j| 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 5 Q R X t|}t|ddd}t|tstt||ks$tt	t t| W 5 Q R X d S )Nr   )   r8   Fr9   rN   r;   r   ir?   )r   r8   i'  r   rR   r<   r   r   )rS   rT   rU   rV   rW   r   r   tolistr^   r_   ra   r   r(   r%   r   r   rY   StopIteration)rb   rc   rd   powerrg   r   r   rA   rA   rE   test_pairwise_distances_chunked  sD             r  x_array_constrZdensesparse)Zidsy_array_constrc                 C   s:   | dgg}|dgdgg}t ||}t|ddgg d S Nr   rN   r?   r   rQ   )r   r.   )r  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 5 Q R X d S )Nr   r   r   Fr9      r   r?   rN   r   r   X_norm_squaredY_norm_squaredr  r  )rS   rT   rU   rV   rW   r]   ry   r   r   r.   Z
zeros_liker^   r_   rY   )rb   r	  rc   rd   rg   Z	X_norm_sqZ	Y_norm_sqD1D2D3D4Zwrong_DrA   rA   rE   #test_euclidean_distances_with_norms  s*      



r  c               	   C   s  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 5 Q R X tj	t
dd
 t|||d d d W 5 Q R X d S )Nr   r  r  r?   rN   r   r  r   zIncompatible dimensions for Xrp   r7   r  zIncompatible dimensions for Yr  )rS   rT   rU   rV   ry   r   r   r.   r^   r_   ra   )rc   rd   rg   r  r  r  r  r  rA   rA   rE   $test_euclidean_distances_norm_shapes1  s:    

   





 r  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st	d S )	Nr   r   r   Fr9   皙?r  ư>r   )
rS   rT   rU   rV   rW   r   r   r.   rX   rY   )rb   r  r	  rc   rd   rg   expectedr   rA   rA   rE   test_euclidean_distancesS  s    	

r  c                 C   sh   t jd}|dj| dd}d||dk < tt|}||}t|}t||dd |j	| ksdt
d S )Nr   r  Fr9   r  r  r   )rS   rT   rU   rV   rW   r   r   r   r.   rX   rY   )rb   r  rc   rd   r  r   rA   rA   rE   test_euclidean_distances_symn  s    r  
batch_sizer   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   r  r  r  rg   r   r  r   )rS   rT   rU   rV   rW   float32r   r   sqrtmaximumr.   )r   r  r	  rc   rd   rg   r  r   rA   rA   rE   test_euclidean_distances_upcast  s    	
r&  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   r  r  r"  r  r   )rS   rT   rU   rV   rW   r#  r   r   r   r$  r%  r.   )r   r  rc   rd   r  r   rA   rA   rE   #test_euclidean_distances_upcast_sym  s    r'  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   r(  r   )rS   r   r   r   r.   )rX   Zepsr   r)  rd   rg   r   r  rA   rA   rE   'test_euclidean_distances_extreme_values  s
    

r*  r   c                 C   sN   t jd}|dd}|dd}t||| d}t||| d}t|| d S )N9  ro   r8   )rg   r   )rS   rT   rU   rx   r   r    r.   )r   rc   rd   rg   Znormal_distanceZnan_distancerA   rA   rE   8test_nan_euclidean_distances_equal_to_euclidean_distance  s    r,  rd   rg   c              	   C   s<   t t}t| |d W 5 Q R X d}|t|jks8td S )Nr   zBInput contains infinity or a value too large for dtype('float64').)r^   r_   ra   r    strvaluerY   )rd   rg   excinfoZexp_msgrA   rA   rE   ,test_nan_euclidean_distances_infinite_values  s    r0  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   r3  r?   )rS   r   r    r.   r:   )rd   ZX_diagmissing_valueexp_distr   Zdist_sqZdist_twoZdist_two_copyrA   rA   rE    test_nan_euclidean_distances_2x2  s    

r7  r5  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   rN   r2  )rS   r   rZ   r    r.   r:   )r5  rd   r6  r   rA   rA   rE   )test_nan_euclidean_distances_complete_nan  s    
r8  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      @rQ   g      @g      @g      @r2  rN   Tr4  g      D@r?   Fg      9@r9   )rS   r   r    r/   Tr.   r$  r:   )
r5  rd   rg   r  r  r  r  ZD5ZD6ZD7rA   rA   rE   'test_nan_euclidean_distances_not_trival  sR    	
 
  
 
  

r:  c                 C   sZ   t dd| dgd| d| gg}t|| dd}t |dks>tt|| dd}t|d	 d S )
NgzG^g     @@gB@g|ï@T)r3  r   r   Fr1  )rS   r   r    r   rY   r.   )r5  rd   Zdist_squaredr   rA   rA   rE   7test_nan_euclidean_distances_one_feature_match_positiveC  s    

  r;  c                  C   s@  t jd} t | d}t ||g}t|}t|ddgddggdd t |dks^t	t |dkspt	t|t 
| ddg t || g}t|}t |dkst	t |dkst	t|ddgddgg t | dd}t|}t|t 
| dg|jd	   t |dks(t	t |dks<t	d S )
Nr+  i  r1  r   r   rQ   r   i  r   )rS   rT   rU   r   Zrandr   r   r.   r   rY   Zdiag_indices_fromr\   )rc   r   XAr   XBr  rd   rA   rA   rE   test_cosine_distancesX  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 5 Q R X d S )Nc                 S   sx   |d | d  }|d | d  }t |d d t | d t |d  t |d d   }dt t | }|S )Nr   rN   r?   )rS   sincosZarcsinr$  )r   r   Zdiff_latZdiff_lonacrA   rA   rE   slow_haversine_distancesx  s    ,z:test_haversine_distances.<locals>.slow_haversine_distancesr   rL   )r   r?   c                    s    g | ]  fd dD qS )c                    s   g | ]} |qS rA   rA   )rC   r   )rC  r   rA   rE   rF     s     z7test_haversine_distances.<locals>.<listcomp>.<listcomp>rA   )rC   rg   rC  )r   rE   rF     s     z,test_haversine_distances.<locals>.<listcomp>)r   ro   z-Haversine distance only valid in 2 dimensionsrp   )
rS   rT   rU   rV   r   r   r.   r^   r_   ra   )rc   rd   r  r  err_msgrA   rD  rE   test_haversine_distancesv  s    	




rF  c                  C   s4   dgdgg} dgdgg}t | |}t|ddg d S r
  )r#   r.   rd   rg   r   rA   rA   rE   test_paired_euclidean_distances  s    
rH  c                  C   s4   dgdgg} dgdgg}t | |}t|ddg d S r
  )r$   r.   rG  rA   rA   rE   test_paired_manhattan_distances  s    
rI  c                  C   s4   dgdgg} dgdgg}t | |}t|ddg d S )Nr   rN   r?   rM   )r!   r.   rG  rA   rA   rE   test_paired_cosine_distances  s    
rJ  c               	   C   s  t jd} | d}| d}t||}d}t|||d}|jtksJtt	|D ]h\}}t	|D ]V\}}	t 
||	 d ||	   }
t ||
 }t|||f |
 t|||f | qbqRt|}tt |d t |dkstt |t t | dk s
t| dt j}| dt j}t||}|jt jksJt| dt j}t||}t | szt|jtkstdd	gd
dgg}ddgddgg}t||}|d |d kst|d |d ksttt tddgg W 5 Q R X tt tddggddgg W 5 Q R X tt tddggddgg W 5 Q R X tt tddggdddgg W 5 Q R X d S )Nr   r6   r   r   r   r?   rN   g333333?gffffff?r   g?r@   )r   rN   )rN   rN   )rN   r   r   g?g333333?)rS   rT   rU   rV   r   r   rX   floatrY   	enumeratery   expr/   r0   r   r   rW   r#  Zint32isfiniter^   r_   ra   )rc   rd   rg   ZK_addr   r   ir   jr   r   Zchi2_exprA   rA   rE   test_chi_square_kernel  sL    


$


  rQ  kernelc                 C   s2   t jd}|d}| ||}t||jd d S )Nr   r6      )rS   rT   rU   rV   r.   r9  )rR  rc   rd   r   rA   rA   rE   test_kernel_symmetry  s    

rT  c                 C   s@   t jd}|d}t|}| ||}| ||}t|| d S Nr   r6   )rS   rT   rU   rV   r   r.   )rR  rc   rd   rj   r   r   rA   rA   rE   test_kernel_sparse  s    


rV  c                  C   sD   t jd} | d}t||}t|jd d d dd |D  d S )Nr   r6      c                 S   s   g | ]}t |d  qS )r?   )r   Znorm)rC   r   rA   rA   rE   rF     s     z&test_linear_kernel.<locals>.<listcomp>)rS   rT   rU   rV   r   r.   flatrc   rd   r   rA   rA   rE   test_linear_kernel  s    

rZ  c                  C   s@   t jd} | d}t||}t|jd d d t d d S )Nr   r6   rW  r7   )rS   rT   rU   rV   r+   r.   rX  onesrY  rA   rA   rE   test_rbf_kernel  s    

r\  c                  C   sn   t jd} | d}t||}tt |t d t |dksHt	t |t t | dk sjt	d S )Nr   r6   r7   rN   )
rS   rT   rU   rV   r   r.   r   r[  r   rY   rY  rA   rA   rE   test_laplacian_kernel  s    

r]  zmetric, pairwise_funcr	   c           
      C   s   t jd}|d}|d}t|}t|}|||dd}t|sJt|||dd}t|rdtt| | t	||| d}	t| |	 d S )Nr   r6   r   F)Zdense_outputTrv   )
rS   rT   rU   rV   r   r   rY   r.   Ztoarrayr)   )
r=   Zpairwise_funcrc   rd   rg   XcsrYcsrr   r   Z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 ]F\}}t||dd}t|}|d k	rzt|}t||dd}t|| qLd S )Nr   r6   r   r	   rv   r   )rS   rT   rU   rV   r   r)   r-   r.   )	rc   rd   rg   r^  r_  ZX_ZY_r   r   rA   rA   rE   test_cosine_similarity:  s    

$ra  c                  C   s:   t t dd} t| d \}}||ks,tt| | d S N(   r7   r   )rS   resizer   r   rY   r0   )r<  
XA_checked
XB_checkedrA   rA   rE   test_check_dense_matricesN  s    rh  c                  C   s~   t t dd} t t dd}t| |\}}t| | t|| t t dd}t| |\}}t| | t|| d S )Nrc  rd      r8   r   )rS   re  r   r   r0   r   r<  r=  rf  rg  rA   rA   rE   test_check_XB_returnedW  s    


rl  c               	   C   sz   t t dd} t t dd}tt t| | W 5 Q R X t t dd}tt t| | W 5 Q R X d S )N-   )r7   r   ri  rj  $   )r8   r   )rS   re  r   r^   r_   ra   r   r   r<  r=  rA   rA   rE   test_check_different_dimensionsg  s    rp  c               	   C   s   t ddd} t ddd}tt t| | W 5 Q R X t ddd} t ddd}tt t| | W 5 Q R X d S )Nrm  r   r7   ri  r8   r   )rS   r   r   r^   r_   ra   r   ro  rA   rA   rE   test_check_invalid_dimensionss  s    rq  c                  C   s   t jd} | d}t|}| d}t|}t||\}}t|sJtt|| 	 dksbtt|sntt|| 	 dkstt||\}}t|stt|| 	 dkstt|stt|| 	 dkstd S rU  )
rS   rT   rU   rV   r   r   r   rY   r   ry   )rc   r<  Z	XA_sparser=  Z	XB_sparserf  rg  ZXA_2_checkedrA   rA   rE   test_check_sparse_arrays  s    

rr  c                 C   s:   | j }t|dkr$tdd | D S tdd | D S d S )NrN   c                 s   s   | ]}t |V  qd S r   )tuplifyrJ   rA   rA   rE   r     s     ztuplify.<locals>.<genexpr>c                 s   s   | ]
}|V  qd S r   rA   )rC   rrA   rA   rE   r     s     )r\   r   rI   )rd   r   rA   rA   rE   rs    s    rs  c                  C   sV   t jd} | d}t|}| d}t|}t||\}}t|| t|| d S rU  )rS   rT   rU   rV   rs  r   r0   )rc   r<  Z	XA_tuplesr=  Z	XB_tuplesrf  rg  rA   rA   rE   test_check_tuple_input  s    


ru  c                  C   s   t t ddt j} t t ddt j}t| d \}}|jt jksRtt| |\}}|jt jkspt|jt jkstt| t|\}}|jtkst|jtkstt| |t\}}|jtkst|jtkstd S rb  )	rS   re  r   rW   r#  r   rX   rY   rK  rk  rA   rA   rE   test_check_preserve_type  s    rv  r   
seuclideanmahalanobisdist_functionc              	   C   sb   t ddN tjd}|d}tt||d}tt|||| d}t	|| W 5 Q R X d S )Nr   )r   r   r  r<   r   )
r   rS   rT   rU   rV   r   r   r   rI   r.   )r   r=   ry  rc   rd   expected_distr   rA   rA   rE   +test_pairwise_distances_data_derived_params  s    
r{  c              	   C   sT   t jd}|d}|d}tjtd|  dd t||| d W 5 Q R X d S )Nr   r  z+The '(V|VI)' parameter is required for the z metricrp   r<   )rS   rT   rU   rV   r^   r_   ra   r%   )r=   rc   rd   rg   rA   rA   rE   1test_pairwise_distances_data_derived_params_error  s    


r|  Z
braycurtisZcanberraZ	chebyshevZcorrelationZhammingr   r   y_is_xzY is Xz
Y is not Xc           	   	   C   s   t jd}|dj|dd}i }|r>|}tt|| d}nz|dj|dd}t||| d}| dkrdt jt 	||gddt j
d	i}n,| d
krdt jt t 	||gjji}t||fd| i|}t|| d S )Nr   r6   Fr9   r<   rw  VrN   )r   ZddofrX   rx  ZVIr=   )rS   rT   rU   rV   rW   r   r   r   varr   r]   r   invZcovr9  r%   r.   )	r=   rb   r}  rc   rd   r   rg   rz  r   rA   rA   rE   )test_numeric_pairwise_distances_datatypes  s    $$r  c                  C   sD   t tdg} t tdg}tddddd t| |D  d S )Nr   r?   r   )r   Z
max_nbytesc                 s   s    | ]\}}t t||V  qd S r   )r5   r   )rC   m1m2rA   rA   rE   r     s    z9test_sparse_manhattan_readonly_dataset.<locals>.<genexpr>)r   rS   r[  r4   zip)Z	matrices1Z	matrices2rA   rA   rE   &test_sparse_manhattan_readonly_dataset  s
    r  )r;   )r{   typesr   numpyrS   r   Zscipy.sparser   r   r   Zscipy.spatial.distancer   r   r	   r
   r   r   r   ImportErrorr^   Zsklearnr   Zsklearn.exceptionsr   Z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(   r)   r*   r+   r,   Zsklearn.preprocessingr-   Zsklearn.utils._testingr.   r/   r0   r1   Zsklearn.utils.fixesr2   r3   Zsklearn.utils.parallelr4   r5   rm   markZparametrizert   r   r   r   r   r   rW   Z_minkowski_kwdsZ_wminkowski_kwdsr   paramZskipifr]   r#  r   r   r   r   r   r   itemsr   r   r   r   r   r   r   ra   r`   r   r   r   r  r  r   r  r  r  r  r  r&  r'  Zxfailr*  r,  infr0  r$  rZ   r7  r8  r:  r;  r>  rF  rH  rI  rJ  rQ  rT  rV  rZ  r\  r]  r`  ra  rh  rl  rp  rq  rr  rs  ru  rv  r{  r|  r  r  rA   rA   rA   rE   <module>   sF   	| 

	

	
	$

y

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