
    {Kg9                     
   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d Z ed       Zd	Zd
ZdZej9                  eef      Zej9                  eef      Zej?                  d      Z ej?                  d      Z! eeeg      \  Z"Z#edk  j?                  ejH                        Z%edk  j?                  ejH                        Z& ee%e&g      \  Z'Z(ej9                  eef      Z) ejT                  e)e)jV                        Z,di fdi fd e-d      fdi fd e-ej9                  e      f      fd e-e,f      fdi fdi fdi fd e-dej9                  e      f      fg
Z.ej^                  ja                  de.d        ej^                  ja                  d!eefe e!fe"e#fg      ej^                  ja                  d"e      d#                      Z1ej^                  ja                  d$e      ej^                  ja                  d%e%e&fe'e(fg      ej^                  ja                  d"e      d&                      Z2ej^                  ja                  de.d'        ej^                  ja                  d(ee e"g      ej^                  ja                  d"e      d)                      Z3ej^                  ja                  de.d*        d+        Z4ej^                  ja                  d$e      ej^                  ja                  d,e%e'g      ej^                  ja                  d"e      d-                      Z5ej^                  ja                  d.d/d0g      ej^                  ja                  de.d1        ej^                  ja                  d(ee g      d2                      Z6ej^                  ja                  d$e      ej^                  ja                  d,e%e'g      d3               Z7ej^                  ja                  d!eefe e!fe"e#fg      ej^                  ja                  d"e      d4               Z8d5 Z9d6 Z:d7 Z;ej^                  ja                  d8 ejx                  g d9      e=d:f ejx                  d;d<ej|                  g      e=d=fgeD  cg c]  }  | g d>g      e?d?f c}  ejx                  g d@      e=dAf ejx                  g       e=dBf      dC        Z@dD ZAej^                  ja                  dEe.      ej^                  ja                  dFej                  ejH                  f      dG               ZCdH ZDdI ZEyc c} w )J    N)cdist)DistanceMetric)BOOL_METRICSDistanceMetric32DistanceMetric64)check_random_state)assert_allclosecreate_memmap_backed_data)CSR_CONTAINERSparse_version
sp_versionc                 D    t        j                  | |z
  |z        d|z  z  S )Ng      ?)npsum)x1x2ps      k/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/metrics/tests/test_dist_metrics.py	dist_funcr      s"    6627q.!cAg..             float32g333333?gffffff?	euclidean	cityblock	minkowski)      ?         ?      r   	chebyshev
seuclideanVmahalanobisVIhammingcanberra
braycurtis)r   r   r    r"   r   wmetric_param_gridc                     | d   S Nr    paramss    r   <lambda>r6   <       F1Ir   )idszX, Ycsr_containerc                    | \  }}|j                         } ||       ||      }}t        j                  |j                          D ]  }	t	        t        ||	            }
i }|dk(  r!|j                  t        j                  k(  rddi}|dk(  r1|
d   }t        t        d      k  r|dk  rt        j                  d       t        |||fi |
}t        j                  ||j                  fi |
}|j!                  ||      }|j"                  j$                  sJ t'        ||fi | |j!                  ||      }|j"                  j$                  sJ t'        ||fi | |j!                  ||      }|j"                  j$                  sJ t'        ||fi | |j!                  ||      }|j"                  j$                  sJ t'        ||fi |  y 	Nr(   rtolư>r   r   z1.7.0r   z9scipy does not support 0<p<1 for minkowski metric < 1.7.0keys	itertoolsproductvaluesdictzipdtyper   r   r   r   pytestskipr   r   
get_metricpairwiseflagsc_contiguousr	   )r0   XYr9   metric
param_gridr?   X_csrY_csrvalskwargs	rtol_dictr   D_scipy_cdistdm	D_sklearns                   r   
test_cdistrX   ;   s    +FJ??D #]1%55E!!:#4#4#67c$o&	]"qww"**'<  I [ sAM'22q1uWXaF5f5&&vqwwA&A KK1%	++++	=>I>KKu-	++++	=>I>KKq)	++++	=>I>KK5)	++++	=>I>M 8r   rN   zX_bool, Y_boolc                 T   t        |||       }t        j                  |       }|j                  ||      }t	        ||        ||       ||      }}|j                  ||      }|j
                  j                  sJ t	        ||       |j                  ||      }|j
                  j                  sJ t	        ||       |j                  ||      }|j
                  j                  sJ t	        ||       |j                  ||      }|j
                  j                  sJ t	        ||       y N)r   r   rH   rI   r	   rJ   rK   )	rN   X_boolY_boolr9   rU   rV   rW   
X_bool_csr
Y_bool_csrs	            r   test_cdist_bool_metricr_   m   s    &&&1M		"	"6	*BFF+II}- +62M&4I
JFF+I??''''I}-J
3I??''''I}-FJ/I??''''I}-J/I??''''I}-r   c                     | d   S r2   r3   r4   s    r   r6   r6      r7   r   rL   c                    | \  }}|j                         } ||      }t        j                  |j                          D ]H  }t	        t        ||            }i }	|dk(  r!|j                  t        j                  k(  rddi}	|dk(  r1|d   }
t        t        d      k  r|
dk  rt        j                  d       t        |||fi |}t        j                  ||j                  fi |}|j!                  |      }|j"                  j$                  sJ t'        ||fi |	 |j!                  |      }|j"                  j$                  sJ t'        ||fi |	 |j!                  ||      }|j"                  j$                  sJ t'        ||fi |	 K y r;   r>   )r0   rL   r9   rN   rO   r?   rP   rR   rS   rT   r   D_scipy_pdistrV   rW   D_sklearn_csrs                  r   
test_pdistrd      sk    +FJ??D!E!!:#4#4#67c$o&	]"qww"**'<  I [ sAM'22q1uWXaF5f5&&vqwwA&AKKN	++++	=>I>E*++++}B	BE51++++}B	B= 8r   c                     | d   S r2   r3   r4   s    r   r6   r6      r7   r   c                    | \  }}|j                         }d}t        j                  |j                          D ]  }t	        t        ||            }t        j                  |t        j                  fi |}t        j                  |t        j                  fi |}|j                  t              }	|j                  t              }
|	j                  t        j                  k(  sJ |
j                  t        j                  k(  sJ t        |	|
|       |j                  t        t               }	|j                  t        t"              }
t        |	|
|        y )Ngh㈵>r<   )r?   r@   rA   rB   rC   rD   r   rH   r   float64r   rI   X64X32rE   r	   Y64Y32)r0   rN   rO   r?   r<   rR   rS   dm64dm32D64D32s              r   'test_distance_metrics_dtype_consistencyrq      s    +FJ??D D!!:#4#4#67c$o&((FvF((FvFmmC mmC yyBJJ&&&yyBJJ&&&
 	St,mmC%mmC%St,% 8r   r[   c                     t        |||       }t        j                  |       }|j                  |      }t	        ||        ||      }|j                  |      }t	        ||       y rZ   )r   r   rH   rI   r	   )rN   r[   r9   rb   rV   rW   r]   s          r   test_pdist_bool_metricsrs      s\     &&&1M		"	"6	*BF#II}-v&JJ'II}-r   writable_kwargsTFc                     | d   S r2   r3   r4   s    r   r6   r6      r7   r   c                 F   |\  }}|j                         }t        j                  |j                          D ]  }t	        d |D              rIt        j                  |      }|D ]/  }t        |t        j                        s|j                  |        1 t        t        ||            }t        j                  ||j                  fi |}	|	j!                  |      }
t#        j$                  t#        j&                  |	            }|j!                  |      }t)        |
|        y )Nc              3   P   K   | ]  }t        |t        j                           y wrZ   )
isinstancer   ndarray).0vals     r   	<genexpr>ztest_pickle.<locals>.<genexpr>   s     ;dsz#rzz*ds   $&write)r?   r@   rA   rB   anycopydeepcopyrx   r   ry   setflagsrC   rD   r   rH   rE   rI   pickleloadsdumpsr	   )rt   r0   rL   rN   rO   r?   rR   r{   rS   rV   D1dm2D2s                r   test_pickler      s     +FJ??D!!:#4#4#67;d;;==&Dc2::.LLL7  c$o&&&vqwwA&A[[^ll6<<+,\\!_B 8r   c                     t        j                  |       }|j                  |      }t        j                  t        j
                  |            }|j                  |      }t        ||       y rZ   )r   rH   rI   r   r   r   r	   )rN   r[   rV   r   r   r   s         r   test_pickle_bool_metricsr      sQ     
	"	"6	*B	V	B
,,v||B'
(C	f	BBr   c                    t        j                  | d d d df         } t        j                  |d d d df         } ||        ||      }}d }t        j                  |j                  d   |j                  d   f      }t	        |       D ]&  \  }}t	        |      D ]  \  }	}
 |||
      |||	f<    ( t        j                  d| j                        }|j                  | |      }t        |j                  |      t        j                  d|z        dz  d       t        ||       |j                  ||      }|j                  j                  sJ t        ||       |j                  ||      }|j                  j                  sJ t        ||       |j                  | |      }|j                  j                  sJ t        ||       y )Nr!   c                 J   dt        j                  t        j                  t        j                  d| d   |d   z
  z        dz  t        j                  | d         t        j                  |d         z  t        j                  d| d   |d   z
  z        dz  z  z               z  S )Nr!   r   r   r   )r   arcsinsqrtsincos)r   r   s     r   haversine_slowz-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   rH   rE   rI   r	   dist_to_rdistr   rJ   rK   )rL   rM   r9   rP   rQ   r   D_referenceixijyjr   rW   s                r   test_haversine_metricr     s    	

1QU8A


1QU8A #]1%55E
 ((EKKNEKKN;<K12q\EAr .r2 6K1 "  ))+qww?I""1a(I	*BFF33D,E,JQU I{+""5%0I??''''I{+""5!,I??''''I{+""1e,I??''''I{+r   c                     t         j                  j                  d      } t        j                  d      }t        j                  dt        d      }t        j                  t        j                  |            }t        j                  t        j                  |            }|j                  |       }|j                  |       }|j                  |       }|j                  |       }t        ||       t        ||       y )N)
   r"   r   pyfuncr!   )funcr   )
r   randomr   rH   r   r   r   r   rI   r	   )	rL   r   r   euclidean_pkl
pyfunc_pklr   r   D1_pklD2_pkls	            r   test_pyfunc_metricr   6  s    
		!A))+6I&&xi1EF LLi!89Mfll623J			A	B		B##A&F  #FBFF#r   c                      d } t        d      }|j                  dd      }t        j                  d|       }t        j                  d      }t	        |j                  |      |j                  |      dz         y )	Nc                 `    | j                   d   dk(  sJ t        j                  | |z
  dz        S )Nr   r"   r!   )r   r   r   )xys     r   custom_metricz+test_input_data_size.<locals>.custom_metricN  s-    wwqzQvvq1ul##r   r   r   r"   r   )r   r   r!   )r   randr   rH   r	   rI   )r   rngrL   r   eucls        r   test_input_data_sizer   K  se    $ Q
CQA&&xmDF$$[1DFOOA&a(8A(=>r   c                     t        d      } | j                  d      }| j                  dd      }|j                  d       |j                  d       t        j                  d|       t        j                  d|	       y )
Nr   d   r   Fr}   r%   r&   r(   r)   )r   r   r   r   rH   )r   weightsr*   s      r   test_readonly_kwargsr   Z  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                     t        j                  ||      5  t        j                  dd|        d d d        y # 1 sw Y   y xY w)Nmatchr   r"   r.   )rF   raisesr   rH   )r/   err_typeerr_msgs      r   -test_minkowski_metric_validate_weights_valuesr   j  s0    $ 
xw	/!!+a8 
0	/	/s	   :Ac                  N   t         j                  t        dz         } t        j                  dd|       }dt
        j                  d    d| j                  d    d}t        j                  t        |	      5  |j                  t
        t               d d d        y # 1 sw Y   y xY w)
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   rH   ri   r   rF   r   
ValueErrorrI   rk   )w2rV   msgs      r   +test_minkowski_metric_validate_weights_sizer     s    			1q5	!B		"	";!r	:B	%%(YYq\N 3  "}A	/ 
 
z	-
C 
.	-	-s   7BB$zmetric, metric_kwargsrE   c                 :   t         j                  t        t         j                  t        i|   }|j                         D ci c]  \  }}||d    }}}t        t        j                  | |fi |      }t         |j                  | fi |      }||u sJ y c c}}w r2   )	r   r   r   rh   r   itemstyper   rH   )rN   metric_kwargsrE   specialized_clskvgeneric_typespecialized_types           r   test_get_metric_dtyper     s     	

$


$ O *7)<)<)>?)>AQ!W)>M?11&%Q=QRL6O66vOOP++++	 @s   Bc                      t         j                  } d}t        j                  t        |      5  t        j                  d|        d d d        y # 1 sw Y   y xY w)Nz8Unexpected dtype .* provided. Please select a dtype fromr   	manhattan)r   int32rF   r   r   r   rH   )rE   r   s     r   test_get_metric_bad_dtyper     s:    HHE
EC	z	-!!+u5 
.	-	-s   AAc                      d} t        j                  t        |       5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nzp must be greater than 0r   r   r   r#   )rF   r   r   r   rH   )r   s    r   .test_minkowski_metric_validate_bad_p_parameterr     s1    
$C	z	-!!+3 
.	-	-s	   ?A)Fr   r@   r   numpyr   rF   scipy.spatial.distancer   sklearn.metricsr   sklearn.metrics._dist_metricsr   r   r   sklearn.utilsr   sklearn.utils._testingr	   r
   sklearn.utils.fixesr   r   r   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parametrizerX   r_   rd   rq   rs   r   r   r   r   r   r   arrayr   nan	TypeErrorr   r   r   r   r   r   )r9   s   0r   <module>r      s        ( * 
 - M I I/ 	Q 	Q 	jj	jj,c3Z8  )		BJJ	'
)		BJJ	'67GH k q!fRVVAqss^ ""$,-."43,,Q/123DREN#O2$)c.?.?.B-DEF  /5M   3*sCj66:J!KL.9*? : M
*?Z <0'+{)CD .9. : 1
.8 /5M   sC01.9"C : 2
"CJ /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   T>