o
    tBh-                  
   @   s  d dl Z d dlZd dlZd dlZd dlm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 d dlmZ d dlmZ d dlmZmZ d	d
 Zed ZdZdZdZeeefjdddZeeefjdddZ eee g\Z!Z"e#d Z$e #d Z%ee$e%g\Z&Z'eeefZ(e)e(e(j*Z+di fdi fde,ddfdi fde,eefdfde,e+fdfdi fdi fdi fg	Z-eedkre-.de,deefd f ne-.d!e,deefd f d"d# Z/ej01d$ej02d%e-ej02d&ee fe!e"fgd'd( Z3ej02d)eej02d*e$e%fe&e'fgd+d, Z4d-d. Z5ej01d$ej02d%e-ej02d&ee fe!e"fgd/d0 Z6ej02d)eej02d1e$e&gd2d3 Z7d4d5 Z8d6d7 Z9ej01d$ej02d8d9dgej02d%e-d:d; Z:ej01d$ej02d)eej02d1e$e&gd<d= Z;d>d? Z<d@dA Z=dBdC Z>dDdE Z?ej01d$dFdG Z@ej02dHeAg dIeBdJfeAdKdLejCgeBdMfe
Dg dNeEdOfeAg dPeBdQfeAg eBdRfgdSdT ZFdUdV ZGdWdX ZHej01d$ej02dYg ddZd[ ZIdS )\    N)assert_array_almost_equal)cdist)DistanceMetric)BOOL_METRICS)check_random_state)create_memmap_backed_data)
sp_versionparse_versionc                 C   s   t | | | d|  S )Ng      ?)npsum)x1x2p r   ~/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/metrics/tests/test_dist_metrics.py	dist_func   s   r            float64F)copy	euclidean	cityblock	minkowski)         ?      )r   	chebyshev
seuclideanVmahalanobisVIhammingcanberra
braycurtisz
1.8.0.dev0)r   r   r   r   w
wminkowskic                 C   s   | dkr.d }t tdkrt}t| t||| fi |}W d    n1 s(w   Y  n
t||| fi |}tj| fi |}|||}t	|| d S )Nr*   1.6.0)
r   r	   DeprecationWarningpytestwarnsr   r   
get_metricpairwiser   )metrickwargsX1X2WarningToExpectD_scipy_cdistdm	D_sklearnr   r   r   check_cdistD   s   r9   z/ignore:WMinkowskiDistance:FutureWarning:sklearnmetric_param_gridzX1, X2c                 C   sV   | \}}|  }tj|  D ]}tt||}|dkr!td t|||| qd S )Nr"   zAscipy#13861: cdist with 'mahalanobis' fails on joblib memmap data)	keys	itertoolsproductvaluesdictzipr-   xfailr9   )r:   r3   r4   r1   
param_gridr;   valsr2   r   r   r   
test_cdistU   s   rD   r1   zX1_bool, X2_boolc                 C   s   t ||| }t| | d S N)r   check_cdist_bool)r1   X1_boolX2_boolD_truer   r   r   test_cdist_bool_metricf   s   rJ   c                 C   s$   t | }|tt}t|| d S rE   )r   r/   r0   rG   rH   r   r1   rI   r7   D12r   r   r   rF   o   s   
rF   c           
   	   C   s   | \}}|  }tj|  D ]\}tt||}|dkr"td nC|dkr[tt	dkr1t
d d }tt	dkr;t}t| t|||fi |}	W d    n1 sUw   Y  n
t|||fi |}	t|||	 qd S )Nr"   z9scipy#13861: pdist with 'mahalanobis' fails onmemmap datar*   z1.8.0z)wminkowski will be removed in SciPy 1.8.0r+   )r;   r<   r=   r>   r?   r@   r-   rA   r   r	   skipr,   r.   r   check_pdist)
r:   r3   r4   r1   rB   r;   rC   r2   ExceptionToAssertrI   r   r   r   
test_pdistv   s&   
rP   rG   c                 C   s   t ||| }t| | d S rE   )r   check_pdist_bool)r1   rG   rI   r   r   r   test_pdist_bool_metrics   s   rR   c                 C   s*   t j| fi |}|t}t|| d S rE   )r   r/   r0   r3   r   )r1   r2   rI   r7   rL   r   r   r   rN      s   
rN   c                 C   sD   t | }|t}| dkrttdk rd|t|< t|| d S )Njaccardz1.2.0r   )	r   r/   r0   rG   r   r	   r
   isnanr   rK   r   r   r   rQ      s
   

rQ   writable_kwargsTc                 C   s~   |\}}|  }tj|  D ]-}tdd |D r0t|}|D ]}t|tj	r/|j
| d q!tt||}t|| qd S )Nc                 s   s    | ]	}t |tjV  qd S rE   )
isinstancer
   ndarray).0valr   r   r   	<genexpr>   s    ztest_pickle.<locals>.<genexpr>write)r;   r<   r=   r>   anyr   deepcopyrV   r
   rW   setflagsr?   r@   check_pickle)rU   r:   r1   rB   r;   rC   rY   r2   r   r   r   test_pickle   s   
ra   c                 C   s<   t | }||}tt|}||}t|| d S rE   )r   r/   r0   pickleloadsdumpsr   )r1   rG   r7   D1dm2D2r   r   r   test_pickle_bool_metrics   s
   


rh   c                 C   sD   t j| fi |}|t}tt|}|t}t|| d S rE   )r   r/   r0   r3   rb   rc   rd   r   )r1   r2   r7   re   rf   rg   r   r   r   r`      s
   

r`   c            	      C   s   dd } t jd}td}||}t |}t|D ]\}}t|D ]\}}| |||||f< q%qt|| t||t 	d| d  d S )Nc                 S   sh   dt t t d| d |d   d t | d t |d  t d| d |d   d    S )Nr         ?r   r   )r
   arcsinsqrtsincos)r   r   r   r   r   haversine_slow   s   8z-test_haversine_metric.<locals>.haversine_slow)
   r   	haversineri   r   )
r
   randomr   r/   r0   
zeros_like	enumerater   dist_to_rdistrl   )	rn   Xrp   re   rg   ir   jr   r   r   r   test_haversine_metric   s   



"rx   c            	      C   s   t jd} td}tjdtdd}tt|}tt|}|| }|| }|| }|| }t	|| t	|| d S )N)ro   r   r   pyfuncr   )funcr   )
r
   rq   r   r/   r   rb   rc   rd   r0   r   )	ru   r   ry   euclidean_pkl
pyfunc_pklre   rg   D1_pklD2_pklr   r   r   test_pyfunc_metric   s   





r   c                  C   sR   dd } t d}|dd}tjd| d}td}t||||d	  d S )
Nc                 S   s$   | j d dks	J t| | d S )Nr   r   r   )shaper
   r   )xyr   r   r   custom_metric   s   z+test_input_data_size.<locals>.custom_metricr   ro   r   ry   )rz   r   r   )r   randr   r/   r   r0   )r   rngru   ry   euclr   r   r   test_input_data_size   s   
r   c                  C   sf   t d} | d}| dd}|jdd |jdd tjd|d tjdd	|d
 tjd|d d S )Nr   d   ro   Fr[   r   r    r*   r   r(   r"   r#   )r   r   r_   r   r/   )r   weightsr$   r   r   r   test_readonly_kwargs
  s   
r   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                 C   sD   t j||d tjdd| d W d    d S 1 sw   Y  d S )Nmatchr   r   r(   )r-   raisesr   r/   )r)   err_typeerr_msgr   r   r   -test_minkowski_metric_validate_weights_values  s   "r   c                  C   s|   t td } tjdd| d}dtjd  d| jd  d}tjt	|d	 |
tt W d    d S 1 s7w   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   r/   r3   r   r-   r   
ValueErrorr0   r4   )w2r7   msgr   r   r   +test_minkowski_metric_validate_weights_size/  s   "r   c                  C   sR   t t} d}tjt|d tjdd| d W d    d S 1 s"w   Y  d S )Nz/WMinkowskiDistance is deprecated in version 1.1r   r*   r   r(   )r   r   r   r-   r.   FutureWarningr   r/   )r)   r   r   r   r   test_wminkowski_deprecated<  s
   
"r   r   c                 C   sX   t t}tjd| |d|   d}tjd| |d}|tt}|tt}t|| d S )Nr*   r   r(   r   )	r   r   r   r   r/   r0   r3   r4   r   )r   r)   dm_wmksdm_mksD_wmksD_mksr   r   r   %test_wminkowski_minkowski_equivalenceD  s   
r   )Jr<   rb   r   numpyr
   numpy.testingr   r-   scipy.sparsesparsespscipy.spatial.distancer   sklearn.metricsr   sklearn.metrics._dist_metricsr   sklearn.utilsr   sklearn.utils._testingr   sklearn.utils.fixesr   r	   r   r   r   n1n2r   astyper3   r4   X1_mmapX2_mmaproundrG   rH   X1_bool_mmapX2_bool_mmapr!   dotTr$   r?   METRICS_DEFAULT_PARAMSappendr9   markfilterwarningsparametrizerD   rJ   rF   rP   rR   rN   rQ   ra   rh   r`   rx   r   r   r   arrayr   nan
csr_matrix	TypeErrorr   r   r   r   r   r   r   r   <module>   s    









