
     hb                        d dl Z d dlmZ d dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dl
mZmZmZ 	 d dl
mZ n# e$ r	 d dl
mZ Y nw xY wd d	lmZmZ d dlZd d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$m%Z% d dlm&Z& d dlm'Z' d dlm(Z( d dlm)Z) d dlm*Z* d dlm+Z+ d dlm,Z, d dlm-Z- d dlm.Z. d dlm/Z/ d dlm0Z0 d d lm1Z1 d d!lm2Z2 d d"lm3Z3 d d#lm4Z4 d d$lm5Z5 d d%lm6Z6 d d&lm7Z7 d d'lm8Z8 d d(lm9Z9 d d)lm:Z: d d*l;m<Z< d d+l=m>Z> d, Z?ej@        A                    d-d.d/g          d0             ZBej@        A                    d1e3          d2             ZCd3 ZDej@        A                    d4e,e0g          d5             ZEd6 ZF ejG        d7d8          H                    d9d/:          d7d;ZI ejG        d7d8          H                    d9d/:          d7d;ZJd< ZKej@        L                    d=          ej@        A                    d>e,d?i f ejM        e,eeI           ejM        e,d@eI           ejM        e,eeJej@        N                    e edA          k    dBC          D           ejM        e,dEeJej@        N                    e edA          k    dBC          D          e0dFdGd7ife0eKdHdIifg          ej@        A                    dJejO        ejP        eQg          dK                                     ZRdL ZSej@        A                    d1g dM          dN             ZTdO ZUdP ZVej@        A                    dQ e4jW                              dR             ZXdS ZYdT ZZdU Z[dV Z\dW Z]ej@        A                    dXdY dZ d[ d\ d] g          d^             Z^ej@        A                    d_d` e_dafdb e_dcfdd e_defdf e`dgfdh e`difdj e`dkfg          dl             ZaddmZbej@        A                    d1dn          do             Zcej@        A                    d1dn          dp             Zdedq             Zeej@        A                    drejf        egdsdtgu          ej@        A                    dvejf        egdsdtgu          dw                         Zgej@        A                    dvejf        egdsdtgu          dx             Zhdy Ziej@        A                    drejf        egdsdtgu          ej@        A                    dvejf        egdsdtgu          dz                         Zjej@        A                    drejf        egdsdtgu          d{             Zkej@        A                    d|g d}          ej@        A                    drejf        egdsdtgu          ej@        A                    dvejf        egdsdtgu          d~                                     Zlej@        A                    d|g d}          ej@        A                    drejf        egdsdtgu          d                         Zmej@        A                    dejP        ddf ejM        ejO        ddej@        n                    dC          D          g          ej@        A                    dd7dg          d                         Zoej@        A                    dd.d/g          d             Zpej@        A                    d ejf        ejq        d gg           ejf        d ejq         gg          g          ej@        A                    d ejf        ejq        d gg           ejf        d ejq         gg          dg          d                         Zrej@        A                    d ejf        d d7gd7d gg           ejs        d          ejt        f ejf        d d7gd7ejt        gg           ejs        d          ejt        f ejf        ejt        d7gd7ejt        gg          ejt        ejt        f ejf        ejt        d7gejt        d gg           ejs        d          ejt        f ejf        d ejt        gd7ejt        gg           ejs        d          ejt        f ejf        d d7gd7d gg           ejs        d          df ejf        d d7gd7dgg           ejs        d          df ejf        dd7gd7dgg          ejt        df ejf        dd7gdd gg           ejs        d          df ejf        d dgd7dgg           ejs        d          dfg
          d             Zuej@        A                    dejt        dg          d             Zvej@        A                    dejt        dg          d             Zwej@        A                    dejt        dg          d             Zxd Zyd Zzd Z{d Z|d Z}ej@        A                    de#e&e'e(e)e*f          d             Z~ej@        A                    de#e&e'e(e)e*f          d             Zd Zd Zd Zej@        A                    dde#fde*fg          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej@        A                    dd7dg          ej@        A                    d1ddg          ej@        A                    de,e-g          d                                     Zej@        A                    d1ddg          d             Zej@        A                    d1g d          ej@        A                    dd.d/gddgu          d                         ZdS )    N)GeneratorType)linalg)
dok_matrix
csr_matrixissparse)cosine	cityblock	minkowski)cdistpdist
squareform)
wminkowski)r
   )
sp_versionparse_version)config_context)assert_allclose)assert_almost_equal)assert_array_equal)ignore_warnings)euclidean_distances)nan_euclidean_distances)manhattan_distances)haversine_distances)linear_kernel)chi2_kerneladditive_chi2_kernel)polynomial_kernel)
rbf_kernel)laplacian_kernel)sigmoid_kernel)cosine_similarity)cosine_distancespairwise_distances)pairwise_distances_chunked)pairwise_distances_argmin_min)pairwise_distances_argmin)pairwise_kernels)PAIRWISE_KERNEL_FUNCTIONS)PAIRWISE_DISTANCE_FUNCTIONS)PAIRWISE_BOOLEAN_FUNCTIONS)PAIRED_DISTANCES)check_pairwise_arrays)check_paired_arrays)paired_distances)paired_euclidean_distances)paired_manhattan_distances)_euclidean_distances_upcast)	normalize)DataConversionWarningc                    t           j                            d          }|                    d                              | d          }t          |d          }t          |          }t          ||           |j        |j        cxk    r| k    sn J |                    d                              | d          }t          ||d          }t          ||          }t          ||           |j        |j        cxk    r| k    sn J |                    d                              | d          }|                    d                              | d          }t           j	        |d<   t           j	        |d<   t          ||d	          }t          ||          }	t          ||	           |j        |	j        cxk    r| k    sn J t          d
 |D                       }
t          d |D                       }t          |
|d          }t          ||           |j        |j        cxk    r| k    sn J |                    d                              | d          }|d d df         dz
  dz  t           j        z  dz  |d d df<   |d d df         dz
  dz  t           j        z  |d d df<   t          |d          }t          |          }t          ||           |                    d                              | d          }|d d df         dz
  dz  t           j        z  dz  |d d df<   |d d df         dz
  dz  t           j        z  |d d df<   t          ||d          }t          ||          }t          ||           t          |d          }t          |t                    }|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ t          ||           t          ||d          }t          ||t                    }|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ t          ||           t          ||d          }t          ||t                     }|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ t          ||           t#          |          }t#          |          }t          ||d          }t          ||          }t          ||           |j        |j        cxk    r| k    sn J t          ||d          }t%          ||          }t          ||           |j        |j        cxk    r| k    sn J t          ||                                d          }t)          |                                |                                          }t          ||           | t           j        k    r|j        |j        cxk    r| k    sn J nMt1          j        t4                    5  |j        |j        cxk    r| k    sn J 	 d d d            n# 1 swxY w Y   t)          ||          }t          ||           | t           j        k    r|j        |j        cxk    r| k    sn J nMt1          j        t4                    5  |j        |j        cxk    r| k    sn J 	 d d d            n# 1 swxY w Y   ddi}t          ||fddi|}t          ||fdt6          i|}t          ||           ddi}t          |fddi|}t          |fdt6          i|}t          ||           t1          j        t8                    5  t          |d           d d d            n# 1 swxY w Y   t1          j        t8                    5  t          ||d           d d d            n# 1 swxY w Y   t1          j        t:                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )Nr         Fcopy	euclideanmetric   r8   r   r   nan_euclideanc                 @    g | ]}t          d  |D                       S )c                     g | ]}|S  rD   .0vs     _/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/metrics/tests/test_pairwise.py
<listcomp>z6test_pairwise_distances.<locals>.<listcomp>.<listcomp>Y       ,,,1Q,,,    tuplerF   rows     rH   rI   z+test_pairwise_distances.<locals>.<listcomp>Y   /    ;;;#e,,,,,--;;;rK   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|S rD   rD   rE   s     rH   rI   z6test_pairwise_distances.<locals>.<listcomp>.<listcomp>Z   rJ   rK   rL   rN   s     rH   rI   z+test_pairwise_distances.<locals>.<listcomp>Z   rP   rK   r7   r?   g      ?r?      	haversine)r?   r?   r	   	manhattanr   p       @r=   r
   blah)nprandomRandomStaterandom_sampleastyper$   r   r   dtypenanr   rM   pir   r	   shaper   r   r"   tocscr   tobsrtocoofloat64pytestraisesAssertionErrorr
   	TypeError
ValueError)global_dtyperngXSS2YX_maskedY_maskedS_masked	S2_maskedX_tuplesY_tuplesX_sparseY_sparsekwdss                  rH   test_pairwise_distancesr{   <   s%
   
)


"
"C 	&!!((E(BBA1[111A	Q		BAr7bh....,...... 	&!!((E(BBA1a444A	Q	"	"BAr7bh....,......   ((//5/IIH  ((//5/IIHVHTNVHTN!(H_MMMH'(;;IHi(((>Y_<<<<<<<<<< ;;;;;<<H;;;;;<<H	Hh{	C	C	CBAr7bh....,......
 	&!!((E(BBAAw}!BE)A-AaaadGAw}!BE)AaaadG1[111A	Q		BAr 	&!!((E(BBAAw}!BE)A-AaaadGAw}!BE)AaaadG1a444A	Q	"	"BAr
 	1[111A	Ai	0	0	0B71:####71:####Ar 	1a444A	Aq	3	3	3B71:####71:####Ar
 	1a111A	Aq	0	0	0B71:####71:####Ar !}}H!}}H8XkBBBA	Xx	0	0BAr7bh....,......8Xh???A	(H	-	-BAr7bh....,......8X^^%5%5kJJJA	X^^--x~~/?/?	@	@BArrz!!w"(2222l2222222
 ]>** 	7 	77bh6666,6666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 
Q	"	"BArrz!!w"(2222l2222222
 ]>** 	7 	77bh6666,6666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 :D1a<<<t<<A	Aq	;	;	;d	;	;BAr :D199[9D99A	A	8	8i	84	8	8BAr 
y	!	! 9 98K88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	y	!	! < <1h{;;;;< < < < < < < < < < < < < < < 
z	"	" 0 01a////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0sZ   Y99Y= Y=)\\\&___(```+aaasum_over_featuresTFc                     ddgddgg}ddgddgg}t          j        t          d          5  t          |||            d d d            d S # 1 swxY w Y   d S )	NrT   r?      r8   r   zT`sum_over_features` is deprecated in version 1.2 and will be removed in version 1.4.match)r|   )rg   warnsFutureWarningr   )r|   rn   rq   s      rH   5test_manhattan_distances_deprecated_sum_over_featuresr      s     Q!QA
Q!QA	'
 
 
 G G 	Aq4EFFFFG G G G G G G G G G G G G G G G G Gs   AAAr=   c                    t           j                            d          }|                    dd          }|                                }d|d         z
  |d<   t          t                    5  |d fD ]I}t          |||           }d|t          j        |          <   t          j	        |dk              dk    sJ J	 d d d            n# 1 swxY w Y   d| z  }t          j        t          |	          5  t          ||            d d d            n# 1 swxY w Y   t          j        t          |	          5  t          |                    t                    || 
           d d d            n# 1 swxY w Y   t          j                    5  t          j        dt                     t          |                    t                    |            d d d            d S # 1 swxY w Y   d S )Nr   r7   r8   rT   r@   )categoryr<   z+Data was converted to boolean for metric %sr   rq   r=   error)rZ   r[   r\   randnr:   r   r4   r$   isnansumrg   r   r^   boolwarningscatch_warningssimplefilter)r=   rm   rn   rq   Zresmsgs          rH   test_pairwise_boolean_distancer      s    )


"
"C		!QA	A!D'kAdG 
"7	8	8	8 ) )T 	) 	)A$Q&999C!"C6#(##q(((((	)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 8&
@C	+3	7	7	7 - -1V,,,,- - - - - - - - - - - - - - - 
+3	7	7	7 ? ?188D>>Qv>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
	 	"	" : :g'<===188D>>&9999: : : : : : : : : : : : : : : : : :sJ   -AC		CC4DDD8+E//E36E3AGG"%G"c                     t           j                            d          } |                     dd          }t	          j                    5  t	          j        dt                     t          |d           d d d            d S # 1 swxY w Y   d S )Nr   r7   r8   r   r
   r<   )	rZ   r[   r\   r   r   r   r   r4   r$   )rm   rn   s     rH   test_no_data_conversion_warningr      s    
)


"
"C		!QA		 	"	" 2 2g'<===1[11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   	,BB	Bfuncc                    t          j        t          d          5   | t          j        d          d           d d d            n# 1 swxY w Y   t          j        t          d          5   | t          j        d          t          j        d          d           d d d            n# 1 swxY w Y   t          j        t          d          5   | t          j        d          t          j        d          d           d d d            n# 1 swxY w Y   t          j        d          } | |d          }||u sJ t          j        d          } | |t          j        d	          d          }||u sJ  | t          j        d
ggd          d          }d|j        j        k    sJ  | dggd          }t          |t          j	                  sJ d S )Nz.* shape .*r   )r7   r~   precomputedr<   )r8   r8   )r8   r~   r7   r7   )r~   r~   rT   intr_   f      ?)
rg   rh   rk   rZ   zerosarrayr_   kind
isinstancendarray)r   ro   rp   s      rH   test_pairwise_precomputedr      s    
z	7	7	7 5 5RXfm44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
z	7	7	7 G GRXfrx//FFFFG G G G G G G G G G G G G G G 
z	7	7	7 G GRXfrx//FFFFG G G G G G G G G G G G G G G 	A	a	&	&	&B7777
A	a&!!-	8	8	8B7777 	RXse5)))-@@@A!', 	seW]+++Aa$$$$$$$s5    AAA.3B--B14B13DDDc                      t          j        t          d          5  t          t	          j        dd          d           d d d            d S # 1 swxY w Y   d S )Nz.* non-negative values.*r   r   r   r<   )rg   rh   rk   r$   rZ   fullrD   rK   rH   &test_pairwise_precomputed_non_negativer     s    	z)C	D	D	D F F2762..}EEEEF F F F F F F F F F F F F F F F F Fs   %AAArT   r7   doubler9   )wrW   c                 j    t          t          j        |           t          j        |          fi |}|S N)r   rZ   
atleast_2d)xyrz   Ks       rH   callable_rbf_kernelr   (  s2    2=##R]1%5%5>>>>AHrK   z/ignore:WMinkowskiDistance:FutureWarning:sklearnzfunc, metric, kwdsr;   r
   z1.6.0z;wminkowski is now minkowski and it has been already tested.)reason)marksr   
polynomialdegreegamma皙?r_   c                    t           j                            d          }t          j        d|                    d          z  |          }t          j        d|                    d          z  |          } | |f|dd|} | |f|dd|}t          ||            | ||f|dd|} | ||f|dd|}t          ||           d S )	Nr   r7   r6   r   r~   r8   rT   r=   n_jobsr?   )rZ   r[   r\   r   r]   r   )	r   r=   rz   r_   rm   rn   rq   ro   rp   s	            rH   test_pairwise_parallelr   /  s
   N )


"
"C
S&&v...e<<<A
S&&v...e<<<AQ0va00400A	a	1q	1	1D	1	1BArQ3&33d33A	a	46!	4	4t	4	4BArrK   c                  F    t          dggd           d         dk    sJ d S )Nr   c                     dS )Nr7   rD   r   r   s     rH   <lambda>z9test_pairwise_callable_nonstrict_metric.<locals>.<lambda>g  s    1 rK   r<   r@   r7   r#   rD   rK   rH   'test_pairwise_callable_nonstrict_metricr   c  s3     ugnn===dCqHHHHHHrK   )rbf	laplaciansigmoidr   linearchi2additive_chi2c                 "   t           j                            d          }|                    d          }|                    d          }t          |          }t          ||           } ||          }t          ||           t          |||           } |||          }t          ||           t          d |D                       }t          d |D                       }t          |||           }t          ||           t          |          }	t          |          }
| d	v rEt          j
        t                    5  t          |	|
|            d d d            n# 1 swxY w Y   d S t          |	|
|           }t          ||           d S )
Nr   r6   r>   r<   r   rq   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|S rD   rD   rE   s     rH   rI   z4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>  rJ   rK   rL   rN   s     rH   rI   z)test_pairwise_kernels.<locals>.<listcomp>  rP   rK   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|S rD   rD   rE   s     rH   rI   z4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>  rJ   rK   rL   rN   s     rH   rI   z)test_pairwise_kernels.<locals>.<listcomp>  rP   rK   )r   r   )rZ   r[   r\   r]   r)   r(   r   rM   r   rg   rh   rk   )r=   rm   rn   rq   functionK1K2rv   rw   rx   ry   s              rH   test_pairwise_kernelsr   k  s    )


"
"C&!!A&!!A(0H	!F	+	+	+B	!BB	!q	0	0	0B	!q			BB;;;;;<<H;;;;;<<H	(HV	<	<	<BB !}}H!}}H***]:&& 	B 	BX&AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B	(hv	>	>	>BBs   E  E$'E$c                  j   t           j                            d          } |                     d          }|                     d          }t          }ddi}t          |f||d|}t          |fd|i|}t          ||           t          |f||d|}t          |fd|i|}t          ||           d S )Nr   r6   r>   r   r   r   rq   )rZ   r[   r\   r]   r   r(   r   r   )rm   rn   rq   r=   rz   r   r   s          rH   test_pairwise_kernels_callabler     s     )


"
"C&!!A&!!A FS>D	!	8q	8	84	8	8B	A	#	#	#d	#	#BB 
!	8q	8	84	8	8B	A	#	#	#d	#	#BBrK   c                     t           j                            d          } |                     d          }|                     d          }t	          ||d          }ddd}t          ||fdd	d
|}t          ||           t          j        t                    5  t          ||fddi| d d d            d S # 1 swxY w Y   d S )Nr   r6   r>   r   r   z:))r   blablar   T)r=   filter_paramsr=   )
rZ   r[   r\   r]   r   r(   r   rg   rh   rj   )rm   rn   rq   r   paramsr   s         rH   "test_pairwise_kernels_filter_paramr     s   
)


"
"C&!!A&!!A1as###Ad++F	!Q	KuD	K	KF	K	KBAr	y	!	! 7 7A66e6v6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   B99B= B=zmetric, funcc                    t           j                            d          }|                    d          }|                    d          }t	          |||           } |||          }t          ||            |t          |          t          |                    }t          ||           | t          v r<t          |          ||          }t          j        |          }t          ||           d S d S )Nr   r6   r<   )	rZ   r[   r\   r]   r/   r   r   r*   diag)	r=   r   rm   rn   rq   ro   rp   S3	distancess	            rH   test_paired_distancesr     s     )


"
"C&!!A&!!AAf---A	aBAr	jmmZ]]	+	+BAr,,, 071==	GI&&		1%%%%% -,rK   c                    t           j                            d          }|                    d                              | d          }|                    d                              | d          }t          ||d          }t          ||d           }t          ||           |                    d          }t          j        t                    5  t          ||           d d d            d S # 1 swxY w Y   d S )	Nr   r6   Fr9   rV   r<   c                 X    t          j        | |z
                                d          S )Nr   axis)rZ   absr   r   s     rH   r   z0test_paired_distances_callable.<locals>.<lambda>  s#    BF1q5MM4E4E14E4M4M rK   r   )
rZ   r[   r\   r]   r^   r/   r   rg   rh   rk   )rl   rm   rn   rq   ro   rp   s         rH   test_paired_distances_callabler     s:    )


"
"C&!!((E(BBA&!!((E(BBAAk222A	!Q'M'M	N	N	NBAr 	&!!A	z	"	"  A                 s   C55C9<C9c                 
   t          j        dgdgg|           }t          j        dgdgg|           }t          |          }t          ||           }ddg}ddg}ddg}t	          ||d	          \  }}	t          ||d	          }
t          ||           t          |
|           t          |	|           t	          ||d	          \  }}t          ||d	          }t          ||           t          ||           t          ||           t          |          t           j        k    sJ t          |          t           j        k    sJ t	          ||d
	          \  }}	t	          ||dddi          \  }
}t          ||d
	          }t          ||dddi          }t          |	|           t          ||           t          ||           t          |
|           t          ||           t          ||           t	          ||d	          \  }}	t          ||d	          }
t          ||           t          |
|           t          |	|           t	          ||d	          \  }}t          ||d	          }t          ||           t          ||           t          ||           t	          ||t          ddi          \  }}	t          ||           t          |	|           t	          ||dddi          \  }}	t          ||           t          |	|           t           j
                            d          }|                    dd          }|                    dd          }t          ||d	          }|                    d          }||t          t!          |                    f         }t	          ||dd          \  }}t          ||d           t          ||d           t	          ||d          \  }}t	          ||d          \  }}t          ||           t#          ||           t	          ||d          \  }}t	          ||d          \  }}t          ||           t#          ||           t          ||d          }t          ||d          }t#          ||           t          ||d          }t          ||d          }t#          ||           t          ||          }t          t          j        |          t          j        |                    }t#          ||           d S )Nr   rT   r   r~   r?   r8   r;   r<   sqeuclideansquaredT)r=   metric_kwargsrV   rW   r
   a      o   r   )r   r=   Hz>rtol)rZ   asarrayr   r   r&   r'   r   typer   r
   r[   r\   r   r$   argminrangelenr   asfortranarray)rl   rn   rq   XspYspexpected_idxexpected_valsexpected_vals_sqidxvalsidx2idxspvalsspidxsp2vals2idx3idx4rm   distdist_orig_inddist_orig_valdist_chunked_inddist_chunked_valargmin_0dist_0argmin_1dist_1argmin_C_contiguousargmin_F_contiguouss                                rH   "test_pairwise_distances_argmin_minr    s   

QC!:\222A

RD1#;l333A
Q--C
Ql
+
+
+Cq6LFM1v .a;GGGIC$Q+>>>DC&&&D,'''D-(((1#s;OOOME6&sCDDDFE<(((FL)))FM***;;"*$$$$<<2:%%%% .a=IIIIC/	1[D0A  KD% %Q-@@@D$	1[D0A  D D*+++E+,,,C&&&D,'''D,'''D,''' .a;GGGIC$Q+>>>DC&&&D,'''D-(((1#s;OOOME6&sCDDDFE<(((FL)))FM*** .	1YsAh  IC C&&&D-((( .	1[a  IC C&&&D-((( )


"
"C		"cA		#sAa;777DKKQK''Mc-.@.@(A(AABM)F	11[* * *&& M#3$????M#3$???? 5QBBBHf4QBBBHfFF###x***4QBBBHf4QBBBHfFF###x*** )AA666H(AA666Hx***(AA666H(AA666Hx*** 4Aq993
!b/22  *,?@@@@@rK   c                     | d d d df         S )Nd   rD   r  starts     rH   _reduce_funcr  S  s    4C4=rK   c                    t           j                            d          }|                    d                              | d          }t          |          d d d df         }t          |d t          d          }t          |t                    sJ t          |          }t          |          dk    sJ |d         j        |j        k    sJ t          t          j        |          |d	
           d S )Nr   )i  r8   Fr9   r        >reduce_funcworking_memoryrT   r   atol)rZ   r[   r\   r]   r^   r$   r%   r  r   r   listr   r_   r   vstack)rl   rm   rn   ro   S_chunkss        rH   &test_pairwise_distances_chunked_reducer  W  s    
)


"
"C(##**<e*DDA1aaa#g&A)	4\&  H h.....H~~Hx==1A;'''' BIh''666666rK   c                 l   t           j                            d          }|                    d                              | d          }t          |d d d          }t          |t                    sJ t          |          }t          |          dk    sJ t          d	 |D                       sJ d S )
Nr   
   r8   Fr9   c                     d S r   rD   r  s     rH   r   z=test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>m  s     rK   r  r  rT   c              3      K   | ]}|d u V  	d S r   rD   )rF   chunks     rH   	<genexpr>z>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>r  s&      33u}333333rK   )rZ   r[   r\   r]   r^   r%   r   r   r  r   all)rl   rm   rn   r  s       rH   +test_pairwise_distances_chunked_reduce_noner&  h  s    
)


"
"C'"")),U)CCA)	455f  H h.....H~~Hx==133(3333333333rK   good_reducec                      t          |           S r   r  Dr  s     rH   r   r   x  s    a rK   c                 *    t          j        |           S r   )rZ   r   r*  s     rH   r   r   y  s    ! rK   c                      t          |           S r   )r   r*  s     rH   r   r   z  s    A rK   c                 >    t          |           t          |           fS r   r)  r*  s     rH   r   r   {  s    $q''477+ rK   c                 d    t          |           t          j        |           t          |           fS r   )r   rZ   r   r  r*  s     rH   r   r   |  s!    *Q--!d1gg> rK   c                     t          j        d                              dd          }t          |d | d          }t	          |           d S )Nr   r   rT   @   r  )rZ   arangereshaper%   next)r'  rn   r  s      rH   ,test_pairwise_distances_chunked_reduce_validr5  u  sO     		"b!$$A)	4[  H 	NNNNNrK   )
bad_reduceerr_typemessagec                 >    t          j        | | dd          g          S Nr   rZ   concatenater+  ss     rH   r   r     s    AbccF44 rK   zlength 11\..* input: 10\.c                 B    | t          j        | | dd          g          fS r:  r;  r=  s     rH   r   r     s!    !R^Q"##K889 rK   z!length \(10, 11\)\..* input: 10\.c                     | d d         | fS )N	   rD   r=  s     rH   r   r     s    q!uaj rK   z length \(9, 10\)\..* input: 10\.c                     dS )N   rD   r=  s     rH   r   r     s     rK   z2returned 7\. Expected sequence\(s\) of length 10\.c                     dS )N)rC     rD   r=  s     rH   r   r     s     rK   z9returned \(7, 8\)\. Expected sequence\(s\) of length 10\.c                 .    t          j        d          dfS )Nr   rA  )rZ   r2  r=  s     rH   r   r     s    ")B--+ rK   z-, 9\)\. Expected sequence\(s\) of length 10\.c                 "   t          j        d                              dd                              | d          }t	          |d |d          }t          j        ||          5  t          |           d d d            d S # 1 swxY w Y   d S )	Nr   r   rT   Fr9   r1  r  r   )rZ   r2  r3  r^   r%   rg   rh   r4  )rl   r6  r7  r8  rn   r  s         rH   .test_pairwise_distances_chunked_reduce_invalidrH    s    D 		"b!$$++Lu+EEA)	4Z  H 
xw	/	/	/  X                 s   'BBBc                 h   t          | |||          }t          |t                    sJ t          |          }|| n|}t	          |          dz  dz  }|D ]"}|j        }|t          ||          dz  k    sJ #t          j        |          }t          | ||          }	t          ||	d           d S )Nr  r=   rE  g      >i   r<   r   r  )r%   r   r   r  r   nbytesmaxrZ   r  r$   r   )
rn   rq   r  r=   genblockwise_distancesmin_block_mibblockmemory_usedro   s
             rH    check_pairwise_distances_chunkedrR    s    
$Q.QW
X
X
XCc=)))))s))YAAFFQJ'M$ I Ilc.-@@5HHHHHH)$7881a///A'666666rK   )r;   l2r   c                 p   t           j                            d          }|                    dd                              |d          }t          t          |d|                     }t          |          dk    sJ t          t          j	        t          j
        |                    dd	
           d S )Nr     r       _BsizescaleFr9   rT   rJ  绽|=r   )rZ   r[   r\   normalr^   r  r%   r   r   r   r  )r=   rl   rm   rn   chunkss        rH   (test_pairwise_distances_chunked_diagonalr^    s    
)


"
"C


$
//66|%6PPA,QqPPPQQFv;;????BGBIf--..>>>>>>rK   c                    t           j                            d          }|                    dd                              |d          }t          || d          }t          t          j        |          dd	
           d S )Nr   rU  rW  rX  Fr9   r?   r   r[  r  )rZ   r[   r\   r\  r^   r$   r   r   )r=   rl   rm   rn   r   s        rH   )test_parallel_pairwise_distances_diagonalr`    sx    
)


"
"C


$
//66|%6PPA"1VA>>>IBGI&&666666rK   c                 F   t           j                            d          }|                    d                              | d          }t          |d dd           t          dd          D ]}t          |d d	|z  d           t          |                                d dd           |                    d
                              | d          }t          ||dd           t          |                                |                                dd           t          ||dd           t          ||dd           t          j	        t                    5  t          t          ||d                     d d d            n# 1 swxY w Y   t          |          }t          |dd          }t          |t                    sJ t          |          |u sJ t          j	        t                     5  t          |           d d d            d S # 1 swxY w Y   d S )Nr   )   r8   Fr9   rT   r;   rJ  ir?   )r  r8   i'  r	   rY   r<   r  r   )rZ   r[   r\   r]   r^   rR  r   tolistrg   rh   rk   r4  r%   r$   r   r   StopIteration)rl   rm   rn   powerrq   r+  rM  s          rH   test_pairwise_distances_chunkedrf    s    )


"
"C(##**<e*DDA$QQ{SSSSsA 
 
(tAuH[	
 	
 	
 	
 	
 %	

D;    	(##**<e*DDA$Q!KPPPP$	

AHHJJq    %Q%TTTT %Q!KPPPP	z	"	" > >'1V<<<===> > > > > > > > > > > > > > > 	1A
$Qvm
T
T
TCc=)))))99>>>>	}	%	%  S			                 s$    F

FF9HHHx_array_constrdensesparse)idsy_array_constrc                      | dgg          } |dgdgg          }t          ||          }t          |ddgg           d S Nr   rT   r?   r   rX   )r   r   )rg  rk  rn   rq   r+  s        rH   %test_euclidean_distances_known_resultrn    sY     	uAaSz""AAq!!AAc
|$$$$$rK   c                 
   t           j                            d          }|                    d                              | d          }|                    d                              | d          }|                    t           j                  dz                      d                              dd	          }|                    t           j                  dz                      d                              dd	          } ||          }t          ||          }t          |||
          }t          |||          }	t          ||||          }
t          ||           t          |	|           t          |
|           t          ||t          j
        |          t          j
        |                    }t          j        t                    5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r   Fr9      r   r?   rT   r   r   X_norm_squaredY_norm_squaredrt  rv  )rZ   r[   r\   r]   r^   rf   r   r3  r   r   
zeros_likerg   rh   ri   )rl   rk  rm   rn   rq   	X_norm_sq	Y_norm_sqD1D2D3D4wrong_Ds               rH   #test_euclidean_distances_with_normsr    s!    )


"
"C(##**<e*DDA(##**<e*DDA "*%%*//Q/77??2FFI"*%%*//Q/77??2FFIqA	Q	"	"B	Q)	<	<	<B	Q)	<	<	<B	Q)I	V	V	VBBBB "		}Y//}Y//	  G 
~	&	& % %$$$% % % % % % % % % % % % % % % % % %s   G88G<?G<c            	         t           j                            d          } |                     d          }|                     d          }|dz                      d          }|dz                      d          }t          ||||          }t          |||                    dd          |                    dd                    }t          |||                    dd          |                    dd                    }t          ||           t          ||           t          j	        t          d	
          5  t          |||d d                    d d d            n# 1 swxY w Y   t          j	        t          d
          5  t          |||d d                    d d d            d S # 1 swxY w Y   d S )Nr   rp  rq  r?   rT   r   rw  r   zIncompatible dimensions for Xr   r7   rs  zIncompatible dimensions for Yru  )rZ   r[   r\   r]   r   r   r3  r   rg   rh   rk   )rm   rn   rq   rt  rv  r{  r|  r}  s           rH   $test_euclidean_distances_norm_shapesr  +  st   
)


"
"C(##A(##AdZZQZ''NdZZQZ''N		1^N
 
 
B 
		%--b!44%--b!44	
 
 
B 
		%--a44%--a44	
 
 
B BB	z)H	I	I	I E EAq1CDDDDE E E E E E E E E E E E E E E	z)H	I	I	I E EAq1CDDDDE E E E E E E E E E E E E E E E E Es$    E''E+.E+F55F9<F9c                    t           j                            d          }|                    d                              | d          }d||dk     <   |                    d                              | d          }d||dk     <   t          ||          } ||          } ||          }t          ||          }t          ||d           |j        | k    sJ d S )	Nr   r  r   Fr9   皙?rp  ư>r   )	rZ   r[   r\   r]   r^   r   r   r   r_   )rl   rg  rk  rm   rn   rq   expectedr   s           rH   test_euclidean_distancesr  M  s     )


"
"C)$$++Lu+EEAAa#gJ(##**<e*DDAAa#gJQ{{HqAqA#Aq))I Ixd3333?l******rK   c                 T   t           j                            d          }|                    d                              | d          }d||dk     <   t          t          |                    } ||          }t          |          }t          ||d           |j	        | k    sJ d S )Nr   r  Fr9   r  r  r   )
rZ   r[   r\   r]   r^   r   r   r   r   r_   )rl   rg  rm   rn   r  r   s         rH   test_euclidean_distances_symr  h  s     )


"
"C)$$++Lu+EEAAa#gJ%((##HqA#A&&I Ixd3333?l******rK   
batch_size)Nr7   rC  e   c                    t           j                            d          }|                    d                              t           j                  }d||dk     <   |                    d                              t           j                  }d||dk     <   t          ||          } ||          } ||          }t          |||           }t          j        t          j	        |d                    }t          ||d           d S )Nr   r  r  rp  rq   r  r  r   )rZ   r[   r\   r]   r^   float32r   r2   sqrtmaximumr   )r  rg  rk  rm   rn   rq   r  r   s           rH   test_euclidean_distances_upcastr  }  s     )


"
"C)$$++BJ77AAa#gJ(##**2:66AAa#gJQ{{HqAqA+AzJJJI
9a0011I Ixd333333rK   c                    t           j                            d          }|                    d                              t           j                  }d||dk     <   t          t          |                    } ||          }t          |||           }t          j	        t          j
        |d                    }t          ||d           d S )Nr   r  r  r  r  r   )rZ   r[   r\   r]   r^   r  r   r   r2   r  r  r   )r  rg  rm   rn   r  r   s         rH   #test_euclidean_distances_upcast_symr    s     )


"
"C)$$++BJ77AAa#gJ%((##HqA+AzJJJI
9a0011I Ixd333333rK   zdtype, eps, rtolg-C6?h㈵>g:0yE>gGz?z failing due to lack of precisiondimi@B c                     t          j        dg|z  g|           }t          j        d|z   g|z  g|           }t          ||          }t          ||          }t	          ||d           d S )Nr   r   r  r   )rZ   r   r   r   r   )r_   epsr   r  rn   rq   r   r  s           rH   'test_euclidean_distances_extreme_valuesr    sy      	3%#+e,,,A
39+#$E222A#Aq))IQ{{HIxd333333rK   r   c                    t           j                            d          }|                    dd          }|                    dd          }t	          |||           }t          |||           }t          ||           d S )N9  r~   r8   )rq   r   )rZ   r[   r\   r   r   r   r   )r   rm   rn   rq   normal_distancenan_distances         rH   8test_nan_euclidean_distances_equal_to_euclidean_distancer    sy     )


%
%C		!QA		!QA)!q'BBBO*17CCCLO\22222rK   rn   rq   c                     t          j        t                    5 }t          | |           d d d            n# 1 swxY w Y   d}|t	          |j                  k    sJ d S )Nr   zBInput contains infinity or a value too large for dtype('float64').)rg   rh   rk   r   strvalue)rn   rq   excinfoexp_msgs       rH   ,test_nan_euclidean_distances_infinite_valuesr    s     
z	"	" (gQ''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( SGc'-((((((((s   8<<zX, X_diag, missing_valuer?   r   c                 r   t          j        d|g|dgg          }t          | |          }t          ||           t          | d|          }t          |dz  |           t          | | |          }t          ||           t          | |                                 |          }t          ||           d S )N        r   missing_valuesTr   r  r?   )rZ   r   r   r   r:   )rn   X_diagmissing_valueexp_distr  dist_sqdist_twodist_two_copys           rH    test_nan_euclidean_distances_2x2r    s    " x#v455H"1]CCCDHd###%amTTTGHaK)))&q!MJJJHHh'''+AqvvxxVVVMHm,,,,,rK   r  c                 T   t          j        | | gddgg          }t          j        t           j        t           j        gt           j        dgg          }t          ||           }t	          ||           t          ||                                |           }t	          ||           d S )Nr   rT   r  )rZ   r   r`   r   r   r:   )r  rn   r  r  s       rH   )test_nan_euclidean_distances_complete_nanr    s    
=-01a&9::Ax"&"&)BFA;788H"1]CCCDHd###"1affhh}MMMDHd#####rK   c           	      6   t          j        d| dddg| ddd| gd| | | dgg          }t          j        | dd| dg| | dddg| | | ddgg          }t          |||           }t          |||           }t          ||j                   t          t          |d d	         |d d	         d
|           dgg           t          t          |d	d         |d	d         d|           t          j        d          gg           t          ||           }t          |||           }t          ||                                |           }t          ||           t          ||           t          ||d
          }t          ||d          }	t          ||	           d S )Nr   g      @g      @rX   g      @g      @g      @r  rT   Tr  g      D@r?   Fg      9@r9   )rZ   r   r   r   Tr   r  r:   )
r  rn   rq   r{  r|  r}  r~  D5D6D7s
             rH   'test_nan_euclidean_distances_not_trivalr  
  s   
-c3/Cc=9-sC	
	 	A 	CmS9M3S9M=#sC	
	 	A 
!Am	D	D	DB	 Am	D	D	DBBD!!! bqbE1RaR5$}	
 	
 	
 4	45	   acFAacFE-	
 	
 	
 ';
<
<	=>	   
!=	A	A	AB	 Am	D	D	DB	 AFFHH]	K	K	KBBB 
!AD	1	1	1B	 AE	2	2	2BBrK   c                     t          j        dd| dgd| d| gg          }t          || d          }t          j        |dk              sJ t          || d          }t	          |d	           d S )
NgzG^g     @@gB@g|ï@T)r  r   r   Fr  )rZ   r   r   r%  r   )r  rn   dist_squaredr  s       rH   7test_nan_euclidean_distances_one_feature_match_positiver  ?  s    
 	e]E2mZ?	
	 	A +	-  L 6,!#$$$$$"1]ERRRDD#rK   c                     t           j                            d          } t          j        |                     d                    }t          j        ||g          }t          |          }t          |ddgddggd           t          j        |dk              sJ t          j        |dk              sJ t          |t          j	        |                   ddg           t          j        || g          }t          |          }t          j        |dk              sJ t          j        |dk              sJ t          |ddgddgg           t          j        |                     dd                    }t          |          }t          |t          j	        |                   dg|j
        d	         z             t          j        |dk              sJ t          j        |dk              sJ d S )
Nr  i  r  r[  r  rX   rV  i  r   )rZ   r[   r\   r   randr  r"   r   r%  diag_indices_fromrb   )rm   r   XAr+  XBr|  rn   s          rH   test_cosine_distancesr  T  s   
)


%
%C
sxx}}A	Aq6		BAAc
S#J/e<<<<6!s(6!s(Ab*1--.c
;;;	Ar7		B	"		B6")6")B#sc3Z0111 	sxxd##$$AAAb*1--.
0BCCC6!s(6!s(rK   c                     d t           j                            d          } |                     d          }|                     d          t          j        fd|D                       }t          |          }t          ||           |                     d          }d}t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S )	Nc                 r   |d         | d         z
  }|d         | d         z
  }t          j        |dz            dz  t          j        | d                   t          j        |d                   z  t          j        |dz            dz  z  z   }dt          j        t          j        |                    z  }|S )Nr   rT   r?   )rZ   sincosarcsinr  )r   r   diff_latdiff_lonacs         rH   slow_haversine_distancesz:test_haversine_distances.<locals>.slow_haversine_distancest  s    Q4!A$;Q4!A$;F8a<  A%F1Q4LL26!A$<<'"&A*>*>!*CC
 	"'!**%%%rK   r   rS   )r   r?   c                 0    g | ]fd D             S )c                 (    g | ]} |          S rD   rD   )rF   r   r  r   s     rH   rI   z7test_haversine_distances.<locals>.<listcomp>.<listcomp>  s'    >>>q,,Q22>>>rK   rD   )rF   r   rq   r  s    @rH   rI   z,test_haversine_distances.<locals>.<listcomp>  s2    JJJ1>>>>>A>>>JJJrK   )r   r~   z-Haversine distance only valid in 2 dimensionsr   )
rZ   r[   r\   r]   r   r   r   rg   rh   rk   )rm   rn   r{  r|  err_msgrq   r  s        @@rH   test_haversine_distancesr  r  s5      )


"
"C&!!A'""A	JJJJJJJJ	K	KB	Q	"	"BB'""A=G	z	1	1	1  A                 s   CC#&C#c                  b    dgdgg} dgdgg}t          | |          }t          |ddg           d S rm  )r0   r   rn   rq   r+  s      rH   test_paired_euclidean_distancesr    E    
qc
A
qc
A"1a((AASz"""""rK   c                  b    dgdgg} dgdgg}t          | |          }t          |ddg           d S rm  )r1   r   r  s      rH   test_paired_manhattan_distancesr    r  rK   c                  |	   t           j                            d          } |                     d          }|                     d          }t	          ||          }d}t          |||          }|j        t          k    sJ t          |          D ]\  }}t          |          D ]m\  }}	t          j	        ||	z
  dz  ||	z   z             }
t          j
        ||
z            }t          |||f         |
           t          |||f         |           nt          |          }t          t          j        |          d           t          j        |dk              sJ t          j        |t          j        t          j        |                    z
  dk               sJ |                     d                              t           j                  }|                     d                              t           j                  }t          ||          }|j        t           j        k    sJ |                     d                              t           j                  }t          ||          }t          j        |                                          sJ |j        t          k    sJ dd	gd
dgg}ddgddgg}t          ||          }|d         |d         k    sJ |d         |d         k    sJ t'          j        t*                    5  t          ddgg           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          ddggddgg           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          ddggddgg           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          ddggg dg           d d d            n# 1 swxY w Y   t'          j        t*                    5  t          t-          |          t-          |                     d d d            n# 1 swxY w Y   t'          j        t*                    5  t	          t-          |          t-          |                     d d d            d S # 1 swxY w Y   d S )Nr   r6   r  r   r   r?   rT   g333333?gffffff?r   g?r@   )r   rT   )rT   rT   )rT   r   r   )皙?r  g333333?)rZ   r[   r\   r]   r   r   r_   float	enumerater   expr   r   r   r%  r^   r  int32isfiniterg   rh   rk   r   )rm   rn   rq   K_addr   r   ir   jr   r   chi2_exps               rH   test_chi_square_kernelr    s   
)


"
"C&!!A'""A A&&EEAq&&&A7e! 3 31aLL 	3 	3DAqFAEa<1q51222Dvedl++HadT222!Q$2222		3 	AArwqzz1%%%6!a%===6!bgbgajj)))A-.....&!!((44A'""))"*55AAqA7bj     	'""))"(33AAqA;q>>7e sc1XA
Q#sAAqAT7QtWT7QtW 
z	"	"  aWI              	z	"	" + +aWIRz***+ + + + + + + + + + + + + + +	z	"	" * *aVHBxj)))* * * * * * * * * * * * * * * 
z	"	" 1 1aVH/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
z	"	" 2 2JqMM:a==1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	z	"	" ; ;Z]]JqMM:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;sl   L%%L),L)	M,,M03M0N33N7:N7O::O>O>+QQQ9+R11R58R5kernelc                     t           j                            d          }|                    d          } | ||          }t	          ||j        d           d S )Nr   r6      )rZ   r[   r\   r]   r   r  )r  rm   rn   r   s       rH   test_kernel_symmetryr    sU     )


"
"C&!!Aq!AAqsBrK   c                     t           j                            d          }|                    d          }t	          |          } | ||          } | ||          }t          ||           d S Nr   r6   )rZ   r[   r\   r]   r   r   )r  rm   rn   rx   r   r   s         rH   test_kernel_sparser    sm     )


"
"C&!!A!}}Hq!A	(	#	#BArrK   c                      t           j                            d          } |                     d          }t	          ||          }t          |j        d d d         d |D                        d S )Nr   r6      c                 <    g | ]}t          j        |          d z  S )r?   )r   norm)rF   r   s     rH   rI   z&test_linear_kernel.<locals>.<listcomp>  s%    !A!A!A!&+a..A"5!A!A!ArK   )rZ   r[   r\   r]   r   r   flatrm   rn   r   s      rH   test_linear_kernelr     sj    
)


"
"C&!!AaAAF33Q3K!A!Aq!A!A!ABBBBBrK   c                      t           j                            d          } |                     d          }t	          ||          }t          |j        d d d         t          j        d                     d S )Nr   r6   r  r7   )rZ   r[   r\   r]   r   r   r  onesr  s      rH   test_rbf_kernelr    sc    
)


"
"C&!!A1aAAF33Q3K,,,,,rK   c                     t           j                            d          } |                     d          }t	          ||          }t          t          j        |          t          j        d                     t          j        |dk              sJ t          j        |t          j        t          j        |                    z
  dk               sJ d S )Nr   r6   r7   rT   )	rZ   r[   r\   r]   r   r   r   r  r%  r  s      rH   test_laplacian_kernelr    s    
)


"
"C&!!AAABGAJJ

+++ 6!a%===6!bgbgajj)))A-.......rK   zmetric, pairwise_funcr   r   c                    t           j                            d          }|                    d          }|                    d          }t	          |          }t	          |          } |||d          }t          |          sJ  |||d          }t          |          rJ t          |                                |           t          |||           }	t          |                                |	           d S )Nr   r6   r   F)dense_outputTr   )	rZ   r[   r\   r]   r   r   r   toarrayr(   )
r=   pairwise_funcrm   rn   rq   XcsrYcsrr   r   K3s
             rH   &test_pairwise_similarity_sparse_outputr    s     )


"
"C&!!A&!!Aa==Da==D 
tT	6	6	6BB<<< 
q!$	/	/	/B||BJJLL"%%% 
!q	0	0	0BBJJLL"%%%%%rK   c                     t           j                            d          } |                     d          }|                     d          }t	          |          }t	          |          }|d f||f|d f||ffD ]Y\  }}t          ||d          }t          |          }|t          |          }t          ||d          }t          ||           Zd S )Nr   r6   r   r   r   r   )rZ   r[   r\   r]   r   r(   r3   r   )	rm   rn   rq   r  r  X_Y_r   r   s	            rH   test_cosine_similarityr   4  s     )


"
"C&!!A&!!Aa==Da==Dt9q!ftTlT4LA    B bBx888r]]>2BbBx888B   rK   c                      t          j        t          j        d          d          } t          | d           \  }}||u sJ t	          | |           d S N(   r7   rE  )rZ   resizer2  r-   r   )r  
XA_checked
XB_checkeds      rH   test_check_dense_matricesr  H  sX     
29R==&	)	)B22t<<J
####r:&&&&&rK   c                     t          j        t          j        d          d          } t          j        t          j        d          d          }t          | |          \  }}t	          | |           t	          ||           t          j        t          j        d          d          }t          | |          \  }}t	          | |           t	          ||           d S )Nr  r      r8   rE  )rZ   r  r2  r-   r   r.   r  r  r  r  s       rH   test_check_XB_returnedr  Q  s     
29R==&	)	)B	29R==&	)	)B22r::J
r:&&&r:&&&	29R==&	)	)B0R88J
r:&&&r:&&&&&rK   c                     t          j        t          j        d          d          } t          j        t          j        d          d          }t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   t          j        t          j        d          d          }t          j        t
                    5  t          | |           d d d            d S # 1 swxY w Y   d S )N-   )r7   rA  r
  r  $   )r8   rA  )rZ   r  r2  rg   rh   rk   r-   r.   r  r  s     rH   test_check_different_dimensionsr  a  sJ   	29R==&	)	)B	29R==&	)	)B	z	"	" & &b"%%%& & & & & & & & & & & & & & & 
29U##V	,	,B	z	"	" $ $B###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s$   (BB	B	C..C25C2c                  L   t          j        d                              dd          } t          j        d                              dd          }t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   t          j        d                              dd          } t          j        d                              dd          }t          j        t
                    5  t          | |           d d d            d S # 1 swxY w Y   d S )Nr  rA  r7   r
  r8   rE  )rZ   r2  r3  rg   rh   rk   r-   r  s     rH   test_check_invalid_dimensionsr  m  sq    
2		q!	$	$B	2		q!	$	$B	z	"	" & &b"%%%& & & & & & & & & & & & & & &	2		q!	$	$B	2		q!	$	$B	z	"	" & &b"%%%& & & & & & & & & & & & & & & & & &s$   *BBB;DD Dc                     t           j                            d          } |                     d          }t	          |          }|                     d          }t	          |          }t          ||          \  }}t          |          sJ t          ||z
                                            dk    sJ t          |          sJ t          ||z
                                            dk    sJ t          ||          \  }}t          |          sJ t          ||z
                                            dk    sJ t          |          sJ t          ||z
                                            dk    sJ d S r  )	rZ   r[   r\   r]   r   r-   r   r   r   )rm   r  	XA_sparser  	XB_sparser  r  XA_2_checkeds           rH   test_check_sparse_arraysr  {  s{   
)


"
"C			6	"	"B2I			6	"	"B2I29iHHJ
 Jy:%&&**,,1111Jy:%&&**,,11114Y	JJJJy:%&&**,,1111L!!!!!|j())--//1444444rK   c                     | j         }t          |          dk    rt          d | D                       S t          d | D                       S )NrT   c              3   4   K   | ]}t          |          V  d S r   )tuplifyrN   s     rH   r$  ztuplify.<locals>.<genexpr>  s(      //cWS\\//////rK   c              3      K   | ]}|V  d S r   rD   )rF   rs     rH   r$  ztuplify.<locals>.<genexpr>  s      NN1QNNNNNNrK   )rb   r   rM   )rn   r>  s     rH   r  r    sO    	A
1vvzz//Q////// NNNNN"""rK   c                  :   t           j                            d          } |                     d          }t	          |          }|                     d          }t	          |          }t          ||          \  }}t          ||           t          ||           d S r  )rZ   r[   r\   r]   r  r-   r   )rm   r  	XA_tuplesr  	XB_tuplesr  r  s          rH   test_check_tuple_inputr"    s    
)


"
"C			6	"	"BI			6	"	"BI29iHHJ
y*---y*-----rK   c                  (   t          j        t          j        d          d                              t           j                  } t          j        t          j        d          d                              t           j                  }t          | d           \  }}|j        t           j        k    sJ t          | |          \  }}|j        t           j        k    sJ |j        t           j        k    sJ t          |                     t                    |          \  }}|j        t          k    sJ |j        t          k    sJ t          | |                    t                              \  }}|j        t          k    sJ |j        t          k    sJ d S r  )rZ   r  r2  r^   r  r-   r_   r  r  s       rH   test_check_preserve_typer$    sZ   	29R==&	)	)	0	0	<	<B	29R==&	)	)	0	0	<	<B22t<<J
rz)))) 32r::J
rz))))rz)))) 3299U3C3CRHHJ
u$$$$u$$$$ 32ryy7G7GHHJ
u$$$$u$$$$$$rK   r   
seuclideanmahalanobisdist_functionc           
      v   t          d          5  t          j                            d          }|                    d          }t          t          ||                    }t          j        t           ||||                               }t          ||           d d d            d S # 1 swxY w Y   d S )Nr   )r  r   r  r<   r   )
r   rZ   r[   r\   r]   r   r   r  rM   r   )r   r=   r'  rm   rn   expected_distr  s          rH   +test_pairwise_distances_data_derived_paramsr*    s     
s	+	+	+ - -i##A&&i(("56#:#:#:;;y}}QvfMMMNNOOm,,,- - - - - - - - - - - - - - - - - -s   BB..B25B2c                 ,   t           j                            d          }|                    d          }|                    d          }t	          j        t          d|  d          5  t          |||            d d d            d S # 1 swxY w Y   d S )Nr   r  z+The '(V|VI)' parameter is required for the z metricr   r<   )rZ   r[   r\   r]   rg   rh   rk   r$   )r=   rm   rn   rq   s       rH   1test_pairwise_distances_data_derived_params_errorr,    s     )


"
"C)$$A)$$A	Q&QQQ
 
 
 0 0 	1a////	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   )B		BB)
braycurtiscanberra	chebyshevcorrelationhammingr&  r
   r%  r   r	   r   r;   y_is_xzY is Xz
Y is not Xc           	         t           j                            d          }|                    d                              |d          }i }|r!|}t          t          ||                     }n|                    d                              |d          }t          |||           }| dk    r9dt          j        t          j	        ||g          ddt           j
        	          i}nW| d
k    rQdt           j                            t          j        t          j	        ||g          j                            j        i}t          ||fd| i|}t!          ||           d S )Nr   r6   Fr9   r<   r%  VrT   )r   ddofr_   r&  VIr=   )rZ   r[   r\   r]   r^   r   r   r   varr  rf   r   invcovr  r$   r   )	r=   rl   r2  rm   rn   r   rq   r)  r  s	            rH   )test_numeric_pairwise_distances_datatypesr:    sU   6 )


"
"C&!!((E(BBAF 
J"56#:#:#:;;f%%,,\,FFa6222\!!26")QF"3"3!!2:VVVWFF}$$BIMM"&Aq61B1B1D*E*EFFHIFa<<6<V<<DD-(((((rK   )r;   )r   typesr   numpyrZ   r   scipy.sparser   r   r   scipy.spatial.distancer   r	   r
   r   r   r   r   ImportErrorsklearn.utils.fixesr   r   rg   sklearnr   sklearn.utils._testingr   r   r   r   sklearn.metrics.pairwiser   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   sklearn.preprocessingr3   sklearn.exceptionsr4   r{   markparametrizer   r   r   r   r   r2  r^   _minkowski_kwds_wminkowski_kwdsr   filterwarningsparamskipifrf   r  r   r   r   r   r   r   itemsr   r   r  r  r  r&  r5  rk   rj   rH  rR  r^  r`  rf  r   rn  r  r  r  r  r  r  xfailr  r  infr  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:  rD   rK   rH   <module>rP     s                    9 9 9 9 9 9 9 9 9 9 ? ? ? ? ? ? ? ? ? ? ; ; ; ; ; ; ; ; ; ;?1111111 ? ? ? ?>>>>>>>?
 : 9 9 9 9 9 9 9  " " " " " " 2 2 2 2 2 2 6 6 6 6 6 6 5 5 5 5 5 5 2 2 2 2 2 2 8 8 8 8 8 8 < < < < < < 8 8 8 8 8 8 8 8 8 8 8 8 2 2 2 2 2 2 F F F F F F F F 6 6 6 6 6 6 / / / / / / 5 5 5 5 5 5 3 3 3 3 3 3 6 6 6 6 6 6 5 5 5 5 5 5 7 7 7 7 7 7 ? ? ? ? ? ? B B B B B B > > > > > > 5 5 5 5 5 5 > > > > > > @ @ @ @ @ @ ? ? ? ? ? ? 5 5 5 5 5 5 : : : : : : 8 8 8 8 8 8 5 5 5 5 5 5 ? ? ? ? ? ? ? ? ? ? ? ? @ @ @ @ @ @ + + + + + + 4 4 4 4 4 4H0 H0 H0X ,tUm<<G G =<G #=>>: : ?>:<2 2 2 "46F!GHH% % IH%:F F F "	!Q..xe.DD1MM"1a//u/EEANN    MNN	["-	
 	

 		
 	

 	+$$mmG444T %  		
 	
 	
 	+$$mmG444T %  		
 	
 	
 
<(A7	.#?? # #H 2:rz3"?@@  A@I# # ONLI I I TTT  	 B  &
7 
7 
7 )?)9)?)A)ABB& & CB&*  (vA vA vAr  7 7 7"
4 
4 
4   $$&&++>>	 	 	 	 ) 54(	
 :90	

 
!	 *.QRNA	
  H	
 ,+<	
- > ? >7 7 7 7  #EFF? ? GF? #EFF7 7 GF7 $ $ $N rx,7H2E    rx,7H2E   % %  % rx,7H2E   % % %@E E ED rx,7H2E    rx,7H2E   + +  +* rx,7H2E   + + +$ '8'8'899rx,7H2E    rx,7H2E   4 4   :94( '8'8'899rx,7H2E   4 4  :94" 	T4 J+##+M#NN		
 	
 	
  G--	4 	4 .- 	4 T5M223 3 323 xrx"&!661rvg,8P8PQRRxrx"&!661rvg,8P8PRVWXX) ) YX SR) 	Aq6Aq6"	#	#WRWQZZ8	Aq6Arv;'	(	('"'!**bf=	BFA;BF,	-	-rvrv>	BFA;,	-	-wrwqzz26B	Arv;BF,	-	-wrwqzz26B	Aq6Aq6"	#	#WRWQZZ4	Aq6Ar7#	$	$gbgajj"5	B7QG$	%	%rvr2	B7RG$	%	%wrwqzz26	Ar7QG$	%	%wrwqzz26 - - -" 262,77	$ 	$ 87	$ 262,771 1 871h 262,77  87(  <  6# # ## # #9; 9; 9;x 
 
   
 
  
 
 
 
C C C- - -	/ 	/ 	/ x7(DU9VW & & &*     (' ' '' ' ' 	$ 	$ 	$& & &5 5 5,# # #	. 	. 	.% % %0 Aq6**L-#@AA(*DE 
- 
-  BA +*

- L-#@AA0 0 BA0    " D%=x6NOO) ) PO# $) ) )s   ; A	A	