U
    GvfG                    @   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>dd:d;Z?dd>d?Z@d@dA ZAdBdC ZBddDdE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jghdmdndodpgdqdr Zidsdt Zjdudv Zkdwdx Zldydz Zmd{d| Znd}d~ Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd 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   E/tmp/pip-unpacked-wheel-96ln3f52/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 }|rdd | D }t|rd}d}tdd t| |D } d k	rtn&|rt| d	 j  n|  f S |	rt|rt	|  t
 fd
d| D st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   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 )zruns 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 }zt|| } 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 rt|| d\}}	||	d |j< d|	|jd < t|| }
|	|< t||
|d |D ]>}td g|j	 }t|jd | < t|}|| d ||< qt|| }
t||
|d |D ]@}td g|j	 }t|jd | < t|}|| t
j ||< q| dd dkrt
rtt|| }
t||
|d rdd |D }t|| }
t||
|d rd |< 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st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   Gz?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 )
NvIh%<=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_notdoubleHz>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rt|
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rt||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   r0  rC   r   r   r   r   r5  vstackr}   r0   var
atleast_2dcovr  r   r  inv)	r   eo_namer   r   r   r   ZX12r:  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rt|	j t| |d D ]&}
|
|}|
|}t	|	t|||d qW 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   r0  r   r   r
   )r   r   testsr   testr   r   r1  r   r4  new_typeZX1newZX2newr2  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rd|d< t|||f|}t|||f|}	t	||	|t
dkd qd S )	Nr   r   r   r   r%   r  r  r   )rD   copyr   r   flagsc_contiguousr   rK  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   rK  r   r   r   r`   r   )r   r   r  r  r   rH  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,  r5  rC  rG  rR  rW  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 ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]e	j
jdd Z^dd Z_dd Z`dddZadd Zbdd Zcdd Zddd ZedS )	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 rc  rg  ri  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 rc  rC   rF   rD   rh  r
   ri  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-  rd  re  r   rf  rg  r   r   r  rj  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   rf  rg  ri  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   rs  rt  r   r   r   rC   rF   rD   rh  r
   r   ri  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-  rs  rt  r   rf  rg  rp  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-  rd  pdist-seuclideanr(   rf  rD   r   r
   ri  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-  rd  ry  r(   rf  r   rX   r8  r9  )rC   rF   rD   r   r
   r>  )r   r   r  rj  rk  r:  rq  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-  rd  ry  test_seuclideanrf  rz  rp  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-  rs  pdist-seuclidean-irisr(   rf  rz  ri  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   rs  r  r(   rf  )rC   rF   rD   r   r
   ri  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-  rs  r  r}  rf  rz  rp  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-  rd  pdist-cosiner   rf  rD   wpdistr
   ri  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
   ri  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-  rd  r  test_cosinerf  r  rp  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   rs  pdist-cosine-irisr   r   r  ri  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   rs  r  r   r   r   r   )rC   rF   rD   r  r
   r   ri  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   rs  r  r  r   r  rp  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-  rd  pdist-cityblockr   rf  rg  ri  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  rn  ri  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-  rd  r  test_cityblockrf  rg  rp  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  rs  pdist-cityblock-irisr   rf  rg  ri  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   rs  r  r   r   r   rv  ri  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  rs  r  r  rf  rg  rp  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-  rd  pdist-correlationr   rf  r  ri  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  ri  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-  rd  r  test_correlationrf  r  rp  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-  rs  pdist-correlation-irisr   rf  r  ri  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-  rs  r  r   r   r   )rD   rC   rF   r  r
   r   ri  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-16456rs  r  r  rf  )sysmaxsizer]  skiprD   r  r
   rp  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  rd  r%   r	  r
  r   )r   r   rg  )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-  rd  pdist-minkowski-3.2r%   r  r	  rf  rg  ri  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  rn  ri  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-  rd  r  r
  r  r	  rf  rg  rp  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-  rs  pdist-minkowski-3.2-irisr%   r  r	  rf  rg  ri  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   rs  r  r%   r  r	  rf  rn  ri  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-  rs  r  r
  r  r	  rf  rg  rp  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-  rs  pdist-minkowski-5.8-irisr%   r   r	  rf  rg  ri  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   rs  r  r%   r   r	  r   r   rv  ri  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-  rs  r  r
  r   r	  rf  rg  rp  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   rf  r  ri  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  ri  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_hammingrf  r  rp  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
   ri  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  ri  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  rp  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:0yE>r5   pdist-jaccardr    rf  r  ri  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  ri  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_jaccardrf  r  rp  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  ri  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  ri  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    rX  rf  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  rp  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 )Ndy=rd  pdist-jensenshannonr!   rf  rz  ri  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  rd  r  r!   r   r   rC   rF   rD   r   r
   r   ri  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  rd  r  test_jensenshannonrf  rz  rp  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=rs  pdist-jensenshannon-irisr!   r   )rQ   rD   r   r
   ri  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ư>rs  r  r!   r   r  r  ri  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
?rs  r  r  rf  rz  rp  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  rX  rf  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  rd  pdist-chebyshevr   rf  rz  ri  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-  rd  r  r   r   r   r  ri  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  rd  r  test_chebyshevrf  rz  rp  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  rs  pdist-chebyshev-irisr   rf  rz  ri  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   rs  r  r   r   r   r  ri  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  rs  r  r  rf  rz  rp  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   r0  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   r0  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   r0  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   r0  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   r0  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   r0  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 )Nrs  r   r   r   test_canberrar   )rD   r   r0  rn   r2   rh  r
   )r   Dr   r1  r2  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  )rh  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   r0  r   r   r
   )
r   r  r   r   r   r1  r2  r3  r   r4  rL   rL   rM   r5    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rt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   r6  r7  >	   r&   r*   r#   r,   r'   r"   r)   matchingr   r   r"   r   r(   r   rX   r8  r9  r$   r;  )r   rD   r   r   r0  rC   r   r   r   r   r5  r>  r}   r0   r?  r@  r  r   r  rA  )r   rB  r  r   r   r:  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rt|j t| |d D ]}	|	|}
t	|t|
|d qW 5 d }~X Y qTX |d D ](}	t|	||d}t
|||tdkd qqTqLd S )Nr-  r6   r   r:   rH   r9   r~   r8   rF   r   r  r   r  rX   r   )rD   r   r   r   r   r/  r   r0  r   r   r
   )r   r   rD  r   rE  r   r1  r   r4  rF  r   r2  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   rH  rf  r   )rD   r~   rn   r   rK  rC   rL  r0   r   r
   r   r   ra   rM  )r   r   r  Zout_sizer   r   rN  rj  rk  rO  rP  rQ  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   rS  r   rT  rU  r   rK  r   r
   r   )r   r   r  ZX_copyr   r   r  r  rL   rL   rM   rW    s    zTestPdist.test_stridingN)r-  )fr   r   r!  r   rb  rl  rm  ro  rr  r]  r^  Zslowru  rw  rx  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_  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  r5  r  r  r  rW  rL   rL   rL   rM   ra    s   	(


		


	


	










		










	
!ra  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         ?gqaz@r   gw@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   gUUUUUUgUUUUUU@)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rdt t jj ksn td S )Nr  g       r+  r   r   r   rX  )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   )r1  check_squareform_vectorr3  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   r2  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 )Nr7  r1   r8  r   g @)r   r   )rC   r  r   r   rn   r2   r   r   )r   r2   r[  rvrL   rL   rM   r5  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rt|||	f ||  |d7 }qt|||	f d qqd S )N   rX   r   r   r   )rC   r   r   rh  r   lenrn   r   r   r0  rb   )
r   r=  r  r  r9  ZYrskr   jrL   rL   rM   r;  t  s$    
z,TestSquareForm.check_squareform_multi_matrixN)r   r   r!  rC   r   rF   int32int8r   r1  r4  r6  r2  r5  r>  r;  rL   rL   rL   rM   r0  G  s   r0  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   rX  r?  )rb   rC   r   r   rh  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   rI  r   rL   rL   rM   test_num_obs_y_2  s    zTestNumObsY.test_num_obs_y_2c                 C   s   t | d d S )Nr   rL  r   rL   rL   rM   test_num_obs_y_3  s    zTestNumObsY.test_num_obs_y_3c                 C   s   t | d d S Nr?  rL  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   rQ  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   rL  r<  rL   rL   rM   rR    s    zTestNumObsY.minitc                 C   s   t j|}t|S rZ   )rC   r   r   r   r   r=  r   rL   rL   rM   rY    s    zTestNumObsY.bad_yc                 C   s   t | ||kS rZ   )r   make_yr<  rL   rL   rM   rI    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!  rG  rJ  rM  rN  rP  rS  r[  rR  rY  rI  r]  rL   rL   rL   rM   rF    s   
rF  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   rX  r?  r   )rb   rC   r   r   rh  r   r   r0  rn   r   r   )r   r=  r  r  r9  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 rH  rb  r   rL   rL   rM   test_num_obs_dm_1  s    zTestNumObsDM.test_num_obs_dm_1c                 C   s   t | d d S rK  rb  r   rL   rL   rM   test_num_obs_dm_2  s    zTestNumObsDM.test_num_obs_dm_2c                 C   s   t | d d S rK  rb  r   rL   rL   rM   test_num_obs_dm_3  s    zTestNumObsDM.test_num_obs_dm_3c                 C   s   t | d d S rO  rb  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   rc    s    zTestNumObsDM.check_Dc                 C   s   t j||S rZ   r_  r<  rL   rL   rM   ri    s    zTestNumObsDM.make_DN)r   r   r!  ra  rd  re  rf  rg  rh  rc  ri  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    rl  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   rl  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 )Nrn  r1   FrC   r  r0   r   r   rp  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   ro  rp  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 Nru  r1   Frr  rp  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 )NrX  r   r  r   )rC   r   r   r   rb   r   ra   rl  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 )NrX  r   r  r   F)rC   r   r   r   rb   r   r   ry  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 )NrX  r   rX   rX   rX   r   )rC   r   r   r   r   ra   rl  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 )NrX  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 )Nr8  r1   Trr  rp  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 )NrX  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!  rq  rs  rv  rx  rz  r{  r  r  r  r  r  r  r  rL   rL   rL   rM   rm    s   rm  c                 C   s   t | ddS rj  )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 rt  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 rw  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 rT  rV  rZ  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 rj  )rC   r   r   r   r\  rL   rL   rM   rY  [  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  rY  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IrX  )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QUUT@g      Y@g      B@g      N@g     V@g     b@g      8@g      H@r%   rX   )r   r  r   )r   r  r   rf  )rC   r   r   r   r
   )Zarr_inZp0Zc0p1Z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   rE  Zint16rD  rM  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 qd 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  rS  r   r   r   r   )r   rV  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rqtt t| | |f| W 5 Q R X tt t| |f| W 5 Q R X qq8d S )Nr   r   r   r   r   r   r   r   r  r  r  r   )r  r:  r<  Zfoor:  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	 qW 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   	   rX           r(  r  rQ                          g'Y?gTyCЇ?gFw$?g\BZ?g;0%7/?g)o?gku?)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 )NzKulsinski 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   rY  Z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  rh  r  r  r  r   r  Z
wcityblockZ
wchebyshevr*  r,  Z
wkulsinskiZwkulczynski1r  r$  r&  r  r  r
  Zwsokalmichenerr  r   ra  r  r0  rF  r`  rl  rm  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
"