
    Mpj                        S SK r S SKJr  S SKrS SKrS SKJr  S SKJr  S SK	J
r
JrJrJrJrJr  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1  S S	K2J3r3  S S
K4J5r5J6r6J7r7J8r8  S SK9J:r:J;r;J<r<J=r=J>r>  S SK?J@r@JArAJBrBJCrCJDrD  S SKEJFrFJGrG  S rH\R                  R                  S\8" 5       5      \R                  R                  S/ SQ5      S 5       5       rKS rL\R                  R                  S\A5      \R                  R                  S\B5      \R                  R                  S\@5      \R                  R                  S\C5      S 5       5       5       5       rM\>" \NS9\R                  R                  S\5      S 5       5       rOS rP\R                  R                  S\*\./5      S 5       rQS rR\R                  " SS 5      R                  S!S"S#9SS$.rUS% rV\R                  R                  S&\*S'0 4\*\\U4\*S(\U4\.S)S*S04\.\VS+S,04/5      \R                  R                  S-\R                  \R                  \Y/5      S. 5       5       rZ\R                  R                  S\8" 5       5      \R                  R                  S&\*S'0 4\*S/0 4\.S)S*S04\.\VS+S,04\.S0S+S,04/5      S1 5       5       r[S2 r\\R                  R                  S/ S3Q5      \R                  R                  S\C5      S4 5       5       r]\R                  R                  S\8" 5       5      \R                  R                  S/ S5Q5      S6 5       5       r^S7 r_S8 r`\R                  R                  S9\R                  " 5       5      \R                  R                  S\C5      S: 5       5       rbS; rc\R                  R                  \R                  R                  S<\D5      \R                  R                  S\C5      S= 5       5       5       reS> rfS? rgS@ rh\R                  R                  SASB SC SD /\C V s/ s H	  n U 4SE jPM     sn -   \D Vs/ s H	  nU4SF jPM     sn-   5      SG 5       ri\R                  R                  SHSI \jSJ4SK \jSL4SM \jSN4SO \kSP4SQ \kSR4SS \kST4/5      SU 5       rlSSV jrm\R                  R                  SSW5      SX 5       rn\R                  R                  SSW5      SY 5       roSZ rp\R                  R                  S[5      S\ 5       rr\R                  R                  S]\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9\R                  R                  S`\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9Sa 5       5       ru\R                  R                  S`\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9Sb 5       rv\R                  R                  ScSdS"/5      Se 5       rwSf rx\R                  R                  S]\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9\R                  R                  S`\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9Sg 5       5       ry\R                  R                  S]\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9Sh 5       rz\R                  R                  Si/ SjQ5      \R                  R                  S]\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9\R                  R                  S`\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9Sk 5       5       5       r{\R                  R                  Si/ SjQ5      \R                  R                  S]\R                  /\C-   S^/\C Vs/ s H  o"R                  PM     sn-   S_9Sl 5       5       r|\R                  R                  Sm\R                  SnSo4\R                  " \R                  SpSq\R                  R                  SrSs9St9/5      \R                  R                  SuSSv/5      Sw 5       5       r\R                  R                  SxSdS"/5      Sy 5       r\R                  R                  Sz\R                  " \GR                  S //5      \R                  " S \GR                  * //5      /5      \R                  R                  S{\R                  " \GR                  S //5      \R                  " S \GR                  * //5      S/5      S| 5       5       r\R                  R                  S}\R                  " S S/SS //5      \GR                  " S~5      \GR                  4\R                  " S S/S\GR                  //5      \GR                  " S~5      \GR                  4\R                  " \GR                  S/S\GR                  //5      \GR                  \GR                  4\R                  " \GR                  S/\GR                  S //5      \GR                  " S~5      \GR                  4\R                  " S \GR                  /S\GR                  //5      \GR                  " S~5      \GR                  4\R                  " S S/SS //5      \GR                  " S~5      S4\R                  " S S/SS//5      \GR                  " S~5      S4\R                  " SS/SS//5      \GR                  S4\R                  " SS/SS //5      \GR                  " S~5      S4\R                  " S S/SS//5      \GR                  " S~5      S4/
5      S 5       r\R                  R                  S\GR                  S/5      S 5       r\R                  R                  S\GR                  S/5      S 5       r\R                  R                  S\GR                  S/5      S 5       rS rS rS rS rS rS r\R                  R                  S\#\/\0\"\1\45      S 5       r\R                  R                  S\#\/\0\"\1\45      \R                  R                  S\C5      S 5       5       rS rS rS r\R                  R                  SS\#4S\4/5      \R                  R                  S\C5      S 5       5       r\R                  R                  S\C5      S 5       rS rS rS rS r\R                  R                  S\C5      S 5       rS rS rS r\R                  R                  SSS~/5      \R                  R                  SSS/5      \R                  R                  S\*\-/5      S 5       5       5       r\R                  R                  SSS/5      S 5       r\R                  R                  S/ SQ5      \R                  R                  SSdS"/SS/S_9S 5       5       r\R                  R                  S\*\+\,/5      S 5       rS r\R                  R                  S/ SQS/ SQ/ SQ/ SQ/4/ SQSS/SS/SS/SS//4/5      S 5       rS r\R                  R                  \R                  R                  S\C5      S 5       5       rgs  sn f s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )    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                 R	   [         R                  R                  S5      nUR                  S5      R	                  U SS9n[        USS9n[        U5      n[        X45        UR                  UR                  s=:X  a  U :X  d   e   eUR                  S5      R	                  U SS9n[        X%SS9n[        X%5      n[        X45        UR                  UR                  s=:X  a  U :X  d   e   eUR                  S5      R	                  U SS9nUR                  S5      R	                  U SS9n[         R                  US'   [         R                  US'   [        XgS	S9n[        Xg5      n	[        X5        UR                  U	R                  s=:X  a  U :X  d   e   e[        U V
Vs/ s H  n
[        U
 Vs/ s H  oPM     sn5      PM      snn
5      n[        U V
Vs/ s H  n
[        U
 Vs/ s H  oPM     sn5      PM      snn
5      n[        XSS9n[        X45        UR                  UR                  s=:X  a  U :X  d   e   eUR                  S
5      R	                  U SS9nUS S 2S4   S-
  S-  [         R                  -  S-  US S 2S4'   US S 2S4   S-
  S-  [         R                  -  US S 2S4'   [        USS9n[        U5      n[        X45        UR                  S5      R	                  U SS9nUS S 2S4   S-
  S-  [         R                  -  S-  US S 2S4'   US S 2S4   S-
  S-  [         R                  -  US S 2S4'   [        X%SS9n[        X%5      n[        X45        [        USS9n[        U[        S9nUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   e[        X45        [        X%SS9n[        X%[        S9nUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   e[        X45        [        X%SS9n[        X%[         S9nUR                  S   UR                  S   :X  d   eUR                  S   UR                  S   :X  d   e[        X45        g s  snf s  snn
f s  snf s  snn
f )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                 _/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/metrics/tests/test_pairwise.py&test_pairwise_distances_for_dense_datarg   J   sS   
))


"C 	&!((E(BA1[1A	Q	BA77bhh.,..... 	&!((E(BA14A	Q	"BA77bhh.,.....   (//5/IH  (//5/IHVVHTNVVHTN!(_MH';IH(>>Y__<<<<<< ;#e,1Q,-;<H;#e,1Q,-;<H	H{	CBA77bhh.,.....
 	&!((E(BAAw}!BEE)A-AadGAw}!BEE)AadG1[1A	Q	BA 	&!((E(BAAw}!BEE)A-AadGAw}!BEE)AadG14A	Q	"BA
 	1[1A	Ai	0B771:###771:###A 	14A	A	3B771:###771:###A
 	11A	A	0B771:###771:###A_ -;,;s0   R
-R8R
R#
$R/R#
R
R#
z(array_namespace, device_name, dtype_namerD   )r   rB   rM   c                    [        XU5      u  pE[        R                  R                  S5      nUR	                  S5      R                  USS9nUR	                  S5      R                  USS9nUR                  XuS9n	UR                  XS9n
[        SS9   [        XS9n[        U[        S	S
9n[        U5      S   R                  UR                  :X  d   eUR                  U	R                  :X  d   eUR                  U	R                  :X  d   e[        XsS9n[        X5        [        XUS9n[        U[        S	S
9n[        U5      S   R                  UR                  :X  d   eUR                  U	R                  :X  d   eUR                  U	R                  :X  d   e[        XxUS9n[        X5        S S S 5        g ! , (       d  f       g = f)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    &oJOJB
))


"CV$++JU+CDV$++JU+CD::d:*D::d:*D	4	0!$6$2e4T"1%.."++==={{dkk)))zzTZZ'''!$6& "$v>$2e4T"1%.."++==={{dkk)))zzTZZ'''!$v>&' 
1	0	0s   DF77
Gc                     [        S5      u  p[        R                  R                  S5      nUR	                  S5      nUR	                  S5      nU R                  X1S9nU R                  XAS9n[        SS9   [        R                  " 5          [        R                  " S5        [        XVS	S
9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)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::d:*D::d:*D	4	0$$&!!'*t+> ' 
1	0&& 
1	0s$   6C!B>-C>
C	C
Ccoo_containercsc_containerbsr_containercsr_containerc                    [         R                  R                  S5      nUR                  S5      R	                  USS9nUR                  S5      R	                  USS9nU" U5      nU" U5      n	[        XSS9n
[        X5      n[        X5        U
R                  UR                  s=:X  a  U:X  d   e   e[        XSS9n
[        X5      n[        X5        U
R                  UR                  s=:X  a  U:X  d   e   e[        X" U5      S	S9n
[        U" U5      U " U5      5      n[        X5        U[         R                  :X  a'  U
R                  UR                  s=:X  a  U:X  d   e   eOJ[        R                  " [        5         U
R                  UR                  s=:X  a  U:X  d   e   e S S S 5        [        Xg5      n[        X5        U[         R                  :X  a'  U
R                  UR                  s=:X  a  U:X  d   e   eOJ[        R                  " [        5         U
R                  UR                  s=:X  a  U:X  d   e   e S S S 5        S
S0n[        Xg4SS0UD6n
[        Xg4S[        0UD6n[        X5        S
S0n[        U4SS0UD6n
[        U4S[        0UD6n[        X5        [        R                  " [         5         [        USS9  S S S 5        [        R                  " [         5         [        XiSS9  S S S 5        g ! , (       d  f       GNc= f! , (       d  f       N= f! , (       d  f       N_= f! , (       d  f       g = f)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8kBA	X	0BA77bhh.,.....8h?A	(	-BA77bhh.,.....8]1%5kJA	]1-}Q/?	@BArzz!ww"((2l22222
 ]]>*77bhh6,66666 + 
Q	"BArzz!ww"((2l22222
 ]]>*77bhh6,66666 + :D1<<t<A	A	;	;d	;BA :D19[9D9A	A	8i	84	8BA 
y	!8K8 
"	y	!1{; 
"	!; +* +*  
"	!	!	!s0   'L'LL)2L:
L
L&)
L7:
Mcategoryc                 l   [         R                  R                  S5      nUR                  SS5      nUR	                  5       nSUS   -
  US'   [        [        S9   US 4 HA  n[        X$U S9n[        R                  " USS9  [         R                  " US:g  5      S:X  a  MA   e   S S S 5        S	U -  n[        R                  " [        US
9   [        X S9  S S S 5        [        R                  " [        US
9   [        UR                  [        5      X0S9  S S S 5        [        R                   " 5          [        R"                  " S[        5        [        UR                  [        5      U S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)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     sC    ))


"C		!QA	A!D'kAdG 
"7	8TA$Q&9CNN31-66#(#q(((  
9 8&
@C	+3	71, 
8 
+3	7188D>Q> 
8 
	 	 	"g'<=188D>&9 
#	"# 
9	8 
8	7 
8	7 
#	"s7   AE2 E2

F5F09F%2
F 
F
F"%
F3c                     [         R                  R                  S5      n U R                  SS5      n[        R
                  " 5          [        R                  " S[        5        [        USS9  S S S 5        g ! , (       d  f       g = f)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   &A66
Bfuncc                    [         R                  " [        SS9   U " [        R                  " S5      SS9  S S S 5        [         R                  " [        SS9   U " [        R                  " S5      [        R                  " S5      SS9  S S S 5        [         R                  " [        SS9   U " [        R                  " S5      [        R                  " S5      SS9  S S S 5        [        R                  " S5      nU " USS9nXL d   e[        R                  " S5      nU " U[        R                  " S	5      SS9nXL d   eU " [        R
                  " S
//SS9SS9nSUR                  R                  :X  d   eU " S//SS9n[        U[        R                  5      (       d   eg ! , (       d  f       GNq= f! , (       d  f       GN1= f! , (       d  f       N= f)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  sZ    
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 1F2)1G 
F/2
G
Gc                      [         R                  " [        SS9   [        [        R
                  " SS5      SS9  S S S 5        g ! , (       d  f       g = f)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           	         [        X5      u  p4[        [        R                  " U SUS9[        R                  " USUS940 UD6nUR                  S:  a0  UR                  US5      nUR                  S:X  a  [        US   5      $ [        S5      e)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    !EBqqR(#..r*J	NR	A
 	vvzAu%<<4##
M
NNr   zfunc, metric, kwdsrB   r	   
polynomialdegreegamma皙?rS   c                 j   [         R                  R                  S5      n[         R                  " SUR	                  S5      -  US9n[         R                  " SUR	                  S5      -  US9nU " U4USS.UD6nU " U4USS.UD6n[        Xx5        U " XV4USS.UD6nU " XV4USS.UD6n[        Xx5        g )	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AQ3&3d3A	a	46!	4t	4BAr   rM   	laplacianc                    [        X4U5      u  pg[        R                  R                  S5      n[        R                  " SUR                  S5      -  US9n	[        R                  " SUR                  S5      -  US9n
UR                  XS9nUR                  XS9n[        SS9   S	 GH,  nUc  S OUnUc  S OU
n
U " X4US
S.UD6n[        U[        SS9n[        U5      S   R                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  UR                  :X  d   eU " X4USS.UD6n[        U[        SS9n[        U5      S   R                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  UR                  :X  d   eU " U	4USS.UD6n[        UU5        [        UU5        GM/     S S S 5        g ! , (       d  f       g = f)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   " &oJOJB
))


"C88A))&11DD88A))&11DD::d:*D::d:*D	4	0'E =4dD =4dDTIqIDII"9EBL +A.772;;FFF##t{{222??djj000T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   #D4G  
G.c                  0    [        S//S S9S   S:X  d   eg )Nr   c                     g)Nr>   r   r   r   s     rf   <lambda>9test_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                    [         R                  R                  S5      nUR                  S5      nUR                  S5      n[        U    n[        X0S9nU" U5      n[        Xg5        [        X4U S9nU" X4S9n[        Xg5        [        U VV	s/ s H  n[        U V	s/ s H  oPM     sn	5      PM      sn	n5      n
[        U VV	s/ s H  n[        U V	s/ s H  oPM     sn	5      PM      sn	n5      n[        XU S9n[        Xg5        U" U5      nU" U5      nU S;   a  g [        XU S9n[        Xg5        g s  sn	f s  sn	nf s  sn	f s  sn	nf )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	!	+B	!BB	!	0B	!	BB;#e,1Q,-;<H;#e,1Q,-;<H	(V	<BB QHQH**	(v	>BB -;,;s0   D7
D2&D7
E
D=E
2D7
=E
)r   r   r   r   r   r   r   c                    [        XU5      u  pE[        R                  R                  S5      nSUR	                  S5      -  nUR                  USS9nSUR	                  S5      -  nUR                  USS9nUR                  XuS9n	UR                  XS9n
[        SS	9   [        XS
9n[        U[        SS9n[        U5      S   R                  UR                  :X  d   eUR                  U	R                  :X  d   eUR                  U	R                  :X  d   e[        XpS
9n[        X5        [        XU S9n[        U[        SS9n[        U5      S   R                  UR                  :X  d   eUR                  U	R                  :X  d   eUR                  U	R                  :X  d   e[        XxU S9n[        X5        S S S 5        g ! , (       d  f       g = f)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    &oJOJB
))


"C!!&))D;;z;.D!!&))D;;z;.D::d:*D::d:*D	4	04$2e4T"1%.."++==={{dkk)))zzTZZ'''4&  V<$2e4T"1%.."++==={{dkk)))zzTZZ'''V<&' 
1	0	0s   DG
Gc                  6   [         R                  R                  S5      n U R                  S5      nU R                  S5      n[        nSS0n[        U4X#S.UD6n[        U4SU0UD6n[        XV5        [        U4XS.UD6n[        U4SU0UD6n[        XV5        g )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                  \   [         R                  R                  S5      n U R                  S5      nU R                  S5      n[	        XSS9nSSS.n[        X4SS	S
.UD6n[        X55        [        R                  " [        5         [        X4SS0UD6  S S S 5        g ! , (       d  f       g = f)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1s#Ad+F	!	KuD	KF	KBA	y	!6e6v6 
"	!	!s   B
B+zmetric, funcc                 v   [         R                  R                  S5      nUR                  S5      nUR                  S5      n[	        XEU S9nU" XE5      n[        Xg5        U" U" U5      U" U5      5      n[        Xh5        U [        ;   a1  [        U    " XE5      n	[         R                  " U	5      n	[        X5        g g )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f-A	aBA	mAa 0	1BA,, 07=	GGI&		% -r   c                    [         R                  R                  S5      nUR                  S5      R	                  U SS9nUR                  S5      R	                  U SS9n[        X#SS9n[        X#S S9n[        XE5        UR                  S5      n[        R                  " [        5         [        X#5        S S S 5        g ! , (       d  f       g = f)	Nr   r=   Fr@   rM   rC   c                 L    [         R                  " X-
  5      R                  SS9$ )Nr   axis)rN   absr   r   s     rf   r   0test_paired_distances_callable.<locals>.<lambda>^  s    BFF15M4E4E14E4Mr   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k2A	!'M	NBA 	&!A	z	" 
#	"	"s   )B>>
Cdok_containerc                 l   [         R                  " S/S//US9n[         R                  " S/S//US9nU " U5      nU" XBS9nSS/nSS/nSS/n	[        X4SS	9u  p[        X4SS	9n[	        X5        [	        X5        [	        X5        [        XVSS	9u  p[        XVSS	9n[	        X5        [	        X5        [	        X5        [        U5      [         R                  :X  d   e[        U5      [         R                  :X  d   e[        X4S
S	9u  p[        X4SSS0S9u  nn[        X4S
S	9n[        X4SSS0S9n[	        X5        [	        UU	5        [	        X5        [	        X5        [	        UU5        [	        UU5        [        X4SS	9u  p[        X4SS	9n[	        X5        [	        X5        [	        X5        [        XVSS	9u  p[        XVSS	9n[	        X5        [	        X5        [	        X5        [        X4[        SS0S9u  p[	        X5        [	        X5        [        X4SSS0S9u  p[	        X5        [	        X5        [         R                  R                  S5      nUR                  SS5      nUR                  SS5      n[        X4SS	9nUR                  SS9nUU[        [        U5      5      4   n[        X4SSS9u  nn[	        UUSS9  [	        UUSS9  [        X4SS9u  nn[        XCSS9u  nn[	        UU5        [        UU5        [        X3SS9u  nn[        X3SS9u  nn[	        UU5        [        UU5        [        X4SS9n[        XCSS9n[        UU5        [        X3SS9n[        X3SS9n[        UU5        [        X45      n[        [         R                   " U5      [         R                   " U5      5      n[        UU5        g )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_minr0  j  s   
 	

QC!:\2A


RD1#;l3A

C

.Cq6LFM1v .a;GIC$Q+>DC&D'D(1#;OME&sDFE(F)F*;"**$$$<2::%%% .a=IIC/	[D0AKD% %Q-@D$	[D0AD D+E+,C&D'D,'D,' .a;GIC$Q+>DC&D'D(1#;OME&sDFE(F)F* .	YsAhIC C&D( .	[aIC C&D( ))


"C		"cA		#sAa;7DKKQK'Mc-.@(AABM)F	1[*&& M#3$?M#3$? 5QBHf4QBHfFF#x*4QBHf4QBHfFF#x* )A6H(A6Hx*(A6H(A6Hx* 4A93
!b//2 *,?@r   c                     U S S 2S S24   $ )Nd   r   r%  starts     rf   _reduce_funcr5    s    4C4=r   c                    [         R                  R                  S5      nUR                  S5      R	                  U SS9n[        U5      S S 2S S24   n[        US [        SS9n[        U[        5      (       d   e[        U5      n[        U5      S:  d   eUS   R                  UR                  :X  d   e[        [         R                  " U5      US	S
9  g )Nr   )i  r?   Fr@   r2        >reduce_funcworking_memoryrK   r  atol)rN   rO   rP   rQ   rR   r#   r&   r5  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                 2   [         R                  R                  S5      nUR                  S5      R	                  U SS9n[        US S SS9n[        U[        5      (       d   e[        U5      n[        U5      S:  d   e[        S	 U 5       5      (       d   eg )
Nr   r   r?   Fr@   c                     g Nr   r3  s     rf   r   =test_pairwise_distances_chunked_reduce_none.<locals>.<lambda>   s    r   r7  r8  rK   c              3   (   #    U  H  oS L v   M
     g 7frD  r   ).0chunks     rf   	<genexpr>>test_pairwise_distances_chunked_reduce_none.<locals>.<genexpr>  s     3(}(s   )rN   rO   rP   rQ   rR   r&   r   r   r=  r  all)rX   rY   rZ   r?  s       rf   +test_pairwise_distances_chunked_reduce_nonerL    s    
))


"C'")),U)CA)	45fH h....H~Hx=13(33333r   good_reducec                     [        U 5      $ rD  r=  Dr4  s     rf   r   r     s    ar   c                 .    [         R                  " U 5      $ rD  )rN   r   rP  s     rf   r   r     s    !r   c                 .    [        U 5      [        U 5      4$ rD  rO  rP  s     rf   r   r     s    $q'47+r   c                     U" U 5      $ rD  r   )rQ  r4  scipy_csr_types      rf   r   r     s	    q8Ir   c                 R    U" U 5      [         R                  " U 5      [        U 5      4$ rD  )rN   r   r=  )rQ  r4  scipy_dok_types      rf   r   r     s!    1HHQKG9
r   c                 ~    [         R                  " S5      R                  SS5      n[        US U SS9n[	        U5        g )Nr   r   rK   @   r8  )rN   aranger   r&   next)rM  rZ   r?  s      rf   ,test_pairwise_distances_chunked_reduce_validr\    s:    * 			"b!$A)	4[H 	Nr   )
bad_reduceerr_typemessagec                 6    [         R                  " X SS  /5      $ Nr   rN   concatenaterQ  ss     rf   r   r   (  s    bcF4r   zlength 11\..* input: 10\.c                 :    U [         R                  " X SS  /5      4$ ra  rb  rd  s     rf   r   r   -  s    !R^^Q"#K89r   z!length \(10, 11\)\..* input: 10\.c                     U S S U 4$ )N	   r   rd  s     rf   r   r   1  s    q!uajr   z length \(9, 10\)\..* input: 10\.c                     g)N   r   rd  s     rf   r   r   3  s    r   z2returned 7\. Expected sequence\(s\) of length 10\.c                     g)N)rj     r   rd  s     rf   r   r   8  s    r   z9returned \(7, 8\)\. Expected sequence\(s\) of length 10\.c                 2    [         R                  " S5      S4$ )Nr   rh  )rN   rZ  rd  s     rf   r   r   =  s    "))B-+r   z-, 9\)\. Expected sequence\(s\) of length 10\.c                     [         R                  " S5      R                  SS5      R                  U SS9n[	        US USS9n[
        R                  " X#S9   [        U5        S S S 5        g ! , (       d  f       g = f)	Nr   r   rK   Fr@   rY  r8  r   )rN   rZ  r   rR   r&   r   r   r[  )rX   r]  r^  r_  rZ   r?  s         rf   .test_pairwise_distances_chunked_reduce_invalidro  $  sc    D 			"b!$++Lu+EA)	4ZH 
x	/X 
0	/	/s   A**
A8c                 2   [        XX#S9n[        U[        5      (       d   e[        U5      nUc  U OUn[	        U5      S-  S-  nU H#  nUR
                  nU[        X&5      S-  ::  a  M#   e   [        R                  " U5      n[        XUS9n	[        XYSS9  g )Nr:  rD   rl  g      >i   rC   r  r;  )r&   r   r   r=  r  nbytesmaxrN   r>  r#   r1   )
rZ   r]   r:  rD   genblockwise_distancesmin_block_mibblockmemory_usedr[   s
             rf    check_pairwise_distances_chunkedry  N  s    
$Q.
XCc=))))s)YAAFQJ'M$llc.@5HHHH % ))$781/A'6r   )rB   l2r	  c                 .   [         R                  R                  S5      nUR                  SSS9R	                  USS9n[        [        USU S95      n[        U5      S:  d   e[        [         R                  " [         R                  " U5      5      SS	S
9  g )Nr     r       _BsizescaleFr@   rK   rq  绽|=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                     [         R                  R                  S5      nUR                  SSS9R	                  USS9n[        X0SS9n[        [         R                  " U5      SS	S
9  g )Nr   r|  r~  r  Fr@   rF   r   r  r;  )rN   rO   rP   r  rR   r#   r1   r   )rD   rX   rY   rZ   r   s        rf   )test_parallel_pairwise_distances_diagonalr  g  sY    
))


"C


$
/66|%6PA"1A>IBGGI&6r   c                      [         R                  R                  S5      n U R                  SS5      nU R                  SS5      nUS-  R	                  SS9n[        XSSUS	9n[        XSSUS	9n[        XT5        g
)zbCheck 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!	[>H $	[>J J)r   z0ignore:Could not adhere to working_memory configc                    [         R                  R                  S5      nUR                  S5      R	                  U SS9n[        US SSS9  [        SS5       H  n[        US S	U-  SS9  M     [        UR                  5       S SSS9  UR                  S
5      R	                  U SS9n[        X$SSS9  [        UR                  5       UR                  5       SSS9  [        X$SSS9  [        X$SSS9  [        U5      n[        USSS9n[        U[        5      (       d   e[        U5      UL d   e[        R                  " [        5         [        U5        S S S 5        g ! , (       d  f       g = f)Nr   )   r?   Fr@   rK   rB   rq  irF   )r2  r?   i'  r   r7  r   )rN   rO   rP   rQ   rR   ry  r  tolistr#   r&   r   r   r[  r   r   StopIteration)rX   rY   rZ   powerr]   rQ  rt  s          rf   test_pairwise_distances_chunkedr    sG    ))


"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   E
E)x_array_constrdense)idsy_array_constrc                 d    U " S//5      nU" S/S//5      n[        X#5      n[        USS//5        g Nr   rK   rF   r   r   )r   r1   )r  r  rZ   r]   rQ  s        rf   %test_euclidean_distances_known_resultr    s>     	uAaSz"AA!AAc
|$r   c                 D   [         R                  R                  S5      nUR                  S5      R	                  U SS9nUR                  S5      R	                  U SS9nUR	                  [         R
                  5      S-  R                  SS9R                  SS	5      nUR	                  [         R
                  5      S-  R                  SS9R                  SS	5      nU" U5      n[        X45      n[        X4US
9n[        X4US9n	[        X4XVS9n
[        X5        [        X5        [        X5        [        UU[         R                  " U5      [         R                  " U5      S9n[        R                  " [        5         [        X5        S S S 5        g ! , (       d  f       g = f)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    sZ    ))


"C(#**<e*DA(#**<e*DA "**%*//Q/7??2FI"**%*//Q/7??2FIqA	Q	"B	Q)	<B	Q)	<B	Q)	VBBBB "		}}Y/}}Y/	G 
~	&$ 
'	&	&s   <F
F	symmetricTc                 (   [         R                  R                  U 5      nUR                  S5      nU(       a  UOUR                  S5      nUR	                  [         R
                  5      S-  R                  SS9R                  SS5      nUR	                  [         R
                  5      S-  R                  SS9R                  SS5      n[        X45      n[        X4US9n[        X4US9n	[        X4XVS	9n
[        X5        [        X5        [        X5        g )
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)	VBBBBr   c            	         [         R                  R                  S5      n U R                  S5      nU R                  S5      nUS-  R	                  SS9nUS-  R	                  SS9n[        XX4S9n[        UUUR                  SS5      UR                  SS5      S9n[        UUUR                  SS5      UR                  SS5      S9n[        Xe5        [        Xu5        [        R                  " [        S	S
9   [        XUS S S9  S S S 5        [        R                  " [        SS
9   [        XUS S S9  S S S 5        g ! , (       d  f       N>= f! , (       d  f       g = f)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    sC   
))


"C(#A(#AdZZQZ'NdZZQZ'N		^
B 
		%--b!4%--b!4	
B 
		%--a4%--a4	
B BB	z)H	IA1CD 
J	z)H	IA1CD 
J	I 
J	I	I	Is   7D=&E=
E
Ec                 ^   [         R                  R                  S5      nUR                  S5      R	                  U SS9nSXDS:  '   UR                  S5      R	                  U SS9nSXUS:  '   [        XE5      nU" U5      nU" U5      n[        XE5      n[        XvSS9  UR                  U :X  d   eg )	Nr   r2  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A#gJ(#**<e*DAA#gJQ{HqAqA#A)I Id3??l***r   c                    [         R                  R                  S5      nUR                  S5      R	                  U SS9nSX3S:  '   [        [        U5      5      nU" U5      n[        U5      n[        XTSS9  UR                  U :X  d   eg )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A#gJ%(#HqA#A&I Id3??l***r   
batch_size)Nr>   rj  e   c                    [         R                  R                  S5      nUR                  S5      R	                  [         R
                  5      nSXDS:  '   UR                  S5      R	                  [         R
                  5      nSXUS:  '   [        XE5      nU" U5      nU" U5      n[        XEU S9n[         R                  " [         R                  " US5      5      n[        XvSS9  g )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A#gJ(#**2::6AA#gJQ{HqAqA+AzJI

9a01I Id3r   c                 b   [         R                  R                  S5      nUR                  S5      R	                  [         R
                  5      nSX3S:  '   [        [        U5      5      nU" U5      n[        X3U S9n[         R                  " [         R                  " US5      5      n[        XTSS9  g )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A#gJ%(#HqA+AzJI

9a01I Id3r   zdtype, eps, rtolg-C6?h㈵>g:0yE>gGz?z failing due to lack of precision)reason)marksdimi@B c                     [         R                  " S/U-  /U S9n[         R                  " SU-   /U-  /U S9n[        XE5      n[        XE5      n[	        XgSS9  g )Nr   r   r  r  )rN   r   r   r   r1   )rS   epsr  r  rZ   r]   r   r  s           rf   'test_euclidean_distances_extreme_valuesr  }  sW      	3%#+e,A
39+#$E2A#A)IQ{HId3r   r
  c                     [         R                  R                  S5      nUR                  SS5      nUR                  SS5      n[	        X#U S9n[        X#U S9n[        XE5        g )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    sV     ))


%C		!QA		!QA)!'BO*17CLO2r   rZ   r]   c                     [         R                  " [        5       n[        XS9  S S S 5        SnU[	        WR
                  5      :X  d   eg ! , (       d  f       N,= f)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    sG     
z	"g' 
# SGc'--((((	 
#	"s   
A
AzX, X_diag, missing_valuerF   r   c                    [         R                  " SU/US//5      n[        XS9n[        X45        [        U SUS9n[        US-  U5        [        X US9n[        X65        [        X R	                  5       US9n[        X75        g )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H#%amTGHaK)&qMJHH'+AvvxVMH,r   r  c                 4   [         R                  " X /SS//5      n[         R                  " [         R                  [         R                  /[         R                  S//5      n[        XS9n[	        X#5        [        XR                  5       U S9n[	        X#5        g )Nr   rK   r  )rN   r   rT   r   r1   rA   )r  rZ   r  r%  s       rf   )test_nan_euclidean_distances_complete_nanr    sp    
=01a&9:Axx"&&"&&)BFFA;78H"1CDH#"1ffh}MDH#r   c           	      P   [         R                  " SU SSS/U SSSU /SX U S//5      n[         R                  " U SSU S/X SSS/X U SS//5      n[        XU S9n[        X!U S9n[        X4R                  5        [        [        US S	 US S	 S
U S9S//5        [        [        US	S US	S SU S9[         R                  " S5      //5        [        XS9n[        XU S9n[        XR                  5       U S9n[        XV5        [        Xg5        [        XS
S9n[        XSS9n	[        X5        g )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    sh   
-c3/Cc=9-sC	
	A 	CmS93S9=#sC	
	A 
!m	DB	 m	DBDD! bqE1Ra5$}	
 4	45	 aFAaFE-	
 '';
<	=>	 
!	AB	 m	DB	 FFH]	KBBB 
!D	1B	 E	2BBr   c                     [         R                  " SSU S/SU SU //5      n[        XSS9n[         R                  " US:  5      (       d   e[        XSS9n[	        US	5        g )
NgzG^g     @@gB@g|ï@T)r  r
  r   Fr  )rN   r   r   rK  r1   )r  rZ   dist_squaredr%  s       rf   7test_nan_euclidean_distances_one_feature_match_positiver    sr    
 	e]E2mZ?	
	A +	L 66,!#$$$$"1ERDD#r   c                     [         R                  R                  S5      n [         R                  " U R	                  S5      5      n[         R
                  " X/5      n[        U5      n[        USS/SS//SS9  [         R                  " US:  5      (       d   e[         R                  " US:*  5      (       d   e[        U[         R                  " U5         SS/5        [         R
                  " X* /5      n[        U5      n[         R                  " US:  5      (       d   e[         R                  " US:*  5      (       d   e[        USS/SS//5        [         R                  " U R	                  SS5      5      n[        U5      n[        U[         R                  " U5         S/UR                  S	   -  5        [         R                  " US:  5      (       d   e[         R                  " US:*  5      (       d   eg )
Nr  i  r  r  r;  r   r}  i  r   )rN   rO   rP   r  r  r>  r   r1   rK  diag_indices_fromrW   )rY   r   XArQ  XBr  rZ   s          rf   test_cosine_distancesr  "  s   
))


%C
sxx}A	A6	BAAc
S#J/e<66!s(66!s(Ab**1-.c
;	Ar7	B	"	B66")66")B#sc3Z01 	sxxd#$AAAb**1-.
0BC66!s(66!s(r   c                     S n [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " U VVs/ s H  oC Vs/ s H
  oP" XE5      PM     snPM     snn5      n[        X#5      n[        Xg5        UR                  S5      nSn[        R                  " [        US9   [        U5        S S S 5        g s  snf s  snnf ! , (       d  f       g = f)Nc                 f   US   U S   -
  nUS   U S   -
  n[         R                  " US-  5      S-  [         R                  " U S   5      [         R                  " US   5      -  [         R                  " US-  5      S-  -  -   nS[         R                  " [         R                  " U5      5      -  nU$ )Nr   rK   rF   )rN   sincosarcsinr  )r   r   diff_latdiff_lonacs         rf   slow_haversine_distances: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4C
C%C
%
C3c                  N    S/S//n S/S//n[        X5      n[        USS/5        g r  )r!   r1   rZ   r]   rQ  s      rf   test_paired_euclidean_distancesr  [  4    
qc
A
qc
A"1(AASz"r   c                  N    S/S//n S/S//n[        X5      n[        USS/5        g r  )r"   r1   r  s      rf   test_paired_manhattan_distancesr  c  r  r   c                  N    S/S//n S/S//n[        X5      n[        USS/5        g )Nr   rK   rF   rJ   )r   r1   r  s      rf   test_paired_cosine_distancesr	  k  s4    
qc
A
qc
A%AASz"r   c                     [         R                  R                  S5      n U R                  S5      nU R                  S5      n[	        X5      nSn[        XUS9nUR                  [        :X  d   e[        U5       Hr  u  pg[        U5       H^  u  p[         R                  " Xy-
  S-  Xy-   -  5      * n
[         R                  " XJ-  5      n[        X6U4   U
5        [        XVU4   U5        M`     Mt     [        U5      n[        [         R                  " U5      S5        [         R                  " US:  5      (       d   e[         R                  " U[         R                  " [         R                  " U5      5      -
  S:  5      (       d   eU R                  S5      R                  [         R                   5      nU R                  S5      R                  [         R                   5      n[        X5      nUR                  [         R                   :X  d   eU R                  S5      R                  [         R"                  5      n[        X5      n[         R$                  " U5      R                  5       (       d   eUR                  [        :X  d   eSS	/S
S//nSS/SS//n[        X5      nUS   US   :  d   eUS   US   :  d   e[&        R(                  " [*        5         [        SS//5        S S S 5        [&        R(                  " [*        5         [        SS//SS//5        S S S 5        [&        R(                  " [*        5         [        SS//SS//5        S S S 5        [&        R(                  " [*        5         [        SS/// SQ/5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       g = f)Nr   r=   rB  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   rK  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 &EEA&A77e!aLDAFFAEa<15122Dvvel+HdT2Q$2	 !  	AArwwqz1%66!a%===66!bggbggaj))A-....&!((4A'"))"**5AAA77bjj    	'"))"((3AAA;;q>77e sc1XA
Q#sAAAT7QtWT7QtW 
z	"aWI 
#	z	"aWIRz* 
#	z	"aVHBxj) 
# 
z	"aVH/0 
#	" 
#	"	"	"	"	" 
#	"s0   N	N >N13O
N 
N.1
N?
Okernelc                     [         R                  R                  S5      nUR                  S5      nU " X"5      n[	        X3R
                  S5        g )Nr   r=   r  )rN   rO   rP   rQ   r1   r  )r  rY   rZ   r   s       rf   test_kernel_symmetryr    s?     ))


"C&!AqAAssBr   c                     [         R                  R                  S5      nUR                  S5      nU" U5      nU " X35      nU " XD5      n[	        XV5        g Nr   r=   )rN   rO   rP   rQ   r1   )r  r   rY   rZ   r   r   r   s          rf   test_kernel_sparser    sM     ))


"C&!AQHqA		#BAr   c            	         [         R                  R                  S5      n U R                  S5      n[	        X5      n[        UR                  S S S2   U Vs/ s H  n[        R                  " U5      S-  PM     sn5        g s  snf )Nr   r=      rF   )	rN   rO   rP   rQ   r   r1   flatr   norm)rY   rZ   r   r   s       rf   test_linear_kernelr    se    
))


"C&!AaAAFF3Q3Kq!Aq!&++a.A"5q!AB!As   #B
c                      [         R                  R                  S5      n U R                  S5      n[	        X5      n[        UR                  S S S2   [         R                  " S5      5        g )Nr   r=   r  r>   )rN   rO   rP   rQ   r)   r1   r  onesrY   rZ   r   s      rf   test_rbf_kernelr#    sN    
))


"C&!A1AAFF3Q3K,r   c                     [         R                  R                  S5      n U R                  S5      n[	        X5      n[        [         R                  " U5      [         R                  " S5      5        [         R                  " US:  5      (       d   e[         R                  " U[         R                  " [         R                  " U5      5      -
  S:  5      (       d   eg )Nr   r=   r>   rK   )	rN   rO   rP   rQ   r   r1   r   r!  rK  r"  s      rf   test_laplacian_kernelr%    s    
))


"C&!AABGGAJ
+ 66!a%===66!bggbggaj))A-....r   zmetric, pairwise_funcr   r   c                    [         R                  R                  S5      nUR                  S5      nUR                  S5      nU" U5      nU" U5      nU" XgSS9n[	        U5      (       d   eU" XESS9n	[	        U	5      (       a   e[        UR                  5       U	5        [        XEU S9n
[        UR                  5       U
5        g )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 
t	6BB<<< 
q$	/B||BJJL"% 
!	0BBJJL"%r   c                 @   [         R                  R                  S5      nUR                  S5      nUR                  S5      nU " U5      nU " U5      nUS 4X#4US 4XE44 H=  u  pg[	        XgSS9n[        U5      nUb  [        U5      n[	        XgSS9n	[        X5        M?     g )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_similarityr1    s     ))


"C&!A&!ADDt9qftTlTLA bx8r]>2Bbx8 Br   c                      [         R                  " [         R                  " S5      S5      n [        U S 5      u  pXL d   e[	        X5        g N(   r>   rl  )rN   resizerZ  r   r3   )r  
XA_checked
XB_checkeds      rf   test_check_dense_matricesr9    s?     
299R=&	)B22t<J###r&r   c                     [         R                  " [         R                  " S5      S5      n [         R                  " [         R                  " S5      S5      n[        X5      u  p#[	        X5        [	        X5        [         R                  " [         R                  " S5      S5      n[        X5      u  p#[	        X5        [	        X5        g )Nr4  r5      r?   rl  )rN   r6  rZ  r   r3   r   r  r  r7  r8  s       rf   test_check_XB_returnedr>  %  s     
299R=&	)B	299R=&	)B22:Jr&r&	299R=&	)B08Jr&r&r   c                     [         R                  " [         R                  " S5      S5      n [         R                  " [         R                  " S5      S5      n[        R                  " [
        5         [        X5        S S S 5        [         R                  " [         R                  " S5      S5      n[        R                  " [
        5         [        X5        S S S 5        g ! , (       d  f       Nh= f! , (       d  f       g = f)N-   )r>   rh  r;  r<  $   )r?   rh  )rN   r6  rZ  r   r   r   r   r   r  r  s     rf   test_check_different_dimensionsrC  5  s    	299R=&	)B	299R=&	)B	z	"b% 
# 
299U#V	,B	z	"B# 
#	"	 
#	" 
#	"s   1C
C0
C-0
C>c                  0   [         R                  " S5      R                  SS5      n [         R                  " S5      R                  SS5      n[        R                  " [
        5         [        X5        S S S 5        [         R                  " S5      R                  SS5      n [         R                  " S5      R                  SS5      n[        R                  " [
        5         [        X5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr@  rh  r>   r;  r?   rl  )rN   rZ  r   r   r   r   r   rB  s     rf   test_check_invalid_dimensionsrE  A  s     
2		q!	$B	2		q!	$B	z	"b% 
#	2		q!	$B	2		q!	$B	z	"b% 
#	"	 
#	" 
#	"s   'C6!D6
D
Dc                 r   [         R                  R                  S5      nUR                  S5      nU " U5      nUR                  S5      nU " U5      n[	        X55      u  pg[        U5      (       d   e[        X6-
  5      R                  5       S:X  d   e[        U5      (       d   e[        XW-
  5      R                  5       S:X  d   e[	        X35      u  ph[        U5      (       d   e[        X6-
  5      R                  5       S:X  d   e[        U5      (       d   e[        X-
  5      R                  5       S:X  d   eg r  )rN   rO   rP   rQ   r   r   r  r   )	r   rY   r  	XA_sparser  	XB_sparser7  r8  XA_2_checkeds	            rf   test_check_sparse_arraysrJ  O  s(    ))


"C			6	"Bb!I			6	"Bb!I29HJ Jy%&**,111Jy%&**,1114YJJJy%&**,111L!!!!|()--/1444r   c                     U R                   n[        U5      S:  a  [        S U  5       5      $ [        S U  5       5      $ )NrK   c              3   8   #    U  H  n[        U5      v   M     g 7frD  )tuplify)rG  rb   s     rf   rI  tuplify.<locals>.<genexpr>k  s     /QcWS\\Qs   c              3   $   #    U  H  ov   M     g 7frD  r   )rG  rs     rf   rI  rN  n  s     N1Qs   )rW   r  rU   )rZ   re  s     rf   rM  rM  f  s8    	A
1vz/Q/// NN""r   c                      [         R                  R                  S5      n U R                  S5      n[	        U5      nU R                  S5      n[	        U5      n[        X$5      u  pV[        X%5        [        XF5        g r  )rN   rO   rP   rQ   rM  r   r3   )rY   r  	XA_tuplesr  	XB_tuplesr7  r8  s          rf   test_check_tuple_inputrT  q  se    
))


"C			6	"BI			6	"BI29HJy-y-r   c                  L   [         R                  " [         R                  " S5      S5      R                  [         R                  5      n [         R                  " [         R                  " S5      S5      R                  [         R                  5      n[        U S 5      u  p#UR                  [         R                  :X  d   e[        X5      u  p#UR                  [         R                  :X  d   eUR                  [         R                  :X  d   e[        U R                  [        5      U5      u  p#UR                  [        :X  d   eUR                  [        :X  d   e[        XR                  [        5      5      u  p#UR                  [        :X  d   eUR                  [        :X  d   eg r3  )rN   r6  rZ  rR   r  r   rS   r   r=  s       rf   test_check_preserve_typerV  }  s8   	299R=&	)	0	0	<B	299R=&	)	0	0	<B22t<Jrzz))) 32:Jrzz)))rzz))) 3299U3CRHJu$$$u$$$ 32yy7GHJu$$$u$$$r   r   
seuclideanmahalanobisdist_functionc                 ,   [        SS9   [        R                  R                  S5      nUR	                  S5      n[        [        XAS95      n[        R                  " [        U" XAU S95      5      n[        Xe5        S S S 5        g ! , (       d  f       g = f)Nr   )r:  r   r  rC   r   )
r   rN   rO   rP   rQ   r   r
   r>  rU   r1   )r   rD   rY  rY   rZ   expected_distr%  s          rf   +test_pairwise_distances_data_derived_paramsr\    sm     
s	+ii##A&i("5#:;yy}QfMNO, 
,	+	+s   A2B
Bc                    [         R                  R                  S5      nUR                  S5      nUR                  S5      n[        R
                  " [        SU  S3S9   [        X#U S9  S S S 5        g ! , (       d  f       g = f)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_errorr^    so     ))


"C)$A)$A	<VHGL
 	1/	
 
 
s   A33
B)
braycurtiscanberra	chebyshevcorrelationhammingrX  r	   rW  r	  r   r   rB   y_is_xzY is Xz
Y is not Xc           	         [         R                  R                  S5      nUR                  S5      R	                  USS9n0 nU(       a  Un[        [        X@S95      nOUR                  S5      R	                  USS9n[        XFU S9nU S:X  a=  S[         R                  " [         R                  " XF/5      SS[         R                  S	90nOdU S
:X  a^  S[         R                  R                  [         R                  " [         R                  " XF/5      R                  5      5      R                  0n[        XF4SU 0UD6n[!        X5        g )Nr   r=   Fr@   rC   rW  VrK   )r  ddofrS   rX  VIrD   )rN   rO   rP   rQ   rR   r   r
   r   varr>  r   r   invcovr  r#   r1   )	rD   rX   rd  rY   rZ   r   r]   r[  r%  s	            rf   )test_numeric_pairwise_distances_datatypesrl    s   6 ))


"C&!((E(BAF"5#:;f%,,\,Fa62\!266"))QF"3!!2::VWF}$BIIMM"&&A61B1D1D*EFHHIFa<6<V<DD(r   pairwise_distances_funcc                     SS/S[         R                  /SS/SS//nU " XSS9n[         R                  " U5      R                  5       (       a   eg)	z8Check that `nan_euclidean` is lenient with `nan` values.r   rK   rF   r   r>   rH   rC   N)rN   rT   isnanany)rm  rZ   outputs      rf   test_nan_euclidean_supportrr    sS     Q!RVVq!fq!f-A$Q/BFxx##%%%%%r   c                     [         R                  [         R                  /[         R                  [         R                  /[         R                  [         R                  //n [        X SS9nSS/SS/SS//n[        X"SS9n[        X5        g)zqCheck 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_argminrx    so    
 ffbff/"&&"&&1ABE*5PJ1v1v1v&G,WoVLJ-r   zX,Y,expected_distance)r  ababc)r  r   r   )r   r  r   )r   r   r  r  ry  r  r   r   c                 4    S n[        XUS9n[        XB5        g)z8Check pairwise_distances with lists of strings as input.c                 X    [         R                  " [        U 5      [        U5      -
  5      $ rD  )rN   r  r  r   s     rf   dummy_string_similarityLtest_pairwise_dist_custom_metric_for_string.<locals>.dummy_string_similarity  s    vvc!fs1vo&&r   )rZ   r]   rD   N)r#   r1   )rZ   r]   expected_distancer}  actual_distances        rf   +test_pairwise_dist_custom_metric_for_stringr    s    $' )1:QROO7r   c                      S n [         R                  " / SQ/ SQ/ SQ/[        S9n[         R                  " / SQ/ SQ/ SQ/5      n[        XS	9n[	        X25        g
)zbCheck that pairwise_distances does not convert boolean input to float
when using a custom metric.
c                 R    SX-  R                  5       X-  R                  5       -  -
  $ )NrK   )r   )v1v2s     rf   dummy_bool_distBtest_pairwise_dist_custom_metric_for_bool.<locals>.dummy_bool_dist   s"    BG==?bg]]_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   r  r  s       rf   )test_pairwise_dist_custom_metric_for_boolr    sQ    
5 	,l;4HA	
 )1EOO7r   c                     U " [         R                  " S5      5      /nU " [         R                  " S5      5      /n[        SSS9" S [        X5       5       5        g )Nr   rF   r   )r   
max_nbytesc              3   P   #    U  H  u  p[        [        5      " X5      v   M     g 7frD  )r;   r   )rG  m1m2s      rf   rI  9test_sparse_manhattan_readonly_dataset.<locals>.<genexpr><  s$      %;T#$R,,;Ts   $&)rN   r!  r:   zip)r   	matrices1	matrices2s      rf   &test_sparse_manhattan_readonly_datasetr  4  sQ     rwwv/0Irwwv/0I A!$ %;>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   rZ  rR   _minkowski_kwdsr   r   r  r   r   r   r   r   r   r   r   itemsr   r  thread_unsafer0  r5  r@  rL  r\  r   r   ro  ry  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-  r1  r9  r>  rC  rE  rJ  rM  rT  rV  r\  r^  rl  rr  rx  r  r  r  )rU  rW  	containers   000rf   <module>r     sp        !  # 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I''HH  
 XXJ		HI''HH  
%% XXJ		HI''HH  
%
%@ tUm4 5 ED XXJ		HI''HH  
 XXJ		HI''HH  
++* XXJ		HI''HH  
+
+$ '89XXJ		HI''HH  
 XXJ		HI''HH  
4 :4( '89XXJ		HI''HH  
4 :4" 	T4 JJ++##+M#N		
 G-	4 .	4 T5M23 33 rxx"&&!61rvvg,8PQRrxx"&&!61rvvg,8PRVWX) Y S) 	Aq6Aq6"	#RWWQZ8	Aq6Arvv;'	("''!*bff=	BFFA;BFF,	-rvvrvv>	BFFA;,	-rwwqz266B	Arvv;BFF,	-rwwqz266B	Aq6Aq6"	#RWWQZ4	Aq6Ar7#	$bggaj"5	B7QG$	%rvvr2	B7RG$	%rwwqz26	Ar7QG$	%rwwqz2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   3||||| |%|*$|/|4|9|>