U
    »mœdäG ã                   @   s\  d dl Z d dlZd dlmZmZ d dlZd dlZd dl	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 d dl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! 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 dd	d
dddddddddddddddddddddd d!d"d#d$gZ8ej9d d%d&d'd(d)gd%d d*d+d,d-gd&d*d d.d/d0gd'd+d.d d1d2gd(d,d/d1d d3gd)d-d0d2d3d ggd4d5�Z:ee:ƒZ;i Z<d6d7„ Z=e=ƒ  d8d9„ Z>d•d:d;„Z?d–d>d?„Z@d@dA„ ZAdBdC„ ZBd—dDdE„ZCeedFdG�dHdI„ dfdJdK„ZDdLddMdI„ dNd=d<d=d=d=d=d=d<d<d<dOd eedFdG�fdPdQ„ZEeEedRd<dS�ZFeEedRd<d<dT�ZGeEedRd<dRdU�ZHeEedRd<d<dRdV�ZIeEe1ƒZJeEe*d<dW� ZKZLeEe7ƒZMeEe(ƒZNeEe%ƒZOeEe$ƒZPeEe'ƒZQeEe&ƒZReEe-ƒZSeEe.ƒZTeEe+ƒZUeEe)d<dX�ZVeEe6d<dX�ZWeEe"ƒZXeEe#d<dX�ZYeEe5ƒZZeEe4ƒZ[eEe2ƒZ\G dYdZ„ dZƒZ]G d[d\„ d\ƒZ^G d]d^„ d^ƒZ_G d_d`„ d`ƒZ`G dadb„ dbƒZaG dcdd„ ddƒZbdedf„ ZcG dgdh„ dhƒZddidj„ ZeG dkdl„ dlƒZfejg hdmdndodpg¡dqdr„ ƒZidsdt„ Zjdudv„ Zkdwdx„ Zldydz„ Zmd{d|„ Znd}d~„ Zodd€„ Zpd�d‚„ Zqdƒd„„ Zrd…d†„ Zsd‡dˆ„ Ztd‰dŠ„ Zud‹dŒ„ Zvd�dŽ„ Zwd�d�„ Zxd‘d’„ Zyd“d”„ ZzdS )˜é    N)ÚwrapsÚpartial)Únorm)ÚverboseÚassert_Úassert_array_equalÚassert_equalÚassert_almost_equalÚassert_allcloseÚbreak_cyclesÚIS_PYPY)Úraises)	Ú
squareformÚpdistÚcdistÚ	num_obs_yÚ
num_obs_dmÚis_valid_dmÚ
is_valid_yÚ_validate_vectorÚ_METRICS_NAMES)Ú
braycurtisÚcanberraÚ	chebyshevÚ	cityblockÚcorrelationÚcosineÚdiceÚ	euclideanÚhammingÚjaccardÚjensenshannonÚ	kulsinskiÚkulczynski1ÚmahalanobisÚ	minkowskiÚrogerstanimotoÚ
russellraoÚ
seuclideanÚsokalmichenerÚsokalsneathÚsqeuclideanÚyulezcdist-X1.txtzcdist-X2.txtziris.txtzpdist-boolean-inp.txtzpdist-chebyshev-ml-iris.txtzpdist-chebyshev-ml.txtzpdist-cityblock-ml-iris.txtzpdist-cityblock-ml.txtzpdist-correlation-ml-iris.txtzpdist-correlation-ml.txtzpdist-cosine-ml-iris.txtzpdist-cosine-ml.txtzpdist-double-inp.txtzpdist-euclidean-ml-iris.txtzpdist-euclidean-ml.txtzpdist-hamming-ml.txtzpdist-jaccard-ml.txtzpdist-jensenshannon-ml-iris.txtzpdist-jensenshannon-ml.txtzpdist-minkowski-3.2-ml-iris.txtzpdist-minkowski-3.2-ml.txtzpdist-minkowski-5.8-ml-iris.txtzpdist-seuclidean-ml-iris.txtzpdist-seuclidean-ml.txtzpdist-spearman-ml.txtzrandom-bool-data.txtzrandom-double-data.txtzrandom-int-data.txtzrandom-uint-data.txti–  im  éÿ   iœ  iä  i'  iÔ  i  i�  iò  i4  éŠ   éÛ   ie  i�  Údouble©Údtypec                  C   s²   t D ]N} |  dd¡ dd¡}tj tj t¡d| ¡}t|ƒ}t 	|¡t
|< | ¡  qt t
d ¡t
d< t t
d ¡t
d< t t
d ¡t
d< t t
d	 ¡t
d	< t t
d
 ¡t
d
< d S )Nz.txtÚ z-mlÚdataúpdist-boolean-inpúrandom-bool-dataúrandom-double-dataúrandom-float32-dataúrandom-int-dataúrandom-uint-data)Ú
_filenamesÚreplaceÚosÚpathÚjoinÚdirnameÚ__file__ÚopenÚnpZloadtxtÚeoÚcloseZbool_Úfloat32Úint_Úuint)ÚfnÚnameZfqfnÚfp© rL   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/spatial/tests/test_distance.pyÚload_testing_filesp   s    
rN   c                   C   s   t  d¡jdk S )Nr   é   )rC   ZintpÚitemsizerL   rL   rL   rM   Ú	_is_32bit�   s    rQ   c                    s|   dd„ ˆ D ƒ‰ |d kr(dd„ ˆ D ƒ‰ d}t dd„ ˆ D ƒƒ‰ |dk rrt‡ fdd„ˆ D ƒƒs`tdƒ‚tˆ d jƒ| }ˆ |f S )	Nc                 S   s   g | ]}t  |¡‘qS rL   )rC   Ú
asanyarray©Ú.0ÚarL   rL   rM   Ú
<listcomp>†   s     z!_chk_asarrays.<locals>.<listcomp>c                 S   s$   g | ]}|j d krt |¡n|‘qS ©é   )ÚndimrC   ZravelrS   rL   rL   rM   rV   ‰   s   ÿr   c                 s   s   | ]}t  |¡V  qd S ©N)rC   Ú
atleast_1drS   rL   rL   rM   Ú	<genexpr>Œ   s     z _chk_asarrays.<locals>.<genexpr>c                 3   s   | ]}|j ˆ d  j kV  qdS )r   N)rY   rS   ©ÚarraysrL   rM   r\   Ž   s     z(array ndim must be the same for neg axis)ÚtupleÚallÚ
ValueErrorÚrangerY   )r^   ÚaxisrL   r]   rM   Ú_chk_asarrays…   s    ÿrd   FTc
                    s|  t | ˆ d�}
|
d d… |
d  } ‰ |o*| }|sF|rFtdd„ | D ƒƒ}|r€dd„ | D ƒ}t|ƒr€d}d}tdd„ t| |ƒD ƒƒ} ˆd k	r”t ˆ¡‰n&|r®t | d	 jˆ  ¡‰n| ˆˆ f S |	rÆtˆƒ‰|rÖt	| ˆˆ ƒ‰t
‡ ‡fd
d„| D ƒƒsötdƒ‚|�rˆd	k  ¡ �rtdƒ‚|�rXt ˆd	k¡d	 ‰ˆjˆjk �rXt‡ ‡fdd„| D ƒƒ} ˆˆ ‰|�rpˆdk 
¡ �rpd ‰| ˆˆ f S )N©rc   éÿÿÿÿc                 s   s"   | ]}t j |¡t jjk	V  qd S rZ   )rC   ÚmaÚgetmaskÚnomaskrS   rL   rL   rM   r\   ž   s     z_chk_weights.<locals>.<genexpr>c                 S   s   g | ]}t  t  |¡¡‘qS rL   )rC   ÚisnanÚsumrS   rL   rL   rM   rV   ¡   s     z _chk_weights.<locals>.<listcomp>Tc                 s   s&   | ]\}}|rt j |¡n|V  qd S rZ   ©rC   rg   Zmasked_invalid)rT   rU   Zhas_nanrL   rL   rM   r\   ¥   s   ÿr   c                 3   s    | ]}ˆj |j ˆ  fkV  qd S rZ   ©ÚshaperS   )rc   ÚweightsrL   rM   r\   µ   s     z*weights shape must match arrays along axiszweights cannot be negativec                 3   s   | ]}t j|ˆˆ d �V  qdS )re   N)rC   ÚtakerS   )rc   Úpos_weightsrL   rM   r\   ½   s     rX   )rd   Úanyr_   ÚziprC   rR   Úonesrn   Ú_freq_weightsÚ_weight_maskedr`   ra   ZnonzeroÚsize)r^   ro   rc   Úforce_weightsZsimplify_weightsZpos_onlyZ	neg_checkZ
nan_screenÚmask_screenÚddofÚchkedZhas_nansrL   )rc   rq   ro   rM   Ú_chk_weights”   sD    
ÿr|   c                 C   s2   | d kr| S |   t¡}| |k ¡ r.td|  ƒ‚|S )Nz2frequency (integer count-type) weights required %s)ÚastypeÚintrr   ra   )ro   Zint_weightsrL   rL   rM   ru   Ä   s    
ru   c                    s‚   ˆ d krd‰ t  |¡}| D ]b}t j |¡}|t jjkr8q|jdkrjt‡ fdd„t|jƒD ƒƒ}|j|d�}|d| 	t
¡ 9 }q|S )Nr   rX   c                 3   s   | ]}|ˆ kr|V  qd S rZ   rL   ©rT   Úire   rL   rM   r\   Ö   s      z!_weight_masked.<locals>.<genexpr>re   )rC   rR   rg   rh   ri   rY   r_   rb   rr   r}   r~   )r^   ro   rc   rU   Z	axis_maskZnot_axesrL   re   rM   rv   Í   s    

rv   c           	         sÒ   dd„ | D ƒ} t j|t jd�}t j |¡}dd„ ‰| d jˆ  ‰t‡ ‡fdd„| D ƒƒs`td	ƒ‚tt	|ƒˆ ƒD ]X}| 
ˆ| ¡‰|ˆ }| ¡ }|| |ˆ< t  |d
| | ¡}‡ ‡‡fdd„| D ƒ} qp| |fS )Nc                 S   s,   g | ]$}t  |jt j¡r$| t j¡n|‘qS rL   )rC   Ú
issubdtyper2   Úintegerr}   Úfloat64)rT   ZarrrL   rL   rM   rV   Þ   s   ÿz_rand_split.<locals>.<listcomp>r1   c                    s6   t  t jˆ |ˆd�¡}| ‡ ‡fdd„tˆ jƒD ƒ¡S )Nre   c                    s"   g | ]}|ˆkrˆ j | nd ‘qS rW   rm   r   ©rU   rc   rL   rM   rV   ç   s   ÿz/_rand_split.<locals>.mytake.<locals>.<listcomp>)rC   rR   rp   Úreshaperb   rY   )rU   Zixrc   ÚrecordrL   r„   rM   Úmytakeå   s    ÿz_rand_split.<locals>.mytaker   c                 3   s   | ]}|j ˆ  ˆkV  qd S rZ   rm   rS   )rc   Ún_obsrL   rM   r\   ë   s     z_rand_split.<locals>.<genexpr>z#data must be aligned on sample axisç      ð?c              	      s&   g | ]}t j|ˆ|ˆˆ d �ˆ d �‘qS ©re   ©rC   ÚappendrS   )rc   r‡   Úsplit_ixrL   rM   rV   ò   s   ÿÿ)rC   Úarrayrƒ   ÚrandomÚRandomStatern   r`   ÚAssertionErrorrb   r~   ÚrandintÚrandrŒ   )	r^   ro   rc   Ú	split_perÚseedZseeded_randr€   Zprev_wÚqrL   )rc   r‡   rˆ   r�   rM   Ú_rand_splitÜ   s$    ÿ ÿr—   çñhãˆµøä>©Úatolc                 C   s   | S rZ   rL   ©ÚxrL   rL   rM   Ú<lambda>ø   ó    r�   c           	   	   C   sŒ   || ƒ}||ƒ}z t  ||k¡ ¡ r.|||ƒ W nV tk
rN   |||ƒ Y n: ttfk
r†   t||ƒD ]\}}t|||d� qjY nX d S )N)Úcompare_assert)rC   rŽ   rr   ÚAttributeErrorÚ	TypeErrorra   rs   Ú_rough_check)	rU   ÚbrŸ   ÚkeyÚwZcheck_aZcheck_bZa_iZb_irL   rL   rM   r¢   ÷   s    r¢   é   c                 C   s   | S rZ   rL   r›   rL   rL   rM   r�     rž   r¥   r‰   c                    s8   t ˆƒ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡fdd„ƒ}|S )zŒruns fn on its arguments 2 or 3 ways, checks that the results are the same,
       then returns the same thing it would have returned beforec               
      sº  ˆ| |Ž}| d ˆ	… }| ˆ	d … }|  ˆd ¡}|  dˆ¡‰ t||ˆ ddd�}|d d… |d |d   }}‰ ˆr~dd„ |D ƒ}�zöt|ƒ| } ˆr®||ˆ< t|ˆ| |Žˆd� ˆ�r2|d	 |ˆ< t|ˆ| |Žˆd� |d
 |ˆ< zt|ˆ| |Žˆd� W n8 tk
�r0 } zt|ƒ|||fƒ|‚W 5 d }~X Y nX ˆ�rÐt||ˆ ˆˆd�\}}	||	d |j…< d|	|jd …< t|ƒ| }
|	|ˆ< t|ˆ|
|Žˆd� |D ]>}td ƒg|j	 }t|jd ƒ|ˆ < t|ƒ}|| d ||< �q–t|ƒ| }
t|ˆ|
|Žˆd� |D ]@}td ƒg|j	 }t|jd ƒ|ˆ < t|ƒ}|| t
j ||< �qú|  dd ¡dk�rtˆ
�rtt|ƒ| }
t|ˆ|
|Žˆd� ˆ�rÊdd„ |D ƒ}t|ƒ| }
t|ˆ|
|Žˆd� ˆ�rÊd |ˆ< t|ˆ|
|Žˆd� ~~
~	ˆ�r&‡ fdd„|D ƒ}t
 ||¡d }t|ƒ| }||ˆ< t|ˆ||Žˆd� ~~~ˆ�rtˆdk�rtt||ˆ ˆˆd�\}}t|ƒ| }||ˆ< t|ˆ||Žˆd� W n> tk
�r´ } zˆ�s¤t dˆj|f ¡ W 5 d }~X Y nX |S )Nrc   T)ro   rc   rx   ry   éþÿÿÿrf   c                 S   s   g | ]}t  | ¡ ¡‘qS rL   )rC   r[   ÚsqueezerS   rL   rL   rM   rV     s     z4_weight_checked.<locals>.wrapped.<locals>.<listcomp>)r¤   g     @Y@gB`åÐ"Û¹?)r”   r•   r   ée   Z
nan_policyZomitc                 S   s   g | ]}t j |¡‘qS rL   rl   rS   rL   rL   rM   rV   G  s     c                    s   g | ]}t j||ˆ d �‘qS rŠ   r‹   rS   re   rL   rM   rV   Q  s     ç       @z%s NotImplemented weights: %s)Úgetr|   r_   r¢   Ú	ExceptionÚtyper—   rw   ÚslicerY   rC   ÚnanrŒ   ÚNotImplementedErrorÚwarningsÚwarnÚ__name__)ÚargsÚkwargsÚresultr^   Úrestro   r{   ÚeZ
dud_arraysZdud_weightsZdud_argsrU   ZindexerZ
dup_arraysZdup_weightsZdup_argsZsplit_arraysZsplit_weightsZ
split_args©Ú
const_testÚdefault_axisÚdud_testÚdup_testrI   r¤   Úma_safeÚma_very_safeÚn_argsÚnan_safeÚ	ones_testr•   Úsilentr”   Ú
split_testr¨   Ú
weight_argre   rM   Úwrapped  sˆ    
 &&z _weight_checked.<locals>.wrapped)r   )rI   rÀ   r»   r¤   rÅ   r¨   rÃ   rÂ   rº   r½   rÄ   r¼   r¾   r¿   rÁ   r”   r•   rŸ   rÆ   rL   r¹   rM   Ú_weight_checked  s    .UrÇ   rX   )r»   r¨   )r»   r¨   rº   )r»   r¨   rÀ   )r»   r¨   rº   rÀ   )r¼   )rº   c                   @   s–   e Zd Zdd„ Zdd„ Zdd„ Zej ddd	d
dddde	j
g¡dd„ ƒZdd„ Zdd„ Zdd„ Zd%dd„Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )&Ú	TestCdistc                 C   sL   dddddg| _ tjtjtjtjgtjtjtjgtjtjgtjgdœ| _d S ©Nr8   r9   r:   r7   r6   )ÚboolrH   r~   rF   ©Úrnd_eo_namesrC   rH   rG   rF   r0   Úvalid_upcasts©ÚselfrL   rL   rM   Úsetup_method�  s     þ
ýzTestCdist.setup_methodc              
   C   s  d"dd„}dddgdd	d
gdd	dgg}dddgdddgdddgg}dt  d¡dœ}dgd }tD ]Ú}t j ¡ �Æ}|dkr„| td¡ ttt	||fd|i|—Ž ttt	||fdt
|ƒi|—Ž ttt	||fdd| i|—Ž ttt	||f|žd|iŽ ttt	||f|ždt
|ƒiŽ ttt	||f|ždd| iŽ W 5 Q R X q`ttt	|||ƒ ttt	|||f|žŽ  ttt	|||f|Ž ttt	|||ddd� ttt	|||dddd� ttt	|||dddƒ ttt	|||ddƒ ttt	|||dƒ ttt	|||dddd� tt	|||ddd �d!ƒ d S )#NrX   r¦   c                 S   s   || | S rZ   rL   ©rœ   ÚyÚargÚkwargÚkwarg2rL   rL   rM   Ú
_my_metricŒ  s    z3TestCdist.test_cdist_extra_args.<locals>._my_metricr‰   rª   ç      @ç333333ó?çffffff@ç333333@çš™™™™™@çš™™™™™@g      @ç      @g       @g      @ç333333@gÍÌÌÌÌÌ @g      @ç…ëQ¸	@é   ©ZN0tV4l1D_p4raMr¥   éÈ   r"   ú"Kulsinski has been deprecated fromÚmetricÚtest_çffffff
@©rÔ   rÕ   ©rÔ   çš™™™™™ñ?©rä   rÓ   rÕ   çš™™™™™@)rX   r¦   )rC   Úaranger   ÚtestingÚsuppress_warningsÚfilterÚDeprecationWarningÚassert_raisesr¡   r   Úevalr
   )rÏ   rÖ   ÚX1ÚX2rµ   r´   rä   ÚsuprL   rL   rM   Útest_cdist_extra_argsŠ  s|    

ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ
 ÿÿzTestCdist.test_cdist_extra_argsc                 C   sD   d}t d }t d }t||dƒ}t||dƒ}t|||tdkd� d S )NçVçž¯Ò<úcdist-X1úcdist-X2r   Útest_euclideanr¦   ©Úrtolr   ©rD   Úwcdist_no_constr
   r   )rÏ   Úepsró   rô   ÚY1ÚY2rL   rL   rM   Ú#test_cdist_euclidean_random_unicode¶  s    z-TestCdist.test_cdist_euclidean_random_unicodeÚpçš™™™™™¹?ç      Ð?r‰   ç®Gáz®ó?rª   gffffff@gffffff@c                 C   sN   d}t d }t d }t||d|d�}t||d|d�}t||d|tdkd	� d S )
Nç‚vIhÂ%<=rø   rù   r%   ©r  Útest_minkowskir   r¦   )rš   rü   r   rý   )rÏ   r  rÿ   ró   rô   r   r  rL   rL   rM   Útest_cdist_minkowski_random¾  s    z%TestCdist.test_cdist_minkowski_randomc                 C   sb   d}t d }t d }t||dƒ}dd„ }dt |||ƒ |||ƒ j¡ }t|||tdkd	� d S )
Nç›+¡†›„=rø   rù   r   c                 S   s   t jj| dd� dd¡S )NrX   re   rf   )rC   Úlinalgr   r…   )ÚXrL   rL   rM   ÚnormsÏ  s    z1TestCdist.test_cdist_cosine_random.<locals>.normsrX   r¦   rû   )rD   ÚwcdistrC   ÚdotÚTr
   r   )rÏ   rÿ   ró   rô   r   r  r  rL   rL   rM   Útest_cdist_cosine_randomÈ  s    "z"TestCdist.test_cdist_cosine_randomc                 C   sä   t  dgdgg¡}t  dgdgg¡}t||dd�}t|dt  d¡gt  d¡t  d¡ggƒ t  d	d	gd
d	gg¡}t  d	dgdd	gd	dgg¡}t||dd�}t  d¡}t||||gdd| dggƒ tttd	dggddggdd� d S )Nr¦   rà   é   r$   ©rä   ç        ç      @ç      à?r   rf   rX   r§   )rC   rŽ   r   r
   Úsqrtrñ   ra   )rÏ   Úx1Úx2ÚdistÚrt2rL   rL   rM   Útest_cdist_mahalanobisÖ  s    (
   ÿz TestCdist.test_cdist_mahalanobisc                    sV   G dd„ dƒ‰ ‡ fdd„}t jˆ ƒ ggtd�}t|||d�}d}t||tdkd	� d S )
Nc                   @   s   e Zd ZdS )z6TestCdist.test_cdist_custom_notdouble.<locals>.myclassN©r³   Ú
__module__Ú__qualname__rL   rL   rL   rM   Úmyclassé  s   r!  c                    s(   t | d ˆ ƒrt |d ˆ ƒs$tdƒ‚dS ©Nr   zType has been changedç+‡ÙÎ÷ñ?©Ú
isinstancera   ©rœ   rÒ   ©r!  rL   rM   rÖ   ì  s    z9TestCdist.test_cdist_custom_notdouble.<locals>._my_metricr1   r  r#  r¦   ©r   )rC   rŽ   Úobjectr   r   r   )rÏ   rÖ   r4   Zcdist_yÚright_yrL   r'  rM   Útest_cdist_custom_notdoubleè  s    z%TestCdist.test_cdist_custom_notdoubleçH¯¼šò×z>c              
   K   s  zNt ||fd|i|—Ž}t ||fdt|ƒi|—Ž}t ||fdd| i|—Ž}W n˜ tk
ræ }	 zz|	j}
tdkr€t|
jƒ t|	ƒ t|
t ||fd|i|—Ž t|
t ||fdt|ƒi|—Ž t|
t ||fdd| i|—Ž W 5 d }	~	X Y n*X t|||tdkd� t|||tdkd� d S ©Nrä   rå   r¦   rû   )	r   rò   r¬   Ú	__class__r   Úprintr³   rñ   r
   )rÏ   ró   rô   rä   rÿ   rµ   Úy1Úy2Úy3r¸   Úe_clsrL   rL   rM   Ú_check_calling_conventionsõ  s    
0z$TestCdist._check_calling_conventionsc           	      C   sL  | j D �]>}t| d d d…d d d…f }t| dd d…d d d…f }tD ]ü}tdkrbtd|d|ƒ |dkrtd|krtqHtj ¡ �(}|d	kr”| t	d
¡ |  
|||¡ W 5 Q R X |dkrît ||g¡ tj¡}tj|ddd�}| j
||||d� qH|dkrHt ||g¡ tj¡}t t |j¡¡}t tj |¡j¡}| j
||||d� qHqd S )Nr  r§   rX   r¦   ú	testing: ú with: >   r'   r   r#   r"   r&   r*   r)   r,   rÊ   r"   rã   r(   r   ©rc   rz   ©ÚVr$   ©ÚVI)rÌ   rD   r   r   r/  rC   rí   rî   rï   rð   r4  Úvstackr}   r0   ÚvarÚ
atleast_2dÚcovr  rŽ   r  Úinv)	rÏ   Úeo_nameró   rô   rä   rõ   ZX12r9  r;  rL   rL   rM   Útest_cdist_calling_conventions  s2    üÿz(TestCdist.test_cdist_calling_conventionsc                 C   s\  d}t d | jd ft d | jd ft d | jd ft d | jd	 fg}tD �]}|D ]þ}|d
 d d d…d d d…f }|d
 dd d…d d d…f }zt|||d�}W nt tk
�r } zT|j}	tdkrØt|	jƒ t|ƒ |d D ]&}
|
|ƒ}|
|ƒ}t	|	t|||d� qàW 5 d }~X Y qVX |d D ]0}
t|
|ƒ|
|ƒ|d�}t
|||tdkd� �q"qVqLd S )Nr,  r6   rÊ   r:   rH   r9   r~   r8   rF   r   r  r§   rX   r¦   r  rû   )rD   rÍ   r   r   r¬   r.  r   r/  r³   rñ   r
   )rÏ   rÿ   Útestsrä   Útestró   rô   r0  r¸   r3  Únew_typeZX1newZX2newr1  rL   rL   rM   Útest_cdist_dtype_equivalence+  s0    ý

&z&TestCdist.test_cdist_dtype_equivalencec                 C   s’  d}t d }t d }|jd |jd  }}tD �]\}tƒ }|dkrJd|d< tj||ftjd�}t|||f|Ž}	t|||fd	|i|—Ž}
t|	|
|t	d
kd� t
|
|kƒ tj|d |d ftjd�}ttt|||fd	|i|—Ž tjd
| d
| ftjd�d d d
…d d d
…f }tj||ftjdd�}ttt|||fd	|i|—Ž ttt|||fd	|i|—Ž tj||ftjd�}ttt|||fd	|i|—Ž q.d S )Nr÷   rø   rù   r   r%   r  r  r1   Úoutr¦   rû   rX   ÚF)r2   Úorder)rD   rn   r   ÚdictrC   Úemptyr0   r   r
   r   r   rñ   ra   Úint64)rÏ   rÿ   ró   rô   Zout_rZout_crä   rµ   Úout1r   r  Úout2Úout3Zout4Úout5rL   rL   rM   Útest_cdist_outF  s€    
   ÿÿÿ ÿÿÿ   ÿÿÿ   ÿÿÿ   ÿÿÿzTestCdist.test_cdist_outc           
      C   sì   d}t d d d d…d d d…f }t d d d d…d d d…f }| ¡ }| ¡ }t||ƒ t||ƒ t|jj ƒ t|jj ƒ t|jjƒ t|jjƒ tD ]N}tƒ }|dkr²d|d< t|||f|Ž}t|||f|Ž}	t	||	|t
dkd� q˜d S )	Nr÷   rø   r¦   rù   r%   r  r  rû   )rD   Úcopyr   r   ÚflagsÚc_contiguousr   rJ  r   r
   r   )
rÏ   rÿ   ró   rô   ÚX1_copyZX2_copyrä   rµ   r   r  rL   rL   rM   Útest_stridingj  s$    

zTestCdist.test_stridingc                 C   s�   t D ]†}tj dd¡}tj dd¡}tƒ }|dkr:d|d< t||fd|i|—Ž}dd„ |||fD ƒ}~~~trttƒ  tdd	„ |D ƒƒst	‚qd S )
Né
   r%   r  r  rä   c                 S   s   g | ]}t  |¡‘qS rL   )ÚweakrefÚref)rT   ÚvrL   rL   rM   rV   ’  s     z1TestCdist.test_cdist_refcount.<locals>.<listcomp>c                 s   s   | ]}|ƒ d kV  qd S rZ   rL   )rT   Zweak_refrL   rL   rM   r\   —  s     z0TestCdist.test_cdist_refcount.<locals>.<genexpr>)
r   rC   r�   r“   rJ  r   r   r   r`   r‘   )rÏ   rä   r  r  rµ   rG  Z	weak_refsrL   rL   rM   Útest_cdist_refcount…  s    zTestCdist.test_cdist_refcountN)r,  )r³   r  r   rÐ   rö   r  ÚpytestÚmarkÚparametrizerC   Úinfr
  r  r  r+  r4  rB  rF  rQ  rV  r[  rL   rL   rL   rM   rÈ     s&   	,   ÿ

$$rÈ   c                	   @   sª  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
jdd„ ƒZe	j
jdd„ ƒZe	j
j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	j
jd%d&„ ƒZe	j
jd'd(„ ƒZe	j
jd)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Ze	j
jd3d4„ ƒZe	j
jd5d6„ ƒZ e	j
jd7d8„ ƒZ!d9d:„ Z"d;d<„ Z#d=d>„ Z$e	j
jd?d@„ ƒZ%e	j
jdAdB„ ƒZ&e	j
jdCdD„ ƒZ'e	j
 (dEdFdGdHdIdJe)j*g¡dKdL„ ƒZ+dMdN„ Z,dOdP„ Z-dQdR„ Z.e	j
jdSdT„ ƒZ/e	j
jdUdV„ ƒZ0e	j
jdWdX„ ƒZ1e	j
jdYdZ„ ƒZ2e	j
jd[d\„ ƒZ3e	j
jd]d^„ ƒZ4d_d`„ Z5dadb„ Z6dcdd„ Z7dedf„ Z8dgdh„ Z9didj„ Z:dkdl„ Z;dmdn„ Z<dodp„ Z=dqdr„ Z>dsdt„ Z?dudv„ Z@dwdx„ ZAdydz„ ZBd{d|„ ZCd}d~„ ZDdd€„ ZEd�d‚„ ZFdƒd„„ ZGd…d†„ ZHd‡dˆ„ ZId‰dŠ„ ZJd‹dŒ„ ZKd�dŽ„ ZLd�d�„ ZMd‘d’„ ZNd“d”„ ZOd•d–„ ZPd—d˜„ ZQd™dš„ ZRd›dœ„ ZSd�dž„ ZTdŸd „ ZUd¡d¢„ ZVd£d¤„ ZWd¥d¦„ ZXd§d¨„ ZYd©dª„ ZZd«d¬„ Z[d­d®„ Z\d¯d°„ Z]e	j
jd±d²„ ƒZ^d³d´„ Z_dµd¶„ Z`dÃd¸d¹„Zadºd»„ Zbd¼d½„ Zcd¾d¿„ ZddÀdÁ„ ZedÂS )ÄÚ	TestPdistc                 C   sL   dddddg| _ tjtjtjtjgtjtjtjgtjtjgtjgdœ| _d S rÉ   rË   rÎ   rL   rL   rM   rÐ   œ  s     þ
ýzTestPdist.setup_methodc              
   C   sÒ  ddd„}ddgddgd	dgg}d
t  d¡dœ}d
gd }tD ]Î}t j ¡ �º}|dkrb| td¡ ttt	|fd|i|—Ž ttt	|fdt
|ƒi|—Ž ttt	|fdd| i|—Ž ttt	|f|žd|iŽ ttt	|f|ždt
|ƒiŽ ttt	|f|ždd| iŽ W 5 Q R X q>ttt	||ƒ ttt	||f|žŽ  ttt	||f|Ž ttt	||d	dd� ttt	||ddd	d� ttt	||dd	dƒ ttt	||dd	ƒ ttt	||dƒ ttt	||dd	dd� tt	||ddd�dƒ d S )NrX   r¦   c                 S   s   || | S rZ   rL   rÑ   rL   rL   rM   rÖ   §  s    z3TestPdist.test_pdist_extra_args.<locals>._my_metricr‰   rª   rØ   rÙ   rÛ   rß   rá   râ   r"   rã   rä   rå   ræ   rç   rè   ré   rê   rë   )rX   r¦   )rC   rì   r   rí   rî   rï   rð   rñ   r¡   r   rò   r
   )rÏ   rÖ   ró   rµ   r´   rä   rõ   rL   rL   rM   Útest_pdist_extra_args¥  sb    

ÿÿÿÿÿ
ÿÿ
 ÿ ÿ ÿÿzTestPdist.test_pdist_extra_argsc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nr,  úpdist-double-inpúpdist-euclideanr   ©rü   ©rD   Úwpdist_no_constr
   ©rÏ   rÿ   r  ÚY_rightÚY_test1rL   rL   rM   Útest_pdist_euclidean_randomÍ  s
    
z%TestPdist.test_pdist_euclidean_randomc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S rb  rf  rh  rL   rL   rM   Útest_pdist_euclidean_random_uÔ  s
    
z'TestPdist.test_pdist_euclidean_random_uc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rb  ©rC   rF   rD   rg  r
   rh  rL   rL   rM   Ú#test_pdist_euclidean_random_float32Û  s
    
z-TestPdist.test_pdist_euclidean_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rc  rd  rú   re  rf  ©rÏ   rÿ   r  ri  ÚY_test2rL   rL   rM   Ú test_pdist_euclidean_random_nonCâ  s
    
z*TestPdist.test_pdist_euclidean_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  Úirisúpdist-euclidean-irisr   re  rf  rh  rL   rL   rM   Ú test_pdist_euclidean_iris_doubleé  s
    
z*TestPdist.test_pdist_euclidean_iris_doublec                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )Nr˜   rr  rs  r   r¦   rû   ©rC   rF   rD   rg  r
   r   rh  rL   rL   rM   Ú!test_pdist_euclidean_iris_float32ñ  s
    
z+TestPdist.test_pdist_euclidean_iris_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rr  rs  rú   re  rf  ro  rL   rL   rM   Útest_pdist_euclidean_iris_nonCù  s
    
z(TestPdist.test_pdist_euclidean_iris_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rc  úpdist-seuclideanr(   re  ©rD   r   r
   rh  rL   rL   rM   Útest_pdist_seuclidean_random  s
    
z&TestPdist.test_pdist_seuclidean_randomc                 C   sb   d}t  td ¡}td }t|dƒ}t|||d� t j|ddd�}t|d|d	�}t|||d� d S )
Nr,  rc  rx  r(   re  r   rX   r7  r8  )rC   rF   rD   r   r
   r=  )rÏ   rÿ   r  ri  rj  r9  rp  rL   rL   rM   Ú$test_pdist_seuclidean_random_float32
  s    
z.TestPdist.test_pdist_seuclidean_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rc  rx  Útest_seuclideanre  ry  ro  rL   rL   rM   Ú!test_pdist_seuclidean_random_nonC  s
    
z+TestPdist.test_pdist_seuclidean_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rr  úpdist-seuclidean-irisr(   re  ry  rh  rL   rL   rM   Útest_pdist_seuclidean_iris  s
    
z$TestPdist.test_pdist_seuclidean_irisc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S )Nr˜   rr  r~  r(   re  )rC   rF   rD   r   r
   rh  rL   rL   rM   Ú"test_pdist_seuclidean_iris_float32%  s
    
z,TestPdist.test_pdist_seuclidean_iris_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rr  r~  r|  re  ry  ro  rL   rL   rM   Útest_pdist_seuclidean_iris_nonC-  s
    
z)TestPdist.test_pdist_seuclidean_iris_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nr,  rc  úpdist-cosiner   re  ©rD   Úwpdistr
   rh  rL   rL   rM   Útest_pdist_cosine_random6  s
    
z"TestPdist.test_pdist_cosine_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S r‚  ©rC   rF   rD   r…  r
   rh  rL   rL   rM   Ú test_pdist_cosine_random_float32=  s
    
z*TestPdist.test_pdist_cosine_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rc  rƒ  Útest_cosinere  r„  ro  rL   rL   rM   Útest_pdist_cosine_random_nonCD  s
    
z'TestPdist.test_pdist_cosine_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr˜   rr  úpdist-cosine-irisr   r™   r„  rh  rL   rL   rM   Útest_pdist_cosine_irisL  s
    
z TestPdist.test_pdist_cosine_irisc                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )Nr˜   rr  r‹  r   r¦   ©rš   r   )rC   rF   rD   r…  r
   r   rh  rL   rL   rM   Útest_pdist_cosine_iris_float32T  s
    
z(TestPdist.test_pdist_cosine_iris_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr˜   rr  r‹  r‰  r™   r„  ro  rL   rL   rM   Útest_pdist_cosine_iris_nonC\  s
    
z%TestPdist.test_pdist_cosine_iris_nonCc                 C   sD   t  t j d¡ d¡¡}t  ||g¡}tt|dƒd dkdd� d S )Ni9  é[   r   r   z&cosine distance should be non-negative©Úmsg)rC   Úabsr�   r�   r“   r<  r   r…  )rÏ   rœ   r  rL   rL   rM   Útest_pdist_cosine_boundsd  s
    ÿz"TestPdist.test_pdist_cosine_boundsc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nr,  rc  úpdist-cityblockr   re  rf  rh  rL   rL   rM   Útest_pdist_cityblock_randomm  s
    
z%TestPdist.test_pdist_cityblock_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S r•  rm  rh  rL   rL   rM   Ú#test_pdist_cityblock_random_float32t  s
    
z-TestPdist.test_pdist_cityblock_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rc  r–  Útest_cityblockre  rf  ro  rL   rL   rM   Ú test_pdist_cityblock_random_nonC{  s
    
z*TestPdist.test_pdist_cityblock_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr  rr  úpdist-cityblock-irisr   re  rf  rh  rL   rL   rM   Útest_pdist_cityblock_iris‚  s
    
z#TestPdist.test_pdist_cityblock_irisc                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )Nr˜   rr  r›  r   r¦   rû   ru  rh  rL   rL   rM   Ú!test_pdist_cityblock_iris_float32Š  s
    
z+TestPdist.test_pdist_cityblock_iris_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr  rr  r›  r™  re  rf  ro  rL   rL   rM   Útest_pdist_cityblock_iris_nonC’  s
    
z(TestPdist.test_pdist_cityblock_iris_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nr,  rc  úpdist-correlationr   re  r„  rh  rL   rL   rM   Útest_pdist_correlation_randomœ  s
    
z'TestPdist.test_pdist_correlation_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rŸ  r‡  rh  rL   rL   rM   Ú%test_pdist_correlation_random_float32£  s
    
z/TestPdist.test_pdist_correlation_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rc  r   Útest_correlationre  r„  ro  rL   rL   rM   Ú"test_pdist_correlation_random_nonCª  s
    
z,TestPdist.test_pdist_correlation_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr,  rr  úpdist-correlation-irisr   re  r„  rh  rL   rL   rM   Útest_pdist_correlation_iris±  s
    
z%TestPdist.test_pdist_correlation_irisc                 C   s<   d}t d }t t d ¡}t|dƒ}t|||tdkd� d S )Nr,  rr  r¥  r   r¦   rû   )rD   rC   rF   r…  r
   r   rh  rL   rL   rM   Ú#test_pdist_correlation_iris_float32¹  s
    
z-TestPdist.test_pdist_correlation_iris_float32c                 C   sF   t jdkrd}n
t d¡ td }td }t|dƒ}t|||d� d S )Nl        r,  zsee gh-16456rr  r¥  r£  re  )ÚsysÚmaxsizer\  ÚskiprD   r…  r
   ro  rL   rL   rM   Ú test_pdist_correlation_iris_nonCÁ  s    


z*TestPdist.test_pdist_correlation_iris_nonCr  r  r  r‰   rª   çš™™™™™	@c                 C   s<   d}t d }t|d|d�}t|d|d�}t||d|d� d S )Nr  rc  r%   r  r	  r   )rš   rü   rf  )rÏ   r  rÿ   r  r   r  rL   rL   rM   Útest_pdist_minkowski_random_pÌ  s
    z'TestPdist.test_pdist_minkowski_random_pc                 C   s4   d}t d }t d }t|ddd�}t|||d� d S ©Nr,  rc  úpdist-minkowski-3.2r%   r¬  r  re  rf  rh  rL   rL   rM   Útest_pdist_minkowski_randomÔ  s
    z%TestPdist.test_pdist_minkowski_randomc                 C   s:   d}t  td ¡}td }t|ddd�}t|||d� d S r®  rm  rh  rL   rL   rM   Ú#test_pdist_minkowski_random_float32Û  s
    z-TestPdist.test_pdist_minkowski_random_float32c                 C   s4   d}t d }t d }t|ddd�}t|||d� d S )Nr,  rc  r¯  r	  r¬  r  re  rf  ro  rL   rL   rM   Ú test_pdist_minkowski_random_nonCâ  s
    z*TestPdist.test_pdist_minkowski_random_nonCc                 C   s4   d}t d }t d }t|ddd�}t|||d� d S )Nr,  rr  úpdist-minkowski-3.2-irisr%   r¬  r  re  rf  rh  rL   rL   rM   Útest_pdist_minkowski_3_2_irisé  s
    z'TestPdist.test_pdist_minkowski_3_2_irisc                 C   s:   d}t  td ¡}td }t|ddd�}t|||d� d S )Nr˜   rr  r³  r%   r¬  r  re  rm  rh  rL   rL   rM   Ú%test_pdist_minkowski_3_2_iris_float32ñ  s
    z/TestPdist.test_pdist_minkowski_3_2_iris_float32c                 C   s4   d}t d }t d }t|ddd�}t|||d� d S )Nr,  rr  r³  r	  r¬  r  re  rf  ro  rL   rL   rM   Ú"test_pdist_minkowski_3_2_iris_nonCù  s
    z,TestPdist.test_pdist_minkowski_3_2_iris_nonCc                 C   s4   d}t d }t d }t|ddd�}t|||d� d S )Nr,  rr  úpdist-minkowski-5.8-irisr%   rÞ   r  re  rf  rh  rL   rL   rM   Útest_pdist_minkowski_5_8_iris  s
    z'TestPdist.test_pdist_minkowski_5_8_irisc                 C   s@   d}t  td ¡}td }t|ddd�}t|||tdkd� d S )	Nr˜   rr  r·  r%   rÞ   r  r¦   rû   ru  rh  rL   rL   rM   Ú%test_pdist_minkowski_5_8_iris_float32	  s
    z/TestPdist.test_pdist_minkowski_5_8_iris_float32c                 C   s4   d}t d }t d }t|ddd�}t|||d� d S )Nr,  rr  r·  r	  rÞ   r  re  rf  ro  rL   rL   rM   Ú"test_pdist_minkowski_5_8_iris_nonC  s
    z,TestPdist.test_pdist_minkowski_5_8_iris_nonCc                 C   sÞ   t  ddddg¡ dd¡}t|dd�}t|dt  d	¡t  d
¡t  d	¡t  d
¡t  d¡gƒ t  ddgddgddgddgddgg¡}t|dd�}t  d¡}t|||||dd| ddd| dg
ƒ tttddgddggdd� d S )Nrª   r×   rÝ   rf   rX   r$   r  r  r  r  r   r¦   r§   rà   )	rC   rŽ   r…   r   r
   r  rñ   ra   r…  )rÏ   rœ   r  r  rL   rL   rM   Útest_pdist_mahalanobis  s       ÿ(
&  ÿz TestPdist.test_pdist_mahalanobisc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nr÷   r5   úpdist-hammingr   re  r„  rh  rL   rL   rM   Útest_pdist_hamming_random*  s
    
z#TestPdist.test_pdist_hamming_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S r¼  r‡  rh  rL   rL   rM   Ú!test_pdist_hamming_random_float321  s
    
z+TestPdist.test_pdist_hamming_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nr÷   r5   r½  Ztest_hammingre  r„  ro  rL   rL   rM   Útest_pdist_hamming_random_nonC8  s
    
z(TestPdist.test_pdist_hamming_random_nonCc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S r¼  ©rC   rƒ   rD   r…  r
   rh  rL   rL   rM   Útest_pdist_dhamming_random?  s
    
z$TestPdist.test_pdist_dhamming_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S r¼  r‡  rh  rL   rL   rM   Ú"test_pdist_dhamming_random_float32F  s
    
z,TestPdist.test_pdist_dhamming_random_float32c                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rÀ  rÂ  ro  rL   rL   rM   Útest_pdist_dhamming_random_nonCM  s
    
z)TestPdist.test_pdist_dhamming_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©Nç:Œ0âŽyE>r5   úpdist-jaccardr    re  r„  rh  rL   rL   rM   Útest_pdist_jaccard_randomT  s
    
z#TestPdist.test_pdist_jaccard_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rÆ  r‡  rh  rL   rL   rM   Ú!test_pdist_jaccard_random_float32[  s
    
z+TestPdist.test_pdist_jaccard_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S ©NrÇ  r5   rÈ  Útest_jaccardre  r„  ro  rL   rL   rM   Útest_pdist_jaccard_random_nonCb  s
    
z(TestPdist.test_pdist_jaccard_random_nonCc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rÆ  rÂ  rh  rL   rL   rM   Útest_pdist_djaccard_randomi  s
    
z$TestPdist.test_pdist_djaccard_randomc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rÆ  r‡  rh  rL   rL   rM   Ú"test_pdist_djaccard_random_float32p  s
    
z,TestPdist.test_pdist_djaccard_random_float32c                 C   s,   d}t t d¡dƒ}tt d¡||d� d S )Nr÷   ©r  rà   r    rW  re  ©r   rC   Úzerosr
   ©rÏ   rÿ   ÚYrL   rL   rM   Útest_pdist_djaccard_allzerosw  s    z&TestPdist.test_pdist_djaccard_allzerosc                 C   s6   d}t  td ¡}td }t|dƒ}t|||d� d S rË  rÂ  ro  rL   rL   rM   Útest_pdist_djaccard_random_nonC|  s
    
z)TestPdist.test_pdist_djaccard_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nç•dyáý¥=rc  úpdist-jensenshannonr!   re  ry  rh  rL   rL   rM   Útest_pdist_jensenshannon_randomƒ  s
    
z)TestPdist.test_pdist_jensenshannon_randomc                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )NrÇ  rc  rØ  r!   r¦   rû   ©rC   rF   rD   r   r
   r   rh  rL   rL   rM   Ú'test_pdist_jensenshannon_random_float32Š  s
    
z1TestPdist.test_pdist_jensenshannon_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr×  rc  rØ  Útest_jensenshannonre  ry  ro  rL   rL   rM   Ú$test_pdist_jensenshannon_random_nonC‘  s
    
z.TestPdist.test_pdist_jensenshannon_random_nonCc                 C   s<   t ƒ rd}nd}td }td }t|dƒ}t|||d� d S )Ng•Ö&è.ñ=gê-�™—q=rr  úpdist-jensenshannon-irisr!   r™   )rQ   rD   r   r
   rh  rL   rL   rM   Útest_pdist_jensenshannon_iris˜  s    
z'TestPdist.test_pdist_jensenshannon_irisc                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )Ng�íµ ÷Æ°>rr  rÞ  r!   r¦   r�  rÚ  rh  rL   rL   rM   Ú%test_pdist_jensenshannon_iris_float32¤  s
    
z/TestPdist.test_pdist_jensenshannon_iris_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Ng-Cëâ6
?rr  rÞ  rÜ  re  ry  ro  rL   rL   rM   Ú"test_pdist_jensenshannon_iris_nonC«  s
    
z,TestPdist.test_pdist_jensenshannon_iris_nonCc                 C   s,   d}t t d¡dƒ}tt d¡||d� d S )Nr÷   rÐ  rÌ  rW  re  rÑ  rÓ  rL   rL   rM   Ú!test_pdist_djaccard_allzeros_nonC²  s    z+TestPdist.test_pdist_djaccard_allzeros_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )NrÇ  rc  úpdist-chebyshevr   re  ry  rh  rL   rL   rM   Útest_pdist_chebyshev_random·  s
    
z%TestPdist.test_pdist_chebyshev_randomc                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )Nr,  rc  rã  r   r¦   rû   rÚ  rh  rL   rL   rM   Ú#test_pdist_chebyshev_random_float32¾  s
    
z-TestPdist.test_pdist_chebyshev_random_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )NrÇ  rc  rã  Útest_chebyshevre  ry  ro  rL   rL   rM   Ú test_pdist_chebyshev_random_nonCÅ  s
    
z*TestPdist.test_pdist_chebyshev_random_nonCc                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr  rr  úpdist-chebyshev-irisr   re  ry  rh  rL   rL   rM   Útest_pdist_chebyshev_irisÌ  s
    
z#TestPdist.test_pdist_chebyshev_irisc                 C   s<   d}t  td ¡}td }t|dƒ}t|||tdkd� d S )Nr˜   rr  rè  r   r¦   rû   rÚ  rh  rL   rL   rM   Ú!test_pdist_chebyshev_iris_float32Ó  s
    
z+TestPdist.test_pdist_chebyshev_iris_float32c                 C   s0   d}t d }t d }t|dƒ}t|||d� d S )Nr  rr  rè  ræ  re  ry  ro  rL   rL   rM   Útest_pdist_chebyshev_iris_nonCÚ  s
    
z(TestPdist.test_pdist_chebyshev_iris_nonCc              	   C   s€   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}t|dddd� t|dddd� d S ©NrX   r   r1   ç333333ã?ç»½×Ùß|Û=©rü   rš   ©Ú	wmatchingrC   rŽ   rÊ   r
   ©rÏ   ÚmÚm2rL   rL   rM   Útest_pdist_matching_mtica1á  s    ÿÿz$TestPdist.test_pdist_matching_mtica1c                 C   sp   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}t|dddd� t|dddd� d S ©NrX   r   r1   çUUUUUUå?rî  rï  rð  rò  rL   rL   rM   Útest_pdist_matching_mtica2ê  s    ÿÿz$TestPdist.test_pdist_matching_mtica2c              	   C   s€   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}t|dddd� t|dddd� d S rì  ©ÚwjaccardrC   rŽ   rÊ   r
   rò  rL   rL   rM   Útest_pdist_jaccard_mtica1ó  s    ÿÿz#TestPdist.test_pdist_jaccard_mtica1c                 C   sp   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}t|dddd� t|dddd� d S rö  rù  rò  rL   rL   rM   Útest_pdist_jaccard_mtica2û  s    ÿÿz#TestPdist.test_pdist_jaccard_mtica2c              	   C   s�   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}tdkrlt|ƒ t|dddd� t|dddd� d S ©NrX   r   r1   r¦   rî  rï  ©ÚwyulerC   rŽ   rÊ   r   r/  r
   rò  rL   rL   rM   Útest_pdist_yule_mtica1  s    ÿÿz TestPdist.test_pdist_yule_mtica1c                 C   s€   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}tdkr\t|ƒ t|dddd� t|dddd� d S rý  rþ  rò  rL   rL   rM   Útest_pdist_yule_mtica2  s    ÿÿz TestPdist.test_pdist_yule_mtica2c              	   C   s�   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}tdkrlt|ƒ t|dddd� t|dddd� d S )NrX   r   r1   r¦   gÛ¶mÛ¶mÛ?rî  rï  ©ÚwdicerC   rŽ   rÊ   r   r/  r
   rò  rL   rL   rM   Útest_pdist_dice_mtica1  s    ÿÿz TestPdist.test_pdist_dice_mtica1c                 C   s€   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}tdkr\t|ƒ t|dddd� t|dddd� d S )NrX   r   r1   r¦   r  rî  rï  r  rò  rL   rL   rM   Útest_pdist_dice_mtica2!  s    ÿÿz TestPdist.test_pdist_dice_mtica2c              	   C   s�   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}tdkrlt|ƒ t|dddd� t|dddd� d S ©NrX   r   r1   r¦   g      è?rî  rï  )r*   rC   rŽ   rÊ   r   r/  r
   rò  rL   rL   rM   Útest_pdist_sokalsneath_mtica1+  s    ÿÿz'TestPdist.test_pdist_sokalsneath_mtica1c                 C   s€   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}tdkr\t|ƒ t|dddd� t|dddd� d S ©NrX   r   r1   r¦   gš™™™™™é?rî  rï  )ÚwsokalsneathrC   rŽ   rÊ   r   r/  r
   rò  rL   rL   rM   Útest_pdist_sokalsneath_mtica25  s    ÿÿz'TestPdist.test_pdist_sokalsneath_mtica2c              	   C   s�   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}tdkrlt|ƒ t|dddd� t|dddd� d S r  ©ÚwrogerstanimotorC   rŽ   rÊ   r   r/  r
   rò  rL   rL   rM   Ú test_pdist_rogerstanimoto_mtica1?  s    ÿÿz*TestPdist.test_pdist_rogerstanimoto_mtica1c                 C   s€   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}tdkr\t|ƒ t|dddd� t|dddd� d S r  r  rò  rL   rL   rM   Ú test_pdist_rogerstanimoto_mtica2I  s    ÿÿz*TestPdist.test_pdist_rogerstanimoto_mtica2c              	   C   s�   t t dddddg¡t dddddg¡ƒ}t tjdddddgtd�tjdddddgtd�ƒ}tdkrlt|ƒ t|dddd� t|dddd� d S )NrX   r   r1   r¦   rí  rî  rï  ©ÚwrussellraorC   rŽ   rÊ   r   r/  r
   rò  rL   rL   rM   Útest_pdist_russellrao_mtica1S  s    ÿÿz&TestPdist.test_pdist_russellrao_mtica1c                 C   s€   t t dddg¡t dddg¡ƒ}t tjdddgtd�tjdddgtd�ƒ}tdkr\t|ƒ t|dddd� t|dddd� d S )NrX   r   r1   r¦   r÷  rî  rï  r  rò  rL   rL   rM   Útest_pdist_russellrao_mtica2]  s    ÿÿz&TestPdist.test_pdist_russellrao_mtica2c                 C   sN   t d }tdkrt|j|jƒ d}t|dƒ}t|dƒ}t|||tdkd� d S )Nrr  r¦   r÷   r   Útest_canberrarû   )rD   r   r/  rn   r2   rg  r
   )rÏ   ÚDrÿ   r0  r1  rL   rL   rM   Útest_pdist_canberra_matchg  s    

z#TestPdist.test_pdist_canberra_matchc                 C   s2   d}t dgdgfdƒ}d}t|||tdkd� d S )NrÇ  ræ   rÚ   r   gdß>@1‘Ž?r¦   r�  )rg  r
   r   )rÏ   rÿ   Úpdist_yr*  rL   rL   rM   Útest_pdist_canberra_ticket_711q  s    z(TestPdist.test_pdist_canberra_ticket_711c                    sZ   G dd„ dƒ‰ ‡ fdd„}t jˆ ƒ gˆ ƒ ggtd�}t||d�}d}t||tdkd	� d S )
Nc                   @   s   e Zd ZdS )z6TestPdist.test_pdist_custom_notdouble.<locals>.myclassNr  rL   rL   rL   rM   r!  {  s   r!  c                    s(   t | d ˆ ƒrt |d ˆ ƒs$tdƒ‚dS r"  r$  r&  r'  rL   rM   rÖ   ~  s    z9TestPdist.test_pdist_custom_notdouble.<locals>._my_metricr1   r  r#  r¦   r(  )rC   rŽ   r)  r   r   r   )rÏ   rÖ   r4   r  r*  rL   r'  rM   Útest_pdist_custom_notdoubley  s    z%TestPdist.test_pdist_custom_notdoubler,  c           
   
   K   s  zHt |fd|i|—Ž}t |fdt|ƒi|—Ž}t |fdd| i|—Ž}W n’ tk
rÚ } zt|j}	tdkrzt|	jƒ t|ƒ t|	t |fd|i|—Ž t|	t |fdt|ƒi|—Ž t|	t |fdd| i|—Ž W 5 d }~X Y n*X t|||tdkd� t|||tdkd� d S r-  )	r   rò   r¬   r.  r   r/  r³   rñ   r
   )
rÏ   r  rä   rÿ   rµ   r0  r1  r2  r¸   r3  rL   rL   rM   r4  ‡  s    
.z$TestPdist._check_calling_conventionsc                 C   s  | j D �] }t| d d d…d d d…f }tD ]Ú}tdkrFtd|d|ƒ |dkrXd|krXq,tj ¡ �&}|dkrx| t	d¡ |  
||¡ W 5 Q R X |d	krÀtj| tj¡d
dd�}| j
|||d� q,|dkr,t t | tj¡j¡¡}t tj |¡j¡}| j
|||d� q,qd S )Nr  r¦   r5  r6  >	   r'   Úmatchingr   r#   r"   r&   r*   r)   r,   rÊ   r"   rã   r(   r   rX   r7  r8  r$   r:  )rÌ   rD   r   r   r/  rC   rí   rî   rï   rð   r4  r=  r}   r0   r>  r?  r  rŽ   r  r@  )rÏ   rA  r  rä   rõ   r9  r;  rL   rL   rM   Útest_pdist_calling_conventions™  s,    ýÿz(TestPdist.test_pdist_calling_conventionsc                 C   s(  d}t d | jd ft d | jd ft d | jd ft d | jd	 fg}tD ]Ö}|D ]Ì}|d
 d d d…d d d…f }zt||d�}W nh tk
rì } zJ|j}tdkr¶t|jƒ t|ƒ |d D ]}	|	|ƒ}
t	|t|
|d� q¾W 5 d }~X Y qTX |d D ](}	t|	|ƒ|d�}t
|||tdkd� qöqTqLd S )Nr,  r6   rÊ   r:   rH   r9   r~   r8   rF   r   r  r¦   r  rX   rû   )rD   rÍ   r   r   r¬   r.  r   r/  r³   rñ   r
   )rÏ   rÿ   rC  rä   rD  ró   r0  r¸   r3  rE  rô   r1  rL   rL   rM   Útest_pdist_dtype_equivalenceº  s,    ý
$z&TestPdist.test_pdist_dtype_equivalencec                 C   sB  d}t d d d d…d d d…f }t|jd |jd d  d ƒ}tD ]ø}tƒ }|dkr^d|d	< tj|tjd
�}t||f|Ž}t||fd|i|—Ž}t	|||d� t
||kƒ tj|d tjd
�}	ttt||fd|	i|—Ž tjd| tjd
�d d d… }
ttt||fd|
i|—Ž tj|tjd
�}ttt||fd|i|—Ž qDd S )Nr÷   r8   r  r¦   r   rX   r%   r  r  r1   rG  re  rà   )rD   r~   rn   r   rJ  rC   rK  r0   r   r
   r   rñ   ra   rL  )rÏ   rÿ   r  Zout_sizerä   rµ   rM  ri  rj  rN  rO  rP  rL   rL   rM   Útest_pdist_outÓ  s$     zTestPdist.test_pdist_outc                 C   s–   d}t d d d d…d d d…f }| ¡ }t|jj ƒ t|jjƒ tD ]J}tƒ }|dkr`d|d< t||f|Ž}t||f|Ž}t|||t	dkd� qFd S )	Nr÷   r8   r  r¦   r%   r  r  rû   )
rD   rR  r   rS  rT  r   rJ  r   r
   r   )rÏ   rÿ   r  ZX_copyrä   rµ   r   r  rL   rL   rM   rV  í  s    zTestPdist.test_stridingN)r,  )fr³   r  r   rÐ   ra  rk  rl  rn  rq  r\  r]  Zslowrt  rv  rw  rz  r{  r}  r  r€  r�  r†  rˆ  rŠ  rŒ  rŽ  r�  r”  r—  r˜  rš  rœ  r�  rž  r¡  r¢  r¤  r¦  r§  r«  r^  rC   r_  r­  r°  r±  r²  r´  rµ  r¶  r¸  r¹  rº  r»  r¾  r¿  rÁ  rÃ  rÄ  rÅ  rÉ  rÊ  rÍ  rÎ  rÏ  rÕ  rÖ  rÙ  rÛ  rÝ  rß  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  r4  r  r  r  rV  rL   rL   rL   rM   r`  š  sâ   	(


		


	


	










		










	
!r`  c                   @   sL   e Z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S )ÚTestSomeDistanceFunctionsc                 C   s0   t  dddg¡}t  dddg¡}||fg| _d S )Nr‰   rª   r×   rÝ   )rC   rŽ   Úcases)rÏ   rœ   rÒ   rL   rL   rM   rÐ     s    z&TestSomeDistanceFunctions.setup_methodc           	      C   s²   | j D ]h\}}t||dd�}t|dƒ t||dd�}t|dƒ t||dd�}t|dƒ t||dd�}t|d	ƒ qt d
dg¡}t ddg¡}tt||ƒt| d¡| d¡ƒƒ d S )NrX   r  r×   ç      ø?gqÎazý“@r¦   g¨ô—›wã@r  gÙRÏ"ø6@i`  i”  i^  i”  Úuint16)r  r%   r	   rC   rŽ   r   r}   )	rÏ   rœ   rÒ   Údist1Zdist1p5Údist2Zdist0p25rU   r£   rL   rL   rM   r	  
  s    



ÿz(TestSomeDistanceFunctions.test_minkowskic                 C   s.   | j D ]"\}}t||ƒ}t|t d¡ƒ qd S )Nr  )r  Ú
weuclideanr	   rC   r  ©rÏ   rœ   rÒ   r  rL   rL   rM   rú     s    
z(TestSomeDistanceFunctions.test_euclideanc                 C   s(   | j D ]\}}t||ƒ}t|dƒ qd S )NrÝ   )r  Úwsqeuclideanr	   r$  rL   rL   rM   Útest_sqeuclidean"  s    
z*TestSomeDistanceFunctions.test_sqeuclideanc              	   C   s@   | j D ]4\}}t||ƒ}t|ddt d¡t d¡   ƒ qd S )Nr‰   g      2@é   é   )r  Úwcosiner	   rC   r  r$  rL   rL   rM   r‰  '  s    
z%TestSomeDistanceFunctions.test_cosinec                 C   sd   t  dddg¡}t  dddg¡}| jD ]8\}}t||ƒ}t|dt  ||¡t|ƒt|ƒ   ƒ q&d S )Nç      ð¿r   r‰   gUUUUUUõ¿gUUUUUU@)rC   rŽ   r  Úwcorrelationr	   r  r   )rÏ   ZxmZymrœ   rÒ   r  rL   rL   rM   r£  ,  s
    
z*TestSomeDistanceFunctions.test_correlationc              '   C   sÞ   t  dddddddddddddddddddddddddddddddddddddg%¡}t  dddddddddddddddddddddddddddddddddddddg%¡}t||ƒ}d|  krÔdt  t j¡j ksÚn t‚d S )Nr  g       Àr*  r‰   rª   r   rW  )rC   rŽ   r   Zfinforƒ   rÿ   r‘   r$  rL   rL   rM   Útest_correlation_positive3  sl                          þ                      þ
z3TestSomeDistanceFunctions.test_correlation_positivec                 C   sr   t  dddg¡}t  dddg¡}t  dddgdddgdddgg¡}| jD ]$\}}t|||ƒ}t|t  d¡ƒ qHd S )Nr‰   rª   r×   rÝ   r  g      @)rC   rŽ   r  r$   r	   r  )rÏ   rœ   rÒ   Úvir  rL   rL   rM   Útest_mahalanobis>  s    "z*TestSomeDistanceFunctions.test_mahalanobisN)r³   r  r   rÐ   r	  rú   r&  r‰  r£  r,  r.  rL   rL   rL   rM   r    s   r  c                   @   sR   e Zd ZejejejejegZ	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestSquareFormc                 C   s   | j D ]}|  |¡ qd S rZ   )Úchecked_dtypesÚcheck_squareform_matrix©rÏ   r2   rL   rL   rM   Útest_squareform_matrixJ  s    
z%TestSquareForm.test_squareform_matrixc                 C   s   | j D ]}|  |¡ qd S rZ   )r0  Úcheck_squareform_vectorr2  rL   rL   rM   Útest_squareform_vectorN  s    
z%TestSquareForm.test_squareform_vectorc                 C   s°   t jd|d�}t|ƒ}t|jdƒ t|j|ƒ t jd|d�}t|ƒ}t|jdƒ t|j|ƒ t jddgddgg|d�}t|ƒ}t|jdƒ t|j|ƒ t|t jdg|d�ƒ d S )N)r   r   r1   ©r   ©rX   rX   r   gÍÌÌÌÌÌ@rW   )rC   rÒ  r   r   rn   r2   rŽ   r   )rÏ   r2   ÚAZrArL   rL   rM   r1  R  s    z&TestSquareForm.check_squareform_matrixc                 C   s�   t jd|d�}t|ƒ}t|jdƒ t|j|ƒ t|dggƒ t jdg|d�}t|ƒ}t|jdƒ t|j|ƒ t|t jddgddgg|d�ƒ d S )Nr6  r1   r7  r   gš™™™™™ @)r¦   r¦   )rC   rÒ  r   r   rn   r2   r   rŽ   )rÏ   r2   rZ  ÚrvrL   rL   rM   r4  c  s    z&TestSquareForm.check_squareform_vectorc                 C   s   t ddƒD ]}|  |¡ q
d S )Nr¦   r  )rb   Úcheck_squareform_multi_matrix©rÏ   ÚnrL   rL   rM   Útest_squareform_multi_matrixp  s    z+TestSquareForm.test_squareform_multi_matrixc           
      C   sô   t j |d¡}t|ƒ}tt|jƒdƒ t|ƒ}t|ƒ}|j}d}tdkrZt	|j|j|jƒ tt|ƒdƒ tt|jƒdƒ t|d |d ƒ t
d|d ƒD ]V}t
|d |d ƒD ]>}	||	krÚt|||	f || ƒ |d7 }q®t|||	f dƒ q®q˜d S )Né   rX   r   rà   r¦   )rC   r�   r“   rg  r   Úlenrn   r   r   r/  rb   )
rÏ   r<  r  rÔ  r8  ZYrÚsÚkr€   ÚjrL   rL   rM   r:  t  s$    
z,TestSquareForm.check_squareform_multi_matrixN)r³   r  r   rC   rƒ   rF   Úint32Úint8rÊ   r0  r3  r5  r1  r4  r=  r:  rL   rL   rL   rM   r/  G  s   r/  c                   @   sd   e Z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dd„ Zdd„ ZdS )ÚTestNumObsYc                 C   s8   t ddƒD ](}tj |d¡}t|ƒ}tt|ƒ|ƒ q
d S )Nr¦   rW  r>  )rb   rC   r�   r“   rg  r   r   )rÏ   r<  r  rÔ  rL   rL   rM   Útest_num_obs_y_multi_matrixŒ  s    z'TestNumObsY.test_num_obs_y_multi_matrixc                 C   s   t t| jdƒ d S ©NrX   )rñ   ra   Úcheck_yrÎ   rL   rL   rM   Útest_num_obs_y_1’  s    zTestNumObsY.test_num_obs_y_1c                 C   s   t |  d¡ƒ d S ©Nr¦   ©r   rH  rÎ   rL   rL   rM   Útest_num_obs_y_2—  s    zTestNumObsY.test_num_obs_y_2c                 C   s   t |  d¡ƒ d S )Nrà   rK  rÎ   rL   rL   rM   Útest_num_obs_y_3œ  s    zTestNumObsY.test_num_obs_y_3c                 C   s   t |  d¡ƒ d S ©Nr>  rK  rÎ   rL   rL   rM   Útest_num_obs_y_4Ÿ  s    zTestNumObsY.test_num_obs_y_4c                 C   s   t ddƒD ]}|  |¡ q
d S )Nr  é   )rb   Úminit)rÏ   r€   rL   rL   rM   Útest_num_obs_y_5_10¢  s    zTestNumObsY.test_num_obs_y_5_10c                 C   sX   t g ƒ}tddƒD ]}| ||d  d ¡ qtddƒD ]}||kr8tt| j|ƒ q8d S ©Nr¦   rP  rX   r  éi   ©Úsetrb   Úaddrñ   ra   Úbad_y©rÏ   rU   r<  r€   rL   rL   rM   Útest_num_obs_y_2_100¦  s    z TestNumObsY.test_num_obs_y_2_100c                 C   s   t |  |¡ƒ d S rZ   rK  r;  rL   rL   rM   rQ  °  s    zTestNumObsY.minitc                 C   s   t j |¡}t|ƒS rZ   )rC   r�   r“   r   ©rÏ   r<  rÒ   rL   rL   rM   rX  ³  s    zTestNumObsY.bad_yc                 C   s   t |  |¡ƒ|kS rZ   )r   Úmake_yr;  rL   rL   rM   rH  ·  s    zTestNumObsY.check_yc                 C   s   t j ||d  d ¡S ©NrX   r¦   ©rC   r�   r“   r;  rL   rL   rM   r\  º  s    zTestNumObsY.make_yN)r³   r  r   rF  rI  rL  rM  rO  rR  rZ  rQ  rX  rH  r\  rL   rL   rL   rM   rE  Š  s   
rE  c                   @   sL   e Z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S )ÚTestNumObsDMc                 C   sV   t ddƒD ]F}tj |d¡}t|ƒ}t|ƒ}tdkrBt|j|jƒ t	t
|ƒ|ƒ q
d S )NrX   rW  r>  rà   )rb   rC   r�   r“   rg  r   r   r/  rn   r   r   )rÏ   r<  r  rÔ  r8  rL   rL   rM   Útest_num_obs_dm_multi_matrixÀ  s    z)TestNumObsDM.test_num_obs_dm_multi_matrixc                 C   s   t |  d¡ƒ d S )Nr   ©r   Úcheck_DrÎ   rL   rL   rM   Útest_num_obs_dm_0É  s    zTestNumObsDM.test_num_obs_dm_0c                 C   s   t |  d¡ƒ d S rG  ra  rÎ   rL   rL   rM   Útest_num_obs_dm_1Í  s    zTestNumObsDM.test_num_obs_dm_1c                 C   s   t |  d¡ƒ d S rJ  ra  rÎ   rL   rL   rM   Útest_num_obs_dm_2Ñ  s    zTestNumObsDM.test_num_obs_dm_2c                 C   s   t |  d¡ƒ d S rJ  ra  rÎ   rL   rL   rM   Útest_num_obs_dm_3Ô  s    zTestNumObsDM.test_num_obs_dm_3c                 C   s   t |  d¡ƒ d S rN  ra  rÎ   rL   rL   rM   Útest_num_obs_dm_4×  s    zTestNumObsDM.test_num_obs_dm_4c                 C   s   t |  |¡ƒ|kS rZ   )r   Úmake_Dr;  rL   rL   rM   rb  Ú  s    zTestNumObsDM.check_Dc                 C   s   t j ||¡S rZ   r^  r;  rL   rL   rM   rh  Ý  s    zTestNumObsDM.make_DN)r³   r  r   r`  rc  rd  re  rf  rg  rb  rh  rL   rL   rL   rM   r_  ¾  s   	r_  c                 C   s   t | dd�S ©NT)Úthrow)r   )r  rL   rL   rM   Úis_valid_dm_throwá  s    rk  c                   @   st   e Z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dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestIsValidDMc                 C   s    t jdt jd�}ttt|ƒ d S )N©r  r1   ©rC   rÒ  r0   rñ   ra   rk  ©rÏ   r  rL   rL   rM   Ú$test_is_valid_dm_improper_shape_1D_Eç  s    z2TestIsValidDM.test_is_valid_dm_improper_shape_1D_Ec                 C   s"   t jdt jd�}tt|ƒdƒ d S )Nrm  r1   F©rC   rÒ  r0   r   r   ro  rL   rL   rM   Ú$test_is_valid_dm_improper_shape_1D_Fë  s    z2TestIsValidDM.test_is_valid_dm_improper_shape_1D_Fc                 C   s    t jdt jd�}ttt|ƒ d S ©N©rà   rà   rà   r1   rn  ro  rL   rL   rM   Ú$test_is_valid_dm_improper_shape_3D_Eï  s    z2TestIsValidDM.test_is_valid_dm_improper_shape_3D_Ec                 C   s"   t jdt jd�}tt|ƒdƒ d S ©Nrt  r1   Frq  ro  rL   rL   rM   Ú$test_is_valid_dm_improper_shape_3D_Fó  s    z2TestIsValidDM.test_is_valid_dm_improper_shape_3D_Fc                 C   s@   t j d¡}t|ƒ}tddƒD ]}d|||f< qttt|ƒ d S )NrW  r   r  rª   )rC   r�   r“   r   rb   rñ   ra   rk  ©rÏ   rÒ   r  r€   rL   rL   rM   Ú#test_is_valid_dm_nonzero_diagonal_E÷  s
    z1TestIsValidDM.test_is_valid_dm_nonzero_diagonal_Ec                 C   sB   t j d¡}t|ƒ}tddƒD ]}d|||f< qtt|ƒdƒ d S )NrW  r   r  rª   F)rC   r�   r“   r   rb   r   r   rx  rL   rL   rM   Ú#test_is_valid_dm_nonzero_diagonal_Fþ  s
    z1TestIsValidDM.test_is_valid_dm_nonzero_diagonal_Fc                 C   s4   t j d¡}t|ƒ}|d d |d< ttt|ƒ d S )NrW  ©rà   rX   rX   ©rX   rà   )rC   r�   r“   r   rñ   ra   rk  ©rÏ   rÒ   r  rL   rL   rM   Útest_is_valid_dm_asymmetric_E  s    z+TestIsValidDM.test_is_valid_dm_asymmetric_Ec                 C   s6   t j d¡}t|ƒ}|d d |d< tt|ƒdƒ d S )NrW  r{  rX   r|  F©rC   r�   r“   r   r   r   r}  rL   rL   rM   Útest_is_valid_dm_asymmetric_F  s    z+TestIsValidDM.test_is_valid_dm_asymmetric_Fc                 C   s"   t jdt jd�}tt|ƒdƒ d S )Nr7  r1   Trq  ro  rL   rL   rM   Útest_is_valid_dm_correct_1_by_1  s    z-TestIsValidDM.test_is_valid_dm_correct_1_by_1c                 C   s&   t j d¡}t|ƒ}tt|ƒdƒ d S )NrX   Tr  r}  rL   rL   rM   Útest_is_valid_dm_correct_2_by_2  s    z-TestIsValidDM.test_is_valid_dm_correct_2_by_2c                 C   s&   t j d¡}t|ƒ}tt|ƒdƒ d S ©Nrà   Tr  r}  rL   rL   rM   Útest_is_valid_dm_correct_3_by_3  s    z-TestIsValidDM.test_is_valid_dm_correct_3_by_3c                 C   s&   t j d¡}t|ƒ}tt|ƒdƒ d S )Né   Tr  r}  rL   rL   rM   Útest_is_valid_dm_correct_4_by_4  s    z-TestIsValidDM.test_is_valid_dm_correct_4_by_4c                 C   s&   t j d¡}t|ƒ}tt|ƒdƒ d S )NrW  Tr  r}  rL   rL   rM   Útest_is_valid_dm_correct_5_by_5$  s    z-TestIsValidDM.test_is_valid_dm_correct_5_by_5N)r³   r  r   rp  rr  ru  rw  ry  rz  r~  r€  r�  r‚  r„  r†  r‡  rL   rL   rL   rM   rl  å  s   rl  c                 C   s   t | dd�S ri  )r   )rÒ   rL   rL   rM   Úis_valid_y_throw*  s    rˆ  c                   @   sd   e Z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dd„ Zdd„ ZdS )ÚTestIsValidYc                 C   s    t jdt jd�}ttt|ƒ d S )N©rà   rà   r1   ©rC   rÒ  r0   rñ   ra   rˆ  ©rÏ   rÒ   rL   rL   rM   Ú#test_is_valid_y_improper_shape_2D_E3  s    z0TestIsValidY.test_is_valid_y_improper_shape_2D_Ec                 C   s"   t jdt jd�}tt|ƒdƒ d S )NrŠ  r1   F©rC   rÒ  r0   r   r   rŒ  rL   rL   rM   Ú#test_is_valid_y_improper_shape_2D_F7  s    z0TestIsValidY.test_is_valid_y_improper_shape_2D_Fc                 C   s    t jdt jd�}ttt|ƒ d S rs  r‹  rŒ  rL   rL   rM   Ú#test_is_valid_y_improper_shape_3D_E;  s    z0TestIsValidY.test_is_valid_y_improper_shape_3D_Ec                 C   s"   t jdt jd�}tt|ƒdƒ d S rv  rŽ  rŒ  rL   rL   rM   Ú#test_is_valid_y_improper_shape_3D_F?  s    z0TestIsValidY.test_is_valid_y_improper_shape_3D_Fc                 C   s   |   d¡}tt|ƒdƒ d S )Nr¦   T©Úcorrect_n_by_nr   r   rŒ  rL   rL   rM   Útest_is_valid_y_correct_2_by_2C  s    
z+TestIsValidY.test_is_valid_y_correct_2_by_2c                 C   s   |   d¡}tt|ƒdƒ d S rƒ  r’  rŒ  rL   rL   rM   Útest_is_valid_y_correct_3_by_3G  s    
z+TestIsValidY.test_is_valid_y_correct_3_by_3c                 C   s   |   d¡}tt|ƒdƒ d S )Nr>  Tr’  rŒ  rL   rL   rM   Útest_is_valid_y_correct_4_by_4K  s    
z+TestIsValidY.test_is_valid_y_correct_4_by_4c                 C   s   |   d¡}tt|ƒdƒ d S )Nr  Tr’  rŒ  rL   rL   rM   Útest_is_valid_y_correct_5_by_5O  s    
z+TestIsValidY.test_is_valid_y_correct_5_by_5c                 C   sX   t g ƒ}tddƒD ]}| ||d  d ¡ qtddƒD ]}||kr8tt| j|ƒ q8d S rS  rU  rY  rL   rL   rM   Útest_is_valid_y_2_100S  s    z"TestIsValidY.test_is_valid_y_2_100c                 C   s   t j |¡}t|dd�S ri  )rC   r�   r“   r   r[  rL   rL   rM   rX  [  s    zTestIsValidY.bad_yc                 C   s   t j ||d  d ¡}|S r]  r^  r[  rL   rL   rM   r“  _  s    zTestIsValidY.correct_n_by_nN)r³   r  r   r�  r�  r�  r‘  r”  r•  r–  r—  r˜  rX  r“  rL   rL   rL   rM   r‰  .  s   r‰  r  g      $Àg      à¿r  c                 C   s:   t ttddgddg| ƒ t ttddgddg| ddgƒ d S )NrX   r¦   rà   r>  )rñ   ra   r%   r  rL   rL   rM   Ú
test_bad_pd  s    r™  c                   C   s   t ttdddgdddgƒ d S )NF)rñ   ra   r*   rL   rL   rL   rM   Útest_sokalsneath_all_falsek  s    rš  c                   C   s@   t tdddgdddgƒdƒ t tddddgddddgƒdƒ d S )NrX   r¦   rà   r>  r…  r   )r   Ú	wcanberrarL   rL   rL   rM   r  p  s    r  c                   C   sH   t tdddgdddgƒddd� t tddd	d	gdd	dd	gƒd
dd� d S )NrX   r¦   rà   r>  r…  gUUUUUUÕ?é   ©Údecimalr   r  )r	   ÚwbraycurtisrL   rL   rL   rM   Útest_braycurtisv  s     r   c               	   C   sŠ  t  dddg¡} t  dddg¡}tt| |ƒddd� tt| |ƒt  d¡dd� ttdd��6 t| t jd d …f |t jd d …f ƒt  d¡f W 5 Q R X ttdd��, t| t jd d …f |t jd d …f ƒ W 5 Q R X ttdd��, t| d d …t jf |d d …t jf ƒ W 5 Q R X t  	d	¡ 
d
d
¡}ttt||ƒ ttt||ƒ t j d¡}| d¡}| d¡}t||ƒ}t||ƒ}t|d
 |dd� d S )NrX   r   r×   r'  r�  rà   úInput vector should be 1-D©Úmatchr>  r¦   iÒ–IrW  )rC   rŽ   r	   r%  r#  r  rñ   ra   Znewaxisrì   r…   r�   r�   r“   )r  r  rœ   ÚrsrÒ   Úd1Úd2rL   rL   rM   Útest_euclideans|  s2    ÿ:ÿ0ÿ0



r§  c                  C   s(   dddg} ddddg}t tt| |ƒ d S )Nr   rX   )rñ   ra   Úwhammingr&  rL   rL   rM   Útest_hamming_unequal_lengthž  s    
r©  c                  C   s„   t jddddddddddddddddddddgdd�} t jddddddddddddddddddddgdd�}d}tt| |ƒ|ƒ d S )NÚeggsZspamz|S4r1   gÍÌÌÌÌÌÜ?)rC   rŽ   r
   r¨  )rU   r£   ZdesiredrL   rL   rM   Útest_hamming_string_array¦  sH               þý           þýr«  c                  C   s–   t  ddddddddddg
ddddddddddg
g¡} t| d	d
d d�}t| | d	d
d d�}t| d	d
d�}t| | d	d
d�}t||dd� t||dd� d S )NgÁQUUÕT@g      Y@g      B@g      N@g     €V@g     Àb@g      8@g      H@r%   rX   )rä   r  r¥   )rä   r  r÷   re  )rC   rŽ   r   r   r
   )Zarr_inÚp0Zc0Úp1Úc1rL   rL   rM   Útest_minkowski_w´  s*        ÿ
    ÿþr¯  c                  C   sF  dddg} dddg}t jt jt jt jfD ]6}tt j| |d�t j||d�ƒ}tt  |j	t j
¡ƒ q(t jt jt jt jfD ]^}t  |¡j}tdgt j|g|d�ƒ}tt j|g|d�dgƒ}t||ƒ t|t  |¡d ƒ qtt jt jt jt jg}d	D ]}tt |ƒrì| tt |ƒ¡ qì|D ]0}tt j| |d�t j||d�ƒ}t|j	|ƒ �qd S )
NrX   r¦   rà   r>  r  r…  r1   r   )Zfloat16Zfloat128)rC   rD  Zint16rC  rL  r%  Úasarrayr   r�   r2   ZfloatingZuint8r   Zuint32Zuint64ZiinfoÚmaxr   rƒ   rF   Z	complex64Z
complex128ÚhasattrrŒ   Úgetattr)rœ   rÒ   r2   ÚdZumaxr¥  r¦  ZdtypesrL   rL   rM   Útest_sqeuclidean_dtypesÃ  s$    



rµ  c                  C   sR   dddg} dddg}dd„ | D ƒ}dd„ |D ƒ}t | |ƒ}t ||ƒ}t||ƒ d S )NTFc                 S   s   g | ]}t |ƒ‘qS rL   ©r~   ©rT   r£   rL   rL   rM   rV   æ  s     z&test_sokalmichener.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS rL   r¶  r·  rL   rL   rM   rV   ç  s     )r)   r   )r  r–   rœ   rÒ   r!  r"  rL   rL   rM   Útest_sokalmichenerâ  s    



r¸  c            	      C   sØ   d} d}d}d}d||   || d||     }t |dƒ tddgddgddgd�}t ||ƒ d	d	d
d
d
d	d	d
d
d
d
d
d
d	d
d	d	d	d
d
g}d
d
d
d	d	d
d
d
d	d
d
d
d
d
d	d	d	d
d
d
g}dD ]}t t|||gƒdƒ qºd S )Nr  gš™™™™™É?r‰   r¦   gXøŸ¡$IÒ?rX   r   ©r¥   FT)gš™™™™™©?r  r‰   g      4@r÷  )r	   r)   )	ZntfZnftZnttZnffÚexpectedÚactualZa1Za2r¥   rL   rL   rM   Útest_sokalmichener_with_weightî  sB     

        ÿ         ÿr¼  c                  C   s`   t  dddgdddgdddgd	d
dgg¡} |  ¡ }tD ]$}t| | |ƒ t| |ƒ t| |ƒ q6d S )Nr‰   rª   r×   rØ   rÙ   rÚ   rÛ   rÜ   ç3333336@çÍÌÌÌÌL7@ç333333F@)rC   r°  rR  r   r   r   r   )ró   rU  rä   rL   rL   rM   Útest_modifies_input  s    ý
rÀ  c                  C   s  t  dddgdddgdddgd	d
dgg¡} t  d¡}tD ]Ø}t t¡� t| | |dƒ W 5 Q R X t t¡� t| |dƒ W 5 Q R X dD ]ˆ}|di}|dkr¢|dks†|dkr²|dks†|dkrÄ|dkrÄq†t t¡� t| | |f|Ž W 5 Q R X t t¡� t| |f|Ž W 5 Q R X q†q8d S )Nr‰   rª   r×   rØ   rÙ   rÚ   rÛ   rÜ   r½  r¾  r¿  rà   )r  r9  r;  Zfoor9  r(   r;  r$   r  r%   )	rC   r°  rì   r   r\  r   r¡   r   r   )ró   ro   rä   rÓ   rµ   rL   rL   rM   Útest_Xdist_deprecated_args  s6    ý
ÿÿþþrÁ  c                  C   sÆ   t d d d d…d d d…f } t | jd ¡}|d d d…  |d d d…< tD ]v}|dkrXqJtj ¡ �X}|dkrx| td¡ |t	|ƒd| fD ]*}t
tt| ||d	� t
tt| | ||d	� qŠW 5 Q R X qJd S )
Nr8   r  r¦   rX   )r(   r$   r!   r"   rã   rå   r¹  )rD   rC   rt   rn   r   rí   rî   rï   rð   rò   rñ   ra   r   r   )r  r¥   rä   rõ   ró  rL   rL   rM   Útest_Xdist_non_negative_weights.  s    ÿrÂ  c               	   C   sò   dddg} t | ƒ}t|| ƒ t | tjd�}t|| ƒ t|jtjƒ dg} t | ƒ}t|jdƒ t|| ƒ d} ttdd�� t | ƒ W 5 Q R X t 	d¡ 
ddd¡} ttdd�� t | ƒ W 5 Q R X ddgdd	gg} ttdd�� t | ƒ W 5 Q R X d S )
NrX   r¦   rà   r1   r¡  r¢  r  rf   r>  )r   r   rC   rƒ   r   r2   rY   rñ   ra   rì   r…   r&  rL   rL   rM   Útest__validate_vector>  s2    



ÿÿÿrÃ  c                  C   sp   t jdtd�} t| d | d ƒ}|dks,t‚t| dƒ}t|dgƒ t| d d… | d d… dƒ}t|dggƒ d S )N)r¦   r…  r1   r   r  r,   rX   )rC   rt   rÊ   rÿ  r‘   r   r   r   )rœ   r´  rL   rL   rM   Útest_yule_all_same[  s    
rÄ  c                  C   sp  t tdddgdddgdƒdƒ t tddgddgƒdƒ t tdddgdddgƒdƒ t tddggddggdd�ddgƒ t tddggddggd	d�d
gƒ t tddggddggddd�ddggƒ t tddggddggd	dd�d
ggƒ t d	dddgddddgddddgg¡} t ddddgddddgd d!d"d#gg¡}t t| |dd�d$d%d&d'gƒ t t| |d	d�d(d)d*gƒ d S )+Nr‰   r  rª   r  g)>ÎdºÝ?r  r   re   rX   gÆüÜÐ”�°?T)rc   Zkeepdimsr¦   rà   r>  r  r…  é   rO   é	   rW  é   é   é   r'  rœ  rP  é   é   é   é   é   é   é   é   gº'Y˜ÏÉ?gTÒyCÐ‡Â?g¥F�®w$½?gœ\BôZ¿·?g;0%7/óÁ?g�‡ƒ)o¤?gkØï‰uª”?)r	   r!   rC   rŽ   )rU   r£   rL   rL   rM   rÜ  h  sJ    ÿÿÿÿÿÿÿÿ

þ

þ
ÿÿrÜ  c               	   C   s,   d} t jt| d�� tg g ƒ W 5 Q R X d S )Nz¨Kulsinski has been deprecated from scipy.spatial.distance in SciPy 1.9.0 and it will be removed in SciPy 1.11.0. It is superseded by scipy.spatial.distance.kulczynski1.r¢  )r\  Zwarnsrð   r"   r‘  rL   rL   rM   Útest_kulsinski_deprecation…  s    rÒ  )N)	NNFTFFFFN)N){r¨  Úos.pathr=   Ú	functoolsr   r   rX  ÚnumpyrC   r±   Znumpy.linalgr   Znumpy.testingr   r   r   r   r	   r
   r   r   r\  r   rñ   Zscipy.spatial.distancer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r;   rŽ   Z_tdistZ_ytdistrD   rN   rQ   rd   r|   ru   rv   r—   r¢   rÇ   r  rþ   r…  rg  r  rñ  r¨  rÿ  r  Z
wcityblockZ
wchebyshevr)  r+  Z
wkulsinskiZwkulczynski1rú  r#  r%  rŸ  r›  r	  Zwsokalmichenerr  rÈ   r`  r  r/  rE  r_  rk  rl  rˆ  r‰  r]  r^  r™  rš  r  r   r§  r©  r«  r¯  rµ  r¸  r¼  rÀ  rÁ  rÂ  rÃ  rÄ  rÜ  rÒ  rL   rL   rL   rM   Ú<module>#   s$  (,`	ã ûû
           ü
0	

 ÿ
         
ü
`        mFC4#E6
"