
    Q3j                        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@mAZAmBZBmCZCmDZD d dlEmFZFmGZG d ZHej                  j                  d e8             ej                  j                  dg d      d               ZKd ZLej                  j                  deA      ej                  j                  deB      ej                  j                  de@      ej                  j                  deC      d                             ZM e>eN      ej                  j                  de      d               ZOd ZPej                  j                  de*e.g      d        ZQd ZR ej                  dd       j                  d!d"#      dd$ZUd% ZVej                  j                  d&e*d'i fe*eeUfe*d(eUfe.d)d*dife.eVd+d,ifg      ej                  j                  d-ej                  ej                  eYg      d.               ZZej                  j                  d e8             ej                  j                  d&e*d'i fe*d/i fe.d)d*dife.eVd+d,ife.d0d+d,ifg      d1               Z[d2 Z\ej                  j                  dg d3      ej                  j                  deC      d4               Z]ej                  j                  d e8             ej                  j                  dg d5      d6               Z^d7 Z_d8 Z`ej                  j                  d9 ej                               ej                  j                  deC      d:               Zbd; Zcej                  j                  ej                  j                  d<eD      ej                  j                  deC      d=                      Zed> Zfd? Zgd@ Zhej                  j                  dAdB dC dD geCD  cg c]  } | fdE	 c} z   eDD cg c]  }|fdF	 c}z         dG        Ziej                  j                  dHdI ejdJfdK ejdLfdM ejdNfdO ekdPfdQ ekdRfdS ekdTfg      dU        ZlddVZmej                  j                  ddW      dX        Znej                  j                  ddW      dY        ZodZ Zpej                  j                  d[      d\        Zrej                  j                  d]ej                  geCz   d^geCD cg c]  }|j                   c}z   _      ej                  j                  d`ej                  geCz   d^geCD cg c]  }|j                   c}z   _      da               Zuej                  j                  d`ej                  geCz   d^geCD cg c]  }|j                   c}z   _      db        Zvej                  j                  dcddd"g      de        Zwdf Zxej                  j                  d]ej                  geCz   d^geCD cg c]  }|j                   c}z   _      ej                  j                  d`ej                  geCz   d^geCD cg c]  }|j                   c}z   _      dg               Zyej                  j                  d]ej                  geCz   d^geCD cg c]  }|j                   c}z   _      dh        Zzej                  j                  dig dj      ej                  j                  d]ej                  geCz   d^geCD cg c]  }|j                   c}z   _      ej                  j                  d`ej                  geCz   d^geCD cg c]  }|j                   c}z   _      dk                      Z{ej                  j                  dig dj      ej                  j                  d]ej                  geCz   d^geCD cg c]  }|j                   c}z   _      dl               Z|ej                  j                  dmej                  dndof ej                  ej                  dpdqej                  j                  drs      t      g      ej                  j                  duddvg      dw               Zej                  j                  dxddd"g      dy        Zej                  j                  dz ej                  ej                  d gg       ej                  d ej                   gg      g      ej                  j                  d{ ej                  ej                  d gg       ej                  d ej                   gg      dg      d|               Zej                  j                  d} ej                  d dgdd gg       ej                  d~      ej                  f ej                  d dgdej                  gg       ej                  d~      ej                  f ej                  ej                  dgdej                  gg      ej                  ej                  f ej                  ej                  dgej                  d gg       ej                  d~      ej                  f ej                  d ej                  gdej                  gg       ej                  d~      ej                  f ej                  d dgdd gg       ej                  d~      df ej                  d dgddgg       ej                  d~      df ej                  ddgddgg      ej                  df ej                  ddgdd gg       ej                  d~      df ej                  d dgddgg       ej                  d~      dfg
      d        Zej                  j                  dej                  dg      d        Zej                  j                  dej                  dg      d        Zej                  j                  dej                  dg      d        Zd Zd Zd Zd Zd Zd Zej                  j                  de#e/e0e"e1ef      d        Zej                  j                  de#e/e0e"e1ef      ej                  j                  deC      d               Zd Zd Zd Zej                  j                  dde#fdefg      ej                  j                  deC      d               Zej                  j                  deC      d        Zd Zd Zd Zd Zej                  j                  deC      d        Zd Zd Zd Zej                  j                  ddd~g      ej                  j                  dddg      ej                  j                  de*e-g      d                      Zej                  j                  dddg      d        Zej                  j                  dg d      ej                  j                  dddd"gddg_      d               Zej                  j                  de*e+e,g      d        Zd Zej                  j                  dg ddg dg dg dgfg dddgddgddgddggfg      d        Zd Zej                  j                  ej                  j                  deC      d               Zyc c} w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )    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)get_namespacemove_toxpx)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_allcloseassert_almost_equalassert_array_equalignore_warnings)BSR_CONTAINERSCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERS)Paralleldelayedc                 	   t         j                  j                  d      }|j                  d      j	                  | d      }t        |d      }t        |      }t        ||       |j                  |j                  cxk(  r| k(  sJ  J |j                  d      j	                  | d      }t        ||d      }t        ||      }t        ||       |j                  |j                  cxk(  r| k(  sJ  J |j                  d      j	                  | d      }|j                  d      j	                  | d      }t         j                  |d<   t         j                  |d<   t        ||d	      }t        ||      }	t        ||	       |j                  |	j                  cxk(  r| k(  sJ  J t        |D 
cg c]  }
t        |
D cg c]  }| c}       c}}
      }t        |D 
cg c]  }
t        |
D cg c]  }| c}       c}}
      }t        ||d      }t        ||       |j                  |j                  cxk(  r| k(  sJ  J |j                  d
      j	                  | 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        ||       |j                  d      j	                  | 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        ||       y c c}w c c}}
w c c}w c c}}
w )Nr         Fcopy	euclideanmetric   r?   r   r   nan_euclideanr>   rF         ?rF      	haversine)rF   rF   r   	manhattanr   )nprandomRandomStaterandom_sampleastyper#   r   r1   dtypenanr   tuplepir   r   shaper   )global_dtyperngXSS2YX_maskedY_maskedS_masked	S2_maskedrowvX_tuplesY_tupless                 P/DATA/.local/lib/python3.12/site-packages/sklearn/metrics/tests/test_pairwise.py&test_pairwise_distances_for_dense_datarg   J   s{   
))


"C 	&!((E(BA1[1A	Q	BAr77bhh.,..... 	&!((E(BA1a4A	Q	"BAr77bhh.,.....   (//5/IH  (//5/IHVVHTNVVHTN!(H_MH'(;IHi(>>Y__<<<<<< ;#e,1Q,-;<H;#e,1Q,-;<H	Hh{	CBAr77bhh.,.....
 	&!((E(BAAw}!BEE)A-AadGAw}!BEE)AadG1[1A	Q	BAr 	&!((E(BAAw}!BEE)A-AadGAw}!BEE)AadG1a4A	Q	"BAr
 	1[1A	Ai	0B771:###771:###Ar 	1a4A	Aq	3B771:###771:###Ar
 	1a1A	Aq	0B771:###771:###Ar_ -;,;s0   4S

	S	S

&S
4	S=	S
S

S
z(array_namespace, device_name, dtype_namerD   )r   rB   rM   c                    t        | ||      \  }}t        j                  j                  d      }|j	                  d      j                  |d      }|j	                  d      j                  |d      }|j                  ||      }	|j                  ||      }
t        d      5  t        |	|      }t        |t        d	
      }t        |      d   j                  |j                  k(  sJ |j                  |	j                  k(  sJ |j                  |	j                  k(  sJ t        ||      }t        ||       t        |	|
|      }t        |t        d	
      }t        |      d   j                  |j                  k(  sJ |j                  |	j                  k(  sJ |j                  |	j                  k(  sJ t        |||      }t        ||       d d d        y # 1 sw Y   y xY w)Nr   r=   Fr@   deviceTarray_api_dispatchrC   cpuxprj   r]   rD   )r0   rN   rO   rP   rQ   rR   asarrayr   r#   r-   r,   __name__rj   rS   r1   )array_namespacedevice_name
dtype_namerD   ro   rj   rY   X_npY_npX_xpY_xpD_xpD_xp_npD_nps                 rf   !test_pairwise_distances_array_apir}      s    &o{JOJB
))


"CV$++JU+CDV$++JU+CD::d6:*D::d6:*D	4	0!$v6$2e4T"1%.."++==={{dkk)))zzTZZ'''!$v6& "$$v>$2e4T"1%.."++==={{dkk)))zzTZZ'''!$$v>&' 
1	0	0s   &D-GG%c                     t        d      \  } }t        j                  j                  d      }|j	                  d      }|j	                  d      }| j                  ||      }| j                  ||      }t        d      5  t        j                         5  t        j                  d       t        ||d	
       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Narray_api_strictr   r=      r?   ri   Trk   errorrB   rC   )r0   rN   rO   rP   rQ   rq   r   warningscatch_warningssimplefilterr#   )ro   rj   rY   rv   rw   rx   ry   s          rf   -test_pairwise_distances_array_api_no_warningsr      s     &&89JB
))


"CV$DV$D::d6:*D::d6:*D	4	0$$&!!'*tT+> ' 
1	0&& 
1	0s$   C$C;CC	CC!coo_containercsc_containerbsr_containercsr_containerc                    t         j                  j                  d      }|j                  d      j	                  |d      }|j                  d      j	                  |d      } ||      } ||      }	t        ||	d      }
t        ||	      }t        |
|       |
j                  |j                  cxk(  r|k(  sJ  J t        ||	d      }
t        ||	      }t        |
|       |
j                  |j                  cxk(  r|k(  sJ  J t        | ||      d	      }
t         ||       | |            }t        |
|       |t         j                  k(  r$|
j                  |j                  cxk(  r|k(  sLJ  J t        j                  t              5  |
j                  |j                  cxk(  r|k(  sJ  J 	 d d d        t        ||      }t        |
|       |t         j                  k(  r$|
j                  |j                  cxk(  r|k(  sLJ  J t        j                  t              5  |
j                  |j                  cxk(  r|k(  sJ  J 	 d d d        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        t        j                  t               5  t        ||	d       d d d        y # 1 sw Y   bxY w# 1 sw Y   xY w# 1 sw Y   SxY w# 1 sw Y   y xY w)Nr   r=   Fr@   rE   rB   rC   r   rM   p       @rD   r	   )rN   rO   rP   rQ   rR   r#   r   r1   rS   r   r   float64pytestraisesAssertionErrorr	   	TypeError)r   r   r   r   rX   rY   rZ   r]   X_sparseY_sparser[   r\   kwdss                rf   'test_pairwise_distances_for_sparse_datar      s    ))


"C&!((E(BA&!((E(BA QHQH8XkBA	Xx	0BAr77bhh.,.....8Xh?A	(H	-BAr77bhh.,.....8]1%5kJA	]1-}Q/?	@BArrzz!ww"((2l22222
 ]]>*77bhh6,66666 + 
Q	"BArrzz!ww"((2l22222
 ]]>*77bhh6,66666 + :D1a<<t<A	Aq	;	;d	;BAr :D19[9D9A	A	8i	84	8BAr 
y	!8K8 
"	y	!1h{; 
"	!; +* +*  
"	!	!	!s0   %L&%L#L/>L;L #L,/L8;Mcategoryc                 j   t         j                  j                  d      }|j                  dd      }|j	                         }d|d   z
  |d<   t        t              5  |d fD ]D  }t        |||       }t        j                  |d       t        j                  |dk7        dk(  rDJ  	 d d d        d	| z  }t        j                  t        |
      5  t        ||        d d d        t        j                  t        |
      5  t        |j                  t              ||        d d d        t        j                          5  t        j"                  dt               t        |j                  t              |        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   y xY w)Nr   r>   r?   rK   rG   r   rC   )
fill_valuez+Data was converted to boolean for metric %smatchrp   r   )rN   rO   rP   randnrA   r4   r   r#   r.   
nan_to_numsumr   warnsrR   boolr   r   r   )rD   rY   rZ   r]   Zresmsgs          rf   test_pairwise_boolean_distancer     sI    ))


"C		!QA	A!D'kAdG 
"7	8TA$Q&9CNN31-66#(#q(((  
9 8&
@C	+3	71V, 
8 
+3	7188D>Qv> 
8 
	 	 	"g'<=188D>&9 
#	"# 
9	8 
8	7 
8	7 
#	"s7   AF&FF"F;F)FFF&)F2c                     t         j                  j                  d      } | j                  dd      }t	        j
                         5  t	        j                  dt               t        |d       d d d        y # 1 sw Y   y xY w)Nr   r>   r?   r   r	   rC   )	rN   rO   rP   r   r   r   r   r   r#   )rY   rZ   s     rf   test_no_data_conversion_warningr   8  sX    
))


"C		!QA		 	 	"g'<=1[1 
#	"	"s   (A77B funcc                    t        j                  t        d      5   | t        j                  d      d       d d d        t        j                  t        d      5   | t        j                  d      t        j                  d      d       d d d        t        j                  t        d      5   | t        j                  d      t        j                  d      d       d d d        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 y # 1 sw Y   wxY w# 1 sw Y   /xY w# 1 sw Y   xY w)Nz.* shape .*r   )r>   r   precomputedrC   )r?   r?   )r?   r   r>   r>   )r   r   rK   intrS   f      ?)
r   r   
ValueErrorrN   zerosarrayrS   kind
isinstancendarray)r   r[   r\   s      rf   test_pairwise_precomputedr   A  s[    
z	7RXXfm4 
8 
z	7RXXfrxx/F 
8 
z	7RXXfrxx/F 
8 	A	a	&B7N7
A	a&!-	8B7N7 	RXXse5)-@A!'',, 	seW]+Aa$$$1 
8	7 
8	7 
8	7s#   F/2F<22G	/F9<G	Gc                      t        j                  t        d      5  t        t	        j
                  dd      d       d d d        y # 1 sw Y   y xY w)Nz.* non-negative values.*r   r   r   rC   )r   r   r   r#   rN   full     rf   &test_pairwise_precomputed_non_negativer   _  s3    	z)C	D27762.}E 
E	D	Ds   "AArK   r>   doubleFr@   )wr   c                 $   t        | |      \  }}t        t        j                  | d|      t        j                  |d|      fi |}|j                  dkD  r/|j                  |d      }|j                  dk(  rt        |d         S t        d      )NrF   )ndimro   r   )r   )rK   z6can only convert an array of size 1 to a Python scalar)	r,   r)   r.   
atleast_ndr   reshaperW   floatr   )xyr   ro   _KK_flats          rf   callable_rbf_kernelr   h  s    !QEBqqR(#..r*J	NR	A
 	vvzAu%<<4##
M
NNr   zfunc, metric, kwdsrB   r	   
polynomialdegreegamma皙?rS   c                 z   t         j                  j                  d      }t        j                  d|j	                  d      z  |      }t        j                  d|j	                  d      z  |      } | |f|dd|} | |f|dd|}t        ||        | ||f|dd|} | ||f|dd|}t        ||       y )	Nr   r>   r=   r   r   rK   rD   n_jobsrF   )rN   rO   rP   r   rQ   r1   )	r   rD   r   rS   rY   rZ   r]   r[   r\   s	            rf   test_pairwise_parallelr   w  s    ( ))


"C
S&&v..e<A
S&&v..e<AQ0va040A	a	1q	1D	1BArQ3&3d3A	a	46!	4t	4BArr   rM   	laplacianc                    t        |||      \  }}t        j                  j                  d      }t        j                  d|j                  d      z  |      }	t        j                  d|j                  d      z  |      }
|j                  |	|      }|j                  |
|      }t        d      5  d	D ]+  }|d n|}|d n|
}
 | ||f|d
d|}t        |t        d      }t        |      d   j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ  | ||f|dd|}t        |t        d      }t        |      d   j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ  | |	f|dd|}t        ||       t        ||       . 	 d d d        y # 1 sw Y   y xY w)Nr   r>   r=   r   r   ri   Trk   )Nznot nonerK   r   rm   rn   rF   )r0   rN   rO   rP   r   rQ   rq   r   r-   r,   rr   rj   rS   r1   )r   rD   r   rs   rt   ru   ro   rj   rY   rv   rw   rx   ry   y_val	n_job1_xpn_job1_xp_np	n_job2_xpn_job2_xp_np	n_job2_nps                      rf    test_pairwise_parallel_array_apir     s   " &o{JOJB
))


"C88A))&11DD88A))&11DD::d6:*D::d6:*D	4	0'E =4dD =4dDT4IqIDII"9EBL +A.772;;FFF##t{{222??djj000T4IqIDII"9EBL +A.772;;FFF##t{{222??djj000TC&CdCIL,7L)4' ( 
1	0	0s   4D2G00G9c                  4    t        dggd       d   dk(  sJ y )Nr   c                      y)Nr>   r   r   r   s     rf   <lambda>z9test_pairwise_callable_nonstrict_metric.<locals>.<lambda>  s    1r   rC   rG   r>   )r#   r   r   rf   'test_pairwise_callable_nonstrict_metricr     s"     ugn=dCqHHHr   )rbfr   sigmoidr   linearchi2additive_chi2c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        |    }t        ||       } ||      }t        ||       t        |||       } |||      }t        ||       t        |D 	cg c]  }t        |D 	cg c]  }	|	 c}	       c}	}      }
t        |D 	cg c]  }t        |D 	cg c]  }	|	 c}	       c}	}      }t        |
||       }t        ||        ||      } ||      }| dv ry t        |||       }t        ||       y c c}	w c c}	}w c c}	w c c}	}w )Nr   r=   rE   rC   rp   r]   )r   r   )rN   rO   rP   rQ   r   r'   r1   rU   )rD   r   rY   rZ   r]   functionK1K2rb   rc   rd   re   r   r   s                 rf   test_pairwise_kernelsr     s?    ))


"C&!A&!A(0H	!F	+B	!BB	!q	0B	!q	BB;#e,1Q,-;<H;#e,1Q,-;<H	(HV	<BB QHQH**	(hv	>BB -;,;s0   E
(	D>1	E
E
	E	#	E
>E
	E
)r   r   r   r   r   r   r   c                    t        |||      \  }}t        j                  j                  d      }d|j	                  d      z  }|j                  |d      }d|j	                  d      z  }|j                  |d      }|j                  ||      }	|j                  ||      }
t        d	      5  t        |	| 
      }t        |t        d      }t        |      d   j                  |j                  k(  sJ |j                  |	j                  k(  sJ |j                  |	j                  k(  sJ t        || 
      }t        ||       t        |	|
|       }t        |t        d      }t        |      d   j                  |j                  k(  sJ |j                  |	j                  k(  sJ |j                  |	j                  k(  sJ t        |||       }t        ||       d d d        y # 1 sw Y   y xY w)Nr   
   r=   Fr@   rE   ri   Trk   rC   rm   rn   rp   )r0   rN   rO   rP   rQ   rR   rq   r   r'   r-   r,   rr   rj   rS   r1   )rD   rs   rt   ru   ro   rj   rY   rv   rw   rx   ry   K_xpK_xp_npK_nps                 rf   test_pairwise_kernels_array_apir     s    &o{JOJB
))


"C!!&))D;;z;.D!!&))D;;z;.D::d6:*D::d6:*D	4	0V4$2e4T"1%.."++==={{dkk)))zzTZZ'''V4&  V<$2e4T"1%.."++==={{dkk)))zzTZZ'''V<&' 
1	0	0s   0D-G&&G/c                  >   t         j                  j                  d      } | j                  d      }| j                  d      }t        }ddi}t        |f||d|}t        |fd|i|}t        ||       t        |f||d|}t        |fd|i|}t        ||       y )Nr   r=   rE   r   r   rp   r]   )rN   rO   rP   rQ   r   r'   r)   r1   )rY   rZ   r]   rD   r   r   r   s          rf   test_pairwise_kernels_callabler     s     ))


"C&!A&!A FS>D	!	8q	84	8B	A	#	#d	#BB 
!	8q	84	8B	A	#	#d	#BBr   c                  ^   t         j                  j                  d      } | j                  d      }| j                  d      }t	        ||d      }ddd}t        ||fdd	d
|}t        ||       t        j                  t              5  t        ||fddi| d d d        y # 1 sw Y   y xY w)Nr   r=   rE   r   r   z:))r   blablar   T)rD   filter_paramsrD   )
rN   rO   rP   rQ   r)   r'   r1   r   r   r   )rY   rZ   r]   r   paramsr   s         rf   "test_pairwise_kernels_filter_paramr   0  s    
))


"C&!A&!A1as#Ad+F	!Q	KuD	KF	KBAr	y	!A6e6v6 
"	!	!s   
B##B,zmetric, funcc                    t         j                  j                  d      }|j                  d      }|j                  d      }t	        |||       } |||      }t        ||        | ||       ||            }t        ||       | t        v r1t        |    ||      }	t        j                  |	      }	t        |	|       y y )Nr   r=   rC   )rN   rO   rP   rQ   r    r1   r   diag)
rD   r   r   rY   rZ   r]   r[   r\   S3	distancess
             rf   test_paired_distancesr   =  s     ))


"C&!A&!AAf-A	aBAr	mAa 0	1BAr,, 071=	GGI&		1% -r   c                    t         j                  j                  d      }|j                  d      j	                  | d      }|j                  d      j	                  | d      }t        ||d      }t        ||d       }t        ||       |j                  d      }t        j                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)	Nr   r=   Fr@   rM   rC   c                 R    t        j                  | |z
        j                  d      S )Nr   axis)rN   absr   r   s     rf   r   z0test_paired_distances_callable.<locals>.<lambda>^  s    BFF1q5M4E4E14E4Mr   r   )
rN   rO   rP   rQ   rR   r    r1   r   r   r   )rX   rY   rZ   r]   r[   r\   s         rf   test_paired_distances_callabler  T  s     ))


"C&!((E(BA&!((E(BAAk2A	!Q'M	NBAr 	&!A	z	"A 
#	"	"s   7CC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                  j                  d      }|j                  dd      }|j                  dd      }t        ||d	      }|j                  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        ||       y )Nr   rK   r   r   rF   r?   rB   rC   sqeuclideansquaredT)rD   metric_kwargsrM   r   r	   a      o   r   )r  rD   Hz>rtol)rN   rq   r%   r$   r1   typer   r	   rO   rP   r   r#   argminrangelenr3   asfortranarray)r  r   rX   rZ   r]   XspYspexpected_idxexpected_valsexpected_vals_sqidxvalsidx2idxspvalsspidxsp2vals2idx3idx4rY   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                                  rf   "test_pairwise_distances_argmin_minr.  j  s6   
 	

QC!:\2A


RD1#;l3A

C

.Cq6LFM1v .a;GIC$Q+>DC&D,'D-(1#s;OME6&sCDFE<(FL)FM*;"**$$$<2::%%% .a=IIC/	1[D0AKD% %Q-@D$	1[D0AD D*+E+,C&D,'D,'D,' .a;GIC$Q+>DC&D,'D-(1#s;OME6&sCDFE<(FL)FM* .	1YsAhIC C&D-( .	1[aIC C&D-( ))


"C		"cA		#sAa;7DKKQK'Mc-.@(AABM)F	11[*&& M#3$?M#3$? 5QBHf4QBHfFF#x*4QBHf4QBHfFF#x* )AA6H(AA6Hx*(AA6H(AA6Hx* 4Aq93
!b//2 *,?@r   c                     | d d d df   S )Nd   r   r#  starts     rf   _reduce_funcr3    s    4C4=r   c                    t         j                  j                  d      }|j                  d      j	                  | d      }t        |      d d d df   }t        |d t        d      }t        |t              sJ t        |      }t        |      dkD  sJ |d   j                  |j                  k(  sJ t        t        j                  |      |d	
       y )Nr   )i  r?   Fr@   r0        >reduce_funcworking_memoryrK   r  atol)rN   rO   rP   rQ   rR   r#   r&   r3  r   r   listr  rS   r1   vstack)rX   rY   rZ   r[   S_chunkss        rf   &test_pairwise_distances_chunked_reducer>    s    
))


"C(#**<e*DA1a#g&A)	4\&H h...H~Hx=1A;''' BIIh'6r   c                 (   t         j                  j                  d      }|j                  d      j	                  | d      }t        |d d d      }t        |t              sJ t        |      }t        |      dkD  sJ t        d	 |D              sJ y )
Nr   r   r?   Fr@   c                      y Nr   r1  s     rf   r   z=test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>   s    r   r5  r6  rK   c              3   $   K   | ]  }|d u  
 y wrB  r   ).0chunks     rf   	<genexpr>z>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>  s     3(u}(s   )rN   rO   rP   rQ   rR   r&   r   r   r;  r  all)rX   rY   rZ   r=  s       rf   +test_pairwise_distances_chunked_reduce_nonerH    s    
))


"C'")),U)CA)	45fH h...H~Hx=13(3333r   good_reducec                     t        |       S rB  r;  Dr2  s     rf   r   r     s    ar   c                 ,    t        j                  |       S rB  )rN   r   rL  s     rf   r   r     s    !r   c                 .    t        |       t        |       fS rB  rK  rL  s     rf   r   r     s    $q'47+r   c                      ||       S rB  r   )rM  r2  scipy_csr_types      rf   r   r     s	    q8Ir   c                 P     ||       t        j                  |       t        |       fS rB  )rN   r   r;  )rM  r2  scipy_dok_types      rf   r   r     s!    1HHQKG9
r   c                     t        j                  d      j                  dd      }t        |d | d      }t	        |       y )Nr   r   rK   @   r6  )rN   aranger   r&   next)rI  rZ   r=  s      rf   ,test_pairwise_distances_chunked_reduce_validrX    s:    * 			"b!$A)	4[H 	Nr   )
bad_reduceerr_typemessagec                 6    t        j                  | | dd  g      S Nr   rN   concatenaterM  ss     rf   r   r   (  s    AbcF4r   zlength 11\..* input: 10\.c                 :    | t        j                  | | dd  g      fS r]  r^  r`  s     rf   r   r   -  s    !R^^Q"#K89r   z!length \(10, 11\)\..* input: 10\.c                     | d d | fS )N	   r   r`  s     rf   r   r   1  s    q!uajr   z length \(9, 10\)\..* input: 10\.c                      y)N   r   r`  s     rf   r   r   3  s    r   z2returned 7\. Expected sequence\(s\) of length 10\.c                      y)N)rf     r   r`  s     rf   r   r   8  s    r   z9returned \(7, 8\)\. Expected sequence\(s\) of length 10\.c                 0    t        j                  d      dfS )Nr   rd  )rN   rV  r`  s     rf   r   r   =  s    "))B-+r   z-, 9\)\. Expected sequence\(s\) of length 10\.c                     t        j                  d      j                  dd      j                  | d      }t	        |d |d      }t        j                  ||      5  t        |       d d d        y # 1 sw Y   y xY w)	Nr   r   rK   Fr@   rU  r6  r   )rN   rV  r   rR   r&   r   r   rW  )rX   rY  rZ  r[  rZ   r=  s         rf   .test_pairwise_distances_chunked_reduce_invalidrk  $  se    D 			"b!$++Lu+EA)	4ZH 
xw	/X 
0	/	/s   A22A;c                 :   t        | |||      }t        |t              sJ t        |      }|| n|}t	        |      dz  dz  }|D ]"  }|j
                  }|t        ||      dz  k  r"J  t        j                  |      }t        | ||      }	t        ||	d       y )Nr8  rD   rh  g      >i   rC   r  r9  )r&   r   r   r;  r  nbytesmaxrN   r<  r#   r1   )
rZ   r]   r8  rD   genblockwise_distancesmin_block_mibblockmemory_usedr[   s
             rf    check_pairwise_distances_chunkedru  N  s    
$Q.QW
XCc=)))s)YAAFQJ'M$llc.-@5HHHH % ))$781a/A'6r   )rB   l2r  c                 @   t         j                  j                  d      }|j                  dd      j	                  |d      }t        t        |d|             }t        |      dkD  sJ t        t        j                  t        j                  |            dd	
       y )Nr     r       _BsizescaleFr@   rK   rm  绽|=r  )rN   rO   rP   normalrR   r;  r&   r  r1   r   r<  )rD   rX   rY   rZ   chunkss        rf   (test_pairwise_distances_chunked_diagonalr  ^  sz    
))


"C


$
/66|%6PA,QqPQFv;??BGGBIIf-.>r   c                     t         j                  j                  d      }|j                  dd      j	                  |d      }t        || d      }t        t        j                  |      dd	
       y )Nr   rx  rz  r{  Fr@   rF   r   r~  r9  )rN   rO   rP   r  rR   r#   r1   r   )rD   rX   rY   rZ   r   s        rf   )test_parallel_pairwise_distances_diagonalr  g  s[    
))


"C


$
/66|%6PA"1VA>IBGGI&6r   c                     t         j                  j                  d      } | j                  dd      }| j                  dd      }|dz  j	                  d      }t        ||dd|	      }t        ||dd|	      }t        ||       y
)zjCheck that Y_norm_squared is correctly sliced alongside Y.

    Non-regression test for issue #33877.
    *      r?      rF   rK   r   rB   )rD   r   Y_norm_squaredN)rN   rO   rP   randr   r#   r1   )rY   rZ   r]   r  D_single
D_parallels         rf   /test_parallel_pairwise_distances_y_norm_squaredr  o  s    
 ))


#CQAQAdZZQZ'N!	1[>H $	1[>J J)r   z0ignore:Could not adhere to working_memory configc                    t         j                  j                  d      }|j                  d      j	                  | d      }t        |d dd       t        dd      D ]  }t        |d d	|z  d        t        |j                         d dd       |j                  d
      j	                  | d      }t        ||dd       t        |j                         |j                         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        y # 1 sw Y   y xY w)Nr   )   r?   Fr@   rK   rB   rm  irF   )r0  r?   i'  r   r5  r   )rN   rO   rP   rQ   rR   ru  r  tolistr#   r&   r   r   rW  r   r   StopIteration)rX   rY   rZ   powerr]   rM  rp  s          rf   test_pairwise_distances_chunkedr    sJ    ))


"C(#**<e*DA$QQ{SsA(tAuH[	
 
 %	
D; 	(#**<e*DA$Q!KP$	
AHHJq %Q%T %Q!KP 	1A
$Qvm
TCc=)))9>>	}	%S	 
&	%	%s   E33E<x_array_constrdense)idsy_array_constrc                 f     | dgg      } |dgdgg      }t        ||      }t        |ddgg       y Nr   rK   rF   r   r   )r   r1   )r  r  rZ   r]   rM  s        rf   %test_euclidean_distances_known_resultr    s@     	uAaSz"AAq!AAc
|$r   c                 v   t         j                  j                  d      }|j                  d      j	                  | d      }|j                  d      j	                  | d      }|j	                  t         j
                        dz  j                  d      j                  dd	      }|j	                  t         j
                        dz  j                  d      j                  dd	      } ||      }t        ||      }t        |||
      }t        |||      }	t        ||||      }
t        ||       t        |	|       t        |
|       t        ||t        j                  |      t        j                  |            }t        j                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r   r   Fr@      r   rF   rK   r   r   X_norm_squaredr  r  r  )rN   rO   rP   rQ   rR   r   r   r   r   r1   
zeros_liker   r   r   )rX   r  rY   rZ   r]   	X_norm_sq	Y_norm_sqD1D2D3D4wrong_Ds               rf   #test_euclidean_distances_with_normsr    sl    ))


"C(#**<e*DA(#**<e*DA "**%*//Q/7??2FI"**%*//Q/7??2FIqA	Q	"B	Q)	<B	Q)	<B	Q)I	VBBBB "		}}Y/}}Y/	G 
~	&$ 
'	&	&s   F//F8	symmetricTc                 L   t         j                  j                  |       }|j                  d      }|r|n|j                  d      }|j	                  t         j
                        dz  j                  d      j                  dd      }|j	                  t         j
                        dz  j                  d      j                  dd      }t        ||      }t        |||      }t        |||      }	t        ||||	      }
t        ||       t        |	|       t        |
|       y )
Nr  r  rF   rK   r   r   r  r  r  )
rN   rO   rP   rQ   rR   float32r   r   r   r1   )global_random_seedr  rY   rZ   r]   r  r  r  r  r  r  s              rf   &test_euclidean_distances_float32_normsr    s     ))

 2
3C(#AC--h7A"**%*//Q/7??2FI"**%*//Q/7??2FI	Q	"B	Q)	<B	Q)	<B	Q)I	VBBBBr   c            	         t         j                  j                  d      } | j                  d      }| j                  d      }|dz  j	                  d      }|dz  j	                  d      }t        ||||      }t        |||j                  dd      |j                  dd            }t        |||j                  dd      |j                  dd            }t        ||       t        ||       t        j                  t        d	
      5  t        |||d d        d d d        t        j                  t        d
      5  t        |||d d        d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Nr   r  r  rF   rK   r   r  r   zIncompatible dimensions for Xr   r>   r  zIncompatible dimensions for Yr  )rN   rO   rP   rQ   r   r   r   r1   r   r   r   )rY   rZ   r]   r  r  r  r  r  s           rf   $test_euclidean_distances_norm_shapesr    sO   
))


"C(#A(#AdZZQZ'NdZZQZ'N		1^N
B 
		%--b!4%--b!4	
B 
		%--a4%--a4	
B BB	z)H	IAq1CD 
J	z)H	IAq1CD 
J	I 
J	I	I	Is   EE(E%(E1c                 x   t         j                  j                  d      }|j                  d      j	                  | d      }d||dk  <   |j                  d      j	                  | d      }d||dk  <   t        ||      } ||      } ||      }t        ||      }t        ||d       |j                  | k(  sJ y )	Nr   r0  r   Fr@   皙?r  ư>r  )	rN   rO   rP   rQ   rR   r   r   r1   rS   )rX   r  r  rY   rZ   r]   expectedr   s           rf   test_euclidean_distancesr    s     ))


"C)$++Lu+EAAa#gJ(#**<e*DAAa#gJQ{HqAqA#Aq)I Ixd3??l***r   c                 "   t         j                  j                  d      }|j                  d      j	                  | d      }d||dk  <   t        t        |            } ||      }t        |      }t        ||d       |j                  | k(  sJ y )Nr   r  Fr@   r  r  r  )
rN   rO   rP   rQ   rR   r   r
   r   r1   rS   )rX   r  rY   rZ   r  r   s         rf   test_euclidean_distances_symr  0  s     ))


"C)$++Lu+EAAa#gJ%(#HqA#A&I Ixd3??l***r   
batch_size)Nr>   rf  e   c                    t         j                  j                  d      }|j                  d      j	                  t         j
                        }d||dk  <   |j                  d      j	                  t         j
                        }d||dk  <   t        ||      } ||      } ||      }t        |||       }t        j                  t        j                  |d            }t        ||d       y )Nr   r  r  r  r]   r  r  r  )rN   rO   rP   rQ   rR   r  r   r   sqrtmaximumr1   )r  r  r  rY   rZ   r]   r  r   s           rf   test_euclidean_distances_upcastr  G  s     ))


"C)$++BJJ7AAa#gJ(#**2::6AAa#gJQ{HqAqA+AzJI

9a01I Ixd3r   c                 p   t         j                  j                  d      }|j                  d      j	                  t         j
                        }d||dk  <   t        t        |            } ||      }t        |||       }t        j                  t        j                  |d            }t        ||d       y )Nr   r  r  r  r  r  )rN   rO   rP   rQ   rR   r  r   r
   r   r  r  r1   )r  r  rY   rZ   r  r   s         rf   #test_euclidean_distances_upcast_symr  f  s     ))


"C)$++BJJ7AAa#gJ%(#HqA+AzJI

9a01I Ixd3r   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       y )Nr   r   r  r  )rN   r   r   r   r1   )rS   epsr  r  rZ   r]   r   r  s           rf   'test_euclidean_distances_extreme_valuesr  }  s]      	3%#+e,A
39+#$E2A#Aq)IQ{HIxd3r   r  c                     t         j                  j                  d      }|j                  dd      }|j                  dd      }t	        |||       }t        |||       }t        ||       y )N9  r   r?   )r]   r  )rN   rO   rP   r   r   r   r1   )r  rY   rZ   r]   normal_distancenan_distances         rf   8test_nan_euclidean_distances_equal_to_euclidean_distancer    s\     ))


%C		!QA		!QA)!q'BO*17CLO\2r   rZ   r]   c                     t        j                  t              5 }t        | |       d d d        d}|t	        j
                        k(  sJ y # 1 sw Y   &xY w)Nr   zBInput contains infinity or a value too large for dtype('float64').)r   r   r   r   strvalue)rZ   r]   excinfoexp_msgs       rf   ,test_nan_euclidean_distances_infinite_valuesr    sI     
z	"gQ' 
# SGc'--((((	 
#	"s   AAzX, X_diag, missing_valuerF   r   c                 *   t        j                  d|g|dgg      }t        | |      }t        ||       t        | d|      }t        |dz  |       t        | | |      }t        ||       t        | | j	                         |      }t        ||       y )N        r   missing_valuesTr  r  rF   )rN   r   r   r1   rA   )rZ   X_diagmissing_valueexp_distr#  dist_sqdist_twodist_two_copys           rf    test_nan_euclidean_distances_2x2r    s      xx#v45H"1]CDHd#%amTGHaK)&q!MJHHh'+AqvvxVMHm,r   r  c                 F   t        j                  | | gddgg      }t        j                  t         j                  t         j                  gt         j                  dgg      }t        ||       }t	        ||       t        ||j                         |       }t	        ||       y )Nr   rK   r  )rN   r   rT   r   r1   rA   )r  rZ   r  r#  s       rf   )test_nan_euclidean_distances_complete_nanr    sz    
=-01a&9:Axx"&&"&&)BFFA;78H"1]CDHd#"1affh}MDHd#r   c           	         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        ||j                         |       }t        ||       t        ||       t        ||d
      }t        ||d      }	t        ||	       y )Nr   g      @g      @r   g      @g      @g      @r  rK   Tr  g      D@rF   Fg      9@r@   )rN   r   r   r2   Tr1   r  rA   )
r  rZ   r]   r  r  r  r  D5D6D7s
             rf   (test_nan_euclidean_distances_not_trivialr    s   
-c3/Cc=9-sC	
	A 	CmS9M3S9M=#sC	
	A 
!Am	DB	 Am	DBBDD! bqE1Ra5$}	
 4	45	 aFAaFE-	
 '';
<	=>	 
!=	AB	 Am	DB	 AFFH]	KBBB 
!AD	1B	 AE	2BBr   c                     t        j                  dd| dgd| d| gg      }t        || d      }t        j                  |dk\        sJ t        || d      }t	        |d	       y )
NgzG^g     @@gB@g|ï@T)r  r  r   Fr  )rN   r   r   rG  r1   )r  rZ   dist_squaredr#  s       rf   7test_nan_euclidean_distances_one_feature_match_positiver    ss    
 	e]E2mZ?	
	A +	-L 66,!#$$$"1]ERDD#r   c                     t         j                  j                  d      } t        j                  | 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                  | j	                  dd            }t        |      }t        |t        j                  |         dg|j                  d	   z         t        j                  |dk\        sJ t        j                  |dk        sJ y )
Nr  i  r  r~  r9  r   ry  i  r   )rN   rO   rP   r  r  r<  r   r1   rG  diag_indices_fromrW   )rY   r   XArM  XBr  rZ   s          rf   test_cosine_distancesr  "  s   
))


%C
sxx}A	Aq6	BAAc
S#J/e<66!s(66!s(Ab**1-.c
;	Ar7	B	"	B66")66")B#sc3Z01 	sxxd#$AAAb**1-.
0BC66!s(66!s(r   c                     d } t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  |D cg c]  }|D cg c]  } | ||       c} c}}      }t        ||      }t        ||       |j                  d      }d}t        j                  t        |      5  t        |       d d d        y c c}w c c}}w # 1 sw Y   y xY w)Nc                 Z   |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   rK   rF   )rN   sincosarcsinr  )r   r   diff_latdiff_lonacs         rf   slow_haversine_distancesz:test_haversine_distances.<locals>.slow_haversine_distancesB  s    Q4!A$;Q4!A$;FF8a< A%FF1Q4L266!A$<'"&&A*>!*CC
 		"''!*%%r   r   rI   )r   rF   )r   r   z-Haversine distance only valid in 2 dimensionsr   )
rN   rO   rP   rQ   r   r   r1   r   r   r   )	r  rY   rZ   r]   r   r   r  r  err_msgs	            rf   test_haversine_distancesr  @  s     ))


"C&!A'"A	J1A>Aq,Q2A>J	KB	Q	"BB'"A=G	z	1A 
2	1 ?J 
2	1s$   	C
"C2C
C%C
%C.c                  P    dgdgg} dgdgg}t        | |      }t        |ddg       y r  )r!   r1   rZ   r]   rM  s      rf   test_paired_euclidean_distancesr  [  6    
qc
A
qc
A"1a(AASz"r   c                  P    dgdgg} dgdgg}t        | |      }t        |ddg       y r  )r"   r1   r  s      rf   test_paired_manhattan_distancesr  c  r   r   c                  P    dgdgg} dgdgg}t        | |      }t        |ddg       y )Nr   rK   rF   rJ   )r   r1   r  s      rf   test_paired_cosine_distancesr  k  s6    
qc
A
qc
A1%AASz"r   c                  T   t         j                  j                  d      } | j                  d      }| j                  d      }t	        ||      }d}t        |||      }|j                  t        k(  sJ t        |      D ]t  \  }}t        |      D ]a  \  }}	t        j                  ||	z
  dz  ||	z   z         }
t        j                  ||
z        }t        |||f   |
       t        |||f   |       c v t        |      }t        t        j                  |      d       t        j                  |dkD        sJ t        j                  |t        j                  t        j                  |            z
  dk        sJ | j                  d      j                  t         j                         }| j                  d      j                  t         j                         }t        ||      }|j                  t         j                   k(  sJ | j                  d      j                  t         j"                        }t        ||      }t        j$                  |      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   kD  sJ |d   |d   kD  sJ t'        j(                  t*              5  t        ddgg       d d d        t'        j(                  t*              5  t        ddggddgg       d d d        t'        j(                  t*              5  t        ddggddgg       d d d        t'        j(                  t*              5  t        ddggg dg       d d d        y # 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   VxY w# 1 sw Y   y xY w)Nr   r=   r@  r   r   rF   rK   g333333?gffffff?r   g?rG   )r   rK   )rK   rK   )rK   r   r   )皙?r  g333333?)rN   rO   rP   rQ   r   r   rS   r   	enumerater   expr2   r3   r   rG  rR   r  int32isfiniter   r   r   )rY   rZ   r]   K_addr   r   ir   jr   r   chi2_exps               rf   test_chi_square_kernelr  s  s   
))


"C&!A'"A A&EEAq&A77e!1aLDAqFFAEa<1q5122Dvvedl+HadT2!Q$2	 !  	AArwwqz1%66!a%==66!bggbggaj))A-...&!((4A'"))"**5AAqA77bjj    	'"))"((3AAqA;;q>77e sc1XA
Q#sAAqAT7QtWT7QtW 
z	"aWI 
#	z	"aWIRz* 
#	z	"aVHBxj) 
# 
z	"aVH/0 
#	" 
#	"	"	"	"	" 
#	"s0   M:6N*NN:NNNN'kernelc                     t         j                  j                  d      }|j                  d      } | ||      }t	        ||j
                  d       y )Nr   r=   r  )rN   rO   rP   rQ   r1   r  )r  rY   rZ   r   s       rf   test_kernel_symmetryr    sC     ))


"C&!Aq!AAqssBr   c                     t         j                  j                  d      }|j                  d      } ||      } | ||      } | ||      }t	        ||       y Nr   r=   )rN   rO   rP   rQ   r1   )r  r   rY   rZ   r   r   r   s          rf   test_kernel_sparser    sS     ))


"C&!AQHq!A	(	#BArr   c            	         t         j                  j                  d      } | j                  d      }t	        ||      }t        |j                  d d d   |D cg c]  }t        j                  |      dz   c}       y c c}w )Nr   r=      rF   )	rN   rO   rP   rQ   r   r1   flatr   norm)rY   rZ   r   r   s       rf   test_linear_kernelr    sg    
))


"C&!AaAAFF3Q3Kq!Aq!&++a.A"5q!AB!As   A>
c                      t         j                  j                  d      } | j                  d      }t	        ||      }t        |j                  d d d   t        j                  d             y )Nr   r=   r  r>   )rN   rO   rP   rQ   r)   r1   r  onesrY   rZ   r   s      rf   test_rbf_kernelr    sP    
))


"C&!A1aAAFF3Q3K,r   c                     t         j                  j                  d      } | j                  d      }t	        ||      }t        t        j                  |      t        j                  d             t        j                  |dkD        sJ t        j                  |t        j                  t        j                  |            z
  dk        sJ y )Nr   r=   r>   rK   )	rN   rO   rP   rQ   r   r1   r   r  rG  r  s      rf   test_laplacian_kernelr     s    
))


"C&!AAABGGAJ
+ 66!a%==66!bggbggaj))A-...r   zmetric, pairwise_funcr   r   c                    t         j                  j                  d      }|j                  d      }|j                  d      } ||      } ||      } |||d      }t	        |      sJ  |||d      }	t	        |	      rJ t        |j                         |	       t        |||       }
t        |j                         |
       y )Nr   r=   r   F)dense_outputTrp   )rN   rO   rP   rQ   r   r1   toarrayr'   )rD   pairwise_funcr   rY   rZ   r]   XcsrYcsrr   r   K3s              rf   &test_pairwise_similarity_sparse_outputr(    s     ))


"C&!A&!ADD 
tT	6BB<< 
q!$	/B|BJJL"% 
!q	0BBJJL"%r   c                 R   t         j                  j                  d      }|j                  d      }|j                  d      } | |      } | |      }|d f||f|d f||ffD ]E  \  }}t	        ||d      }t        |      }|t        |      }t	        ||d      }	t        ||	       G y )Nr   r=   r   r   rp   r   )rN   rO   rP   rQ   r'   r+   r1   )
r   rY   rZ   r]   r%  r&  X_Y_r   r   s
             rf   test_cosine_similarityr,    s     ))


"C&!A&!ADDt9q!ftTlT4LAB bBx8r]>2BbBx8B Br   c                      t        j                  t        j                  d      d      } t        | d       \  }}||u sJ t	        | |       y N(   r>   rh  )rN   resizerV  r   r3   )r  
XA_checked
XB_checkeds      rf   test_check_dense_matricesr4    sE     
299R=&	)B22t<J
###r:&r   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	        ||       y )Nr/  r0      r?   rh  )rN   r1  rV  r   r3   r   r  r  r2  r3  s       rf   test_check_XB_returnedr9  %  s     
299R=&	)B	299R=&	)B22r:J
r:&r:&	299R=&	)B0R8J
r:&r:&r   c                     t        j                  t        j                  d      d      } t        j                  t        j                  d      d      }t        j                  t
              5  t        | |       d d d        t        j                  t        j                  d      d      }t        j                  t
              5  t        | |       d d d        y # 1 sw Y   axY w# 1 sw Y   y xY w)N-   )r>   rd  r6  r7  $   )r?   rd  )rN   r1  rV  r   r   r   r   r   r  r  s     rf   test_check_different_dimensionsr>  5  s    	299R=&	)B	299R=&	)B	z	"b"% 
# 
299U#V	,B	z	"B# 
#	"	 
#	" 
#	"s   ,CC%C"%C.c                     t        j                  d      j                  dd      } t        j                  d      j                  dd      }t        j                  t
              5  t        | |       d d d        t        j                  d      j                  dd      } t        j                  d      j                  dd      }t        j                  t
              5  t        | |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr;  rd  r>   r6  r?   rh  )rN   rV  r   r   r   r   r   r=  s     rf   test_check_invalid_dimensionsr@  A  s     
2		q!	$B	2		q!	$B	z	"b"% 
#	2		q!	$B	2		q!	$B	z	"b"% 
#	"	 
#	" 
#	"s   $C2C>2C;>Dc                 R   t         j                  j                  d      }|j                  d      } | |      }|j                  d      } | |      }t	        ||      \  }}t        |      sJ t        ||z
        j                         dk(  sJ t        |      sJ t        ||z
        j                         dk(  sJ t	        ||      \  }}t        |      sJ t        ||z
        j                         dk(  sJ t        |      sJ t        ||z
        j                         dk(  sJ y r  )rN   rO   rP   rQ   r   r   r  r   )	r   rY   r  	XA_sparser  	XB_sparser2  r3  XA_2_checkeds	            rf   test_check_sparse_arraysrE  O  s,    ))


"C			6	"Bb!I			6	"Bb!I29iHJ
 Jy:%&**,111Jy:%&**,1114Y	JJJy:%&**,111L!!!|j()--/1444r   c                 ~    | j                   }t        |      dkD  rt        d | D              S t        d | D              S )NrK   c              3   2   K   | ]  }t        |        y wrB  )tuplify)rD  rb   s     rf   rF  ztuplify.<locals>.<genexpr>k  s     /QcWS\Qs   c              3       K   | ]  }|  y wrB  r   )rD  rs     rf   rF  ztuplify.<locals>.<genexpr>n  s     N1Qs   )rW   r  rU   )rZ   ra  s     rf   rH  rH  f  s8    	A
1vz/Q/// NN""r   c                      t         j                  j                  d      } | j                  d      }t	        |      }| j                  d      }t	        |      }t        ||      \  }}t        ||       t        ||       y r  )rN   rO   rP   rQ   rH  r   r3   )rY   r  	XA_tuplesr  	XB_tuplesr2  r3  s          rf   test_check_tuple_inputrN  q  sm    
))


"C			6	"BI			6	"BI29iHJ
y*-y*-r   c                  B   t        j                  t        j                  d      d      j                  t         j                        } t        j                  t        j                  d      d      j                  t         j                        }t        | d       \  }}|j                  t         j                  k(  sJ t        | |      \  }}|j                  t         j                  k(  sJ |j                  t         j                  k(  sJ t        | j                  t              |      \  }}|j                  t        k(  sJ |j                  t        k(  sJ t        | |j                  t                    \  }}|j                  t        k(  sJ |j                  t        k(  sJ y r.  )rN   r1  rV  rR   r  r   rS   r   r8  s       rf   test_check_preserve_typerP  }  sD   	299R=&	)	0	0	<B	299R=&	)	0	0	<B22t<J
rzz))) 32r:J
rzz)))rzz))) 3299U3CRHJ
u$$$u$$$ 32ryy7GHJ
u$$$u$$$r   r   
seuclideanmahalanobisdist_functionc           
      8   t        d      5  t        j                  j                  d      }|j	                  d      }t        t        ||            }t        j                  t         ||||                   }t        ||       d d d        y # 1 sw Y   y xY w)Nr   )r8  r   r  rC   r   )
r   rN   rO   rP   rQ   r   r
   r<  rU   r1   )r   rD   rS  rY   rZ   expected_distr#  s          rf   +test_pairwise_distances_data_derived_paramsrV    ss     
s	+ii##A&i("56#:;yy}QvfMNOm, 
,	+	+s   A:BBc                 
   t         j                  j                  d      }|j                  d      }|j                  d      }t	        j
                  t        d|  d      5  t        |||        d d d        y # 1 sw Y   y xY w)Nr   r  z+The '(V|VI)' parameter is required for the z metricr   rC   )rN   rO   rP   rQ   r   r   r   r#   )rD   rY   rZ   r]   s       rf   1test_pairwise_distances_data_derived_params_errorrX    sq     ))


"C)$A)$A	<VHGL
 	1a/	
 
 
s   !A99B)
braycurtiscanberra	chebyshevcorrelationhammingrR  r	   rQ  r  r   r   rB   y_is_xzY is Xz
Y is not Xc           	         t         j                  j                  d      }|j                  d      j	                  |d      }i }|r|}t        t        ||             }n|j                  d      j	                  |d      }t        |||       }| dk(  r?dt        j                  t        j                  ||g      ddt         j                  	      i}nb| d
k(  r]dt         j                  j                  t        j                  t        j                  ||g      j                              j                  i}t        ||fd| i|}t!        ||       y )Nr   r=   Fr@   rC   rQ  VrK   )r  ddofrS   rR  VIrD   )rN   rO   rP   rQ   rR   r   r
   r   varr<  r   r   invcovr  r#   r1   )	rD   rX   r^  rY   rZ   r   r]   rU  r#  s	            rf   )test_numeric_pairwise_distances_datatypesrf    s   6 ))


"C&!((E(BAF"56#:;f%,,\,Fa62\!266"))QF"3!!2::VWF}$BIIMM"&&Aq61B1D1D*EFHHIFa<6<V<DD-(r   pairwise_distances_funcc                     ddgdt         j                  gddgddgg} | ||d      }t        j                  |      j                         rJ y)	z8Check that `nan_euclidean` is lenient with `nan` values.r   rK   rF   r   r>   rH   rC   N)rN   rT   isnanany)rg  rZ   outputs      rf   test_nan_euclidean_supportrl    sR     Q!RVVq!fq!f-A$Q/BFxx##%%%%r   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        ||       y)zyCheck that the behavior of constant input is the same in the case of
    full of nan vector and full of zero vector.
    rH   rC   r   N)rN   rT   r$   r1   )X_nan
argmin_nanX_constargmin_consts       rf   (test_nan_euclidean_constant_input_argminrr    su    
 ffbff/"&&"&&1ABE*5%PJ1v1v1v&G,WgoVLJ-r   zX,Y,expected_distance)r  ababc)r  r   r   )r   r  r   )r   r   r  r  rs  r  r   r   c                 >    d }t        | ||      }t        ||       y)z8Check pairwise_distances with lists of strings as input.c                 V    t        j                  t        |       t        |      z
        S rB  )rN   r  r  r   s     rf   dummy_string_similarityzLtest_pairwise_dist_custom_metric_for_string.<locals>.dummy_string_similarity  s    vvc!fs1vo&&r   )rZ   r]   rD   N)r#   r1   )rZ   r]   expected_distancerw  actual_distances        rf   +test_pairwise_dist_custom_metric_for_stringrz    s#    $' )1:QROO%67r   c                      d } t        j                  g dg dg dgt              }t        j                  g dg dg dg      }t        || 	      }t	        ||       y
)zjCheck that pairwise_distances does not convert boolean input to float
    when using a custom metric.
    c                 V    d| |z  j                         | |z  j                         z  z
  S )NrK   )r   )v1v2s     rf   dummy_bool_distzBtest_pairwise_dist_custom_metric_for_bool.<locals>.dummy_bool_dist   s&    BG==?b2g]]_444r   )rK   r   r   r   )rK   r   rK   r   )rK   rK   rK   rK   r   )r  rJ         ?)rJ   r  rJ   )r  rJ   r  )rZ   rD   N)rN   r   r   r#   r1   )r  rZ   rx  ry  s       rf   )test_pairwise_dist_custom_metric_for_boolr    sV    
5 	,l;4HA	
 )1_EOO%67r   c                      | t        j                  d            g} | t        j                  d            g} t        dd      d t        ||      D               y )Nr   rF   r   )r   
max_nbytesc              3   N   K   | ]  \  }} t        t              ||        y wrB  )r;   r   )rD  m1m2s      rf   rF  z9test_sparse_manhattan_readonly_dataset.<locals>.<genexpr><  s)      %;TR$#$R,;Ts   #%)rN   r  r:   zip)r   	matrices1	matrices2s      rf   &test_sparse_manhattan_readonly_datasetr  4  sU     rwwv/0Irwwv/0I %HA!$ %;>y);T% r   )rB   )r   typesr   numpyrN   r   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._array_apir,   r-   r.   r/   sklearn.utils._testingr0   r1   r2   r3   r4   sklearn.utils.fixesr5   r6   r7   r8   r9   sklearn.utils.parallelr:   r;   rg   markparametrizer}   r   r   DeprecationWarningr   r   r   r   rV  rR   _minkowski_kwdsr   r   r  r   r   r   r   r   r   r   r   itemsr   r  thread_unsafer.  r3  r>  rH  rX  r   r   rk  ru  r  r  r  filterwarningsr  r   rr   r  r  r  r  r  r  r  r  paramxfailr  r  infr  r  rT   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r(  r,  r4  r9  r>  r@  rE  rH  rN  rP  rV  rX  rf  rl  rr  rz  r  r  )rQ  rS  	containers   000rf   <module>r     s        !  # 4       > ,    5L^ .-/ #GH' I	
'B?$ .9.9.9.9>< : : : :><F ,-#=>: ? .:<2 "46F!GH% I%:F "		!Q..xe.D1MO 	["-	
 	

 
<(A7	.#?$ 2::rzz3"?@ A%& .-/ 	["-	["-	<(A7	.#?	;#7	5		5BI T .9 :	
> .-/ T'		'D&
7 )?)9)?)?)AB.9& : C&*, .9.9vA : : vAr7"
4  $+ -,N )7I, - -N )7 	

 -()( ) 5(	
 :0	

 
!*.QRA	
  H	
 ,<	
->?>7  #EF? G? #EF7 G7*& NO! P!H XXJ		HIY''HH  
 XXJ		HIY''HH  
%% XXJ		HIY''HH  
%
%@ tUm4 5 ED XXJ		HIY''HH  
 XXJ		HIY''HH  
++* XXJ		HIY''HH  
+
+$ '89XXJ		HIY''HH  
 XXJ		HIY''HH  
4 :4( '89XXJ		HIY''HH  
4 :4" 	T4 JJ++##+M#N		
 G-	4 .	4 T5M23 33 xrxx"&&!61rvvg,8PQRxrxx"&&!61rvvg,8PRVWX) Y S) 	Aq6Aq6"	#WRWWQZ8	Aq6Arvv;'	('"''!*bff=	BFFA;BFF,	-rvvrvv>	BFFA;,	-wrwwqz266B	Arvv;BFF,	-wrwwqz266B	Aq6Aq6"	#WRWWQZ4	Aq6Ar7#	$gbggaj"5	B7QG$	%rvvr2	B7RG$	%wrwwqz26	Ar7QG$	%wrwwqz26--  2662,7	$ 8	$ 2662,71 81h 2662,7 8(<6###31l 
 
  
 .9 :
C-	/ +< => .9& :	
&* .9  : ('' 	$& .95 :5,#	.%0 Aq6*L-#@A(*DE
- B +

- L-#@A0 B0 " D%=x6NO) P#$)> 24QR&	&.  o?	
 $K3Z#sc3Z0	
8882 .9 : O!n I
 I Ip I
 I4 I0 I
 I4 IsB   9|| ?|%|*|/|4|9&|>}}}