
    _ndP@              
          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 d dlmZmZ d dlmZ d dlmZmZ d dl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g	Z/e ed          k    r7e/0                    d e.de                    e          f          f           n6e/0                    d e.de                    e          f          f           ej1        2                    d           ej1        3                    d!e/d" #          ej1        3                    d$eefe!e"fe#e$fg          d%                                     Z4ej1        3                    d&e          ej1        3                    d'e&e'fe(e)fg          d(                         Z5ej1        2                    d           ej1        3                    d!e/d) #          ej1        3                    d*ee!e#g          d+                                     Z6ej1        2                    d           ej1        3                    d!e/d, #          d-                         Z7ej1        3                    d&e          ej1        3                    d.e&e(g          d/                         Z8ej1        2                    d           ej1        3                    d0d1d2g          ej1        3                    d!e/d3 #          ej1        3                    d*ee!g          d4                                                 Z9ej1        2                    d           ej1        3                    d&e          ej1        3                    d.e&e(g          d5                                     Z:ej1        3                    d$eefe!e"fe#e$fg          d6             Z;d7 Z<d8 Z=ej1        2                    d           d9             Z>ej1        3                    d: ej?        g d;          e@d<f ej?        d=d>ejA        g          e@d?f ejB        g d@          eCdAf ej?        g dB          e@dCf ej?        g           e@dDfg          dE             ZDdF ZEdG ZFej1        2                    d           ej1        3                    dHg d          dI                         ZGdS )J    N)cdist)DistanceMetric)BOOL_METRICSDistanceMetric32)check_random_state)assert_allclosecreate_memmap_backed_data)
sp_versionparse_versionc                 B    t          j        | |z
  |z            d|z  z  S )Ng      ?)npsum)x1x2ps      Glib/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
braycurtisz
1.8.0.dev0)r   r   r   r   w
wminkowskiz/ignore:WMinkowskiDistance:FutureWarning:sklearnmetric_param_gridc                     | d         S Nr    paramss    r   <lambda>r3   M   
    F1I r   )idszX, Yc                 B   |j         |j         cxk    rt          j        k    r
n nt          nt          }| \  }}|                                }t          j        |          t          j        |          }}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t           }t#          j        |          5  t'          |||fi |
}d d d            n# 1 swxY w Y   nt'          |||fi |
} |j        |fi |
}|                    ||          }|j        j        sJ t1          ||fi | |                    ||          }|j        j        sJ t1          ||fi | |                    ||          }|j        j        sJ t1          ||fi | |                    ||          }|j        j        sJ t1          ||fi | d S )Nr$   rtolư>r,   1.6.0)dtyper   float64r   r   keyssp
csr_matrix	itertoolsproductvaluesdictzipr   r
   r   DeprecationWarningpytestwarnsr   
get_metricpairwiseflagsc_contiguousr   )r-   XYDistanceMetricInterfacemetric
param_gridr<   X_csrY_csrvalskwargs	rtol_dictWarningToExpectD_scipy_cdistdm	D_sklearns                   r   
test_cdistrY   K   s    'QW::::
:::::@P  +FJ??D=##R]1%5%55E!:#4#4#6#67 '? '?c$oo&&	]""qw"*'<'<  I\!!"O]73333"4o.. > > %aF = =f = => > > > > > > > > > > > > > > "!Q99&99M/$/AA&AA KK1%%	++++	=>>I>>>KKu--	++++	=>>I>>>KKq))	++++	=>>I>>>KK5))	++++	=>>I>>>>O'? '?s   D,,D0	3D0	rN   zX_bool, Y_boolc                    t          |||           }t          j        |           }|                    ||          }t	          ||           t          j        |          t          j        |          }}|                    ||          }|j        j        sJ t	          ||           |                    ||          }|j        j        sJ t	          ||           |                    ||          }|j        j        sJ t	          ||           |                    ||          }|j        j        sJ t	          ||           d S N)	r   r   rG   rH   r   r=   r>   rI   rJ   )rN   X_boolY_boolrV   rW   rX   
X_bool_csr
Y_bool_csrs           r   test_cdist_bool_metricr`      s=   
 &&&11M		"6	*	*BFF++II}---  ]622BM&4I4I
JFF++I?''''I}---J
33I?''''I}---FJ//I?''''I}---J//I?''''I}-----r   c                     | d         S r/   r0   r1   s    r   r3   r3      r4   r   rK   c                    |j         t          j        k    rt          nt          }| \  }}|                                }t          j        |          }t          j	        |
                                 D ]}t          t          ||                    }i }	|dk    r|j         t          j        k    rddi}	|dk    rt          t          d          k    rt!          j        d           d }
t          t          d          k    rt$          }
t!          j        |
          5  t)          |||fi |}d d d            n# 1 swxY w Y   nt)          |||fi |} |j        |fi |}|                    |          }|j        j        sJ t3          ||fi |	 |                    |          }|j        j        sJ t3          ||fi |	 |                    ||          }|j        j        sJ t3          ||fi |	 d S )Nr$   r7   r8   r,   z1.8.0z)wminkowski will be removed in SciPy 1.8.0r9   )r:   r   r;   r   r   r<   r=   r>   r?   r@   rA   rB   rC   r   r
   r   rE   skiprD   rF   r   rG   rH   rI   rJ   r   )r-   rK   rM   rN   rO   r<   rP   rR   rS   rT   ExceptionToAssertD_scipy_pdistrW   rX   D_sklearn_csrs                  r   
test_pdistrg      sp    'RZ//5E  +FJ??DM!E!:#4#4#6#67 #C #Cc$oo&&	]""qw"*'<'<  I\!!]73333GHHH !%]73333$6!/00 > > %aF = =f = => > > > > > > > > > > > > > > "!Q99&99M/$/AA&AAKKNN	++++	=>>I>>>E**++++}BB	BBBE511++++}BB	BBBBG#C #Cs   D55D9	<D9	c                     | d         S r/   r0   r1   s    r   r3   r3      r4   r   c                    | \  }}|                                 }d}t          j        |                                 D ]}t	          t          ||                    }t          j        |fi |}t          j        |fi |}|	                    t                    }	|	                    t                    }
|	j        |
j        cxk    rt          j        k    sn J t          |	|
|           |	                    t          t                     }	|	                    t          t"                    }
t          |	|
|           d S )Ngh㈵>r7   )r<   r?   r@   rA   rB   rC   r   rG   r   rH   X64X32r:   r   r;   r   Y64Y32)r-   rN   rO   r<   r7   rR   rS   dm64dm32D64D32s              r   'test_distance_metrics_dtype_consistencyrs      s:    +FJ??D D!:#4#4#6#67 - -c$oo&&(::6::*6<<V<<mmC  mmC   yCI3333333333
 	St,,,,mmC%%mmC%%St,,,,,+- -r   r\   c                    t          |||           }t          j        |           }|                    |          }t	          ||           t          j        |          }|                    |          }t	          ||           d S r[   )r   r   rG   rH   r   r=   r>   )rN   r\   re   rW   rX   r^   s         r   test_pdist_bool_metricsru      s|     &&&11M		"6	*	*BF##II}---v&&JJ''II}-----r   writable_kwargsTFc                     | d         S r/   r0   r1   s    r   r3   r3     r4   r   c                    |j         t          j        k    rt          nt          }|\  }}|                                }t          j        |                                 D ]}t          d |D                       rIt          j        |          }|D ]2}t          |t          j                  r|                    |            3t          t!          ||                    }	 |j        |fi |	}
|
                    |          }t'          j        t'          j        |
                    }|                    |          }t-          ||           d S )Nc              3   J   K   | ]}t          |t          j                  V  d S r[   )
isinstancer   ndarray).0vals     r   	<genexpr>ztest_pickle.<locals>.<genexpr>  s.      ;;sz#rz**;;;;;;r   write)r:   r   r;   r   r   r<   r?   r@   rA   anycopydeepcopyrz   r{   setflagsrB   rC   rG   rH   pickleloadsdumpsr   )rv   r-   rK   rM   rN   rO   r<   rR   r}   rS   rW   D1dm2D2s                 r   test_pickler   	  sG    'RZ//5E  +FJ??D!:#4#4#6#67    ;;d;;;;; 	8=&&D 8 8c2:.. 8LLL777c$oo&&/$/AA&AA[[^^l6<++,,\\!__B   r   c                     t          j        |           }|                    |          }t          j        t          j        |                    }|                    |          }t          ||           d S r[   )r   rG   rH   r   r   r   r   )rN   r\   rW   r   r   r   s         r   test_pickle_bool_metricsr   $  se     
	"6	*	*B	V		B
,v|B''
(
(C	f		BBr   c                    | j         t          j        k    rt          nt          }t          j        | d d d df                   } t          j        |d d d df                   }t          j        |           t          j        |          }}d }t          j        |j	        d         |j	        d         f          }t          |           D ]+\  }}t          |          D ]\  }	}
 |||
          |||	f<   ,|                    d          }|                    | |          }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   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   r8   rj   )r:   r   r;   r   r   asarrayr=   r>   zerosshape	enumeraterG   rH   r   dist_to_rdistr   rI   rJ   )rK   rL   rM   rP   rQ   r   D_referenceixijyjr   rX   s                r   test_haversine_metricr   /  s&    'RZ//5E 
 	
1QQQU8A

1QQQU8A=##R]1%5%55E
 
 
 (EKNEKN;<<K1 7 72q\\ 	7 	7EAr .r2 6 6K1	7 (22;??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   rG   r   r   r   r   rH   r   )	rK   r   r   euclidean_pkl
pyfunc_pklr   r   D1_pklD2_pkls	            r   test_pyfunc_metricr   `  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_metricx  s-    wqzQvq1ul###r   r   r   r   r   )r   r   r   )r   randr   rG   r   rH   )r   rngrK   r   eucls        r   test_input_data_sizer   u  s    $ $ $ Q

CQA&xmDDDF$[11DFOOA&&a(8(8A(=>>>>>r   c                  X   t          d          } |                     d          }|                     dd          }|                    d           |                    d           t          j        d|           t          j        dd	|
           t          j        d|           d S )Nr   d   r   Fr   r!   r"   r,   r   r*   r$   r%   )r   r   r   r   rG   )r   weightsr&   s      r   test_readonly_kwargsr     s    
 Q

ChhsmmG	"b		B5!!!KKeK lg6666la7;;;;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 NaN)r   r   r   z6A sparse matrix was passed, 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            d S # 1 swxY w Y   d S )Nmatchr   r   r*   )rE   raisesr   rG   )r+   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   r*   zEMinkowskiDistance: the size of w must match the number of features \(z\). Currently len\(w\)=r   .r   )r   random_sampledr   rG   rk   r   rE   r   
ValueErrorrH   rm   )w2rW   msgs      r   +test_minkowski_metric_validate_weights_sizer     s    			1q5	!	!B		";!r	:	:	:B	/%(Yq\	/ 	/ "	/ 	/ 	/ 
 
z	-	-	-  
C                 s   9!B''B+.B+c                      t                               t                    } d}t          j        t
          |          5  t          j        dd|            d d d            d S # 1 swxY w Y   d S )Nz/WMinkowskiDistance is deprecated in version 1.1r   r,   r   r*   )r   r   r   rE   rF   FutureWarningr   rG   )r+   r   s     r   test_wminkowski_deprecatedr     s    !A
;C	m3	/	/	/ : :!,!q9999: : : : : : : : : : : : : : : : : :s   A""A&)A&r   c                 L   t                               t                    }t          j        d| |d| z  z            }t          j        d| |          }|                    t          t                    }|                    t          t                    }t          ||           d S )Nr,   r   r*   r   )	r   r   r   r   rG   rH   rk   rm   r   )r   r+   dm_wmksdm_mksD_wmksD_mkss         r   %test_wminkowski_minkowski_equivalencer     s     	!A'aQU^LLLG&{a1===Fc3''FOOC%%EFE"""""r   )Hr?   r   r   numpyr   rE   scipy.sparsesparser=   scipy.spatial.distancer   sklearn.metricsr   sklearn.metrics._dist_metricsr   r   sklearn.utilsr   sklearn.utils._testingr   r	   sklearn.utils.fixesr
   r   r   r   r   n1n2r   rk   rm   astyperl   rn   X_mmapY_mmapr;   r\   r]   X_bool_mmapY_bool_mmapr#   dotTr&   rB   METRICS_DEFAULT_PARAMSappendmarkfilterwarningsparametrizerY   r`   rg   rs   ru   r   r   r   r   r   r   arrayr   nanr>   	TypeErrorr   r   r   r   r0   r   r   <module>r      s                    ( ( ( ( ( ( * * * * * *        - , , , , , M M M M M M M M 9 9 9 9 9 9 9 9/ / / 	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
  |,,,, !!	dd[S->->q-A-A,CDDDE    !!	ttkc.?.?.B.B-DEEEF   MNN/5M5M    3*sCj66:J!KLL.? .? ML  ON
.?b <00'+{)CD . .  10.: MNN/5M5M    sC011*C *C 21  ON
*C\ MNN/5M5M   - -  ON-D <00FK#899. . :9 10. MNN*T5M::/5M5M    sCj))    *)  ;: ON * MNN<00FK#899  :9 10 ON 3*sCj66:J!KLL-, -, ML-,`$ $ $*? ? ?  MNN4 4 ON4" 	---	 	 *.QR	1c26"	#	#Z1ABBM+++&&D	

 
///	"	"J0ST	"z#?@
 9 9 9
	 	 	: : : MNNkkk**# # +* ON# # #r   