
    0Ph                        d dl Z d dlmZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d d	l2m3Z3 d d
l4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZA d ZBejC        D                    de;          ejC        D                    de<          ejC        D                    de:          ejC        D                    de=          d                                                 ZE e8eF          ejC        D                    de          d                         ZGd ZHejC        D                    de*e.g          d             ZId ZJ ejK        dd          L                    dd          ddZMd  ZNejC        D                    d!e*d"i fe*eeMfe*d#eMfe.d$d%dife.eNd&d'ifg          ejC        D                    d(ejO        ejP        eQg          d)                         ZRd* ZSejC        D                    dg d+          ejC        D                    de=          d,                         ZTd- ZUd. ZVejC        D                    d/ ejW                              ejC        D                    de=          d0                         ZXd1 ZYejC        D                    d2e>          ejC        D                    de=          d3                         ZZd4 Z[d5 Z\d6 Z]ejC        D                    d7d8 d9 d: gd; e=D             z   d< e>D             z             d=             Z^ejC        D                    d>d? e_d@fdA e_dBfdC e_dDfdE e`dFfdG e`dHfdI e`dJfg          dK             ZaddLZbejC        D                    ddM          dN             ZcejC        D                    ddM          dO             ZdejC        e                    dP          dQ             ZfejC        D                    dRejg        ge=z   dSgdT e=D             z   U          ejC        D                    dVejg        ge=z   dSgdW e=D             z   U          dX                         ZhejC        D                    dVejg        ge=z   dSgdY e=D             z   U          dZ             ZiejC        D                    d[d\dg          d]             Zjd^ ZkejC        D                    dRejg        ge=z   dSgd_ e=D             z   U          ejC        D                    dVejg        ge=z   dSgd` e=D             z   U          da                         ZlejC        D                    dRejg        ge=z   dSgdb e=D             z   U          dc             ZmejC        D                    ddg de          ejC        D                    dRejg        ge=z   dSgdf e=D             z   U          ejC        D                    dVejg        ge=z   dSgdg e=D             z   U          dh                                     ZnejC        D                    ddg de          ejC        D                    dRejg        ge=z   dSgdi e=D             z   U          dj                         ZoejC        D                    dkejP        dldmf ejp        ejO        dndoejC        q                    dpq          r          g          ejC        D                    dsddtg          du                         ZrejC        D                    dvd\dg          dw             ZsejC        D                    dx ejg        ejt        d gg           ejg        d ejt         gg          g          ejC        D                    dy ejg        ejt        d gg           ejg        d ejt         gg          dg          dz                         ZuejC        D                    d{ ejg        d dgdd gg           ejv        d|          ejw        f ejg        d dgdejw        gg           ejv        d|          ejw        f ejg        ejw        dgdejw        gg          ejw        ejw        f ejg        ejw        dgejw        d gg           ejv        d|          ejw        f ejg        d ejw        gdejw        gg           ejv        d|          ejw        f ejg        d dgdd gg           ejv        d|          d}f ejg        d dgdd}gg           ejv        d|          d}f ejg        d}dgdd}gg          ejw        d}f ejg        d}dgd}d gg           ejv        d|          d}f ejg        d d}gdd}gg           ejv        d|          d}fg
          d~             ZxejC        D                    dejw        d}g          d             ZyejC        D                    dejw        d}g          d             ZzejC        D                    dejw        d}g          d             Z{d Z|d Z}d Z~d Zd Zd ZejC        D                    de#e/e0e"e1ef          d             ZejC        D                    de#e/e0e"e1ef          ejC        D                    de=          d                         Zd Zd Zd ZejC        D                    dde#fdefg          ejC        D                    de=          d                         ZejC        D                    de=          d             Zd Zd Zd Zd ZejC        D                    de=          d             Zd Zd Zd ZejC        D                    ddd|g          ejC        D                    dddg          ejC        D                    de*e-g          d                                     ZejC        D                    dddg          d             ZejC        D                    dg d          ejC        D                    dd\dgddgU          d                         ZejC        D                    de*e+e,g          d             Zd ZejC        D                    dg ddg dg dg dgfg dddgddgddgddggfg          d             Zd ZejC        D                    de=          d             Zd ZdS )    N)GeneratorType)linalg)issparse)cdist	cityblockcosine	minkowskipdist
squareform)config_context)DataConversionWarning)PAIRED_DISTANCESPAIRWISE_BOOLEAN_FUNCTIONSPAIRWISE_DISTANCE_FUNCTIONSPAIRWISE_KERNEL_FUNCTIONS_euclidean_distances_upcastadditive_chi2_kernelcheck_paired_arrayscheck_pairwise_arrayschi2_kernelcosine_distancescosine_similarityeuclidean_distanceshaversine_distanceslaplacian_kernellinear_kernelmanhattan_distancesnan_euclidean_distancespaired_cosine_distancespaired_distancespaired_euclidean_distancespaired_manhattan_distancespairwise_distancespairwise_distances_argminpairwise_distances_argmin_minpairwise_distances_chunkedpairwise_kernelspolynomial_kernel
rbf_kernelsigmoid_kernel)	normalize)assert_allcloseassert_almost_equalassert_array_equalignore_warnings)BSR_CONTAINERSCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERS)Paralleldelayedc                 	   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          ||           d S )Nr         Fcopy	euclideanmetric   r:   r   r   nan_euclideanc                 @    g | ]}t          d  |D                       S )c                     g | ]}|S  rF   .0vs     c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/metrics/tests/test_pairwise.py
<listcomp>zEtest_pairwise_distances_for_dense_data.<locals>.<listcomp>.<listcomp>`       ,,,1Q,,,    tuplerH   rows     rJ   rK   z:test_pairwise_distances_for_dense_data.<locals>.<listcomp>`   /    ;;;#e,,,,,--;;;rM   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|S rF   rF   rG   s     rJ   rK   zEtest_pairwise_distances_for_dense_data.<locals>.<listcomp>.<listcomp>a   rL   rM   rN   rP   s     rJ   rK   z:test_pairwise_distances_for_dense_data.<locals>.<listcomp>a   rR   rM   r9   rA         ?rA      	haversine)rA   rA   r   	manhattanr   )nprandomRandomStaterandom_sampleastyper#   r   r,   dtypenanr   rO   pir   r   shaper   )global_dtyperngXSS2YX_maskedY_maskedS_masked	S2_maskedX_tuplesY_tupless               rJ   &test_pairwise_distances_for_dense_dataro   C   s0   
)


"
"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rM   coo_containercsc_containerbsr_containercsr_containerc                    t           j                            d          }|                    d                              |d          }|                    d                              |d          } ||          } ||          }	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 nMt          j        t                    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 nMt          j        t                    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t          i|}t          |
|           d
di}t          |fddi|}
t          |fdt          i|}t          |
|           t          j        t                     5  t          |d           d d d            n# 1 swxY w Y   t          j        t                     5  t          ||	d           d d d            d S # 1 swxY w Y   d S )Nr   r8   Fr;   r@   r=   r>   r   rY   p       @r?   r	   )rZ   r[   r\   r]   r^   r#   r   r,   r_   r   r   float64pytestraisesAssertionErrorr	   	TypeError)rp   rq   rr   rs   rc   rd   re   rh   X_sparseY_sparserf   rg   kwdss                rJ   'test_pairwise_distances_for_sparse_datar      s    )


"
"C&!!((E(BBA&!!((E(BBA }QH}QH8XkBBBA	Xx	0	0BAr7bh....,......8Xh???A	(H	-	-BAr7bh....,......8]]1%5%5kJJJA	]]1--}}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 
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{;;;;< < < < < < < < < < < < < < < < < <sH   6GG#&G#I88I<?I<L**L.1L.M..M25M2categoryr?   c           	         t           j                            d          }|                    dd          }|                                }d|d         z
  |d<   t          t                    5  |d fD ]K}t          |||           }t          j        |dddd	           t          j	        |dk              dk    sJ L	 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   r9   r:   rW   rB   r   r>   F)r`   posinfneginfr<   z+Data was converted to boolean for metric %smatchrh   r?   error)rZ   r[   r\   randnr<   r/   r   r#   
nan_to_numsumrx   warnsr^   boolwarningscatch_warningssimplefilter)r?   rd   re   rh   Zresmsgs          rJ   test_pairwise_boolean_distancer      s    )


"
"C		!QA	A!D'kAdG 
"7	8	8	8 ) )T 	) 	)A$Q&999CM#1QquEEEE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6DDD:+E11E58E5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   r9   r:   r   r	   r>   )	rZ   r[   r\   r   r   r   r   r   r#   )rd   re   s     rJ   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   )r9      precomputedr>   )r:   r:   )r:   r   r9   r9   )r   r   rW   intr_   f      ?)
rx   ry   
ValueErrorrZ   zerosarrayr_   kind
isinstancendarray)r   rf   rg   s      rJ   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>   )rx   ry   r   r#   rZ   fullrF   rM   rJ   &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rW   r9   doubleFr;   )wru   c                     t          t          j        |           t          j        |          fi |}|                                S N)r)   rZ   
atleast_2ditem)xyr~   Ks       rJ   callable_rbf_kernelr   )  s:    2=##R]1%5%5>>>>A6688OrM   zfunc, metric, kwdsr=   r	   
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   r9   r8   r   r   r:   rW   r?   n_jobsrA   )rZ   r[   r\   r   r]   r,   )	r   r?   r~   r_   rd   re   rh   rf   rg   s	            rJ   test_pairwise_parallelr   0  s	   ( )


"
"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rM   c                  F    t          dggd           d         dk    sJ d S )Nr   c                     dS )Nr9   rF   r   r   s     rJ   <lambda>z9test_pairwise_callable_nonstrict_metric.<locals>.<lambda>U  s    1 rM   r>   rB   r9   )r#   rF   rM   rJ   'test_pairwise_callable_nonstrict_metricr   Q  s3     ugnn===dCqHHHHHHrM   )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          ||            ||          }
 ||          }| d	v rd S t          |
||           }t          ||           d S )
Nr   r8   r@   r>   r   rh   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|S rF   rF   rG   s     rJ   rK   z4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>n  rL   rM   rN   rP   s     rJ   rK   z)test_pairwise_kernels.<locals>.<listcomp>n  rR   rM   c                 @    g | ]}t          d  |D                       S )c                     g | ]}|S rF   rF   rG   s     rJ   rK   z4test_pairwise_kernels.<locals>.<listcomp>.<listcomp>o  rL   rM   rN   rP   s     rJ   rK   z)test_pairwise_kernels.<locals>.<listcomp>o  rR   rM   )r   r   )rZ   r[   r\   r]   r   r'   r,   rO   )r?   rs   rd   re   rh   functionK1K2rm   rn   r|   r}   s               rJ   test_pairwise_kernelsr   Y  sg    )


"
"C&!!A&!!A(0H	!F	+	+	+B	!BB	!q	0	0	0B	!q			BB;;;;;<<H;;;;;<<H	(HV	<	<	<BB }QH}QH***	(hv	>	>	>BBrM   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   r8   r@   r   r   r   rh   )rZ   r[   r\   r]   r   r'   r)   r,   )rd   re   rh   r?   r~   r   r   s          rJ   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rM   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   r8   r@   r   r   z:))r   blablar   T)r?   filter_paramsr?   )
rZ   r[   r\   r]   r)   r'   r,   rx   ry   r{   )rd   re   rh   r   paramsr   s         rJ   "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          v r<t          |          ||          }	t          j        |	          }	t          |	|           d S d S )Nr   r8   r>   )rZ   r[   r\   r]   r    r,   r   diag)
r?   r   rs   rd   re   rh   rf   rg   S3	distancess
             rJ   test_paired_distancesr     s     )


"
"C&!!A&!!AAf---A	aBAr	mmAa 0 0	1	1BAr,,, 071==	GI&&		1%%%%% -,rM   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   r8   Fr;   rY   r>   c                 X    t          j        | |z
                                d          S )Nr   axis)rZ   absr   r   s     rJ   r   z0test_paired_distances_callable.<locals>.<lambda>  s#    BF1q5MM4E4E14E4M4M rM   r   )
rZ   r[   r\   r]   r^   r    r,   rx   ry   r   )rc   rd   re   rh   rf   rg   s         rJ   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dok_containerc                 ~
   t          j        dgdgg|          }t          j        dgdgg|          } | |          } |||          }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   rW   r   r   rA   r:   r=   r>   sqeuclideansquaredT)r?   metric_kwargsrY   ru   r	   a      o   r   )r   r?   Hz>rtol)rZ   asarrayr%   r$   r,   typer   r	   r[   r\   r   r#   argminrangelenr.   asfortranarray)r   rs   rc   re   rh   XspYspexpected_idxexpected_valsexpected_vals_sqidxvalsidx2idxspvalsspidxsp2vals2idx3idx4rd   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                                  rJ   "test_pairwise_distances_argmin_minr    s    	
QC!:\222A

RD1#;l333A
-

C
-
.
.
.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  *,?@@@@@rM   c                     | d d d df         S )Nd   rF   r  starts     rJ   _reduce_funcr  C  s    4C4=rM   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  r:   Fr;   r        >reduce_funcworking_memoryrW   r   atol)rZ   r[   r\   r]   r^   r#   r&   r  r   r   listr   r_   r,   vstack)rc   rd   re   rf   S_chunkss        rJ   &test_pairwise_distances_chunked_reducer!  G  s    
)


"
"C(##**<e*DDA1aaa#g&A)	4\&  H h.....H~~Hx==1A;'''' BIh''666666rM   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   
   r:   Fr;   c                     d S r   rF   r  s     rJ   r   z=test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>]  s     rM   r  r  rW   c              3      K   | ]}|d u V  	d S r   rF   )rH   chunks     rJ   	<genexpr>z>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>b  s&      33u}333333rM   )rZ   r[   r\   r]   r^   r&   r   r   r  r   all)rc   rd   re   r   s       rJ   +test_pairwise_distances_chunked_reduce_noner*  X  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3rM   good_reducec                      t          |           S r   r  Dr  s     rJ   r   r   h  s    a rM   c                 *    t          j        |           S r   )rZ   r   r.  s     rJ   r   r   i  s    ! rM   c                 >    t          |           t          |           fS r   r-  r.  s     rJ   r   r   j  s    $q''477+ rM   c                     g | ]}|fd S )c                      ||           S r   rF   )r/  r  scipy_csr_types      rJ   r   z<listcomp>.<lambda>m  s    q8I8I rM   rF   )rH   r4  s     rJ   rK   rK   l  s1        )7III  rM   c                     g | ]}|fd S )c                 \     ||           t          j        |           t          |           fS r   )rZ   r   r  )r/  r  scipy_dok_types      rJ   r   z<listcomp>.<lambda>q  s*    N1HQKKGG9
 rM   rF   )rH   r7  s     rJ   rK   rK   p  s9         )7 	
 	
 	
  rM   c                     t          j        d                              dd          }t          |d | d          }t	          |           d S )Nr$  r   rW   @   r  )rZ   arangereshaper&   next)r+  re   r   s      rJ   ,test_pairwise_distances_chunked_reduce_validr=  e  sO    * 		"b!$$A)	4[  H 	NNNNNrM   )
bad_reduceerr_typemessagec                 >    t          j        | | dd          g          S Nr   rZ   concatenater/  ss     rJ   r   r     s    AbccF44 rM   zlength 11\..* input: 10\.c                 B    | t          j        | | dd          g          fS rB  rC  rE  s     rJ   r   r     s!    !R^Q"##K889 rM   z!length \(10, 11\)\..* input: 10\.c                     | d d         | fS )N	   rF   rE  s     rJ   r   r     s    q!uaj rM   z length \(9, 10\)\..* input: 10\.c                     dS )N   rF   rE  s     rJ   r   r     s     rM   z2returned 7\. Expected sequence\(s\) of length 10\.c                     dS )N)rK     rF   rE  s     rJ   r   r     s     rM   z9returned \(7, 8\)\. Expected sequence\(s\) of length 10\.c                 .    t          j        d          dfS )Nr$  rI  )rZ   r:  rE  s     rJ   r   r     s    ")B--+ rM   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   rW   Fr;   r9  r  r   )rZ   r:  r;  r^   r&   rx   ry   r<  )rc   r>  r?  r@  re   r   s         rJ   .test_pairwise_distances_chunked_reduce_invalidrP    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?   rM  g      >i   r>   r   r  )r&   r   r   r  r   nbytesmaxrZ   r  r#   r,   )
re   rh   r  r?   genblockwise_distancesmin_block_mibblockmemory_usedrf   s
             rJ    check_pairwise_distances_chunkedrZ    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6rM   )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scaleFr;   rW   rR  绽|=r   )rZ   r[   r\   normalr^   r  r&   r   r,   r   r  )r?   rc   rd   re   chunkss        rJ   (test_pairwise_distances_chunked_diagonalrf    s    
)


"
"C


$
//66|%6PPA,QqPPPQQFv;;????BGBIf--..>>>>>>rM   c                    t           j                            d          }|                    dd                              |d          }t          || d          }t          t          j        |          dd	
           d S )Nr   r]  r_  r`  Fr;   rA   r   rc  r  )rZ   r[   r\   rd  r^   r#   r,   r   )r?   rc   rd   re   r   s        rJ   )test_parallel_pairwise_distances_diagonalrh    sx    
)


"
"C


$
//66|%6PPA"1VA>>>IBGI&&666666rM   z0ignore:Could not adhere to working_memory configc                    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          |          }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   )   r:   Fr;   rW   r=   rR  irA   )r  r:   i'  r   r  r   )rZ   r[   r\   r]   r^   rZ  r   tolistr#   r&   r   r   r<  rx   ry   StopIteration)rc   rd   re   powerrh   r/  rU  s          rJ   test_pairwise_distances_chunkedrn    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 	1A
$Qvm
T
T
TCc=)))))99>>>>	}	%	%  S			                 s   )GG
G
x_array_constrdensec                     g | ]	}|j         
S rF   __name__rH   	containers     rJ   rK   rK         HHHIY'HHHrM   )idsy_array_constrc                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK     rv  rM   c                      | dgg          } |dgdgg          }t          ||          }t          |ddgg           d S Nr   rW   rA   r   rv   )r   r,   )ro  rx  re   rh   r/  s        rJ   %test_euclidean_distances_known_resultr|    sY     	uAaSz""AAq!!AAc
|$$$$$rM   c                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK     rv  rM   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$  Fr;      r$  rA   rW   r   r   X_norm_squaredY_norm_squaredr  r  )rZ   r[   r\   r]   r^   rw   r   r;  r   r,   
zeros_likerx   ry   rz   )rc   rx  rd   re   rh   	X_norm_sq	Y_norm_sqD1D2D3D4wrong_Ds               rJ   #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<	symmetricTc                    t           j                            |           }|                    d          }|r|n|                    d          }|                    t           j                  dz                      d                              dd          }|                    t           j                  dz                      d                              dd          }t          ||          }t          |||          }t          |||          }	t          ||||	          }
t          ||           t          |	|           t          |
|           d S )
Nr  r  rA   rW   r   r   r  r  r  )
rZ   r[   r\   r]   r^   float32r   r;  r   r,   )global_random_seedr  rd   re   rh   r  r  r  r  r  r  s              rJ   &test_euclidean_distances_float32_normsr  (  s>    )

 2
3
3C(##A7C--h77A"*%%*//Q/77??2FFI"*%%*//Q/77??2FFI	Q	"	"B	Q)	<	<	<B	Q)	<	<	<B	Q)I	V	V	VBBBBrM   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   r  r  rA   rW   r   r  r   zIncompatible dimensions for Xr   r9   r  zIncompatible dimensions for Yr  )rZ   r[   r\   r]   r   r   r;  r,   rx   ry   r   )rd   re   rh   r  r  r  r  r  s           rJ   $test_euclidean_distances_norm_shapesr  9  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                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK   ^  rv  rM   c                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK   c  rv  rM   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$  Fr;   皙?r  ư>r   )	rZ   r[   r\   r]   r^   r   r   r,   r_   )rc   ro  rx  rd   re   rh   expectedr   s           rJ   test_euclidean_distancesr  [  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******rM   c                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK   }  rv  rM   c                 T   t           j                            d          }|                    d                              | d          }d||dk     <   t          t          |                    } ||          }t          |          }t          ||d           |j	        | k    sJ d S )Nr   r  Fr;   r  r  r   )
rZ   r[   r\   r]   r^   r   r
   r   r,   r_   )rc   ro  rd   re   r  r   s         rJ   test_euclidean_distances_symr  z  s     )


"
"C)$$++Lu+EEAAa#gJ%((##HqA#A&&I Ixd3333?l******rM   
batch_size)Nr9   rK  e   c                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK     rv  rM   c                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK     rv  rM   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  r  rh   r  r  r   )rZ   r[   r\   r]   r^   r  r   r   sqrtmaximumr,   )r  ro  rx  rd   re   rh   r  r   s           rJ   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3rM   c                     g | ]	}|j         
S rF   rr  rt  s     rJ   rK   rK     rv  rM   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
   r   r  r  r,   )r  ro  rd   re   r  r   s         rJ   #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3rM   zdtype, eps, rtolg-C6?h㈵>g:0yE>gGz?z failing due to lack of precision)reason)marks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  re   rh   r   r  s           rJ   '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3rM   r   c                    t           j                            d          }|                    dd          }|                    dd          }t	          |||           }t          |||           }t          ||           d S )N9  r   r:   )rh   r   )rZ   r[   r\   r   r   r   r,   )r   rd   re   rh   normal_distancenan_distances         rJ   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2rM   re   rh   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').)rx   ry   r   r   strvalue)re   rh   excinfoexp_msgs       rJ   ,test_nan_euclidean_distances_infinite_valuesr    s     
z	"	" (gQ''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( SGc'-((((((((s   8<<zX, X_diag, missing_valuerA   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  rA   )rZ   r   r   r,   r<   )re   X_diagmissing_valueexp_distr  dist_sqdist_twodist_two_copys           rJ    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,,,,,rM   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   rW   r  )rZ   r   r`   r   r,   r<   )r  re   r  r  s       rJ   )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#####rM   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      @rv   g      @g      @g      @r  rW   Tr  g      D@rA   Fg      9@r;   )rZ   r   r   r-   Tr,   r  r<   )
r  re   rh   r  r  r  r  D5D6D7s
             rJ   '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rM   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  re   dist_squaredr  s       rJ   7test_nan_euclidean_distances_one_feature_match_positiver  W  s    
 	e]E2mZ?	
	 	A +	-  L 6,!#$$$$$"1]ERRRDD#rM   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  rc  r  rv   r^  i  r   )rZ   r[   r\   r   randr  r   r,   r)  diag_indices_fromrb   )rd   r   XAr/  XBr  re   s          rJ   test_cosine_distancesr  l  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(rM   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   rW   rA   )rZ   sincosarcsinr  )r   r   diff_latdiff_lonacs         rJ   slow_haversine_distancesz:test_haversine_distances.<locals>.slow_haversine_distances  s    Q4!A$;Q4!A$;F8a<  A%F1Q4LL26!A$<<'"&A*>*>!*CC
 	"'!**%%%rM   r   rU   )r$  rA   c                 0    g | ]fd D             S )c                 (    g | ]} |          S rF   rF   )rH   r   r  r   s     rJ   rK   z7test_haversine_distances.<locals>.<listcomp>.<listcomp>  s'    >>>q,,Q22>>>rM   rF   )rH   r   rh   r  s    @rJ   rK   z,test_haversine_distances.<locals>.<listcomp>  s2    JJJ1>>>>>A>>>JJJrM   )r$  r   z-Haversine distance only valid in 2 dimensionsr   )
rZ   r[   r\   r]   r   r   r,   rx   ry   r   )rd   re   r  r  err_msgrh   r  s        @@rJ   test_haversine_distancesr    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 r{  )r!   r,   re   rh   r/  s      rJ   test_paired_euclidean_distancesr    E    
qc
A
qc
A"1a((AASz"""""rM   c                  b    dgdgg} dgdgg}t          | |          }t          |ddg           d S r{  )r"   r,   r  s      rJ   test_paired_manhattan_distancesr    r  rM   c                  b    dgdgg} dgdgg}t          | |          }t          |ddg           d S )Nr   rW   rA   rV   )r   r,   r  s      rJ   test_paired_cosine_distancesr    sE    
qc
A
qc
A1%%AASz"""""rM   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            d S # 1 swxY w Y   d S )Nr   r8   r#  r   r   rA   rW   g333333?gffffff?r   g?rB   )r   rW   )rW   rW   )rW   r   r   )皙?r  g333333?)rZ   r[   r\   r]   r   r   r_   float	enumerater   expr-   r.   r   r)  r^   r  int32isfiniterx   ry   r   )rd   re   rh   K_addr   r   ir   jr   r   chi2_exps               rJ   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 1 1 1sH   L%%L),L)	M,,M03M0N33N7:N7O;;O?O?kernelc                     t           j                            d          }|                    d          } | ||          }t	          ||j        d           d S )Nr   r8      )rZ   r[   r\   r]   r,   r  )r  rd   re   r   s       rJ   test_kernel_symmetryr    sU     )


"
"C&!!Aq!AAqsBrM   c                     t           j                            d          }|                    d          } ||          } | ||          } | ||          }t	          ||           d S Nr   r8   )rZ   r[   r\   r]   r,   )r  rs   rd   re   r|   r   r   s          rJ   test_kernel_sparser    sq     )


"
"C&!!A}QHq!A	(	#	#BArrM   c                      t           j                            d          } |                     d          }t	          ||          }t          |j        d d d         d |D                        d S )Nr   r8      c                 <    g | ]}t          j        |          d z  S )rA   )r   norm)rH   r   s     rJ   rK   z&test_linear_kernel.<locals>.<listcomp>   s%    !A!A!A!&+a..A"5!A!A!ArM   )rZ   r[   r\   r]   r   r,   flatrd   re   r   s      rJ   test_linear_kernelr    sj    
)


"
"C&!!AaAAF33Q3K!A!Aq!A!A!ABBBBBrM   c                      t           j                            d          } |                     d          }t	          ||          }t          |j        d d d         t          j        d                     d S )Nr   r8   r  r9   )rZ   r[   r\   r]   r)   r,   r
  onesr  s      rJ   test_rbf_kernelr  #  sc    
)


"
"C&!!A1aAAF33Q3K,,,,,rM   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   r8   r9   rW   )	rZ   r[   r\   r]   r   r,   r   r  r)  r  s      rJ   test_laplacian_kernelr  +  s    
)


"
"C&!!AAABGAJJ

+++ 6!a%==6!bgbgajj)))A-.......rM   zmetric, pairwise_funcr   r   c                    t           j                            d          }|                    d          }|                    d          } ||          } ||          } |||d          }t	          |          sJ  |||d          }	t	          |	          rJ t          |                                |	           t          |||           }
t          |                                |
           d S )Nr   r8   r   F)dense_outputTr   )rZ   r[   r\   r]   r   r,   toarrayr'   )r?   pairwise_funcrs   rd   re   rh   XcsrYcsrr   r   K3s              rJ   &test_pairwise_similarity_sparse_outputr  7  s     )


"
"C&!!A&!!A=D=D 
tT	6	6	6BB<< 
q!$	/	/	/B||BJJLL"%%% 
!q	0	0	0BBJJLL"%%%%%rM   c                    t           j                            d          }|                    d          }|                    d          } | |          } | |          }|d f||f|d f||ffD ]Y\  }}t	          ||d          }t          |          }|t          |          }t	          ||d          }	t          ||	           Zd S )Nr   r8   r   r   r   r   )rZ   r[   r\   r]   r'   r+   r,   )
rs   rd   re   rh   r  r  X_Y_r   r   s
             rJ   test_cosine_similarityr  Q  s     )


"
"C&!!A&!!A=D=Dt9q!ftTlT4LA    B bBx888r]]>2BbBx888B   rM   c                      t          j        t          j        d          d          } t          | d           \  }}||u sJ t	          | |           d S N(   r9   rM  )rZ   resizer:  r   r.   )r  
XA_checked
XB_checkeds      rJ   test_check_dense_matricesr%  f  sX     
29R==&	)	)B22t<<J
####r:&&&&&rM   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!      r:   rM  )rZ   r"  r:  r   r.   r   r  r  r#  r$  s       rJ   test_check_XB_returnedr*  o  s     
29R==&	)	)B	29R==&	)	)B22r::J
r:&&&r:&&&	29R==&	)	)B0R88J
r:&&&r:&&&&&rM   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-   )r9   rI  r'  r(  $   )r:   rI  )rZ   r"  r:  rx   ry   r   r   r   r  r  s     rJ   test_check_different_dimensionsr/    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,  rI  r9   r'  r:   rM  )rZ   r:  r;  rx   ry   r   r   r.  s     rJ   test_check_invalid_dimensionsr1    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          } | |          }|                    d          } | |          }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   )	rs   rd   r  	XA_sparser  	XB_sparser#  r$  XA_2_checkeds	            rJ   test_check_sparse_arraysr6    s    )


"
"C			6	"	"Bb!!I			6	"	"Bb!!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4rM   c                     | j         }t          |          dk    rt          d | D                       S t          d | D                       S )NrW   c              3   4   K   | ]}t          |          V  d S r   )tuplifyrP   s     rJ   r(  ztuplify.<locals>.<genexpr>  s(      //cWS\\//////rM   c              3      K   | ]}|V  d S r   rF   )rH   rs     rJ   r(  ztuplify.<locals>.<genexpr>  s      NN1QNNNNNNrM   )rb   r   rO   )re   rF  s     rJ   r9  r9    sO    	A
1vvzz//Q////// NNNNN"""rM   c                  :   t           j                            d          } |                     d          }t	          |          }|                     d          }t	          |          }t          ||          \  }}t          ||           t          ||           d S r  )rZ   r[   r\   r]   r9  r   r.   )rd   r  	XA_tuplesr  	XB_tuplesr#  r$  s          rJ   test_check_tuple_inputr?    s    
)


"
"C			6	"	"BI			6	"	"BI29iHHJ
y*---y*-----rM   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"  r:  r^   r  r   r_   r  r)  s       rJ   test_check_preserve_typerA    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$$$$$$rM   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  rO   r,   )r   r?   rD  rd   re   expected_distr  s          rJ   +test_pairwise_distances_data_derived_paramsrG    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]   rx   ry   r   r#   )r?   rd   re   rh   s       rJ   1test_pairwise_distances_data_derived_params_errorrI    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hammingrC  r	   rB  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   r8   Fr;   r>   rB  VrW   )r   ddofr_   rC  VIr?   )rZ   r[   r\   r]   r^   r   r
   r   varr  rw   r   invcovr  r#   r,   )	r?   rc   rO  rd   re   r   rh   rF  r  s	            rJ   )test_numeric_pairwise_distances_datatypesrW     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-(((((rM   pairwise_distances_funcc                     ddgdt           j        gddgddgg} | ||d          }t          j        |                                          rJ dS )	z8Check that `nan_euclidean` is lenient with `nan` values.r   rW   rA   r   r9   rC   r>   N)rZ   r`   isnanany)rX  re   outputs      rJ   test_nan_euclidean_supportr]  1  sc     Q!RVq!fq!f-A$$Q/BBBFx##%%%%%%%rM   c                     t           j        t           j        gt           j        t           j        gt           j        t           j        gg} t          | | d          }ddgddgddgg}t          ||d          }t          ||           dS )zyCheck that the behavior of constant input is the same in the case of
    full of nan vector and full of zero vector.
    rC   r>   r   N)rZ   r`   r$   r,   )X_nan
argmin_nanX_constargmin_consts       rJ   (test_nan_euclidean_constant_input_argminrc  >  s    
 fbf/"&"&1ABE*5%PPPJ1v1v1v&G,WgoVVVLJ-----rM   zX,Y,expected_distance)r  ababc)r  r   rv   )r   r  r   )rv   r   r  r  rd  r  r   rv   c                 P    d }t          | ||          }t          ||           dS )z8Check pairwise_distances with lists of strings as input.c                 d    t          j        t          |           t          |          z
            S r   )rZ   r   r   r   s     rJ   dummy_string_similarityzLtest_pairwise_dist_custom_metric_for_string.<locals>.dummy_string_similarity^  s"    vc!ffs1vvo&&&rM   )re   rh   r?   N)r#   r,   )re   rh   expected_distancerh  actual_distances        rJ   +test_pairwise_dist_custom_metric_for_stringrk  L  s?    $' ' ' )1:QRRROO%677777rM   c                      d } t          j        g dg dg dgt                    }t          j        g dg dg dg          }t          || 	          }t	          ||           d
S )zjCheck that pairwise_distances does not convert boolean input to float
    when using a custom metric.
    c                 f    d| |z                                   | |z                                   z  z
  S )NrW   )r   )v1v2s     rJ   dummy_bool_distzBtest_pairwise_dist_custom_metric_for_bool.<locals>.dummy_bool_distj  s*    BG==??b2g]]__444rM   )rW   r   r   r   )rW   r   rW   r   )rW   rW   rW   rW   r   )r  rV         ?)rV   r  rV   )rq  rV   r  )re   r?   N)rZ   r   r   r#   r,   )rp  re   ri  rj  s       rJ   )test_pairwise_dist_custom_metric_for_boolrr  e  s    
5 5 5 	,,,lll;4HHHAOO	
  )1_EEEOO%677777rM   c                      | t          j        d                    g} | t          j        d                    g} t          dd          d t          ||          D                        d S )Nr   rA   r   )r   
max_nbytesc              3   X   K   | ]%\  }} t          t                    ||          V  &d S r   )r6   r   )rH   m1m2s      rJ   r(  z9test_sparse_manhattan_readonly_dataset.<locals>.<genexpr>  sM       % %17R$#$$R,,% % % % % %rM   )rZ   r  r5   zip)rs   	matrices1	matrices2s      rJ   &test_sparse_manhattan_readonly_datasetr{  |  s     rwv//0Irwv//0I %HA!$$$ % %;>y);T;T% % %     rM   c                     t           j                            d          } t           j                            d          }d}t          j        t
          |          5  t          | |d           d d d            n# 1 swxY w Y   t          j        t
          |          5  t          | |d           d d d            d S # 1 swxY w Y   d S )Nr  )ra  z5'force_all_finite' was renamed to 'ensure_all_finite'r   T)force_all_finite)rZ   r[   uniformrx   r   FutureWarningr   r#   )re   rh   r   s      rJ   $test_force_all_finite_rename_warningr    sF   
	x((A
	x((A
AC	m3	/	/	/ ; ;aT::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
m3	/	/	/ 8 81a$77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s$   A==BB#CC
C)r=   )r   typesr   numpyrZ   rx   r   scipy.sparser   scipy.spatial.distancer   r   r   r	   r
   r   sklearnr   sklearn.exceptionsr   sklearn.metrics.pairwiser   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   sklearn.preprocessingr+   sklearn.utils._testingr,   r-   r.   r/   sklearn.utils.fixesr0   r1   r2   r3   r4   sklearn.utils.parallelr5   r6   ro   markparametrizer   DeprecationWarningr   r   r   r   r:  r^   _minkowski_kwdsr   rw   r  r   r   r   r   r   r   itemsr   r   r  r  r!  r*  r=  r   r{   rP  rZ  rf  rh  filterwarningsrn  r   r|  r  r  r  r  r  r  r  param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/  r1  r6  r9  r?  rA  rG  rI  rW  r]  rc  rk  rr  r{  r  rF   rM   rJ   <module>r     s                     ! ! ! ! ! !                # " " " " " 4 4 4 4 4 4                                                             > , + + + + +                         5 4 4 4 4 4 4 4L L L^ .99.99.99.99>< >< :9 :9 :9 :9><F ,---#=>>: : ?> .-:<2 2 2 "46F!GHH% % IH%:F F F "	!Q..xe.DD1MM   	["-	
 	

 
<(A7	.#? $ 2:rz3"?@@  A@% &I I I TTT  .99  :9	 
>  &
7 
7 
7 )?)9)?)A)ABB.99& & :9 CB&*  ( .99.99vA vA :9 :9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OO! ! PO!H XJ		HHHHHH   
 XJ		HHHHHH   
% %  % XJ		HHHHHH   
% % 
%@ tUm44  54 E E ED XJ		HHHHHH   
 XJ		HHHHHH   
+ +  +* XJ		HHHHHH   
+ + 
+$ '8'8'899XJ		HHHHHH   
 XJ		HHHHHH   
4 4   :94( '8'8'899XJ		HHHHHH   
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# # ## # ## # #31 31 31l 
 
   
 
  
 
 .99  :9
 
C C C- - -	/ 	/ 	/ +< =>  .99& & :9	 
&* .99    :9 (' ' '' ' ' 	$ 	$ 	$& & & .995 5 :9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# $)> 24QR & &	 &. . .  __ooo?	
 $K3Z#sc3Z0	
 8 8 88 8 8. .99  :9
8 
8 
8 
8 
8rM   