U
    _»{j�Õ  ã                   @   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jD Edddg¡dd„ ƒZFejD Ede¡dd„ ƒZGdd„ ZHejD Ed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jD Ed'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jD Ed3ejRejSeTg¡d4d5„ ƒƒZUd6d7„ ZVejD Edd8d9d:d/d;d<d=g¡d>d?„ ƒZWd@dA„ ZXdBdC„ ZYejD EdDe Z¡ ¡dEdF„ ƒZ[dGdH„ Z\dIdJ„ Z]dKdL„ Z^dMdN„ Z_dOdP„ Z`ejD EdQdRdS„ dTdS„ dUdS„ dVdS„ dWdS„ g¡dXdY„ ƒZaejD EdZd[dS„ ebd\fd]dS„ ebd^fd_dS„ ebd`fdadS„ ecdbfdcdS„ ecddfdedS„ ecdffg¡dgdh„ ƒZddèdidj„ZeejD Eddk¡dldm„ ƒZfejD Ed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jD Ed�dd!d‚dƒg¡ejDjEdrejiegdsdtgdu�ejDjEdvejiegdsdtgdu�d„d…„ ƒƒƒZoejD Ed�dd!d‚dƒg¡ejDjEdrejiegdsdtgdu�d†d‡„ ƒƒZpejD EdˆejSd‰dŠfejPejRd‹dŒejDjqd�d,�d-�g¡ejD EdŽd d�g¡d�d‘„ ƒƒZrejD Ed’ddg¡d“d”„ ƒZsejD Ed•e iejtd gg¡e id ejt gg¡g¡ejD Ed–e iejtd gg¡e id ejt gg¡dg¡d—d˜„ ƒƒZuejD Ed™e 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š¡d›fe id d gd d›gg¡e vdš¡d›fe id›d gd d›gg¡ejwd›fe id›d gd›d gg¡e vdš¡d›fe id d›gd d›gg¡e vdš¡d›fg
¡dœd�„ ƒZxejD Edžejwd›g¡dŸd „ ƒZyejD Edžejwd›g¡d¡d¢„ ƒZzejD Edž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jD Ed±e'e3e4e&e5e#f¡d²d³„ ƒZ‚ejD Ed±e'e3e4e&e5e#f¡d´dµ„ ƒZƒd¶d·„ Z„d¸d¹„ Z…dºd»„ Z†ejD Ed¼d;e'fd½e#fg¡d¾d¿„ ƒZ‡dÀdÁ„ ZˆdÂdÃ„ Z‰dÄdÅ„ ZŠdÆdÇ„ Z‹dÈdÉ„ ZŒdÊdË„ Z�dÌdÍ„ ZŽdÎdÏ„ Z�dÐdÑ„ Z�ejD EdÒd dšg¡ejD EddÓdÔg¡ejD EdÕe.e1g¡dÖd×„ ƒƒƒZ‘ejD EddÓdÔg¡dØdÙ„ ƒZ’ejD EddÚdÛdÜdÝdÞdÔd)dÓdßdàd½d(g¡ejDjEdáddgdâdãgdu�dädå„ ƒƒZ“dædç„ Z”d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s°n 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�sŽn 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�sØt	‚|jd |jd k�sòt	‚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�sŒt	‚|jd |jd k�s¦t	‚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�sÞn t	‚n8t t	¡�( |j|j  k�rÎ| k�sÔn 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   úb/var/www/html/bwave/python/venv/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s¶t‚t d¡}| |t d	¡dd�}||ksàt‚| 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rÂd 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rˆt|  ||ƒ}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sæt	‚t|ƒt jksøt	‚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=   çH¯¼šò×z>©Ú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 )Néd   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s‚t
‚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ð   iðÿÿÿr?   )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sŒt	‚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:Œ0âŽyE>g®Gáz®ï?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   Ú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 )Né9  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    r1  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¼   r4  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    

r8  r6  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   r3  )rS   rŠ   rZ   r    r.   r:   )r6  rd   r7  rÈ   rA   rA   rE   Ú)test_nan_euclidean_distances_complete_nan  s    
r9  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      @r3  rN   Tr5  g      D@r?   Fg      9@r9   )rS   rŠ   r    r/   ÚTr.   r$  r:   )
r6  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 )
Ngáz®G‘^Àg     @„@gÍÌÌÌÌìB@gÿ–|Ã¯Æ@T)r4  r¼   r   Fr2  )rS   rŠ   r    rÚ   rY   r.   )r6  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¡s²t	‚t  |dk¡sÄt	‚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Ž  r2  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—   )rD  r–   rA   rE   rF   „  s     z7test_haversine_distances.<locals>.<listcomp>.<listcomp>rA   )rC   ©rg   rD  )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   rE  rE   Útest_haversine_distancesv  s    	




rG  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    
rI  c                  C   s4   dgdgg} dgdgg}t | |ƒ}t|ddgƒ d S r
  )r$   r.   rH  rA   rA   rE   Útest_paired_manhattan_distances™  s    
rJ  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.   rH  rA   rA   rE   Útest_paired_cosine_distances¡  s    
rK  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¡sæt‚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�sŠt‚dd	gd
dgg}ddgddgg}t||ƒ}|d |d k�sÊt‚|d |d k�sàt‚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    


$


  rR  Úkernelc                 C   s2   t j d¡}| d¡}| ||ƒ}t||jdƒ d S )Nr   r6   é   )rS   rT   rU   rV   r.   r:  )rS  rc   rd   r˜   rA   rA   rE   Útest_kernel_symmetryß  s    

rU  c                 C   s@   t j d¡}| d¡}t|ƒ}| ||ƒ}| ||ƒ}t||ƒ d S ©Nr   r6   )rS   rT   rU   rV   r   r.   )rS  rc   rd   rj   r˜   r­   rA   rA   rE   Útest_kernel_sparseò  s    


rW  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    

r[  c                  C   s@   t j d¡} |  d¡}t||ƒ}t|jd d d… t  d¡ƒ d S )Nr   r6   rX  r7   )rS   rT   rU   rV   r+   r.   rY  ÚonesrZ  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   rZ  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    

ra  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    

$rb  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    ri  c                  C   s~   t  t  d¡d¡} t  t  d¡d¡}t| |ƒ\}}t| |ƒ t||ƒ t  t  d¡d¡}t| |ƒ\}}t| |ƒ t||ƒ d S )Nrd  re  é    ©r8   rî   )rS   rf  rá   r   r0   r   ©r=  r>  rg  rh  rA   rA   rE   Útest_check_XB_returnedW  s    


rm  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ì   rj  rk  é$   )r8   rì   )rS   rf  rá   r^   r_   ra   r   r   ©r=  r>  rA   rA   rE   Útest_check_different_dimensionsg  s    rq  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 )Nrn  rì   r7   rj  r8   rî   )rS   rá   râ   r^   r_   ra   r   rp  rA   rA   rE   Útest_check_invalid_dimensionss  s    rr  c                  C   sà   t j d¡} |  d¡}t|ƒ}|  d¡}t|ƒ}t||ƒ\}}t|ƒsJt‚t|| ƒ 	¡ dksbt‚t|ƒsnt‚t|| ƒ 	¡ dks†t‚t||ƒ\}}t|ƒs t‚t|| ƒ 	¡ dks¸t‚t|ƒsÄt‚t|| ƒ 	¡ dksÜt‚d S rV  )
rS   rT   rU   rV   r   r   r   rY   r¸   ry   )rc   r=  Z	XA_sparser>  Z	XB_sparserg  rh  ZXA_2_checkedrA   rA   rE   Útest_check_sparse_arrays�  s    

rs  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   rt  —  s    rt  c                  C   sV   t j d¡} |  d¡}t|ƒ}|  d¡}t|ƒ}t||ƒ\}}t||ƒ t||ƒ d S rV  )rS   rT   rU   rV   rt  r   r0   )rc   r=  Z	XA_tuplesr>  Z	XB_tuplesrg  rh  rA   rA   rE   Útest_check_tuple_input¢  s    


rv  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s€t‚t|  t¡|ƒ\}}|jtks¢t‚|jtks°t‚t| | t¡ƒ\}}|jtksÒt‚|jtksàt‚d S rc  )	rS   rf  rá   rW   r#  r   rX   rY   rL  rl  rA   rA   rE   Útest_check_preserve_type®  s    rw  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=   rz  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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<   rx  ÚVrN   )r·   ZddofrX   ry  ZVIr=   )rS   rT   rU   rV   rW   r   r   r   ÚvarrÓ   r]   r   ÚinvZcovr:  r%   r.   )	r=   rb   r~  rc   rd   r±   rg   r{  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-  Úinfr1  r$  rZ   r8  r9  r;  r<  r?  rG  rI  rJ  rK  rR  rU  rW  r[  r]  r^  ra  rb  ri  rm  rq  rr  rs  rt  rv  rw  r|  r}  r‚  r†  rA   rA   rA   rE   Ú<module>   sF   	| 

	
ýý
þü	
þü	áþ$þ

yûþ

ýýýýýêþ




'  ÿ  ÿ  ÿ
 "  ÿ  ÿ  ÿ
  ÿ  ÿ  ÿ
üþþ
.0"$"&&    öþ


4
6úþ
úþ
	 ÿ
	 ÿ
ôþ