
    0PhG=                     
   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mZ d dlmZ d dlmZ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                    eef          Ze                    eef          Z e!                    d          Z"e !                    d          Z# eee g          \  Z$Z%edk     !                    ej&                  Z'e dk     !                    ej&                  Z( ee'e(g          \  Z)Z*e                    eef          Z+ ej,        e+e+j-                  Z.di fdi fd e/d          fdi fd e/e                    e          f          fd e/e.f          fdi fdi fdi fd e/de                    e          f          fg
Z0ej1        2                    de0d            ej1        2                    d!ee fe"e#fe$e%fg          ej1        2                    d"e          d#                                     Z3ej1        2                    d$e          ej1        2                    d%e'e(fe)e*fg          ej1        2                    d"e          d&                                     Z4ej1        2                    de0d'            ej1        2                    d(ee"e$g          ej1        2                    d"e          d)                                     Z5ej1        2                    de0d*            d+             Z6ej1        2                    d$e          ej1        2                    d,e'e)g          ej1        2                    d"e          d-                                     Z7ej1        2                    d.d/d0g          ej1        2                    de0d1            ej1        2                    d(ee"g          d2                                     Z8ej1        2                    d$e          ej1        2                    d,e'e)g          d3                         Z9ej1        2                    d!ee fe"e#fe$e%fg          ej1        2                    d"e          d4                         Z:d5 Z;d6 Z<d7 Z=ej1        2                    d8 ej>        g d9          e?d:f ej>        d;d<ej@        g          e?d=fgd> eD              ej>        g d?          e?d@f ej>        g           e?dAf          dB             ZAdC ZBej1        2                    dDe0          ej1        2                    dEejC        ej&        f          dF                         ZDdG ZEdH ZFdS )I    N)cdist)DistanceMetric)BOOL_METRICSDEPRECATED_METRICSDistanceMetric32DistanceMetric64)check_random_state)assert_allclosecreate_memmap_backed_dataignore_warnings)CSR_CONTAINERSparse_version
sp_versionc                 B    t          j        | |z
  |z            d|z  z  S )Ng      ?)npsum)x1x2ps      g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/metrics/tests/test_dist_metrics.py	dist_funcr      s#    62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>r8   A   
    F1I r   )idszX, Ycsr_containerc                    | \  }}|                                 } ||           ||          }}t          j        |                                 D ]p}	t	          t          ||	                    }
i }|dk    r|j        t          j        k    rddi}|dk    r:|
d         }t          t          d          k     r|dk     rt          j        d           t          |||fi |
}t          j        ||j        fi |
}|                    ||          }|j        j        sJ t'          ||fi | |                    ||          }|j        j        sJ t'          ||fi | |                    ||          }|j        j        sJ t'          ||fi | |                    ||          }|j        j        sJ t'          ||fi | rd S 	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
   )r2   XYr;   metric
param_gridrA   X_csrY_csrvalskwargs	rtol_dictr   D_scipy_cdistdm	D_sklearns                   r   
test_cdistrZ   @   s    +FJ??D =##]]1%5%55E!:#4#4#6#67 &? &?c$oo&&	]""qw"*'<'<  I [  sAM'2222q1uuWXXXaF55f55&vqwAA&AA KK1%%	++++	=>>I>>>KKu--	++++	=>>I>>>KKq))	++++	=>>I>>>KK5))	++++	=>>I>>>>M&? &?r   rP   zX_bool, Y_boolc                    | t           v r?t          t                    5  t          |||           }d d d            n# 1 swxY w Y   nt          |||           }t	          j        |           }|                    ||          }t          ||            ||           ||          }}|                    ||          }|j        j	        sJ t          ||           |                    ||          }|j        j	        sJ t          ||           |                    ||          }|j        j	        sJ t          ||           |                    ||          }|j        j	        sJ t          ||           d S N)category)
r   r   DeprecationWarningr   r   rJ   rK   r
   rL   rM   )	rP   X_boolY_boolr;   rW   rX   rY   
X_bool_csr
Y_bool_csrs	            r   test_cdist_bool_metricrc   r   s    ###&8999 	: 	:
 "&&&99M	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: fff55		"6	*	*BFF++II}--- +]622MM&4I4I
JFF++I?''''I}---J
33I?''''I}---FJ//I?''''I}---J//I?''''I}-----   =AAc                     | d         S r4   r5   r6   s    r   r8   r8      r9   r   rN   c                 
   | \  }}|                                 } ||          }t          j        |                                 D ]<}t	          t          ||                    }i }	|dk    r|j        t          j        k    rddi}	|dk    r:|d         }
t          t          d          k     r|
dk     rt          j        d           t          |||fi |}t          j        ||j        fi |}|                    |          }|j        j        sJ t'          ||fi |	 |                    |          }|j        j        sJ t'          ||fi |	 |                    ||          }|j        j        sJ t'          ||fi |	 >d S r=   r@   )r2   rN   r;   rP   rQ   rA   rR   rT   rU   rV   r   D_scipy_pdistrX   rY   D_sklearn_csrs                  r   
test_pdistri      s    +FJ??DM!E!:#4#4#6#67 C Cc$oo&&	]""qw"*'<'<  I [  sAM'2222q1uuWXXXaF55f55&vqwAA&AAKKNN	++++	=>>I>>>E**++++}BB	BBBE511++++}BB	BBBB=C Cr   c                     | d         S r4   r5   r6   s    r   r8   r8      r9   r   c                    | \  }}|                                 }d}t          j        |                                 D ] }t	          t          ||                    }t          j        |t          j	        fi |}t          j        |t          j
        fi |}|                    t                    }	|                    t                    }
|	j        t          j	        k    sJ |
j        t          j
        k    sJ t          |	|
|           |                    t          t                     }	|                    t          t"                    }
t          |	|
|           "d S )Ngh㈵>r>   )rA   rB   rC   rD   rE   rF   r   rJ   r   float64r   rK   X64X32rG   r
   Y64Y32)r2   rP   rQ   rA   r>   rT   rU   dm64dm32D64D32s              r   'test_distance_metrics_dtype_consistencyrv      s?    +FJ??D D!:#4#4#6#67 - -c$oo&&(FFvFF(FFvFFmmC  mmC  yBJ&&&&yBJ&&&&
 	St,,,,mmC%%mmC%%St,,,,,%- -r   r_   c                    | t           v r?t          t                    5  t          |||           }d d d            n# 1 swxY w Y   nt          |||           }t	          j        |           }|                    |          }t          ||            ||          }|                    |          }t          ||           d S r\   )r   r   r^   r   r   rJ   rK   r
   )rP   r_   r;   rg   rX   rY   ra   s          r   test_pdist_bool_metricsrx      s    ###&8999 	: 	:
 "&&&99M	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: fff55		"6	*	*BF##II}---v&&JJ''II}-----rd   writable_kwargsTFc                     | d         S r4   r5   r6   s    r   r8   r8      r9   r   c                 l   |\  }}|                                 }t          j        |                                 D ]}t	          d |D                       rIt          j        |          }|D ]2}t          |t          j	                  r|
                    |            3t          t          ||                    }t          j        ||j        fi |}	|	                    |          }
t#          j        t#          j        |	                    }|                    |          }t)          |
|           d S )Nc              3   J   K   | ]}t          |t          j                  V  d S N)
isinstancer   ndarray).0vals     r   	<genexpr>ztest_pickle.<locals>.<genexpr>  s.      ;;sz#rz**;;;;;;r   write)rA   rB   rC   rD   anycopydeepcopyr~   r   r   setflagsrE   rF   r   rJ   rG   rK   pickleloadsdumpsr
   )ry   r2   rN   rP   rQ   rA   rT   r   rU   rX   D1dm2D2s                r   test_pickler      s+    +FJ??D!:#4#4#6#67    ;;d;;;;; 	8=&&D 8 8c2:.. 8LLL777c$oo&&&vqwAA&AA[[^^l6<++,,\\!__B   r   c                     t          j        |           }|                    |          }t          j        t          j        |                    }|                    |          }t          ||           d S r}   )r   rJ   rK   r   r   r   r
   )rP   r_   rX   r   r   r   s         r   test_pickle_bool_metricsr     se     
	"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                  }|                    | |          }t          |
                    |          t          j        d|z            dz  d           t          ||           |                    ||          }|j        j        sJ t          ||           |                    ||          }|j        j        sJ t          ||           |                    | |          }|j        j        sJ t          ||           d S )Nr#   c                 b   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    29Gsbebem,--2&A--"&A--/"&119N2O2OST2TTU 
 
 
 	
r   r   	haversiner    r?   rl   )r   asarrayzerosshape	enumerater   rJ   rG   rK   r
   dist_to_rdistr   rL   rM   )rN   rO   r;   rR   rS   r   D_referenceixijyjr   rY   s                r   test_haversine_metricr     s
    	
1QQQU8A

1QQQU8A =##]]1%5%55E
 
 
 (EKNEKN;<<K1 7 72q\\ 	7 	7EAr .r2 6 6K1	7 )+qw??I""1a((I	**BF33D,E,E,JQU    I{+++""5%00I?''''I{+++""5!,,I?''''I{+++""1e,,I?''''I{+++++r   c                  $   t           j                            d          } t          j        d          }t          j        dt          d          }t          j        t          j        |                    }t          j        t          j        |                    }|                    |           }|                    |           }|                    |           }|                    |           }t          ||           t          ||           d S )N)
   r$   r   pyfuncr#   )funcr   )
r   randomr   rJ   r   r   r   r   rK   r
   )	rN   r   r   euclidean_pkl
pyfunc_pklr   r   D1_pklD2_pkls	            r   test_pyfunc_metricr   L  s    
	!!A)+66I&xi1EEEF Li!8!899Mfl62233J			A		B			B##A&&F  ##FBFF#####r   c                     d } t          d          }|                    dd          }t          j        d|           }t          j        d          }t	          |                    |          |                    |          dz             d S )	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_metricd  s-    wqzQvq1ul###r   r   r   r$   r   )r   r   r#   )r	   randr   rJ   r
   rK   )r   rngrN   r   eucls        r   test_input_data_sizer   a  s    $ $ $ Q

CQA&xmDDDF$[11DFOOA&&a(8(8A(=>>>>>r   c                  *   t          d          } |                     d          }|                     dd          }|                    d           |                    d           t          j        d|           t          j        d|	           d S )
Nr   d   r   Fr   r'   r(   r*   r+   )r	   r   r   r   rJ   )r   weightsr,   s      r   test_readonly_kwargsr   p  s     Q

ChhsmmG	"b		B5!!!KKeK lg6666m333333r   zw, err_type, err_msg)r!   r"   iz!w cannot contain negative weightsr!   r"   zw contains NaNc                 :    g | ]} |g d g          t           dfS ))r!   r"   r!   z8Sparse data was passed for w, but dense data is required)	TypeError)r   r;   s     r   
<listcomp>r     sE     

 

 

 	 {{{m,,J

 

 

r   )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            d S # 1 swxY w Y   d S )Nmatchr   r$   r0   )rH   raisesr   rJ   )r1   err_typeerr_msgs      r   -test_minkowski_metric_validate_weights_valuesr     s    $ 
xw	/	/	/ 9 9!+a88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   <A A c                  h   t                               t          dz             } t          j        dd|           }dt
          j        d          d| j        d          d}t          j        t          |	          5  |
                    t
          t                     d d d            d S # 1 swxY w Y   d S )
Nr!   r   r$   r0   zEMinkowskiDistance: the size of w must match the number of features \(z\). Currently len\(w\)=r   .r   )r   random_sampledr   rJ   rn   r   rH   r   
ValueErrorrK   rp   )w2rX   msgs      r   +test_minkowski_metric_validate_weights_sizer     s    			1q5	!	!B		";!r	:	:	:B	/%(Yq\	/ 	/ "	/ 	/ 	/ 
 
z	-	-	-  
C                 s   9!B''B+.B+zmetric, metric_kwargsrG   c                    t           j        t          t           j        t          i|         }d |                                D             }t          t          j        | |fi |          }t           |j        | fi |          }||u sJ d S )Nc                 &    i | ]\  }}||d          S )r   r5   )r   kvs      r   
<dictcomp>z)test_get_metric_dtype.<locals>.<dictcomp>  s"    ???AQ!???r   )	r   r   r   rm   r   itemstyper   rJ   )rP   metric_kwargsrG   specialized_clsgeneric_typespecialized_types         r   test_get_metric_dtyper     s     	
$

$ O @?)<)<)>)>???M1&%QQ=QQRRL6O6vOOOOPP+++++++r   c                      t           j        } d}t          j        t          |          5  t          j        d|            d d d            d S # 1 swxY w Y   d S )Nz8Unexpected dtype .* provided. Please select a dtype fromr   	manhattan)r   int32rH   r   r   r   rJ   )rG   r   s     r   test_get_metric_bad_dtyper     s    HE
EC	z	-	-	- 6 6!+u5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   AAAc                      d} t          j        t          |           5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nzp must be greater than 0r   r   r   r%   )rH   r   r   r   rJ   )r   s    r   .test_minkowski_metric_validate_bad_p_parameterr     s    
$C	z	-	-	- 4 4!+33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   AA	A)Gr   rB   r   numpyr   rH   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   r   r   n1n2r   rn   rp   astypero   rq   X_mmapY_mmaprm   r_   r`   X_bool_mmapY_bool_mmapr)   dotTr,   rE   METRICS_DEFAULT_PARAMSmarkparametrizerZ   rc   ri   rv   rx   r   r   r   r   r   r   arrayr   nanr   r   r   r   r   r   r5   r   r   <module>r      s              ( ( ( ( ( ( * * * * * *            - , , , , ,         
 J I I I I I I I I I/ / / 	Q  	Q  	jj	jj,,c3Z88  )		BJ	'	'
)		BJ	'	'667GHH k q!fRVAqs^^ ""$$,---."443,,Q//12223DDRENNN#O2$$)c.?.?.B.B-DEEEF  /5M5M    3*sCj66:J!KLL.99*? *? :9 ML 
*?Z <00'+{)CD  .99!. !. :9  10
!.H /5M5M    sC011.99"C "C :9 21 
"CJ /5M5M   - - -> <00FK#899.99. . :9 :9 10.( *T5M::/5M5M    sCj))    *)  ;:
 " <00FK#899  :9 10 3*sCj66:J!KLL.99), ), :9 ML),X$ $ $*? ? ?4 4 4  	---	 	 *.QR	1c26"	#	#Z1AB

 

 "0

 

 

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