a
    �ù»jŸë  ã                   @   sÆ
  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 d dl	m
Z
mZmZmZmZm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+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d d	l2m3Z3 d d
l4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZA dd„ ZBejC Dde;¡ejC Dde<¡ejC Dde:¡ejC Dde=¡dd„ ƒƒƒƒZEe8eFd�ejC Dde¡dd„ ƒƒZGdd„ ZHejC Dde*e.g¡dd„ ƒZIdd„ ZJe Kd d!¡jLd"d#d$�d d%œZMd&d'„ ZNejC Dd(e*d)i fe*eeMfe*d*eMfe.d+d,d ife.eNd-d.ifg¡ejC Dd/ejOejPeQg¡d0d1„ ƒƒZRd2d3„ ZSejC Ddg d4¢¡ejC Dde=¡d5d6„ ƒƒZTd7d8„ ZUd9d:„ ZVejC Dd;e W¡ ¡ejC Dde=¡d<d=„ ƒƒZXd>d?„ ZYejC Dd@e>¡ejC Dde=¡dAdB„ ƒƒZZdCdD„ Z[dEdF„ Z\dGdH„ Z]ejC DdIdJdK„ dLdK„ dMdK„ gdNdO„ e=D ƒ dPdO„ e>D ƒ ¡dQdR„ ƒZ^ejC DdSdTdK„ e_dUfdVdK„ e_dWfdXdK„ e_dYfdZdK„ e`d[fd\dK„ e`d]fd^dK„ e`d_fg¡d`da„ ƒZadÿdbdc„ZbejC Dddd¡dedf„ ƒZcejC Dddd¡dgdh„ ƒZdejC edi¡djdk„ ƒZfejCjDdlejgge= dmgdndO„ e=D ƒ do�ejCjDdpejgge= dmgdqdO„ e=D ƒ do�drds„ ƒƒZhejCjDdpejgge= dmgdtdO„ e=D ƒ do�dudv„ ƒZiejC Ddwdxd#g¡dydz„ ƒZjd{d|„ ZkejCjDdlejgge= dmgd}dO„ e=D ƒ do�ejCjDdpejgge= dmgd~dO„ e=D ƒ do�dd€„ ƒƒZlejCjDdlejgge= dmgd�dO„ e=D ƒ do�d‚dƒ„ ƒZmejC Dd„g d…¢¡ejCjDdlejgge= dmgd†dO„ e=D ƒ do�ejCjDdpejgge= dmgd‡dO„ e=D ƒ do�dˆd‰„ ƒƒƒZnejC Dd„g d…¢¡ejCjDdlejgge= dmgdŠdO„ e=D ƒ do�d‹dŒ„ ƒƒZoejC Dd�ejPdŽd�fejpejOd�d‘ejCjqd’d“�d”�g¡ejC Dd•d d–g¡d—d˜„ ƒƒZrejC Dd™dxd#g¡dšd›„ ƒZsejC Ddœe gejtd gg¡e gd ejt gg¡g¡ejC Dd�e gejtd gg¡e gd ejt gg¡dg¡dždŸ„ ƒƒZuejC Dd e gd d gd d gg¡e vd¡¡ejwfe gd d gd ejwgg¡e vd¡¡ejwfe gejwd gd ejwgg¡ejwejwfe gejwd gejwd gg¡e vd¡¡ejwfe gd ejwgd ejwgg¡e vd¡¡ejwfe gd d gd d gg¡e vd¡¡d¢fe gd d gd d¢gg¡e vd¡¡d¢fe gd¢d gd d¢gg¡ejwd¢fe gd¢d gd¢d gg¡e vd¡¡d¢fe gd d¢gd d¢gg¡e vd¡¡d¢fg
¡d£d¤„ ƒZxejC Dd¥ejwd¢g¡d¦d§„ ƒZyejC Dd¥ejwd¢g¡d¨d©„ ƒZzejC Dd¥ejwd¢g¡dªd«„ ƒZ{d¬d­„ Z|d®d¯„ Z}d°d±„ Z~d²d³„ Zd´dµ„ Z€d¶d·„ Z�ejC Dd¸e#e/e0e"e1ef¡d¹dº„ ƒZ‚ejC Dd¸e#e/e0e"e1ef¡ejC Dde=¡d»d¼„ ƒƒZƒd½d¾„ Z„d¿dÀ„ Z…dÁdÂ„ Z†ejC DdÃdÄe#fdÅefg¡ejC Dde=¡dÆdÇ„ ƒƒZ‡ejC Dde=¡dÈdÉ„ ƒZˆdÊdË„ Z‰dÌdÍ„ ZŠdÎdÏ„ Z‹dÐdÑ„ ZŒejC Dde=¡dÒdÓ„ ƒZ�dÔdÕ„ ZŽdÖd×„ Z�dØdÙ„ Z�ejC DdÚd d¡g¡ejC DddÛdÜg¡ejC DdÝe*e-g¡dÞdß„ ƒƒƒZ‘ejC DddÛdÜg¡dàdá„ ƒZ’ejC Ddg dâ¢¡ejCjDdãdxd#gdädågdo�dædç„ ƒƒZ“ejC Ddèe*e+e,g¡dédê„ ƒZ”dëdì„ Z•ejC Ddíg dî¢dg dï¢g dð¢g dñ¢gfg dî¢dòdógdôdõgdõdôgdödõggfg¡d÷dø„ ƒZ–dùdú„ Z—ejC Dde=¡dûdü„ ƒZ˜dýdþ„ Z™dS (   é    N)ÚGeneratorType)Úlinalg)Úissparse)ÚcdistÚ	cityblockÚcosineÚ	minkowskiÚpdistÚ
squareform)Ú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)ÚBSR_CONTAINERSÚCOO_CONTAINERSÚCSC_CONTAINERSÚCSR_CONTAINERSÚDOK_CONTAINERS)ÚParallelÚdelayedc                 C   s´  t j d¡}| d¡j| dd�}t|dd�}t|ƒ}t||ƒ |j|j  krV| ks\n J ‚| d¡j| dd�}t||dd�}t||ƒ}t||ƒ |j|j  krª| ks°n J ‚| 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 J ‚td
d„ |D ƒƒ}
tdd„ |D ƒƒ}t|
|dd�}t||ƒ |j|j  k�rˆ| k�sŽn J ‚| 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�sØJ ‚|jd |jd k�sòJ ‚t||ƒ t||dd�}t||td�}|jd |jd k�s2J ‚|jd |jd k�sLJ ‚t||ƒ t||dd�}t||td�}|jd |jd k�sŒJ ‚|jd |jd k�s¦J ‚t||ƒ d S )Nr   ©é   é   F©ÚcopyÚ	euclidean©Úmetric©é   r8   ©r   r   Únan_euclideanc                 S   s   g | ]}t d d„ |D ƒƒ‘qS )c                 S   s   g | ]}|‘qS © rB   ©Ú.0ÚvrB   rB   úIE:\soccer\ml_env\Lib\site-packages\sklearn/metrics/tests/test_pairwise.pyÚ
<listcomp>`   ó    úEtest_pairwise_distances_for_dense_data.<locals>.<listcomp>.<listcomp>©Útuple©rD   ÚrowrB   rB   rF   rG   `   rH   z:test_pairwise_distances_for_dense_data.<locals>.<listcomp>c                 S   s   g | ]}t d d„ |D ƒƒ‘qS )c                 S   s   g | ]}|‘qS rB   rB   rC   rB   rB   rF   rG   a   rH   rI   rJ   rL   rB   rB   rF   rG   a   rH   ©r7   r?   ç      à?r?   é   Z	haversine)r?   r?   r   Ú	manhattanr   )ÚnpÚrandomÚRandomStateÚrandom_sampleÚastyper"   r   r+   ÚdtypeÚnanr   rK   Úpir   r   Úshaper   )Úglobal_dtypeÚrngÚXÚSÚS2ÚYZX_maskedZY_maskedZS_maskedZ	S2_maskedÚX_tuplesÚY_tuplesrB   rB   rF   Ú&test_pairwise_distances_for_dense_dataC   sf    






"
".*
.*



rc   Úcoo_containerÚcsc_containerÚbsr_containerÚcsr_containerc                 C   sð  t j d¡}| d¡j|dd�}| d¡j|dd�}||ƒ}||ƒ}	t||	dd�}
t||	ƒ}t|
|ƒ |
j|j  kr~|ks„n J ‚t||	dd�}
t	||	ƒ}t|
|ƒ |
j|j  kr¾|ksÄn J ‚t|||ƒd	d�}
t
||ƒ| |ƒƒ}t|
|ƒ |t jk�r"|
j|j  k�r|k�spn J ‚nNt t¡�2 |
j|j  k�rJ|k�sPn J ‚W d   ƒ n1 �sf0    Y  t
||ƒ}t|
|ƒ |t jk�r´|
j|j  k�r¬|k�sn J ‚nNt t¡�2 |
j|j  k�rÜ|k�sân J ‚W d   ƒ n1 �sø0    Y  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¨0    Y  t t¡� t||	dd� W d   ƒ n1 �sâ0    Y  d S )Nr   r6   Fr9   r>   r;   r<   r   rQ   Úpç       @r=   r   )rR   rS   rT   rU   rV   r"   r   r+   rW   r   r   Úfloat64ÚpytestÚraisesÚAssertionErrorr   Ú	TypeError)rd   re   rf   rg   r[   r\   r]   r`   ÚX_sparseÚY_sparser^   r_   ÚkwdsrB   rB   rF   Ú'test_pairwise_distances_for_sparse_data’   sL    




$B

$B

,rr   ©Úcategoryr=   c              	   C   sr  t j d¡}| dd¡}| ¡ }d|d  |d< ttd��V |d fD ]<}t||| d�}t j|ddddd	� t  	|dk¡dksDJ ‚qDW d   ƒ n1 s–0    Y  d
|  }t
jt|d�� t|| d� W d   ƒ n1 sØ0    Y  t
jt|d��$ t| t¡|| d� W d   ƒ n1 �s0    Y  t ¡ �. t dt¡ t| t¡| d� W d   ƒ n1 �sd0    Y  d S )Nr   r7   r8   rP   r@   rs   r<   F)rX   ZposinfZneginfr:   z+Data was converted to boolean for metric %s©Úmatch©r`   r=   Úerror)rR   rS   rT   Úrandnr:   r.   r   r"   Z
nan_to_numÚsumrk   ÚwarnsrV   ÚboolÚwarningsÚcatch_warningsÚsimplefilter)r=   r\   r]   r`   ÚZÚresÚmsgrB   rB   rF   Útest_pairwise_boolean_distanceÙ   s"    6*4
rƒ   c                  C   s\   t j d¡} |  dd¡}t ¡ �( t dt¡ t|dd� W d   ƒ n1 sN0    Y  d S )Nr   r7   r8   rx   r   r<   )	rR   rS   rT   ry   r}   r~   r   r   r"   )r\   r]   rB   rB   rF   Útest_no_data_conversion_warningù   s
    
r„   Úfuncc                 C   sp  t jtdd��" | t d¡dd� W d   ƒ n1 s60    Y  t jtdd��* | t d¡t d¡dd� W d   ƒ n1 s~0    Y  t jtdd��* | t d¡t d¡dd� W d   ƒ n1 sÆ0    Y  t d¡}| |dd�}||u sòJ ‚t d¡}| |t d	¡dd�}||u �sJ ‚| tjd
ggdd�dd�}d|jjk�sJJ ‚| dggdd�}t|tj	ƒ�slJ ‚d S )Nz.* shape .*ru   )r7   é   Úprecomputedr<   )r8   r8   )r8   r†   ©r7   r7   )r†   r†   rP   Úint©rW   Úfç      ð?)
rk   rl   Ú
ValueErrorrR   ZzerosÚarrayrW   ÚkindÚ
isinstanceÚndarray)r…   r^   r_   rB   rB   rF   Útest_pairwise_precomputed  s     088

r’   c                   C   sF   t jtdd��$ tt dd¡dd� W d   ƒ n1 s80    Y  d S )Nz.* non-negative values.*ru   rˆ   éÿÿÿÿr‡   r<   )rk   rl   r�   r"   rR   ÚfullrB   rB   rB   rF   Ú&test_pairwise_precomputed_non_negative   s    r•   rP   r7   ÚdoubleFr9   )Úwrh   c                 K   s&   t t | ¡t |¡fi |¤Ž}| ¡ S ©N)r(   rR   Z
atleast_2dÚitem)ÚxÚyrq   ÚKrB   rB   rF   Úcallable_rbf_kernel)  s    r�   zfunc, metric, kwdsr;   r   Ú
polynomialZdegreeÚgammaçš™™™™™¹?rW   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Š   ©r†   r8   rP   ©r=   Ún_jobsr?   )rR   rS   rT   rŽ   rU   r+   )	r…   r=   rq   rW   r\   r]   r`   r^   r_   rB   rB   rF   Útest_pairwise_parallel0  s    
r¤   c                   C   s$   t dggdd„ d�d dks J ‚d S )NrŒ   c                 S   s   dS )Nr7   rB   ©rš   r›   rB   rB   rF   Ú<lambda>U  rH   z9test_pairwise_callable_nonstrict_metric.<locals>.<lambda>r<   r@   r7   )r"   rB   rB   rB   rF   Ú'test_pairwise_callable_nonstrict_metricQ  s    r§   )ÚrbfZ	laplacianZ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||ƒ ||ƒ}
||ƒ}| d
v rÂd S t|
|| d�}t||ƒ d S )Nr   r6   r>   r<   rw   ©r`   c                 S   s   g | ]}t d d„ |D ƒƒ‘qS )c                 S   s   g | ]}|‘qS rB   rB   rC   rB   rB   rF   rG   n  rH   ú4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>rJ   rL   rB   rB   rF   rG   n  rH   z)test_pairwise_kernels.<locals>.<listcomp>c                 S   s   g | ]}t d d„ |D ƒƒ‘qS )c                 S   s   g | ]}|‘qS rB   rB   rC   rB   rB   rF   rG   o  rH   r­   rJ   rL   rB   rB   rF   rG   o  rH   )rª   r«   )rR   rS   rT   rU   r   r&   r+   rK   )r=   rg   r\   r]   r`   ÚfunctionÚK1ÚK2ra   rb   ro   rp   rB   rB   rF   Útest_pairwise_kernelsY  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    rw   r`   )rR   rS   rT   rU   r�   r&   r(   r+   )r\   r]   r`   r=   rq   r¯   r°   rB   rB   rF   Ú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 d   ƒ n1 s�0    Y  d S )Nr   r6   r>   r    ©rŸ   z:))rŸ   Zblablar¨   T)r=   Zfilter_paramsr=   )
rR   rS   rT   rU   r(   r&   r+   rk   rl   rn   )r\   r]   r`   rœ   Úparamsr°   rB   rB   rF   Ú"test_pairwise_kernels_filter_param�  s    



rµ   zmetric, funcc           
      C   sŒ   t j d¡}| d¡}| d¡}t||| d�}|||ƒ}t||ƒ |||ƒ||ƒƒ}t||ƒ | tv rˆt|  ||ƒ}	t  |	¡}	t|	|ƒ d S )Nr   r6   r<   )rR   rS   rT   rU   r   r+   r   Údiag)
r=   r…   rg   r\   r]   r`   r^   r_   ZS3Ú	distancesrB   rB   rF   Ú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 d   ƒ n1 s’0    Y  d S )
Nr   r6   Fr9   rQ   r<   c                 S   s   t  | | ¡jdd�S )Nr   ©Úaxis)rR   Úabsrz   r¥   rB   rB   rF   r¦   ¾  rH   z0test_paired_distances_callable.<locals>.<lambda>r¡   )
rR   rS   rT   rU   rV   r   r+   rk   rl   r�   )r[   r\   r]   r`   r^   r_   rB   rB   rF   Útest_paired_distances_callable´  s    

r¼   Údok_containerc                 C   sÀ  t jdgdgg|d�}t jdgdgg|d�}| |ƒ}|||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sæJ ‚t|ƒt jksøJ ‚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   rP   rŠ   éþÿÿÿr†   r?   r8   r;   r<   ÚsqeuclideanÚsquaredT)r=   Zmetric_kwargsrQ   rh   r   éa   é•   éo   r¹   )rº   r=   çH¯¼šò×z>©Úrtol)rR   Zasarrayr$   r#   r+   Útyper‘   r   rS   rT   ry   r"   ZargminÚrangeÚlenr-   Zasfortranarray)r½   rg   r[   r]   r`   ZXspZYspZexpected_idxZexpected_valsZexpected_vals_sqÚidxÚvalsZidx2ZidxspZvalsspZidxsp2Zvals2Zidx3Zidx4r\   Ú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_contiguousrB   rB   rF   Ú"test_pairwise_distances_argmin_minÈ  s¦    





ÿ
ÿ











ÿ


ÿ


ÿ







ÿrÍ   c                 C   s   | d d …d d…f S )Néd   rB   ©rÌ   ÚstartrB   rB   rF   Ú_reduce_funcC  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	ƒsVJ ‚t
|ƒ}t|ƒdksnJ ‚|d j|jks‚J ‚tt  |¡|d	d
� d S )Nr   )i�  r8   Fr9   rÎ   ç      ð>©Zreduce_funcÚworking_memoryrP   rÄ   ©Zatol)rR   rS   rT   rU   rV   r"   r%   rÑ   r�   r   ÚlistrÉ   rW   r+   Úvstack)r[   r\   r]   r^   ÚS_chunksrB   rB   rF   Ú&test_pairwise_distances_chunked_reduceG  s    ÿrÙ   c                 C   st   t j d¡}| d¡j| dd�}t|d dd„ dd�}t|tƒsBJ ‚t|ƒ}t	|ƒd	ksZJ ‚t
d
d„ |D ƒƒspJ ‚d S )Nr   ©é
   r8   Fr9   c                 S   s   d S r˜   rB   rÏ   rB   rB   rF   r¦   ]  rH   z=test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>rÒ   rÓ   rP   c                 s   s   | ]}|d u V  qd S r˜   rB   )rD   ÚchunkrB   rB   rF   Ú	<genexpr>b  rH   z>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>)rR   rS   rT   rU   rV   r%   r�   r   rÖ   rÉ   Úall)r[   r\   r]   rØ   rB   rB   rF   Ú+test_pairwise_distances_chunked_reduce_noneX  s    ÿrß   Úgood_reducec                 C   s   t | ƒS r˜   ©rÖ   ©ÚDrÐ   rB   rB   rF   r¦   h  rH   r¦   c                 C   s
   t  | ¡S r˜   )rR   rŽ   râ   rB   rB   rF   r¦   i  rH   c                 C   s   t | ƒt | ƒfS r˜   rá   râ   rB   rB   rF   r¦   j  rH   c                 C   s   g | ]}|fd d„‘qS )c                 S   s   || ƒS r˜   rB   )rã   rÐ   Úscipy_csr_typerB   rB   rF   r¦   m  rH   ú<listcomp>.<lambda>rB   )rD   rä   rB   rB   rF   rG   l  s   ÿrG   c                 C   s   g | ]}|fd d„‘qS )c                 S   s   || ƒt  | ¡t| ƒfS r˜   )rR   rŽ   rÖ   )rã   rÐ   Úscipy_dok_typerB   rB   rF   r¦   q  s    ýrå   rB   )rD   ræ   rB   rB   rF   rG   p  s   ûc                 C   s.   t  d¡ dd¡}t|d | dd�}t|ƒ d S )NrÛ   r“   rP   é@   rÓ   )rR   ÚarangeÚreshaper%   Únext)rà   r]   rØ   rB   rB   rF   Ú,test_pairwise_distances_chunked_reduce_valide  s
    ÿrë   )Ú
bad_reduceÚerr_typeÚmessagec                 C   s   t  | | dd … g¡S ©Nr“   ©rR   Zconcatenate©rã   ÚsrB   rB   rF   r¦   …  rH   zlength 11\..* input: 10\.c                 C   s   | t  | | dd … g¡fS rï   rð   rñ   rB   rB   rF   r¦   Š  rH   z!length \(10, 11\)\..* input: 10\.c                 C   s   | d d… | fS )Né	   rB   rñ   rB   rB   rF   r¦   Ž  rH   z length \(9, 10\)\..* input: 10\.c                 C   s   dS )Né   rB   rñ   rB   rB   rF   r¦   �  rH   z2returned 7\. Expected sequence\(s\) of length 10\.c                 C   s   dS )N)rô   é   rB   rñ   rB   rB   rF   r¦   •  rH   z9returned \(7, 8\)\. Expected sequence\(s\) of length 10\.c                 C   s   t  d¡dfS )NrÛ   ró   )rR   rè   rñ   rB   rB   rF   r¦   š  rH   z-, 9\)\. Expected sequence\(s\) of length 10\.c                 C   sf   t  d¡ dd¡j| dd�}t|d |dd�}tj||d�� t|ƒ W d   ƒ n1 sX0    Y  d S )	NrÛ   r“   rP   Fr9   rç   rÓ   ru   )rR   rè   ré   rV   r%   rk   rl   rê   )r[   rì   rí   rî   r]   rØ   rB   rB   rF   Ú.test_pairwise_distances_chunked_reduce_invalid�  s    "ÿrö   c           
      C   s–   t | |||d�}t|tƒsJ ‚t|ƒ}|d u r2| n|}t|ƒd d }|D ] }|j}|t||ƒd ksJJ ‚qJt |¡}t	| ||d�}	t
||	dd� d S )N©rÔ   r=   rõ   g      °>i   r<   rÄ   rÕ   )r%   r�   r   rÖ   rÉ   ÚnbytesÚmaxrR   r×   r"   r+   )
r]   r`   rÔ   r=   ÚgenZblockwise_distancesZmin_block_mibÚblockZmemory_usedr^   rB   rB   rF   Ú 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sFJ ‚tt  	t  
|¡¡dd	d
� d S )Nr   ©éè  rÛ   ç    _ B©ÚsizeÚscaleFr9   rP   r÷   ç»½×Ùß|Û=rÅ   )rR   rS   rT   ÚnormalrV   rÖ   r%   rÉ   r+   r¶   r×   )r=   r[   r\   r]   ÚchunksrB   rB   rF   Ú(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Õ   )rR   rS   rT   r  rV   r"   r+   r¶   )r=   r[   r\   r]   r·   rB   rB   rF   Ú)test_parallel_pairwise_distances_diagonalÄ  s    r  z0ignore:Could not adhere to working_memory configc                 C   s0  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	|ddd�}t
|tƒsèJ ‚t|ƒ|u søJ ‚t t¡� t|ƒ W d   ƒ n1 �s"0    Y  d S )Nr   )éÈ   r8   Fr9   rP   r;   r÷   iðÿÿÿr?   )rÎ   r8   i'  r   rÒ   r‡   )rR   rS   rT   rU   rV   rü   rÈ   Útolistr"   r%   r�   r   rê   rk   rl   ÚStopIteration)r[   r\   r]   Úpowerr`   rã   rú   rB   rB   rF   Útest_pairwise_distances_chunkedÌ  s.    ÿÿÿr  Úx_array_constrZdensec                 C   s   g | ]
}|j ‘qS rB   ©Ú__name__©rD   Ú	containerrB   rB   rF   rG   ô  rH   )ZidsÚy_array_constrc                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   ù  rH   c                 C   s:   | dggƒ}|dgdggƒ}t ||ƒ}t|ddggƒ d S ©Nr   rP   r?   rŒ   ri   )r   r+   )r  r  r]   r`   rã   rB   rB   rF   Ú%test_euclidean_distances_known_resultñ  s    
r  c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG     rH   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   ƒ n1 �s0    Y  d S )Nr   ©rÛ   rÛ   Fr9   ©é   rÛ   r?   rP   r¹   r“   ©ÚX_norm_squared©ÚY_norm_squared©r  r  )rR   rS   rT   rU   rV   rj   rz   ré   r   r+   Z
zeros_likerk   rl   rm   )r[   r  r\   r]   r`   Ú	X_norm_sqÚ	Y_norm_sqÚD1ÚD2ÚD3ÚD4Zwrong_DrB   rB   rF   Ú#test_euclidean_distances_with_norms  s*      



ür$  Ú	symmetricTc                 C   sÀ   t j | ¡}| d¡}|r|n| 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	|
|ƒ d S )
Nr  r  r?   rP   r¹   r“   r  r  r  )
rR   rS   rT   rU   rV   Úfloat32rz   ré   r   r+   )Zglobal_random_seedr%  r\   r]   r`   r  r  r   r!  r"  r#  rB   rB   rF   Ú&test_euclidean_distances_float32_norms(  s    
  


r'  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 sÞ0    Y  tj	t
dd
��& t|||d d… d� W d   ƒ n1 �s$0    Y  d S )Nr   r  r  r?   rP   r¹   r  r“   zIncompatible dimensions for Xru   r7   r  zIncompatible dimensions for Yr  )rR   rS   rT   rU   rz   r   ré   r+   rk   rl   r�   )r\   r]   r`   r  r  r   r!  r"  rB   rB   rF   Ú$test_euclidean_distances_norm_shapes9  s4    

ÿ

ü

ü

4r(  c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   ^  rH   c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   c  rH   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sŒJ ‚d S )	Nr   ©rÎ   rÛ   Fr9   çš™™™™™é?r  ç�íµ ÷Æ°>rÅ   )	rR   rS   rT   rU   rV   r   r   r+   rW   )r[   r  r  r\   r]   r`   Úexpectedr·   rB   rB   rF   Útest_euclidean_distances[  s    

r-  c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   }  rH   c                 C   sh   t j d¡}| d¡j| dd�}d||dk < tt|ƒƒ}||ƒ}t|ƒ}t||dd� |j	| ksdJ ‚d S )Nr   r)  Fr9   r*  r+  rÅ   )
rR   rS   rT   rU   rV   r
   r	   r   r+   rW   )r[   r  r\   r]   r,  r·   rB   rB   rF   Útest_euclidean_distances_symz  s    r.  Ú
batch_size)Nr7   rô   ée   c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   •  rH   c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   š  rH   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  ©r`   r/  r+  rÅ   )rR   rS   rT   rU   rV   r&  r   r   ÚsqrtÚmaximumr+   )r/  r  r  r\   r]   r`   r,  r·   rB   rB   rF   Útest_euclidean_distances_upcast‘  s    
r4  c                 C   s   g | ]
}|j ‘qS rB   r  r  rB   rB   rF   rG   ´  rH   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*  r1  r+  rÅ   )rR   rS   rT   rU   rV   r&  r
   r	   r   r2  r3  r+   )r/  r  r\   r]   r,  r·   rB   rB   rF   Ú#test_euclidean_distances_upcast_sym°  s    r5  zdtype, eps, rtolg-Cëâ6?çñhãˆµøä>g:Œ0âŽyE>g®Gáz®ï?z failing due to lack of precision)Úreason)ZmarksÚ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Š   r6  rÅ   )rR   rŽ   r   r   r+   )rW   ÚepsrÆ   r8  r]   r`   r·   r,  rB   rB   rF   Ú'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 )Né9  r†   r8   )r`   rÀ   )rR   rS   rT   ry   r   r   r+   )rÀ   r\   r]   r`   Znormal_distanceZnan_distancerB   rB   rF   Ú8test_nan_euclidean_distances_equal_to_euclidean_distanceà  s    r<  r]   r`   c                 C   sP   t  t¡�}t| |d� W d   ƒ n1 s,0    Y  d}|t|jƒksLJ ‚d S )Nr¬   zBInput contains infinity or a value too large for dtype('float64').)rk   rl   r�   r   ÚstrÚvalue)r]   r`   ÚexcinfoZexp_msgrB   rB   rF   Ú,test_nan_euclidean_distances_infinite_valuesì  s    *r@  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À   rC  r?   )rR   rŽ   r   r+   r:   )r]   ZX_diagÚmissing_valueÚexp_distrÌ   Zdist_sqZdist_twoZdist_two_copyrB   rB   rF   Ú test_nan_euclidean_distances_2x2ö  s    

rG  rE  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   rP   rB  )rR   rŽ   rX   r   r+   r:   )rE  r]   rF  rÌ   rB   rB   rF   Ú)test_nan_euclidean_distances_complete_nan  s    
rH  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      @ri   g      @g      @g      @rB  rP   TrD  g      D@r?   Fg      9@r9   )rR   rŽ   r   r,   ÚTr+   r2  r:   )
rE  r]   r`   r   r!  r"  r#  ZD5ZD6ZD7rB   rB   rF   Ú'test_nan_euclidean_distances_not_trival"  sF    ýÿýÿ	ÿüÿü

rJ  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 )
Ngáz®G‘^Àg     @„@gÍÌÌÌÌìB@gÿ–|Ã¯Æ@T)rC  rÀ   r   FrA  )rR   rŽ   r   rÞ   r+   )rE  r]   Zdist_squaredrÌ   rB   rB   rF   Ú7test_nan_euclidean_distances_one_feature_match_positiveW  s    

þÿÿrK  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^J ‚t  |dk¡spJ ‚t|t  	|¡ ddgƒ t  || g¡}t|ƒ}t  |dk¡s²J ‚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¡�s(J ‚t  |dk¡�s<J ‚d S )
Nr;  iŽ  rA  r  rÕ   ri   rÿ   iˆ  r   )rR   rS   rT   r»   Zrandr×   r   r+   rÞ   Zdiag_indices_fromrZ   )r\   rš   ÚXArã   ÚXBr!  r]   rB   rB   rF   Útest_cosine_distancesl  s$     rN  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   ƒ n1 s�0    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   rP   r?   )rR   ÚsinÚcosZarcsinr2  )rš   r›   Zdiff_latZdiff_lonÚaÚcrB   rB   rF   Ú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 rB   rB   )rD   r›   )rS  rš   rB   rF   rG   ˜  rH   z7test_haversine_distances.<locals>.<listcomp>.<listcomp>rB   )rD   ©r`   rS  )rš   rF   rG   ˜  rH   z,test_haversine_distances.<locals>.<listcomp>)rÛ   r†   z-Haversine distance only valid in 2 dimensionsru   )
rR   rS   rT   rU   rŽ   r   r+   rk   rl   r�   )r\   r]   r   r!  Úerr_msgrB   rT  rF   Útest_haversine_distancesŠ  s    	




rV  c                  C   s4   dgdgg} dgdgg}t | |ƒ}t|ddgƒ d S r  )r    r+   ©r]   r`   rã   rB   rB   rF   Útest_paired_euclidean_distances¥  s    
rX  c                  C   s4   dgdgg} dgdgg}t | |ƒ}t|ddgƒ d S r  )r!   r+   rW  rB   rB   rF   Útest_paired_manhattan_distances­  s    
rY  c                  C   s4   dgdgg} dgdgg}t | |ƒ}t|ddgƒ d S )Nr   rP   r?   rO   )r   r+   rW  rB   rB   rF   Útest_paired_cosine_distancesµ  s    
rZ  c                  C   sä  t j d¡} |  d¡}|  d¡}t||ƒ}d}t|||d�}|jtksJJ ‚t|ƒD ]h\}}t|ƒD ]V\}}	t  	||	 d ||	  ¡ }
t  
||
 ¡}t|||f |
ƒ t|||f |ƒ qbqRt|ƒ}tt  |¡dƒ t  |dk¡sæJ ‚t  |t  t  |¡¡ dk ¡�s
J ‚|  d¡ t j¡}|  d¡ t j¡}t||ƒ}|jt jk�sJJ ‚|  d¡ t j¡}t||ƒ}t  |¡ ¡ �szJ ‚|jtk�sŠJ ‚dd	gd
dgg}ddgddgg}t||ƒ}|d |d k�sÊJ ‚|d |d k�sàJ ‚t t¡� tddggƒ W d   ƒ n1 �s0    Y  t t¡�& tddggddggƒ W d   ƒ n1 �sR0    Y  t t¡�& tddggddggƒ W d   ƒ n1 �s”0    Y  t t¡�& tddggg d¢gƒ W d   ƒ n1 �sÖ0    Y  d S )Nr   r6   rÚ   r    r³   r?   rP   g333333Ó?gffffffæ?rŒ   gÍÌÌÌÌÌì?r@   )r   rP   )rP   rP   )rP   r   r“   )çš™™™™™É?r[  g333333ã?)rR   rS   rT   rU   r   r   rW   ÚfloatÚ	enumeraterz   Úexpr,   r-   r¶   rÞ   rV   r&  Zint32Úisfiniterk   rl   r�   )r\   r]   r`   ZK_addrŸ   rœ   Úirš   Újr›   rª   Zchi2_exprB   rB   rF   Útest_chi_square_kernel½  sL    


$


.66rb  Úkernelc                 C   s2   t j d¡}| d¡}| ||ƒ}t||jdƒ d S )Nr   r6   é   )rR   rS   rT   rU   r+   rI  )rc  r\   r]   rœ   rB   rB   rF   Útest_kernel_symmetryó  s    

re  c                 C   s@   t j d¡}| d¡}||ƒ}| ||ƒ}| ||ƒ}t||ƒ d S ©Nr   r6   )rR   rS   rT   rU   r+   )rc  rg   r\   r]   ro   rœ   r°   rB   rB   rF   Útest_kernel_sparse  s    


rg  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)rD   rš   rB   rB   rF   rG      rH   z&test_linear_kernel.<locals>.<listcomp>)rR   rS   rT   rU   r   r+   Úflat©r\   r]   rœ   rB   rB   rF   Útest_linear_kernel  s    

rk  c                  C   s@   t j d¡} |  d¡}t||ƒ}t|jd d d… t  d¡ƒ d S )Nr   r6   rh  r7   )rR   rS   rT   rU   r(   r+   ri  Úonesrj  rB   rB   rF   Útest_rbf_kernel#  s    

rm  c                  C   sn   t j d¡} |  d¡}t||ƒ}tt  |¡t  d¡ƒ t  |dk¡sHJ ‚t  |t  t  |¡¡ dk ¡sjJ ‚d S )Nr   r6   r7   rP   )	rR   rS   rT   rU   r   r+   r¶   rl  rÞ   rj  rB   rB   rF   Útest_laplacian_kernel+  s    

rn  zmetric, pairwise_funcr©   r   c                 C   s’   t j d¡}| d¡}| d¡}||ƒ}||ƒ}|||dd�}t|ƒsJJ ‚|||dd�}	t|	ƒrdJ ‚t| ¡ |	ƒ t||| d�}
t| ¡ |
ƒ d S )Nr   r6   r¡   F)Zdense_outputTrw   )rR   rS   rT   rU   r   r+   Ztoarrayr&   )r=   Zpairwise_funcrg   r\   r]   r`   ÚXcsrÚYcsrr¯   r°   ZK3rB   rB   rF   Ú&test_pairwise_similarity_sparse_output7  s    

rq  c           
      C   s˜   t j d¡}| d¡}| d¡}| |ƒ}| |ƒ}|d f||f|d f||ffD ]F\}}t||dd�}t|ƒ}|d urzt|ƒ}t||dd�}	t||	ƒ qLd S )Nr   r6   r¡   r   rw   r©   )rR   rS   rT   rU   r&   r*   r+   )
rg   r\   r]   r`   ro  rp  ZX_ZY_r¯   r°   rB   rB   rF   Útest_cosine_similarityQ  s    

$rr  c                  C   s:   t  t  d¡d¡} t| d ƒ\}}||u s,J ‚t| |ƒ d S ©Né(   ©r7   rõ   )rR   Úresizerè   r   r-   )rL  Ú
XA_checkedÚ
XB_checkedrB   rB   rF   Útest_check_dense_matricesf  s    ry  c                  C   s~   t  t  d¡d¡} t  t  d¡d¡}t| |ƒ\}}t| |ƒ t||ƒ t  t  d¡d¡}t| |ƒ\}}t| |ƒ t||ƒ d S )Nrt  ru  é    ©r8   rõ   )rR   rv  rè   r   r-   r   ©rL  rM  rw  rx  rB   rB   rF   Útest_check_XB_returnedo  s    


r}  c                  C   s¢   t  t  d¡d¡} t  t  d¡d¡}t t¡� t| |ƒ W d   ƒ n1 sN0    Y  t  t  d¡d¡}t t¡� t| |ƒ W d   ƒ n1 s”0    Y  d S )Né-   )r7   ró   rz  r{  é$   )r8   ró   )rR   rv  rè   rk   rl   r�   r   r   ©rL  rM  rB   rB   rF   Útest_check_different_dimensions  s    (r�  c                  C   s´   t  d¡ dd¡} t  d¡ dd¡}t t¡� t| |ƒ W d   ƒ n1 sN0    Y  t  d¡ dd¡} t  d¡ dd¡}t t¡� t| |ƒ W d   ƒ n1 s¦0    Y  d S )Nr~  ró   r7   rz  r8   rõ   )rR   rè   ré   rk   rl   r�   r   r€  rB   rB   rF   Útest_check_invalid_dimensions‹  s    (r‚  c           	      C   sà   t j d¡}| d¡}| |ƒ}| d¡}| |ƒ}t||ƒ\}}t|ƒsJJ ‚t|| ƒ ¡ dksbJ ‚t|ƒsnJ ‚t|| ƒ ¡ dks†J ‚t||ƒ\}}t|ƒs J ‚t|| ƒ ¡ dks¸J ‚t|ƒsÄJ ‚t|| ƒ ¡ dksÜJ ‚d S rf  )rR   rS   rT   rU   r   r   r»   rz   )	rg   r\   rL  Z	XA_sparserM  Z	XB_sparserw  rx  ZXA_2_checkedrB   rB   rF   Útest_check_sparse_arrays™  s    

rƒ  c                 C   s:   | j }t|ƒdkr$tdd„ | D ƒƒS tdd„ | D ƒƒS d S )NrP   c                 s   s   | ]}t |ƒV  qd S r˜   )ÚtuplifyrL   rB   rB   rF   rÝ   µ  rH   ztuplify.<locals>.<genexpr>c                 s   s   | ]
}|V  qd S r˜   rB   )rD   ÚrrB   rB   rF   rÝ   ¸  rH   )rZ   rÉ   rK   )r]   rò   rB   rB   rF   r„  °  s    r„  c                  C   sV   t j d¡} |  d¡}t|ƒ}|  d¡}t|ƒ}t||ƒ\}}t||ƒ t||ƒ d S rf  )rR   rS   rT   rU   r„  r   r-   )r\   rL  Z	XA_tuplesrM  Z	XB_tuplesrw  rx  rB   rB   rF   Útest_check_tuple_input»  s    


r†  c                  C   sä   t  t  d¡d¡ t j¡} t  t  d¡d¡ t j¡}t| d ƒ\}}|jt jksRJ ‚t| |ƒ\}}|jt jkspJ ‚|jt jks€J ‚t|  t¡|ƒ\}}|jtks¢J ‚|jtks°J ‚t| | t¡ƒ\}}|jtksÒJ ‚|jtksàJ ‚d S rs  )rR   rv  rè   rV   r&  r   rW   r\  r|  rB   rB   rF   Útest_check_preserve_typeÇ  s    r‡  r£   Ú
seuclideanÚmahalanobisÚdist_functionc              	   C   sv   t dd��X tj d¡}| d¡}tt||d�ƒ}t t|||| d�ƒ¡}t	||ƒ W d   ƒ n1 sh0    Y  d S )Nr    )rÔ   r   r)  r<   r¢   )
r   rR   rS   rT   rU   r
   r	   r×   rK   r+   )r£   r=   rŠ  r\   r]   Úexpected_distrÌ   rB   rB   rF   Ú+test_pairwise_distances_data_derived_paramsß  s    
rŒ  c                 C   sh   t j d¡}| d¡}| d¡}tjtd| › d�d�� t||| d� W d   ƒ n1 sZ0    Y  d S )Nr   r)  z+The '(V|VI)' parameter is required for the z metricru   r<   )rR   rS   rT   rU   rk   rl   r�   r"   )r=   r\   r]   r`   rB   rB   rF   Ú1test_pairwise_distances_data_derived_params_errorñ  s    


þr�  )Z
braycurtisZcanberraZ	chebyshevZcorrelationZhammingr‰  r   rˆ  r¿   r   r   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rŒdt jt  	||g¡ddt j
d	�i}n,| d
kr¸dt j t  t  	||g¡j¡¡ji}t||fd| i|¤Ž}t||ƒ d S )Nr   r6   Fr9   r<   rˆ  ÚVrP   )rº   ZddofrW   r‰  ZVIr=   )rR   rS   rT   rU   rV   r
   r	   r   Úvarr×   rj   r   ÚinvZcovrI  r"   r+   )	r=   r[   rŽ  r\   r]   r´   r`   r‹  rÌ   rB   rB   rF   Ú)test_numeric_pairwise_distances_datatypes   s    $$r’  Úpairwise_distances_funcc                 C   sB   ddgdt jgddgddgg}| ||dd�}t  |¡ ¡ r>J ‚dS )	z8Check that `nan_euclidean` is lenient with `nan` values.r   rP   r?   r†   r7   rA   r<   N)rR   rX   ÚisnanÚany)r“  r]   ÚoutputrB   rB   rF   Útest_nan_euclidean_support1  s    r—  c                  C   sb   t jt jgt jt jgt jt jgg} t| | dd�}ddgddgddgg}t||dd�}t||ƒ dS )zyCheck that the behavior of constant input is the same in the case of
    full of nan vector and full of zero vector.
    rA   r<   r   N)rR   rX   r#   r+   )ZX_nanZ
argmin_nanZX_constZargmin_constrB   rB   rF   Ú(test_nan_euclidean_constant_input_argmin>  s
    "r˜  zX,Y,expected_distance)rQ  ÚabÚabc)rA  rŒ   ri   )rŒ   rA  rŒ   )ri   rŒ   rA  rQ  r™  rA  rŒ   ri   c                 C   s$   dd„ }t | ||d�}t||ƒ dS )z8Check pairwise_distances with lists of strings as input.c                 S   s   t  t| ƒt|ƒ ¡S r˜   )rR   r»   rÉ   r¥   rB   rB   rF   Údummy_string_similarity^  s    zLtest_pairwise_dist_custom_metric_for_string.<locals>.dummy_string_similarity)r]   r`   r=   N)r"   r+   )r]   r`   Úexpected_distancer›  Úactual_distancerB   rB   rF   Ú+test_pairwise_dist_custom_metric_for_stringL  s    rž  c                  C   s^   dd„ } t jg d¢g d¢g d¢gtd�}t  g d¢g d¢g d	¢g¡}t|| d
�}t||ƒ dS )zjCheck that pairwise_distances does not convert boolean input to float
    when using a custom metric.
    c                 S   s   d| |@   ¡ | |B   ¡   S )NrP   )rz   )Zv1Zv2rB   rB   rF   Údummy_bool_distj  s    zBtest_pairwise_dist_custom_metric_for_bool.<locals>.dummy_bool_dist)rP   r   r   r   )rP   r   rP   r   )rP   rP   rP   rP   rŠ   )rA  rO   ç      è?)rO   rA  rO   )r   rO   rA  )r]   r=   N)rR   rŽ   r|   r"   r+   )rŸ  r]   rœ  r�  rB   rB   rF   Ú)test_pairwise_dist_custom_metric_for_boole  s     ýÿr¡  c                 C   sD   | t  d¡ƒg}| 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   )rD   Úm1Úm2rB   rB   rF   rÝ   ƒ  s   z9test_sparse_manhattan_readonly_dataset.<locals>.<genexpr>)rR   rl  r4   Úzip)rg   Z	matrices1Z	matrices2rB   rB   rF   Ú&test_sparse_manhattan_readonly_dataset|  s
    ÿr¥  c                  C   sœ   t jjdd�} t jjdd�}d}tjt|d�� t| |dd� W d   ƒ n1 sR0    Y  tjt|d�� t| |dd� W d   ƒ n1 sŽ0    Y  d S )Nr  )r  z5'force_all_finite' was renamed to 'ensure_all_finite'ru   T)Zforce_all_finite)rR   rS   Úuniformrk   r{   ÚFutureWarningr   r"   )r]   r`   r‚   rB   rB   rF   Ú$test_force_all_finite_rename_warning‰  s    ,r¨  )r;   )šr}   Útypesr   ÚnumpyrR   rk   r   Zscipy.sparser   Zscipy.spatial.distancer   r   r   r   r	   r
   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,   r-   r.   Zsklearn.utils.fixesr/   r0   r1   r2   r3   Zsklearn.utils.parallelr4   r5   rc   ÚmarkZparametrizerr   ÚDeprecationWarningrƒ   r„   r’   r•   rè   rV   Z_minkowski_kwdsr�   rj   r&  r‰   r¤   r§   r±   r²   rµ   Úitemsr¸   r¼   rÍ   rÑ   rÙ   rß   rë   r�   rn   rö   rü   r  r  Úfilterwarningsr  rŽ   r  r$  r'  r(  r-  r.  r4  r5  ÚparamZxfailr:  r<  Úinfr@  r2  rX   rG  rH  rJ  rK  rN  rV  rX  rY  rZ  rb  re  rg  rk  rm  rn  rq  rr  ry  r}  r�  r‚  rƒ  r„  r†  r‡  rŒ  r�  r’  r—  r˜  rž  r¡  r¥  r¨  rB   rB   rB   rF   Ú<module>   sL   	|OC	
ýýóþþyýþû	ú÷þ
ýýýýýêþ





$
ý
ý
ý
 
"
ý
ý
ý

ý
ý
ý
üþþ
.0"$"&&    öþ


4
6úþ
úþ	þ
	
ÿ
þþ
	ýýúþ


