o
    5ήcG                    @   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 d dlZd dlmZ d dlZd dlmZ d dlmZmZmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: g d	Z;ej<g d
g dg dg dg dg dgddZ=ee=Z>i Z?dd Z@e@  dd ZAdoddZB					dpddZCdd ZDdd ZEdod d!ZFeed"d#d$d% dfd&d'ZGd(dd)d% d*ddddddddddd+d eed"d#fd,d-ZHeHed.dd/ZIeHed.ddd0ZJeHed.dd.d1ZKeHed.ddd.d2ZLeHe4ZMeHe-dd3 ZNZOeHe:ZPeHe+ZQeHe(ZReHe'ZSeHe*ZTeHe)ZUeHe0ZVeHe1ZWeHe.ZXeHe,dd4ZYeHe9dd4ZZeHe%Z[eHe&dd4Z\eHe8Z]eHe7Z^eHe5Z_G d5d6 d6Z`G d7d8 d8ZaG d9d: d:ZbG d;d< d<ZcG d=d> d>ZdG d?d@ d@ZedAdB ZfG dCdD dDZgdEdF ZhG dGdH dHZiejjkdIg dJdKdL ZldMdN ZmdOdP ZndQdR ZodSdT ZpdUdV ZqdWdX ZrdYdZ Zsd[d\ Ztd]d^ Zud_d` Zvdadb Zwdcdd Zxdedf Zydgdh Zzdidj Z{dkdl Z|dmdn Z}dS )q    N)wrapspartial)norm)verboseassert_assert_array_equalassert_equalassert_almost_equalassert_allclosesuppress_warnings)raises)_distance_pybind)

squareformpdistcdist	num_obs_y
num_obs_dmis_valid_dm
is_valid_y_validate_vector_METRICS_NAMES_METRICS)
braycurtiscanberra	chebyshev	cityblockcorrelationcosinedice	euclideanhammingjaccardjensenshannon	kulsinskikulczynski1mahalanobis	minkowskirogerstanimoto
russellrao
seuclideansokalmichenersokalsneathsqeuclideanyule)z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.txt)r     m         )r.   r   '        )r/   r3   r     4     )r0   r4   r7   r      e  )r1   r5   r8   r:   r     )r2   r6   r9   r;   r<   r   doubledtypec                  C   s   t D ]'} | 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nploadtxteoclosebool_float32int_uint)fnnamefqfnfp r\   H/tmp/pip-target-vg8gfxp4/lib/python/scipy/spatial/tests/test_distance.pyload_testing_filesr   s   
r^   c                   C   s   t djdk S )Nr      )rP   intpitemsizer\   r\   r\   r]   	_is_32bit   s   rb   c                    s|   dd  D  |d u rdd  D  d}t dd  D  |dk r9t fdd D s0tdt d j| } |f S )	Nc                 S      g | ]}t |qS r\   )rP   
asanyarray.0ar\   r\   r]   
<listcomp>       z!_chk_asarrays.<locals>.<listcomp>c                 S   s$   g | ]}|j d krt|n|qS    )ndimrP   ravelre   r\   r\   r]   rh      s    r   c                 s   s    | ]}t |V  qd S N)rP   
atleast_1dre   r\   r\   r]   	<genexpr>       z _chk_asarrays.<locals>.<genexpr>c                 3   s     | ]}|j  d  j kV  qdS )r   N)rl   re   arraysr\   r]   rp          z(array ndim must be the same for neg axis)tupleall
ValueErrorrangerl   )rs   axisr\   rr   r]   _chk_asarrays   s   
rz   FTc
                    sp  t |  d}
|
d d |
d }  |o| }|s#|r#tdd | D }|r@dd | D }t|r@d}d}tdd t| |D } d urJtn|rWt| d	 j  n|  f S |	rct|rkt	|  t
 fd
d| D s{td|rd	k  rtd|rtd	kd	 jjk rt fdd| D }  |rdk
 rd |  f S )Nry   c                 s   s$    | ]}t j|t jjuV  qd S rn   )rP   magetmasknomaskre   r\   r\   r]   rp      s   " z_chk_weights.<locals>.<genexpr>c                 S   s   g | ]
}t t |qS r\   )rP   isnansumre   r\   r\   r]   rh          z _chk_weights.<locals>.<listcomp>Tc                 s   s(    | ]\}}|rt j|n|V  qd S rn   rP   r}   masked_invalid)rf   rg   has_nanr\   r\   r]   rp      s    r   c                 3   s"    | ]}j |j   fkV  qd S rn   shapere   )ry   weightsr\   r]   rp      s     z*weights shape must match arrays along axiszweights cannot be negativec                 3   s     | ]}t j| d V  qdS )r{   N)rP   takere   )ry   pos_weightsr\   r]   rp      rt   rk   )rz   anyru   ziprP   rd   onesr   _freq_weights_weight_maskedrv   rw   nonzerosize)rs   r   ry   force_weightssimplify_weightspos_only	neg_check
nan_screenmask_screenddofchkedhas_nansr\   )ry   r   r   r]   _chk_weights   sD   
r   c                 C   s2   | d u r| S |  t}| |k rtd|  |S )Nz2frequency (integer count-type) weights required %s)astypeintr   rw   )r   int_weightsr\   r\   r]   r      s   
r   c                    s    d u rd t |}| D ]1}t j|}|t jju rq|jdkr5t fddt|jD }|j|d}|d|	t
 9 }q|S )Nr   rk   c                 3   s    | ]	}| kr|V  qd S rn   r\   rf   ir{   r\   r]   rp      s    z!_weight_masked.<locals>.<genexpr>r{   )rP   rd   r}   r~   r   rl   ru   rx   r   r   r   )rs   r   ry   rg   	axis_masknot_axesr\   r{   r]   r      s   

r   c           	         s   dd | D } t j|t jd}t j|}dd | d j  t fdd| D s0J d	tt| D ],}|	| | }|
 }|| |< t |d
| | } fdd| D } q8| |fS )Nc                 S   s,   g | ]}t |jt jr|t jn|qS r\   )rP   
issubdtyper?   integerr   float64)rf   arrr\   r\   r]   rh      s
    z_rand_split.<locals>.<listcomp>r>   c                    s6   t t j |d}| fddt jD S )Nr{   c                    s"   g | ]}|kr j | nd qS rj   r   r   rg   ry   r\   r]   rh      s    z/_rand_split.<locals>.mytake.<locals>.<listcomp>)rP   rd   r   reshaperx   rl   )rg   ixry   recordr\   r   r]   mytake   s   z_rand_split.<locals>.mytaker   c                 3   s    | ]
}|j   kV  qd S rn   r   re   )ry   n_obsr\   r]   rp      s    z_rand_split.<locals>.<genexpr>z#data must be aligned on sample axis      ?c              	      s&   g | ]}t j|| d  d qS r{   rP   appendre   )ry   r   split_ixr\   r]   rh      s
    
)rP   arrayr   randomRandomStater   rv   rx   r   randintrandr   )	rs   r   ry   	split_perseedseeded_randr   prev_wqr\   )ry   r   r   r   r]   _rand_split   s$    r   h㈵>atolc                 C      | S rn   r\   xr\   r\   r]   <lambda>       r   c           	   	   C   s   || }||}zt ||k r||| W d S W d S  ty+   ||| Y d S  ttfyG   t||D ]\}}t|||d q8Y d S w )N)compare_assert)rP   r   r   AttributeError	TypeErrorrw   r   _rough_check)	rg   br   keywcheck_acheck_ba_ib_ir\   r\   r]   r      s   r      c                 C   r   rn   r\   r   r\   r\   r]   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  | i |}| d 	 }| 	d  }| d }| d t|| ddd}|d d |d |d }} rAdd |D }zt|| } r[||< t|| i |d r|d	 |< t|| i |d |d
 |< zt|| i |d W n ty } z
t||||f|d }~ww rrt|| d\}}	||	d |j< d|	|jd < t|| }
|	|< t||
i |d |D ]}td g|j	 }t|jd | < t|}|| d ||< qt|| }
t||
i |d |D ] }td g|j	 }t|jd | < t|}|| t
j ||< q| dd dkr@
r@t|| }
t||
i |d rodd |D }t|| }
t||
i |d rod |< t||
i |d ~~
~	r fdd|D }t
||d }t|| }||< t||i |d ~~~rˈdkrt|| d\}}t|| }||< t||i |d W |S W |S W |S  ty } zstdj|f  W Y d }~|S W Y d }~|S d }~ww )Nry   T)r   ry   r   r   r|   c                 S   s   g | ]	}t | qS r\   )rP   ro   squeezere   r\   r\   r]   rh     s    z4_weight_checked.<locals>.wrapped.<locals>.<listcomp>)r   g     @Y@gB`"۹?)r   r   r   e   
nan_policyomitc                 S   s   g | ]}t j|qS r\   r   re   r\   r\   r]   rh   I  s    c                    s   g | ]
}t j|| d qS r   r   re   r{   r\   r]   rh   S  r          @z%s NotImplemented weights: %s)getr   ru   r   	Exceptiontyper   r   slicerl   rP   nanr   NotImplementedErrorwarningswarn__name__)argskwargsresultrs   restr   r   e
dud_arraysdud_weightsdud_argsrg   indexer
dup_arraysdup_weightsdup_argssplit_arrayssplit_weights
split_args
const_testdefault_axisdud_testdup_testrX   r   ma_safema_very_safen_argsnan_safe	ones_testr   silentr   
split_testr   
weight_argr{   r]   wrapped  s    


z _weight_checked.<locals>.wrapped)r   )rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r   r]   _weight_checked	  s   .Ur   rk   )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   F   g d| _ 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 N)rE   rF   rG   rD   rC   )boolrW   r   rU   rnd_eo_namesrP   rW   rV   rU   r=   valid_upcastsselfr\   r\   r]   setup_method     

zTestCdist.setup_methodc              
   C   s(  ddd}g dg dg dg}g dg d	g d
g}dt dd}dgd }tD ]z}t j k}|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	||g|R d|i ttt	||g|R dt
|i ttt	||g|R dd| i W d    n1 sw   Y  q*ttt	||| ttt	|||g|R   ttt	|||fi | 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 )Nrk   r   c                 S      || | S rn   r\   r   yargkwargkwarg2r\   r\   r]   
_my_metric     z3TestCdist.test_cdist_extra_args.<locals>._my_metricr   r         @333333?ffffff@333333@皙@r  皙@)g      @      @g       @)g      @333333@g @)g      @r  r  Q	@   N0tV4l1D_p4raMr      r#   "Kulsinski has been deprecated frommetrictest_r  ffffff
@r  r  r  皙?r"  r  r  皙@rk   r   )rP   aranger   testingr   filterDeprecationWarningassert_raisesr   r   evalr
   )r  r  X1X2r   r   r"  supr\   r\   r]   test_cdist_extra_args  sz   


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   rR   wcdist_no_constr
   r   )r  epsr1  r2  Y1Y2r\   r\   r]   #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%<=r6  r7  r&   rA  test_minkowskir   r   )r   r:  r   r;  )r  rA  r=  r1  r2  r>  r?  r\   r\   r]   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+=r6  r7  r   c                 S   s   t jj| ddddS )Nrk   r{   r|   )rP   linalgr   r   )Xr\   r\   r]   norms     z1TestCdist.test_cdist_cosine_random.<locals>.normsrk   r   r9  )rR   wcdistrP   dotTr
   r   )r  r=  r1  r2  r>  rL  r?  r\   r\   r]   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   r|   rk   r   )rP   r   r   r
   sqrtr/  rw   )r  x1x2distrt2r\   r\   r]   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                   @      e Zd ZdS )z6TestCdist.test_cdist_custom_notdouble.<locals>.myclassNr   
__module____qualname__r\   r\   r\   r]   myclass      ra  c                    (   t | d  rt |d  stddS Nr   zType has been changed+?
isinstancerw   r   r  ra  r\   r]   r       z9TestCdist.test_cdist_custom_notdouble.<locals>._my_metricr>   rS  re  r   r   )rP   r   objectr   r   r   )r  r  rA   cdist_yright_yr\   ri  r]   test_cdist_custom_notdouble  s   z%TestCdist.test_cdist_custom_notdoubleHz>c              
   K   s  z't ||fd|i|}t ||fdt|i|}t ||fdd| i|}W nN tyu }	 zB|	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 Y d }	~	d S d }	~	ww t|||tdkd t|||tdkd d S Nr"  r#  r   r9  )	r   r0  r   	__class__r   printr   r/  r
   )r  r1  r2  r"  r=  r   y1y2y3r   e_clsr\   r\   r]   _check_calling_conventions  s    
,	z$TestCdist._check_calling_conventionsc           	   
   C   s^  | j D ]}t| d d dd d df }t| dd dd d df }tD ]}tdkr0td|d| |dv r9d|vr9q#tj }|d	krI|t	d
 | 
||| W d    n1 sZw   Y  |dkrt||gtj}tj|ddd}| j
||||d q#|dkrt||gtj}tt|j}ttj|j}| j
||||d q#qd S )NrR  r   rk   r   	testing:  with: >   r   r-   r#   r(   r$   r+   r*   r'   r  r#   r!  r)   r   ry   r   Vr%   VI)r  rR   r   r   rs  rP   r,  r   r-  r.  rx  vstackr   r=   var
atleast_2dcovrP  r   rJ  inv)	r  eo_namer1  r2  r"  r3  X12r}  r  r\   r\   r]   test_cdist_calling_conventions	  s:   
z(TestCdist.test_cdist_calling_conventionsc                 C   sX  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 n: ty } z.|j}	tdkrit|	j t| |d D ]}
|
|}|
|}t	|	t|||d qmW Y d }~q*d }~ww |d D ]}
t|
||
||d}t
|||tdkd qq*q&d S )Nrp  rC   r  rG   rW   rF   r   rE   rU   r   rR  r   rk   r   rS  r9  )rR   r  r   r   r   rr  r   rs  r   r/  r
   )r  r=  testsr"  testr1  r2  rt  r   rw  new_typeX1newX2newru  r\   r\   r]   test_cdist_dtype_equivalence-  s<   

z&TestCdist.test_cdist_dtype_equivalencec                 C   s  d}t d }t d }|jd |jd }}tD ]}t }|dkr$d|d< tj||ftjd}t|||fi |}	t|||fd	|i|}
t|	|
|t	d
kd t
|
|u  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 )Nr5  r6  r7  r   r&   rD  rA  r>   outr   r9  rk   F)r?   order)rR   r   r   dictrP   emptyr=   r   r
   r   r   r/  rw   int64)r  r=  r1  r2  out_rout_cr"  r   out1r>  r?  out2out3out4out5r\   r\   r]   test_cdist_outH  sd   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 ]+}t }|dkrYd|d< t|||fi |}t|||fi |}	t	||	|t
dkd qLd S )	Nr5  r6  r   r7  r&   rD  rA  r9  )rR   copyr   r   flagsc_contiguousr   r  r   r
   r   )
r  r=  r1  r2  X1_copyX2_copyr"  r   r>  r?  r\   r\   r]   test_stridingl  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dd	 |D s@J qd S )
N
   r&   rD  rA  r"  c                 S   rc   r\   )weakrefref)rf   vr\   r\   r]   rh     ri   z1TestCdist.test_cdist_refcount.<locals>.<listcomp>c                 s   s    | ]}| d u V  qd S rn   r\   )rf   weak_refr\   r\   r]   rp     rq   z0TestCdist.test_cdist_refcount.<locals>.<genexpr>)r   rP   r   r   r  r   rv   )r  r"  rX  rY  r   r  	weak_refsr\   r\   r]   test_cdist_refcount  s   zTestCdist.test_cdist_refcountNrp  )r   r_  r`  r  r4  r@  pytestmarkparametrizerP   infrH  rQ  r\  ro  rx  r  r  r  r  r  r\   r\   r\   r]   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   r   r   r  r  r\   r\   r]   r    r  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}t j e}|dkr1|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	|g|R d|i ttt	|g|R dt
|i ttt	|g|R dd| i W d    n1 sw   Y  qttt	|| ttt	||g|R   ttt	||fi | 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 )Nrk   r   c                 S   r	  rn   r\   r
  r\   r\   r]   r    r  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)  r*  )rP   r+  r   r,  r   r-  r.  r/  r   r   r0  r
   )r  r  r1  r   r   r"  r3  r\   r\   r]   test_pdist_extra_args  s`   



zTestPdist.test_pdist_extra_argsc                 C   0   d}t d }t d }t|d}t|||d d S Nrp  pdist-double-inppdist-euclideanr   r:  rR   wpdist_no_constr
   r  r=  rK  Y_rightY_test1r\   r\   r]   test_pdist_euclidean_random  
   
z%TestPdist.test_pdist_euclidean_randomc                 C   r  r  r  r  r\   r\   r]   test_pdist_euclidean_random_u  r  z'TestPdist.test_pdist_euclidean_random_uc                 C   6   d}t td }td }t|d}t|||d d S r  rP   rU   rR   r  r
   r  r\   r\   r]   #test_pdist_euclidean_random_float32  
   
z-TestPdist.test_pdist_euclidean_random_float32c                 C   r  )Nrp  r  r  r8  r  r  r  r=  rK  r  Y_test2r\   r\   r]    test_pdist_euclidean_random_nonC  r  z*TestPdist.test_pdist_euclidean_random_nonCc                 C   r  )Nrp  irispdist-euclidean-irisr   r  r  r  r\   r\   r]    test_pdist_euclidean_iris_double  
   
z*TestPdist.test_pdist_euclidean_iris_doublec                 C   <   d}t td }td }t|d}t|||tdkd d S )Nr   r  r  r   r   r9  rP   rU   rR   r  r
   r   r  r\   r\   r]   !test_pdist_euclidean_iris_float32  
   
z+TestPdist.test_pdist_euclidean_iris_float32c                 C   r  )Nrp  r  r  r8  r  r  r  r\   r\   r]   test_pdist_euclidean_iris_nonC  
   
z(TestPdist.test_pdist_euclidean_iris_nonCc                 C   r  )Nrp  r  pdist-seuclideanr)   r  rR   r   r
   r  r\   r\   r]   test_pdist_seuclidean_random  r  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 )
Nrp  r  r  r)   r  r   rk   r{  r|  )rP   rU   rR   r   r
   r  )r  r=  rK  r  r  r}  r  r\   r\   r]   $test_pdist_seuclidean_random_float32	  s   
z.TestPdist.test_pdist_seuclidean_random_float32c                 C   r  )Nrp  r  r  test_seuclideanr  r  r  r\   r\   r]   !test_pdist_seuclidean_random_nonC  r  z+TestPdist.test_pdist_seuclidean_random_nonCc                 C   r  )Nrp  r  pdist-seuclidean-irisr)   r  r  r  r\   r\   r]   test_pdist_seuclidean_iris  r  z$TestPdist.test_pdist_seuclidean_irisc                 C   r  )Nr   r  r  r)   r  )rP   rU   rR   r   r
   r  r\   r\   r]   "test_pdist_seuclidean_iris_float32$  s
   
z,TestPdist.test_pdist_seuclidean_iris_float32c                 C   r  )Nrp  r  r  r  r  r  r  r\   r\   r]   test_pdist_seuclidean_iris_nonC,  s
   
z)TestPdist.test_pdist_seuclidean_iris_nonCc                 C   r  Nrp  r  pdist-cosiner   r  rR   wpdistr
   r  r\   r\   r]   test_pdist_cosine_random5  r  z"TestPdist.test_pdist_cosine_randomc                 C   r  r  rP   rU   rR   r  r
   r  r\   r\   r]    test_pdist_cosine_random_float32<  r  z*TestPdist.test_pdist_cosine_random_float32c                 C   r  )Nrp  r  r  test_cosiner  r  r  r\   r\   r]   test_pdist_cosine_random_nonCC  r  z'TestPdist.test_pdist_cosine_random_nonCc                 C   r  )Nr   r  pdist-cosine-irisr   r   r  r  r\   r\   r]   test_pdist_cosine_irisK  r  z TestPdist.test_pdist_cosine_irisc                 C   r  )Nr   r  r  r   r   r   r   )rP   rU   rR   r  r
   r   r  r\   r\   r]   test_pdist_cosine_iris_float32S  r  z(TestPdist.test_pdist_cosine_iris_float32c                 C   r  )Nr   r  r  r  r   r  r  r\   r\   r]   test_pdist_cosine_iris_nonC[  r  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)rP   absr   r   r   r  r   r  )r  r   rK  r\   r\   r]   test_pdist_cosine_boundsc  s
   
z"TestPdist.test_pdist_cosine_boundsc                 C   r  Nrp  r  pdist-cityblockr   r  r  r  r\   r\   r]   test_pdist_cityblock_randoml  r  z%TestPdist.test_pdist_cityblock_randomc                 C   r  r  r  r  r\   r\   r]   #test_pdist_cityblock_random_float32s  r  z-TestPdist.test_pdist_cityblock_random_float32c                 C   r  )Nrp  r  r  test_cityblockr  r  r  r\   r\   r]    test_pdist_cityblock_random_nonCz  r  z*TestPdist.test_pdist_cityblock_random_nonCc                 C   r  )NrI  r  pdist-cityblock-irisr   r  r  r  r\   r\   r]   test_pdist_cityblock_iris  r  z#TestPdist.test_pdist_cityblock_irisc                 C   r  )Nr   r  r  r   r   r9  r  r  r\   r\   r]   !test_pdist_cityblock_iris_float32  r  z+TestPdist.test_pdist_cityblock_iris_float32c                 C   r  )NrI  r  r  r  r  r  r  r\   r\   r]   test_pdist_cityblock_iris_nonC  r  z(TestPdist.test_pdist_cityblock_iris_nonCc                 C   r  Nrp  r  pdist-correlationr   r  r  r  r\   r\   r]   test_pdist_correlation_random  r  z'TestPdist.test_pdist_correlation_randomc                 C   r  r  r  r  r\   r\   r]   %test_pdist_correlation_random_float32  r  z/TestPdist.test_pdist_correlation_random_float32c                 C   r  )Nrp  r  r  test_correlationr  r  r  r\   r\   r]   "test_pdist_correlation_random_nonC  r  z,TestPdist.test_pdist_correlation_random_nonCc                 C   r  )Nrp  r  pdist-correlation-irisr   r  r  r  r\   r\   r]   test_pdist_correlation_iris  r  z%TestPdist.test_pdist_correlation_irisc                 C   s<   d}t d }tt d }t|d}t|||tdkd d S )Nrp  r  r  r   r   r9  )rR   rP   rU   r  r
   r   r  r\   r\   r]   #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        rp  zsee gh-16456r  r  r  r  )sysmaxsizer  skiprR   r  r
   r  r\   r\   r]    test_pdist_correlation_iris_nonC  s   


z*TestPdist.test_pdist_correlation_iris_nonCrA  rB  rC  r   r   皙	@c                 C   s<   d}t d }t|d|d}t|d|d}t||d|d d S )NrE  r  r&   rF  rG  r   )r   r:  r  )r  rA  r=  rK  r>  r?  r\   r\   r]   test_pdist_minkowski_random_p  s
   z'TestPdist.test_pdist_minkowski_random_pc                 C   4   d}t d }t d }t|ddd}t|||d d S Nrp  r  pdist-minkowski-3.2r&   r  rF  r  r  r  r\   r\   r]   test_pdist_minkowski_random  
   z%TestPdist.test_pdist_minkowski_randomc                 C   :   d}t td }td }t|ddd}t|||d d S r  r  r  r\   r\   r]   #test_pdist_minkowski_random_float32  s
   z-TestPdist.test_pdist_minkowski_random_float32c                 C   r  )Nrp  r  r  rG  r  rF  r  r  r  r\   r\   r]    test_pdist_minkowski_random_nonC  r  z*TestPdist.test_pdist_minkowski_random_nonCc                 C   r  )Nrp  r  pdist-minkowski-3.2-irisr&   r  rF  r  r  r  r\   r\   r]   test_pdist_minkowski_3_2_iris  
   z'TestPdist.test_pdist_minkowski_3_2_irisc                 C   r	  )Nr   r  r  r&   r  rF  r  r  r  r\   r\   r]   %test_pdist_minkowski_3_2_iris_float32  s
   z/TestPdist.test_pdist_minkowski_3_2_iris_float32c                 C   r  )Nrp  r  r  rG  r  rF  r  r  r  r\   r\   r]   "test_pdist_minkowski_3_2_iris_nonC  r  z,TestPdist.test_pdist_minkowski_3_2_iris_nonCc                 C   r  )Nrp  r  pdist-minkowski-5.8-irisr&   r  rF  r  r  r  r\   r\   r]   test_pdist_minkowski_5_8_iris   r  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   r  r  r&   r  rF  r   r9  r  r  r\   r\   r]   %test_pdist_minkowski_5_8_iris_float32  s
   z/TestPdist.test_pdist_minkowski_5_8_iris_float32c                 C   r  )Nrp  r  r  rG  r  rF  r  r  r  r\   r\   r]   "test_pdist_minkowski_5_8_iris_nonC  r  z,TestPdist.test_pdist_minkowski_5_8_iris_nonCc                 C   s   t g d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 )N)r   r   r  r  r|   rk   r%   rS  rT  rV  rU  r   r   r   r   r  )	rP   r   r   r   r
   rW  r/  rw   r  )r  r   rZ  r[  r\   r\   r]   test_pdist_mahalanobis  s   (
&
z TestPdist.test_pdist_mahalanobisc                 C   r  Nr5  rB   pdist-hammingr    r  r  r  r\   r\   r]   test_pdist_hamming_random)  r  z#TestPdist.test_pdist_hamming_randomc                 C   r  r  r  r  r\   r\   r]   !test_pdist_hamming_random_float320  r  z+TestPdist.test_pdist_hamming_random_float32c                 C   r  Nr5  rB   r  test_hammingr  r  r  r\   r\   r]   test_pdist_hamming_random_nonC7  r  z(TestPdist.test_pdist_hamming_random_nonCc                 C   r  r  rP   r   rR   r  r
   r  r\   r\   r]   test_pdist_dhamming_random>  r  z$TestPdist.test_pdist_dhamming_randomc                 C   r  r  r  r  r\   r\   r]   "test_pdist_dhamming_random_float32E  r  z,TestPdist.test_pdist_dhamming_random_float32c                 C   r  r  r  r  r\   r\   r]   test_pdist_dhamming_random_nonCL  r  z)TestPdist.test_pdist_dhamming_random_nonCc                 C   r  N:0yE>rB   pdist-jaccardr!   r  r  r  r\   r\   r]   test_pdist_jaccard_randomS  r  z#TestPdist.test_pdist_jaccard_randomc                 C   r  r!  r  r  r\   r\   r]   !test_pdist_jaccard_random_float32Z  r  z+TestPdist.test_pdist_jaccard_random_float32c                 C   r  Nr"  rB   r#  test_jaccardr  r  r  r\   r\   r]   test_pdist_jaccard_random_nonCa  r  z(TestPdist.test_pdist_jaccard_random_nonCc                 C   r  r!  r  r  r\   r\   r]   test_pdist_djaccard_randomh  r  z$TestPdist.test_pdist_djaccard_randomc                 C   r  r!  r  r  r\   r\   r]   "test_pdist_djaccard_random_float32o  r  z,TestPdist.test_pdist_djaccard_random_float32c                 C   ,   d}t tdd}ttd||d d S )Nr5  rR  r  r!   r  r  r   rP   zerosr
   r  r=  Yr\   r\   r]   test_pdist_djaccard_allzerosv     z&TestPdist.test_pdist_djaccard_allzerosc                 C   r  r&  r  r  r\   r\   r]   test_pdist_djaccard_random_nonC{  r  z)TestPdist.test_pdist_djaccard_random_nonCc                 C   r  )Ndy=r  pdist-jensenshannonr"   r  r  r  r\   r\   r]   test_pdist_jensenshannon_random  r  z)TestPdist.test_pdist_jensenshannon_randomc                 C   r  )Nr"  r  r5  r"   r   r9  rP   rU   rR   r   r
   r   r  r\   r\   r]   'test_pdist_jensenshannon_random_float32  
   
z1TestPdist.test_pdist_jensenshannon_random_float32c                 C   r  )Nr4  r  r5  test_jensenshannonr  r  r  r\   r\   r]   $test_pdist_jensenshannon_random_nonC  r  z.TestPdist.test_pdist_jensenshannon_random_nonCc                 C   s<   t  rd}nd}td }td }t|d}t|||d d S )NgLa㧝=g-q=r  pdist-jensenshannon-irisr"   r   )rb   rR   r   r
   r  r\   r\   r]   test_pdist_jensenshannon_iris  s   
z'TestPdist.test_pdist_jensenshannon_irisc                 C   r  )Ngư>r  r<  r"   r   r  r7  r  r\   r\   r]   %test_pdist_jensenshannon_iris_float32  r9  z/TestPdist.test_pdist_jensenshannon_iris_float32c                 C   r  )Ng-C6
?r  r<  r:  r  r  r  r\   r\   r]   "test_pdist_jensenshannon_iris_nonC  r  z,TestPdist.test_pdist_jensenshannon_iris_nonCc                 C   r+  )Nr5  r,  r'  r  r  r-  r/  r\   r\   r]   !test_pdist_djaccard_allzeros_nonC  r2  z+TestPdist.test_pdist_djaccard_allzeros_nonCc                 C   r  )Nr"  r  pdist-chebyshevr   r  r  r  r\   r\   r]   test_pdist_chebyshev_random  r  z%TestPdist.test_pdist_chebyshev_randomc                 C   r  )Nrp  r  rA  r   r   r9  r7  r  r\   r\   r]   #test_pdist_chebyshev_random_float32  r9  z-TestPdist.test_pdist_chebyshev_random_float32c                 C   r  )Nr"  r  rA  test_chebyshevr  r  r  r\   r\   r]    test_pdist_chebyshev_random_nonC  r  z*TestPdist.test_pdist_chebyshev_random_nonCc                 C   r  )NrI  r  pdist-chebyshev-irisr   r  r  r  r\   r\   r]   test_pdist_chebyshev_iris  r  z#TestPdist.test_pdist_chebyshev_irisc                 C   r  )Nr   r  rF  r   r   r9  r7  r  r\   r\   r]   !test_pdist_chebyshev_iris_float32  r9  z+TestPdist.test_pdist_chebyshev_iris_float32c                 C   r  )NrI  r  rF  rD  r  r  r  r\   r\   r]   test_pdist_chebyshev_iris_nonC  r  z(TestPdist.test_pdist_chebyshev_iris_nonCc                 C   h   t tg dtg d}t tjg dtdtjg dtd}t|dddd t|dddd d S Nrk   r   rk   rk   r   rk   rk   r   rk   rk   r>   333333?r   绽|=r:  r   	wmatchingrP   r   r  r
   r  mm2r\   r\   r]   test_pdist_matching_mtica1     z$TestPdist.test_pdist_matching_mtica1c                 C   rJ  Nrk   r   rk   rk   rk   r   r>   UUUUUU?r   rO  rP  rQ  rS  r\   r\   r]   test_pdist_matching_mtica2  rW  z$TestPdist.test_pdist_matching_mtica2c                 C   rJ  rK  wjaccardrP   r   r  r
   rS  r\   r\   r]   test_pdist_jaccard_mtica1     z#TestPdist.test_pdist_jaccard_mtica1c                 C   rJ  rX  r]  rS  r\   r\   r]   test_pdist_jaccard_mtica2  r`  z#TestPdist.test_pdist_jaccard_mtica2c                 C   x   t tg dtg d}t tjg dtdtjg dtd}tdkr*t| t|dddd t|dddd d S )NrL  rM  r>   r   r   rO  rP  wyulerP   r   r  r   rs  r
   rS  r\   r\   r]   test_pdist_yule_mtica1     z TestPdist.test_pdist_yule_mtica1c                 C   rb  )NrY  rZ  r>   r   r   rO  rP  rc  rS  r\   r\   r]   test_pdist_yule_mtica2  rf  z TestPdist.test_pdist_yule_mtica2c                 C   x   t tg dtg d}t tjg dtdtjg dtd}tdkr*t| t|dddd t|dddd d S )	NrL  rM  r>   r   g۶m۶m?r   rO  rP  wdicerP   r   r  r   rs  r
   rS  r\   r\   r]   test_pdist_dice_mtica1  rf  z TestPdist.test_pdist_dice_mtica1c                 C   rh  )	NrY  rZ  r>   r   rV  r   rO  rP  ri  rS  r\   r\   r]   test_pdist_dice_mtica2   rf  z TestPdist.test_pdist_dice_mtica2c                 C   rh  	NrL  rM  r>   r   g      ?r   rO  rP  )r+   rP   r   r  r   rs  r
   rS  r\   r\   r]   test_pdist_sokalsneath_mtica1*  rf  z'TestPdist.test_pdist_sokalsneath_mtica1c                 C   rh  	NrY  rZ  r>   r   g?r   rO  rP  )wsokalsneathrP   r   r  r   rs  r
   rS  r\   r\   r]   test_pdist_sokalsneath_mtica24  rf  z'TestPdist.test_pdist_sokalsneath_mtica2c                 C   rh  rm  wrogerstanimotorP   r   r  r   rs  r
   rS  r\   r\   r]    test_pdist_rogerstanimoto_mtica1>  rf  z*TestPdist.test_pdist_rogerstanimoto_mtica1c                 C   rh  ro  rr  rS  r\   r\   r]    test_pdist_rogerstanimoto_mtica2H  rf  z*TestPdist.test_pdist_rogerstanimoto_mtica2c                 C   rh  )	NrL  rM  r>   r   rN  r   rO  rP  wrussellraorP   r   r  r   rs  r
   rS  r\   r\   r]   test_pdist_russellrao_mtica1R  rf  z&TestPdist.test_pdist_russellrao_mtica1c                 C   rh  )	NrY  rZ  r>   r   r[  r   rO  rP  rv  rS  r\   r\   r]   test_pdist_russellrao_mtica2\  rf  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 )Nr  r   r5  r   test_canberrar9  )rR   r   rs  r   r?   r  r
   )r  Dr=  rt  ru  r\   r\   r]   test_pdist_canberra_matchf  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  )r  r
   r   )r  r=  pdist_yrn  r\   r\   r]   test_pdist_canberra_ticket_711p  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                   @   r]  )z6TestPdist.test_pdist_custom_notdouble.<locals>.myclassNr^  r\   r\   r\   r]   ra  z  rb  ra  c                    rc  rd  rf  rh  ri  r\   r]   r  }  rj  z9TestPdist.test_pdist_custom_notdouble.<locals>._my_metricr>   rS  re  r   rk  )rP   r   rl  r   r   r   )r  r  rA   r}  rn  r\   ri  r]   test_pdist_custom_notdoublex  s   z%TestPdist.test_pdist_custom_notdoublerp  c           
   
   K   s  z$t |fd|i|}t |fdt|i|}t |fdd| i|}W nK tyo } z?|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 Y d }~d S d }~ww t|||tdkd t|||tdkd d S rq  )	r   r0  r   rr  r   rs  r   r/  r
   )
r  rK  r"  r=  r   rt  ru  rv  r   rw  r\   r\   r]   rx    s    
*	z$TestPdist._check_calling_conventionsc              
   C   s   | j D ]}t| d d dd d df }tD ]w}tdkr"td|d| |dv r+d|vr+qtj }|dkr;|t	d | 
|| W d    n1 sKw   Y  |d	kritj|tjd
dd}| j
|||d q|dkrtt|tjj}ttj|j}| j
|||d qqd S )NrR  r   ry  rz  >	   r   r-   matchingr#   r(   r$   r+   r*   r'   r  r#   r!  r)   r   rk   r{  r|  r%   r~  )r  rR   r   r   rs  rP   r,  r   r-  r.  rx  r  r   r=   r  r  rP  r   rJ  r  )r  r  rK  r"  r3  r}  r  r\   r\   r]   test_pdist_calling_conventions  s4   
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 ]l}|D ]g}|d
 d d dd d df }zt||d}W n5 tyw } z)|j}tdkrZt|j t| |d D ]}	|	|}
t	|t|
|d q^W Y d }~q*d }~ww |d D ]}	t|	||d}t
|||tdkd q|q*q&d S )Nrp  rC   r  rG   rW   rF   r   rE   rU   r   rR  r   rS  rk   r9  )rR   r  r   r   r   rr  r   rs  r   r/  r
   )r  r=  r  r"  r  r1  rt  r   rw  r  r2  ru  r\   r\   r]   test_pdist_dtype_equivalence  s8   
	z&TestPdist.test_pdist_dtype_equivalencec                 C   sF  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i |}t||fd|i|}t	|||d t
||u  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| q"d S )Nr5  rE   rR  r   r   rk   r&   rD  rA  r>   r  r  r  )rR   r   r   r   r  rP   r  r=   r   r
   r   r/  rw   r  )r  r=  rK  out_sizer"  r   r  r  r  r  r  r  r\   r\   r]   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 ])}t }|dkr0d|d< t||fi |}t||fi |}t|||t	dkd q#d S )	Nr5  rE   rR  r   r&   rD  rA  r9  )
rR   r  r   r  r  r   r  r   r
   r   )r  r=  rK  X_copyr"  r   r>  r?  r\   r\   r]   r    s   zTestPdist.test_stridingNr  )fr   r_  r`  r  r  r  r  r  r  r  r  slowr  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  rP   r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r%  r(  r)  r*  r1  r3  r6  r8  r;  r=  r>  r?  r@  rB  rC  rE  rG  rH  rI  rV  r\  r_  ra  re  rg  rk  rl  rn  rq  rt  ru  rx  ry  r|  r~  r  rx  r  r  r  r  r\   r\   r\   r]   r    s    	(


		


	


	










		










	
!r  c                   @   L   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   s,   t g d}t g d}||fg| _d S )Nr  r   r   r  )rP   r   cases)r  r   r  r\   r\   r]   r    s   z&TestSomeDistanceFunctions.setup_methodc           	      C   s   | j D ]4\}}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 )Nrk   rF  r        ?gqaz@r   gw@rC  gR"6@i`  i  i^  i  uint16)r  r&   r	   rP   r   r   r   )	r  r   r  dist1dist1p5dist2dist0p25rg   r   r\   r\   r]   rG  	  s   



z(TestSomeDistanceFunctions.test_minkowskic                 C   s.   | j D ]\}}t||}t|td qd S )NrR  )r  
weuclideanr	   rP   rW  r  r   r  rZ  r\   r\   r]   r8    s   
z(TestSomeDistanceFunctions.test_euclideanc                 C   s(   | j D ]\}}t||}t|d qd S )Nr  )r  wsqeuclideanr	   r  r\   r\   r]   test_sqeuclidean!  s   
z*TestSomeDistanceFunctions.test_sqeuclideanc              	   C   s@   | j D ]\}}t||}t|ddtdtd    qd S )Nr   g      2@      )r  wcosiner	   rP   rW  r  r\   r\   r]   r  &  s   
$z%TestSomeDistanceFunctions.test_cosinec                 C   s`   t g d}t g d}| jD ]\}}t||}t|dt ||t|t|    qd S )N)      r   r   )UUUUUUr  gUUUUUU@r   )rP   r   r  wcorrelationr	   rO  r   )r  xmymr   r  rZ  r\   r\   r]   r  +  s   
(z*TestSomeDistanceFunctions.test_correlationc                 C   sT   t g d}t g d}t||}d|  kr%dt t jj ks(J  J d S )N)%rT  rT  rT  rT  rT  rT         rT  rT  rT  r  r  r  rT  r  rT  r  rT  rT  r  r  rT  r   rT  rT  r  rT  rT  r  rT  r  r  r  r  r  r  rT  )%r   r   r   r   r   r   r  r   r   r   r  r  r  r   r  r   r  r   r   rT  r  r   r   r   r   r  r   r   r  r   r  r  r  r  r  r  r   r   r  )rP   r   r   finfor   r=  r  r\   r\   r]   test_correlation_positive2  s   
.z3TestSomeDistanceFunctions.test_correlation_positivec                 C   sh   t g d}t g d}t g dg dg dg}| jD ]\}}t|||}t|t d qd S )Nr  r  )r   r   rT  )r   r   r   )rT  r   r   g      @)rP   r   r  r%   r	   rW  )r  r   r  virZ  r\   r\   r]   test_mahalanobis=  s   z*TestSomeDistanceFunctions.test_mahalanobisN)r   r_  r`  r  rG  r8  r  r  r  r  r  r\   r\   r\   r]   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      | j D ]}| | qd S rn   )checked_dtypescheck_squareform_matrixr  r?   r\   r\   r]   test_squareform_matrixI     
z%TestSquareForm.test_squareform_matrixc                 C   r  rn   )r  check_squareform_vectorr  r\   r\   r]   test_squareform_vectorM  r  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   r>   r   rk   rk   r   g@rj   )rP   r.  r   r   r   r?   r   r   )r  r?   ArAr\   r\   r]   r  Q  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 )Nr  r>   r  r   g @)r   r   )rP   r.  r   r   r   r?   r   r   )r  r?   r  rvr\   r\   r]   r  b  s   $z&TestSquareForm.check_squareform_vectorc                 C      t ddD ]}| | qd S )Nr   rR  )rx   check_squareform_multi_matrixr  nr\   r\   r]   test_squareform_multi_matrixo     z+TestSquareForm.test_squareform_multi_matrixc           
      C   s   t j|d}t|}tt|jd t|}t|}|j}d}tdkr-t	|j|j|j tt|d tt|jd t|d |d  t
d|d D ]+}t
|d |d D ]}	||	krmt|||	f ||  |d7 }qWt|||	f d qWqLd S )N   rk   r   r  r   )rP   r   r   r  r   lenr   r   r   rs  rx   )
r  r  rK  r0  r  Yrskr   jr\   r\   r]   r  s  s(   
z,TestSquareForm.check_squareform_multi_matrixN)r   r_  r`  rP   r   rU   int32int8r  r  r  r  r  r  r  r  r\   r\   r\   r]   r  F  s    r  c                   @   d   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   r  r  )rx   rP   r   r   r  r   r   )r  r  rK  r0  r\   r\   r]   test_num_obs_y_multi_matrix  s
   z'TestNumObsY.test_num_obs_y_multi_matrixc                 C   s   t t| jd d S Nrk   )r/  rw   check_yr  r\   r\   r]   test_num_obs_y_1     zTestNumObsY.test_num_obs_y_1c                 C      t | d d S Nr   r   r  r  r\   r\   r]   test_num_obs_y_2  r  zTestNumObsY.test_num_obs_y_2c                 C   r  )Nr  r  r  r\   r\   r]   test_num_obs_y_3     zTestNumObsY.test_num_obs_y_3c                 C   r  Nr  r  r  r\   r\   r]   test_num_obs_y_4  r  zTestNumObsY.test_num_obs_y_4c                 C   r  )NrR     )rx   minit)r  r   r\   r\   r]   test_num_obs_y_5_10  r  zTestNumObsY.test_num_obs_y_5_10c                 C   X   t g }tddD ]}|||d  d  q	tddD ]}||vr)tt| j| qd S Nr   r  rk   rR  i   setrx   addr/  rw   bad_yr  rg   r  r   r\   r\   r]   test_num_obs_y_2_100  s   z TestNumObsY.test_num_obs_y_2_100c                 C   s   t | | d S rn   r  r  r\   r\   r]   r    r  zTestNumObsY.minitc                 C   s   t j|}t|S rn   )rP   r   r   r   r  r  r  r\   r\   r]   r    s   zTestNumObsY.bad_yc                 C      t | ||kS rn   )r   make_yr  r\   r\   r]   r    r  zTestNumObsY.check_yc                 C   s   t j||d  d S Nrk   r   rP   r   r   r  r\   r\   r]   r    rM  zTestNumObsY.make_yN)r   r_  r`  r  r  r  r  r  r  r  r  r  r  r  r\   r\   r\   r]   r    s    
r  c                   @   r  )TestNumObsDMc                 C   sV   t ddD ]#}tj|d}t|}t|}tdkr!t|j|j t	t
|| qd S )Nrk   r  r  r  )rx   rP   r   r   r  r   r   rs  r   r   r   )r  r  rK  r0  r  r\   r\   r]   test_num_obs_dm_multi_matrix  s   z)TestNumObsDM.test_num_obs_dm_multi_matrixc                 C   r  )Nr   r   check_Dr  r\   r\   r]   test_num_obs_dm_0     zTestNumObsDM.test_num_obs_dm_0c                 C   r  r  r  r  r\   r\   r]   test_num_obs_dm_1  r  zTestNumObsDM.test_num_obs_dm_1c                 C   r  r  r  r  r\   r\   r]   test_num_obs_dm_2  r  zTestNumObsDM.test_num_obs_dm_2c                 C   r  r  r  r  r\   r\   r]   test_num_obs_dm_3  r  zTestNumObsDM.test_num_obs_dm_3c                 C   r  r  r  r  r\   r\   r]   test_num_obs_dm_4  r  zTestNumObsDM.test_num_obs_dm_4c                 C   r  rn   )r   make_Dr  r\   r\   r]   r    r  zTestNumObsDM.check_Dc                 C   s   t j||S rn   r  r  r\   r\   r]   r    s   zTestNumObsDM.make_DN)r   r_  r`  r  r  r  r  r  r  r  r  r\   r\   r\   r]   r    s    	r  c                 C      t | ddS NT)throw)r   )r{  r\   r\   r]   is_valid_dm_throw  r  r  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       t jdt jd}ttt| d S )NrR  r>   rP   r.  r=   r/  rw   r  r  r{  r\   r\   r]   $test_is_valid_dm_improper_shape_1D_E     z2TestIsValidDM.test_is_valid_dm_improper_shape_1D_Ec                 C   "   t jdt jd}tt|d d S )Nr  r>   FrP   r.  r=   r   r   r  r\   r\   r]   $test_is_valid_dm_improper_shape_1D_F     z2TestIsValidDM.test_is_valid_dm_improper_shape_1D_Fc                 C   r  Nr  r  r  r>   r  r  r\   r\   r]   $test_is_valid_dm_improper_shape_3D_E  r  z2TestIsValidDM.test_is_valid_dm_improper_shape_3D_Ec                 C   r  Nr  r>   Fr  r  r\   r\   r]   $test_is_valid_dm_improper_shape_3D_F  r  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 )Nr  r   rR  r   )rP   r   r   r   rx   r/  rw   r  r  r  r{  r   r\   r\   r]   #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 )Nr  r   rR  r   F)rP   r   r   r   rx   r   r   r  r\   r\   r]   #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 )Nr  r  rk   rk   rk   r  )rP   r   r   r   r/  rw   r  r  r  r{  r\   r\   r]   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 )Nr  r   rk   r  FrP   r   r   r   r   r   r  r\   r\   r]   test_is_valid_dm_asymmetric_F
  s   z+TestIsValidDM.test_is_valid_dm_asymmetric_Fc                 C   r  )Nr  r>   Tr  r  r\   r\   r]   test_is_valid_dm_correct_1_by_1  r  z-TestIsValidDM.test_is_valid_dm_correct_1_by_1c                 C   &   t jd}t|}tt|d d S )Nrk   Tr  r  r\   r\   r]   test_is_valid_dm_correct_2_by_2     z-TestIsValidDM.test_is_valid_dm_correct_2_by_2c                 C   r  Nr  Tr  r  r\   r\   r]   test_is_valid_dm_correct_3_by_3  r	  z-TestIsValidDM.test_is_valid_dm_correct_3_by_3c                 C   r  )N   Tr  r  r\   r\   r]   test_is_valid_dm_correct_4_by_4  r	  z-TestIsValidDM.test_is_valid_dm_correct_4_by_4c                 C   r  )Nr  Tr  r  r\   r\   r]   test_is_valid_dm_correct_5_by_5#  r	  z-TestIsValidDM.test_is_valid_dm_correct_5_by_5N)r   r_  r`  r  r  r  r  r  r  r  r  r  r  r  r  r  r\   r\   r\   r]   r    s    r  c                 C   r  r  )r   )r  r\   r\   r]   is_valid_y_throw)  r  r  c                   @   r  )TestIsValidYc                 C   r  )Nr  r  r>   rP   r.  r=   r/  rw   r  r  r  r\   r\   r]   #test_is_valid_y_improper_shape_2D_E2  r  z0TestIsValidY.test_is_valid_y_improper_shape_2D_Ec                 C   r  )Nr  r>   FrP   r.  r=   r   r   r  r\   r\   r]   #test_is_valid_y_improper_shape_2D_F6  r  z0TestIsValidY.test_is_valid_y_improper_shape_2D_Fc                 C   r  r  r  r  r\   r\   r]   #test_is_valid_y_improper_shape_3D_E:  r  z0TestIsValidY.test_is_valid_y_improper_shape_3D_Ec                 C   r  r  r  r  r\   r\   r]   #test_is_valid_y_improper_shape_3D_F>  r  z0TestIsValidY.test_is_valid_y_improper_shape_3D_Fc                 C      |  d}tt|d d S )Nr   Tcorrect_n_by_nr   r   r  r\   r\   r]   test_is_valid_y_correct_2_by_2B     
z+TestIsValidY.test_is_valid_y_correct_2_by_2c                 C   r  r
  r  r  r\   r\   r]   test_is_valid_y_correct_3_by_3F  r  z+TestIsValidY.test_is_valid_y_correct_3_by_3c                 C   r  )Nr  Tr  r  r\   r\   r]   test_is_valid_y_correct_4_by_4J  r  z+TestIsValidY.test_is_valid_y_correct_4_by_4c                 C   r  )NrR  Tr  r  r\   r\   r]   test_is_valid_y_correct_5_by_5N  r  z+TestIsValidY.test_is_valid_y_correct_5_by_5c                 C   r  r  r  r  r\   r\   r]   test_is_valid_y_2_100R  s   z"TestIsValidY.test_is_valid_y_2_100c                 C   s   t j|}t|ddS r  )rP   r   r   r   r  r\   r\   r]   r  Z  s   zTestIsValidY.bad_yc                 C   s   t j||d  d }|S r  r  r  r\   r\   r]   r  ^  s   zTestIsValidY.correct_n_by_nN)r   r_  r`  r  r  r  r  r  r  r  r   r!  r  r  r\   r\   r\   r]   r  -  s    r  rA  )g      $g      rT  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 )Nrk   r   r  r  )r/  rw   r&   rF  r\   r\   r]   
test_bad_pc  s   "r"  c                   C   s   t ttg dg d d S )N)FFF)r/  rw   r+   r\   r\   r\   r]   test_sokalsneath_all_falsej  s   r#  c                   C   s4   t tg dg dd t tg dg dd d S )Nrk   r   r  r   r  r  rk   rk   rk   r   r   rk   r   rk   r   r   )r   	wcanberrar\   r\   r\   r]   rz  o  s   rz  c                   C   s<   t tg dg dddd t tg dg dddd d S )	Nr$  r%  gUUUUUU?   decimalr&  r'  rV  )r	   wbraycurtisr\   r\   r\   r]   test_braycurtisu  s    r-  c                  C   s  t g d} t g d}tt| |ddd tt| |t ddd ttdd  t| t jd d f |t jd d f t df W d    n1 sNw   Y  ttdd t| t jd d f |t jd d f  W d    n1 sww   Y  ttdd t| d d t jf |d d t jf  W d    n1 sw   Y  t 	d	
d
d
}ttt|| ttt|| t jd}|d}|d}t||}t||}t|d
 |dd d S )N)rk   rk   rk   )r   r   r   r  r  r*  r  Input vector should be 1-Dmatchr  r   iIr  )rP   r   r	   r  r  rW  r/  rw   newaxisr+  r   r   r   r   )rX  rY  r   rsr  d1d2r\   r\   r]   test_euclideans{  s8   2((



r5  c                  C   s"   g d} g d}t tt| | d S )N)r   r   rk   r'  )r/  rw   whammingrh  r\   r\   r]   test_hamming_unequal_length  s   r7  c                  C   s<   t jg ddd} t jg ddd}d}tt| || d S )N)eggsspamr9  r8  r9  r9  r9  r9  r9  r9  r9  r8  r8  r9  r8  r8  r8  r8  r8  r9  z|S4r>   )r8  r9  r9  r8  r8  r9  r9  r9  r9  r8  r9  r8  r9  r8  r9  r9  r8  r9  r9  r8  g?)rP   r   r
   r6  )rg   r   desiredr\   r\   r]   test_hamming_string_array  s   

r;  c                  C   sv   t g dg d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 )N)
QUUT@      Y@r<  r=  g      B@g      N@g     V@g     b@g      8@g      H@r&   rk   )r"  rA  r   )r"  rA  r5  r  )rP   r   r   r   r
   )arr_inp0c0p1c1r\   r\   r]   test_minkowski_w  s   
rC  c                  C   s@  g d} g d}t jt jt jt jfD ]}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  q8t jt jt jt jg}dD ]}tt |r|tt | qt|D ]}tt j| |dt j||d}t|j	| qd S )Nr$  )r  rR  r  r>   r   r   )float16float128)rP   r  int16r  r  r  asarrayr   r   r?   floatinguint8r  uint32uint64iinfomaxr   r   rU   	complex64
complex128hasattrr   getattr)r   r  r?   dumaxr3  r4  dtypesr\   r\   r]   test_sqeuclidean_dtypes  s(   

rU  c                  C   sN   g d} g d}dd | D }dd |D }t | |}t ||}t|| d S )N)TTF)TFTc                 S      g | ]}t |qS r\   r   rf   r   r\   r\   r]   rh         z&test_sokalmichener.<locals>.<listcomp>c                 S   rV  r\   rW  rX  r\   r\   r]   rh     rY  )r*   r   )rA  r   r   r  r  r  r\   r\   r]   test_sokalmichener  s   

rZ  c            	      C   s   d} d}d}d}d||   || d||     }t |d tddgddgddgd}t || g d	}g d
}dD ]}t t|||gd q9d S )NrT  g?r   r   gX$I?rk   r   r   )FFTTTFFTTTTTTFTFFFTT)TTTFFTTTFTTTTTFFFTTT)g?rB  r   g      4@r[  )r	   r*   )	ntfnftnttnffexpectedactuala1a2r   r\   r\   r]   test_sokalmichener_with_weight  s    

rd  c                  C   sX   t g dg dg dg dg} |  }tD ]}t| | | t| | t| | qd S )Nr  r  r  g3333336@gL7@g333333F@)rP   rG  r  r   r   r   r   )r1  r  r"  r\   r\   r]   test_modifies_input  s   

rf  c               
   C   sf  t g dg dg dg dg} t d}tD ]}tt t| | |d W d    n1 s1w   Y  tt t| |d W d    n1 sLw   Y  dD ]\}|di}|d	kra|d
ksq|dkri|dksq|dkrr|dkrrqStt t| | |fi | W d    n1 sw   Y  tt t| |fi | W d    n1 sw   Y  qSqd S )Nr  r  r  re  r  r   )rA  r}  r  foor}  r)   r  r%   rA  r&   )	rP   rG  r+  r   r  r   r   r   r   )r1  r   r"  r  r   r\   r\   r]   test_Xdist_deprecated_args  sD   

rh  c                  C   s   t d d d dd d df } t| jd }|d d d  |d d d< tD ]E}|dv r,q%tj 1}|dkr<|td |t	|d| fD ]}t
tt| ||d	 t
tt| | ||d	 qEW d    n1 sew   Y  q%d S )
NrE   rR  r   rk   )r)   r%   r"   r#   r!  r#  r[  )rR   rP   r   r   r   r,  r   r-  r.  r0  r/  rw   r   r   )rK  r   r"  r3  rT  r\   r\   r]   test_Xdist_non_negative_weights-  s$   ri  c                  C   s.  g d} 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 d    n1 sIw   Y  t	d
ddd} ttdd t |  W d    n1 smw   Y  ddgd	d
gg} ttdd t |  W d    d S 1 sw   Y  d S )Nr$  r>   rk   r.  r/  rR  r|   r   r  r  )r   r   rP   r   r   r?   rl   r/  rw   r+  r   rh  r\   r\   r]   test__validate_vector=  s8   





"rj  c                  C   sp   t jdtd} t| d | d }|dksJ t| d}t|dg t| d d | d d d}t|dgg d S )N)r   r  r>   r   rT  r-   rk   )rP   r   r  rd  r   r   r   )r   rR  r\   r\   r]   test_yule_all_sameZ  s   
rk  c                  C   sJ  t tg dg ddd t tddgddgd t tg dg d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g dg dg dg} tg dg dg dg}t t| |d	d
g d t t| |dd
g d d S )N)r   rT  rT  )rT  r   rT  r   r   rT  rV  g)>d?r  r   r{   rk   gД?T)ry   keepdims)rk   r   r  r  )rR  r     r_   )	   r        )   r  r)  r  )            )            )g'Y?gTyCЇ?gFw$?g\BZ?)g;0%7/?g)o?gku?)r	   r"   rP   r   )rg   r   r\   r\   r]   r:  g  sJ   

r:  c                  C   sB   d} t jt| d tg g  W d    d S 1 sw   Y  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  warnsr.  r#   r  r\   r\   r]   test_kulsinski_deprecation  s   "r{  rn   )	NNFTFFFFN)~r  os.pathrJ   	functoolsr   r   r  numpyrP   r   numpy.linalgr   numpy.testingr   r   r   r   r	   r
   r   r  r   r/  scipy.spatial.distancescipyscipy.spatialr   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-   rH   r   _tdist_ytdistrR   r^   rb   rz   r   r   r   r   r   r   rN  r<  r  r  rs  rR  r6  rd  rj  
wcityblock
wchebyshevr  r  
wkulsinskiwkulczynski1r^  r  r  r,  r(  rp  wsokalmichenerrw  r   r  r  r  r  r  r  r  r  r  r  r  r"  r#  rz  r-  r5  r7  r;  rC  rU  rZ  rd  rf  rh  ri  rj  rk  r:  r{  r\   r\   r\   r]   <module>   s   "$0`
 

0	




`        mFC4#E6
"