
    -i:                     \
   S SK r S SKrS SK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  S SKJr  S SKJrJrJr  S SKJr  S r\" S 5      rS	rS
rSr\R9                  \\45      r\R9                  \\45      r\R?                  S5      r \R?                  S5      r!\" \\/5      u  r"r#\S:  R?                  \RH                  5      r%\S:  R?                  \RH                  5      r&\" \%\&/5      u  r'r(\R9                  \\45      r)\RT                  " \)\)RV                  5      r,S0 4S0 4S\-" SS94S0 4S\-" \R9                  \5      4S94S\-" \,4S94S0 4S0 4S0 4S\-" S\R9                  \5      4S94/
r.\R^                  Ra                  S\.S S 9\R^                  Ra                  S!\\4\ \!4\"\#4/5      \R^                  Ra                  S"\5      S# 5       5       5       r1\R^                  Ra                  S$\5      \R^                  Ra                  S%\%\&4\'\(4/5      \R^                  Ra                  S"\5      S& 5       5       5       r2\R^                  Ra                  S\.S' S 9\R^                  Ra                  S(\\ \"/5      \R^                  Ra                  S"\5      S) 5       5       5       r3\R^                  Ra                  S\.S* S 9S+ 5       r4\R^                  Ra                  S$\5      \R^                  Ra                  S,\%\'/5      \R^                  Ra                  S"\5      S- 5       5       5       r5\R^                  Ra                  S.S/S0/5      \R^                  Ra                  S\.S1 S 9\R^                  Ra                  S(\\ /5      S2 5       5       5       r6\R^                  Ra                  S$\5      \R^                  Ra                  S,\%\'/5      S3 5       5       r7\R^                  Ra                  S!\\4\ \!4\"\#4/5      \R^                  Ra                  S"\5      S4 5       5       r8S5 r9S6 r:S7 r;\R^                  Ra                  S8\Rx                  " / S9Q5      \=S:4\Rx                  " S;S<\R|                  /5      \=S=4/\ V s/ s H  n U " / S>Q/5      \?S?4PM     sn Q\Rx                  " / S@Q5      \=SA4P\Rx                  " / 5      \=SB4P5      SC 5       r@SD rA\R^                  Ra                  SE\.5      \R^                  Ra                  SF\R                  \RH                  45      SG 5       5       rCSH rDSI rEgs  sn f )J    N)cdist)DistanceMetric)BOOL_METRICSDEPRECATED_METRICSDistanceMetric32DistanceMetric64)check_random_state)assert_allclosecreate_memmap_backed_dataignore_warnings)CSR_CONTAINERSc                 D    [         R                  " X-
  U-  5      SU-  -  $ )Ng      ?)npsum)x1x2ps      Z/var/www/html/venv/lib/python3.13/site-packages/sklearn/metrics/tests/test_dist_metrics.py	dist_funcr      s     6627q.!cAg..             float32g333333?gffffff?	euclidean	cityblock	minkowski)      ?         ?      r   	chebyshev
seuclideanVmahalanobisVIhammingcanberra
braycurtis)r   r   r    r"   r   wmetric_param_gridc                     U S   $ Nr    paramss    r   <lambda>r6   A       F1Ir   )idszX, Ycsr_containerc                 F   U u  pEUR                  5       nU" U5      U" U5      p[        R                  " UR                  5       6  GHX  n	[	        [        Xi5      5      n
0 nUS:X  a"  UR                  [        R                  :X  a  SS0n[        XU40 U
D6n[        R                  " XAR                  40 U
D6nUR                  X5      nUR                  R                  (       d   e[        X40 UD6  UR                  Xx5      nUR                  R                  (       d   e[        X40 UD6  UR                  Xr5      nUR                  R                  (       d   e[        X40 UD6  UR                  X5      nUR                  R                  (       d   e[        X40 UD6  GM[     g Nr(   rtolư>keys	itertoolsproductvaluesdictzipdtyper   r   r   r   
get_metricpairwiseflagsc_contiguousr
   )r0   XYr9   metric
param_gridr?   X_csrY_csrvalskwargs	rtol_dictD_scipy_cdistdm	D_sklearns                  r   
test_cdistrV   @   s`    +F??D #]1%55!!:#4#4#67c$o&	]"qww"**'<  IaF5f5&&vwwA&A KK%	++++	>I>KK-	++++	>I>KK)	++++	>I>KK)	++++	>I>? 8r   rL   zX_bool, Y_boolc                    U [         ;   a#  [        [        S9   [        XU 5      nS S S 5        O[        XU 5      n[        R
                  " U 5      nUR                  X5      n[        UW5        U" U5      U" U5      pUR                  X5      nUR                  R                  (       d   e[        Xd5        UR                  Xx5      nUR                  R                  (       d   e[        Xd5        UR                  X5      nUR                  R                  (       d   e[        Xd5        UR                  Xr5      nUR                  R                  (       d   e[        Xd5        g ! , (       d  f       GN6= fN)category)
r   r   DeprecationWarningr   r   rF   rG   r
   rH   rI   )	rL   X_boolY_boolr9   rS   rT   rU   
X_bool_csr
Y_bool_csrs	            r   test_cdist_bool_metricr_   k   s"    ##&89
 "&&9M :9 ff5		"	"6	*BF+II}- +62M&4I
F+I??''''I-J3I??''''I-F/I??''''I-J/I??''''I-? :9s   E!!
E0c                     U S   $ r2   r3   r4   s    r   r6   r6      r7   r   rJ   c                    U u  p4UR                  5       nU" U5      n[        R                  " UR                  5       6  GH  n[	        [        XW5      5      n0 n	US:X  a"  UR                  [        R                  :X  a  SS0n	[        XU40 UD6n
[        R                  " X1R                  40 UD6nUR                  U5      nUR                  R                  (       d   e[        X40 U	D6  UR                  U5      nUR                  R                  (       d   e[        X40 U	D6  UR                  Xf5      nUR                  R                  (       d   e[        X40 U	D6  GM!     g r;   r>   )r0   rJ   r9   rL   rM   r?   rN   rP   rQ   rR   D_scipy_pdistrT   rU   D_sklearn_csrs                 r   
test_pdistrd      s(    +F??D!E!!:#4#4#67c$o&	]"qww"**'<  IaF5f5&&vwwA&AKKN	++++	>I>E*++++B	BE1++++B	B1 8r   c                     U S   $ r2   r3   r4   s    r   r6   r6      r7   r   c                    U u  pUR                  5       nSn[        R                  " UR                  5       6  GH  n[	        [        X55      5      n[        R                  " U[        R                  40 UD6n[        R                  " U[        R                  40 UD6nUR                  [        5      n	UR                  [        5      n
U	R                  [        R                  :X  d   eU
R                  [        R                  :X  d   e[        XUS9  UR                  [        [         5      n	UR                  [        ["        5      n
[        XUS9  GM     g )Ngh㈵>r<   )r?   r@   rA   rB   rC   rD   r   rF   r   float64r   rG   X64X32rE   r
   Y64Y32)r0   rL   rM   r?   r<   rP   rQ   dm64dm32D64D32s              r   'test_distance_metrics_dtype_consistencyrq      s     +F??D D!!:#4#4#67c$o&((FvF((FvFmmC mmC yyBJJ&&&yyBJJ&&&
 	t,mmC%mmC%t,% 8r   r[   c                 F   U [         ;   a#  [        [        S9   [        XU 5      nS S S 5        O[        XU 5      n[        R
                  " U 5      nUR                  U5      n[        UW5        U" U5      nUR                  U5      n[        XS5        g ! , (       d  f       Nf= frX   )r   r   rZ   r   r   rF   rG   r
   )rL   r[   r9   rb   rT   rU   r]   s          r   test_pdist_bool_metricsrs      s     ##&89
 "&&9M :9 ff5		"	"6	*BF#II}-v&JJ'II- :9s   B
B writable_kwargsTFc                     U S   $ r2   r3   r4   s    r   r6   r6      r7   r   c                 `   Uu  p4UR                  5       n[        R                  " UR                  5       6  H  n[	        S U 5       5      (       aO  [
        R                  " U5      nU H3  n[        U[        R                  5      (       d  M$  UR                  U S9  M5     [        [        XV5      5      n[        R                  " X2R                  40 UD6n	U	R!                  U5      n
["        R$                  " ["        R&                  " U	5      5      nUR!                  U5      n[)        X5        M     g )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fN)
isinstancer   ndarray).0vals     r   	<genexpr>test_pickle.<locals>.<genexpr>   s     ;dsz#rzz**ds   ')write)r?   r@   rA   rB   anycopydeepcopyry   r   rz   setflagsrC   rD   r   rF   rE   rG   pickleloadsdumpsr
   )rt   r0   rJ   rL   rM   r?   rP   r|   rQ   rT   D1dm2D2s                r   test_pickler      s     +F??D!!:#4#4#67;d;;;==&Dc2::..LLL7  c$o&&&vwwA&A[[^ll6<<+,\\!_ 8r   c                     [         R                  " U 5      nUR                  U5      n[        R                  " [        R
                  " U5      5      nUR                  U5      n[        X55        g rx   )r   rF   rG   r   r   r   r
   )rL   r[   rT   r   r   r   s         r   test_pickle_bool_metricsr     sO     
	"	"6	*B	V	B
,,v||B'
(C	f	BBr   c                    [         R                  " U S S 2S S24   5      n [         R                  " US S 2S S24   5      nU" U 5      U" U5      pCS n[         R                  " UR                  S   UR                  S   45      n[	        U 5       H%  u  px[	        U5       H  u  pU" X5      XgU	4'   M     M'     [
        R                  " SU R                  5      nUR                  X5      n[        UR                  U5      [         R                  " SU-  5      S-  SS9  [        X5        UR                  X45      nUR                  R                  (       d   e[        X5        UR                  X15      nUR                  R                  (       d   e[        X5        UR                  X5      nUR                  R                  (       d   e[        X5        g )Nr!   c                 V   S[         R                  " [         R                  " [         R                  " SU S   US   -
  -  5      S-  [         R                  " U S   5      [         R                  " US   5      -  [         R                  " SU S   US   -
  -  5      S-  -  -   5      5      -  $ )Nr!   r   r   r   )r   arcsinsqrtsincos)r   r   s     r   haversine_slow-test_haversine_metric.<locals>.haversine_slow  s    299GGsbebem,-2&&A-"&&A-/"&&119N2OST2TTU
 
 	
r   r   	haversiner   r=   rg   )r   asarrayzerosshape	enumerater   rF   rE   rG   r
   dist_to_rdistr   rH   rI   )rJ   rK   r9   rN   rO   r   D_referenceixijyjr   rU   s                r   test_haversine_metricr     s    	

1QU8A


1QU8A #]1%55
 ((EKKNEKKN;<K1q\EA .r 6K1 "  ))+qww?I""1(I	*BFF33D,E,JQU I+""50I??''''I+""5,I??''''I+""1,I??''''I+r   c                     [         R                  R                  S5      n [        R                  " S5      n[        R                  " S[        SS9n[
        R                  " [
        R                  " U5      5      n[
        R                  " [
        R                  " U5      5      nUR                  U 5      nUR                  U 5      nUR                  U 5      nUR                  U 5      n[        XV5        [        Xx5        g )N)
   r"   r   pyfuncr!   )funcr   )
r   randomr   rF   r   r   r   r   rG   r
   )	rJ   r   r   euclidean_pkl
pyfunc_pklr   r   D1_pklD2_pkls	            r   test_pyfunc_metricr   ?  s    
		!A))+6I&&xi1EF LLi!89Mfll623J			A	B		B##A&F  #FBF#r   c                      S n [        S5      nUR                  SS5      n[        R                  " SU S9n[        R                  " S5      n[	        UR                  U5      UR                  U5      S-  5        g )	Nc                 b    U R                   S   S:X  d   e[        R                  " X-
  S-  5      $ )Nr   r"   r!   )r   r   r   )xys     r   custom_metric+test_input_data_size.<locals>.custom_metricW  s+    wwqzQvvqul##r   r   r   r"   r   )r   r   r!   )r	   randr   rF   r
   rG   )r   rngrJ   r   eucls        r   test_input_data_sizer   T  se    $ Q
CQA&&xmDF$$[1DFOOA&a(8A(=>r   c                      [        S5      n U R                  S5      nU R                  SS5      nUR                  SS9  UR                  SS9  [        R                  " SUS9  [        R                  " SUS	9  g )
Nr   d   r   Fr   r%   r&   r(   r)   )r	   r   r   r   rF   )r   weightsr*   s      r   test_readonly_kwargsr   c  sl     Q
ChhsmG	"b	B5!KKeK lg6m3r   zw, err_type, err_msg)r   r    iz!w cannot contain negative weightsr   r    zw contains NaN)r   r    r   z8Sparse data was passed for w, but dense data is required)abcz!could not convert string to floatza minimum of 1 is requiredc                     [         R                  " XS9   [        R                  " SSU S9  S S S 5        g ! , (       d  f       g = f)Nmatchr   r"   r.   )pytestraisesr   rF   )r/   err_typeerr_msgs      r   -test_minkowski_metric_validate_weights_valuesr   s  s.    $ 
x	/!!+a8 
0	/	/s	   5
Ac                  P   [         R                  [        S-   5      n [        R                  " SSU S9nS[
        R                  S    SU R                  S    S3n[        R                  " [        US	9   UR                  [
        [        5        S S S 5        g ! , (       d  f       g = f)
Nr   r   r"   r.   zEMinkowskiDistance: the size of w must match the number of features \(z\). Currently len\(w\)=r   .r   )r   random_sampledr   rF   ri   r   r   r   
ValueErrorrG   rk   )w2rT   msgs      r   +test_minkowski_metric_validate_weights_sizer     s    			1q5	!B		"	";!r	:B	%%(YYq\N 3  "}A	/ 
 
z	-
C 
.	-	-s   3B
B%zmetric, metric_kwargsrE   c                 <   [         R                  [        [         R                  [        0U   nUR                  5        VVs0 s H
  u  pEXES   _M     nnn[        [        R                  " X40 UD65      n[        UR                  " U 40 UD65      nXgL d   eg s  snnf r2   )	r   r   r   rh   r   itemstyper   rF   )rL   metric_kwargsrE   specialized_clskvgeneric_typespecialized_types           r   test_get_metric_dtyper     s     	

$


$ O *7)<)<)>?)>Q!W)>M?11&Q=QRLO66vOOP+++	 @s   Bc                      [         R                  n Sn[        R                  " [        US9   [
        R                  " SU 5        S S S 5        g ! , (       d  f       g = f)Nz8Unexpected dtype .* provided. Please select a dtype fromr   	manhattan)r   int32r   r   r   r   rF   )rE   r   s     r   test_get_metric_bad_dtyper     s:    HHE
EC	z	-!!+u5 
.	-	-s   A
Ac                      Sn [         R                  " [        U S9   [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)Nzp must be greater than 0r   r   r   r#   )r   r   r   r   rF   )r   s    r   .test_minkowski_metric_validate_bad_p_parameterr     s1    
$C	z	-!!+3 
.	-	-s	   ;
A	)Fr   r@   r   numpyr   r   scipy.spatial.distancer   sklearn.metricsr   sklearn.metrics._dist_metricsr   r   r   r   sklearn.utilsr	   sklearn.utils._testingr
   r   r   sklearn.utils.fixesr   r   r   r   n1n2r   ri   rk   astyperj   rl   X_mmapY_mmaprh   r[   r\   X_bool_mmapY_bool_mmapr'   dotTr*   rC   METRICS_DEFAULT_PARAMSmarkparametrizerV   r_   rd   rq   rs   r   r   r   r   r   r   arrayr   nan	TypeErrorr   r   r   r   r   r   )r9   s   0r   <module>r      s        ( *  - 
 // 	Q 	Q 	jj	jj,c3Z8  )		BJJ	'
)		BJJ	'67GH k q!fVVAqss^ ""$,-."43,,Q/123DREN#O2$)c.?.?.B-DEF  /5M   3*sCj66:J!KL.9#? : M
#?L <0'+{)CD .9!. : 1
!.H /5M   sC01.9C : 2
C> /5M  --> <0FK#89.9. : : 1.( *T5M:/5M   sCj)  * ;
 " <0FK#89 : 1 3*sCj66:J!KL.9), : M),X$*?4  	-	 *.QR	1c266"	#Z1AB "0

 "0	 {m,J
 "0

 
/	"J0ST 
"z#?@"9#"9
	 02HI2::rzz":;, < J,64i

s   6T)