a
    hG=                     @   s.  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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,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de/deefdfg
Z0ej1j2de0d d! d"ej12d#ee fe"e#fe$e%fgej12d$ed%d& Z3ej12d'eej12d(e'e(fe)e*fgej12d$ed)d* Z4ej1j2de0d+d! d"ej12d,ee"e$gej12d$ed-d. Z5ej1j2de0d/d! d"d0d1 Z6ej12d'eej12d2e'e)gej12d$ed3d4 Z7ej12d5d6d7gej1j2de0d8d! d"ej12d,ee"gd9d: Z8ej12d'eej12d2e'e)gd;d< Z9ej12d#ee fe"e#fe$e%fgej12d$ed=d> Z:d?d@ Z;dAdB Z<dCdD Z=ej12dEe>g dFe?dGfe>dHdIej@ge?dJfgdKdL eD e>g dMe?dNfe>g e?dOfdPdQ ZAdRdS ZBej12dTe0ej12dUejCej&fdVdW ZDdXdY ZEdZd[ ZFdS )\    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                 C   s   t | | | d|  S )Ng      ?)npsum)x1x2p r   c/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/metrics/tests/test_dist_metrics.py	dist_func   s    r            float32g333333?gffffff?	euclideanZ	cityblock	minkowski)      ?         ?      r   Z	chebyshev
seuclideanVmahalanobisVIZhammingZcanberraZ
braycurtis)r   r   r   r!   r   wmetric_param_gridc                 C   s   | d S Nr   r   paramsr   r   r   <lambda>A       r/   )ZidszX, Ycsr_containerc                 C   sp  | \}}|  }|||| }}tj|  D ]8}	tt||	}
i }|dkrd|jtjkrdddi}|dkr|
d }t	t
dk r|dk rtd t|||fi |
}tj||jfi |
}|||}|jjsJ t||fi | |||}|jjs J t||fi | |||}|jjs,J t||fi | |||}|jjsXJ t||fi | q0d 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	   )r+   XYr1   metric
param_gridr6   X_csrY_csrvalskwargs	rtol_dictr   D_scipy_cdistdm	D_sklearnr   r   r   
test_cdist@   s4    
rO   rE   zX_bool, Y_boolc           	      C   s
  | t v r@ttd t||| }W d    qL1 s40    Y  nt||| }t| }|||}t|| |||| }}|||}|jj	sJ t|| |||}|jj	sJ t|| |||}|jj	sJ t|| |||}|jj	sJ t|| d S N)category)
r   r   DeprecationWarningr   r   r?   r@   r	   rA   rB   )	rE   X_boolY_boolr1   rL   rM   rN   
X_bool_csrZ
Y_bool_csrr   r   r   test_cdist_bool_metricr   s(    ,




rV   c                 C   s   | d S r,   r   r-   r   r   r   r/      r0   rC   c                 C   s4  | \}}|  }||}tj|  D ]}tt||}i }	|dkrZ|jtjkrZddi}	|dkr|d }
t	t
dk r|
dk rtd t|||fi |}tj||jfi |}||}|jjsJ t||fi |	 ||}|jjsJ t||fi |	 |||}|jjsJ t||fi |	 q&d S r2   r5   )r+   rC   r1   rE   rF   r6   rG   rI   rJ   rK   r   D_scipy_pdistrM   rN   ZD_sklearn_csrr   r   r   
test_pdist   s.    


rX   c                 C   s   | d S r,   r   r-   r   r   r   r/      r0   c                 C   s   | \}}|  }d}tj|  D ]}tt||}tj|tj	fi |}tj|tj
fi |}|t}	|t}
|	jtj	ksJ |
jtj
ksJ t|	|
|d |tt}	|tt}
t|	|
|d q"d S )Ngh㈵>r3   )r6   r7   r8   r9   r:   r;   r   r?   r   float64r   r@   X64X32r<   r	   Y64Y32)r+   rE   rF   r6   r3   rI   rJ   Zdm64Zdm32ZD64ZD32r   r   r   'test_distance_metrics_dtype_consistency   s    

r_   rS   c                 C   s   | t v r@ttd t||| }W d    qL1 s40    Y  nt||| }t| }||}t|| ||}||}t|| d S rP   )r   r   rR   r   r   r?   r@   r	   )rE   rS   r1   rW   rM   rN   rU   r   r   r   test_pdist_bool_metrics   s    ,



r`   writable_kwargsTFc                 C   s   | d S r,   r   r-   r   r   r   r/      r0   c                 C   s   |\}}|  }tj|  D ]}tdd |D r`t|}|D ]}t|tj	rB|j
| d qBtt||}tj||jfi |}	|	|}
tt|	}||}t|
| qd S )Nc                 s   s   | ]}t |tjV  qd S N)
isinstancer   ndarray).0valr   r   r   	<genexpr>  r0   ztest_pickle.<locals>.<genexpr>write)r6   r7   r8   r9   anycopydeepcopyrc   r   rd   setflagsr:   r;   r   r?   r<   r@   pickleloadsdumpsr	   )ra   r+   rC   rE   rF   r6   rI   rf   rJ   rM   D1dm2D2r   r   r   test_pickle   s    


rt   c                 C   s<   t | }||}tt|}||}t|| d S rb   )r   r?   r@   rn   ro   rp   r	   )rE   rS   rM   rq   rr   rs   r   r   r   test_pickle_bool_metrics  s
    


ru   c                 C   sR  t | d d d df } t |d d d df }|| || }}dd }t |jd |jd f}t| D ],\}}t|D ]\}	}
|||
|||	f< qqptd| j}|| |}t	|
|t d| d dd t	|| |||}|jjsJ t	|| |||}|jjs J t	|| || |}|jjsDJ t	|| d S )	Nr    c                 S   sh   dt t t d| d |d   d t | d t |d  t d| d |d   d    S )Nr    r   r   r   )r   Zarcsinsqrtsincos)r   r   r   r   r   haversine_slow)  s    8z-test_haversine_metric.<locals>.haversine_slowr   	haversiner   r4   rY   )r   ZasarrayZzerosshape	enumerater   r?   r<   r@   r	   Zdist_to_rdistrw   rA   rB   )rC   rD   r1   rG   rH   ry   ZD_referenceixijZyjrz   rN   r   r   r   test_haversine_metric  s.    


r   c            	      C   s   t jd} td}tjdtdd}tt|}tt|}|| }|| }|| }|| }t	|| t	|| d S )N)
   r!   r   pyfuncr    )funcr   )
r   randomr   r?   r   rn   ro   rp   r@   r	   )	rC   r   r   Zeuclidean_pklZ
pyfunc_pklrq   rs   ZD1_pklZD2_pklr   r   r   test_pyfunc_metricL  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    )r{   r   r   )xyr   r   r   custom_metricd  s    z+test_input_data_size.<locals>.custom_metricr   r   r!   r   )r   r   r    )r   randr   r?   r	   r@   )r   rngrC   r   Zeuclr   r   r   test_input_data_sizea  s    
r   c                  C   sV   t d} | d}| dd}|jdd |jdd tjd|d tjd|d	 d S )
Nr   d   r   Frh   r#   r$   r&   r'   )r   r   rm   r   r?   )r   weightsr(   r   r   r   test_readonly_kwargsp  s    
r   zw, err_type, err_msg)r   r   iz!w cannot contain negative weightsr   r   zw contains NaNc                 C   s    g | ]}|g d gt dfqS ))r   r   r   z8Sparse data was passed for w, but dense data is required)	TypeError)re   r1   r   r   r   
<listcomp>  s
   r   )abcz!could not convert string to floatza minimum of 1 is requiredc                 C   sB   t j||d  tjdd| d W d    n1 s40    Y  d S )Nmatchr   r!   r)   )r=   raisesr   r?   )r*   Zerr_typeerr_msgr   r   r   -test_minkowski_metric_validate_weights_values  s    r   c                  C   sz   t td } tjdd| d}dtjd  d| jd  d}tjt	|d	 |
tt W d    n1 sl0    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?   r[   r{   r=   r   
ValueErrorr@   r]   )Zw2rM   msgr   r   r   +test_minkowski_metric_validate_weights_size  s    r   zmetric, metric_kwargsr<   c                 C   sd   t jtt jti| }dd | D }ttj| |fi |}t|j| fi |}||u s`J d S )Nc                 S   s   i | ]\}}||d  qS )r   r   )re   kvr   r   r   
<dictcomp>  r0   z)test_get_metric_dtype.<locals>.<dictcomp>)	r   r   r   rZ   r   itemstyper   r?   )rE   Zmetric_kwargsr<   Zspecialized_clsZgeneric_typeZspecialized_typer   r   r   test_get_metric_dtype  s    r   c                  C   sH   t j} d}tjt|d td|  W d    n1 s:0    Y  d S )Nz8Unexpected dtype .* provided. Please select a dtype fromr   Z	manhattan)r   Zint32r=   r   r   r   r?   )r<   r   r   r   r   test_get_metric_bad_dtype  s    r   c                  C   sD   d} t jt| d tjddd W d    n1 s60    Y  d S )Nzp must be greater than 0r   r   r   r"   )r=   r   r   r   r?   )r   r   r   r   .test_minkowski_metric_validate_bad_p_parameter  s    r   )Grk   r7   rn   numpyr   r=   Zscipy.spatial.distancer   Zsklearn.metricsr   Zsklearn.metrics._dist_metricsr   r   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr	   r
   r   Zsklearn.utils.fixesr   r   r   r   r   r   Zn1Zn2r   r[   r]   Zastyper\   r^   ZX_mmapZY_mmaprZ   rS   rT   ZX_bool_mmapZY_bool_mmapr%   dotTr(   r:   ZMETRICS_DEFAULT_PARAMSmarkZparametrizerO   rV   rX   r_   r`   rt   ru   r   r   r   r   arrayr   nanr   r   r   r   r   r   r   r   r   r   <module>   s   


-$
%


,
