U
    -e8                     @   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 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 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d$d% Z3ej12d&eej12d'e'e(fe)e*fgd(d) Z4ej1j2de0d*d! d"ej12d+ee"e$gd,d- Z5ej1j2de0d.d! d"d/d0 Z6ej12d&eej12d1e'e)gd2d3 Z7ej12d4d5d6gej1j2de0d7d! d"ej12d+ee"gd8d9 Z8ej12d&eej12d1e'e)gd:d; Z9ej12d#ee fe"e#fe$e%fgd<d= Z:d>d? Z;d@dA Z<dBdC Z=ej12dDe>dEdFdGge?dHfe>dEdFej@ge?dIfeAdEdFdEgeBdJfe>dKdLdMge?dNfe>g e?dOfgdPdQ ZCdRdS ZDej12dTe0ej12dUejEej&fdVdW ZFdXdY ZGdZd[ ZHdS )\    N)cdist)DistanceMetric)BOOL_METRICSDistanceMetric32DistanceMetric64)check_random_state)assert_allclosecreate_memmap_backed_data)parse_version
sp_versionc                 C   s   t | | | d|  S )Ng      ?)npsum)x1x2p r   h/var/www/html/Darija-Ai-Train/env/lib/python3.8/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>=       r,   )ZidszX, Yc                 C   sZ  | \}}|  }t|t| }}tj|  D ]}tt||}	i }
|dkrh|jt	j
krhddi}
|dkr|	d }ttdk r|dk rtd t|||f|	}tj||jf|	}|||}|jjstt||f|
 |||}|jjstt||f|
 |||}|jjstt||f|
 |||}|jjsFtt||f|
 q4d S 	Nr#   rtolư>r   r   z1.7.0r   z9scipy does not support 0<p<1 for minkowski metric < 1.7.0keyssp
csr_matrix	itertoolsproductvaluesdictzipdtyper   r   r   r
   pytestskipr   r   
get_metricpairwiseflagsc_contiguousAssertionErrorr   )r(   XYmetric
param_gridr2   X_csrY_csrvalskwargs	rtol_dictr   D_scipy_cdistdm	D_sklearnr   r   r   
test_cdist<   s4    
rN   rD   zX_bool, Y_boolc                 C   s   t ||| }t| }|||}t|| t|t| }}|||}|jjsZt	t|| |||}|jjs|t	t|| |||}|jjst	t|| |||}|jjst	t|| d S N)
r   r   r=   r>   r   r3   r4   r?   r@   rA   )rD   X_boolY_boolrK   rL   rM   
X_bool_csrZ
Y_bool_csrr   r   r   test_cdist_bool_metricm   s"    




rS   c                 C   s   | d S r)   r   r*   r   r   r   r,      r-   rB   c                 C   s   | \}}|  }t|}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|}
tj||jf|}||}|jjstt||
f| ||}|jjstt||
f| |||}|jjstt||
f| q(d S r.   r1   )r(   rB   rD   rE   r2   rF   rH   rI   rJ   r   D_scipy_pdistrL   rM   ZD_sklearn_csrr   r   r   
test_pdist   s.    



rU   c                 C   s   | d S r)   r   r*   r   r   r   r,      r-   c                 C   s   | \}}|  }d}tj|  D ]}tt||}tj|tj	f|}tj|tj
f|}|t}	|t}
|	j|
j  krtj	ksn tt|	|
|d |tt}	|tt}
t|	|
|d q"d S )Ngh㈵>r/   )r2   r5   r6   r7   r8   r9   r   r=   r   float64r   r>   X64X32r:   rA   r   Y64Y32)r(   rD   rE   r2   r/   rH   rI   Zdm64Zdm32ZD64ZD32r   r   r   'test_distance_metrics_dtype_consistency   s    

 r\   rP   c                 C   sL   t ||| }t| }||}t|| t|}||}t|| d S rO   )r   r   r=   r>   r   r3   r4   )rD   rP   rT   rL   rM   rR   r   r   r   test_pdist_bool_metrics   s    




r]   writable_kwargsTFc                 C   s   | d S r)   r   r*   r   r   r   r,      r-   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|}	|	|}
tt|	}||}t|
| qd S )Nc                 s   s   | ]}t |tjV  qd S rO   )
isinstancer   ndarray).0valr   r   r   	<genexpr>   s     ztest_pickle.<locals>.<genexpr>write)r2   r5   r6   r7   anycopydeepcopyr_   r   r`   setflagsr8   r9   r   r=   r:   r>   pickleloadsdumpsr   )r^   r(   rB   rD   rE   r2   rH   rb   rI   rL   D1dm2D2r   r   r   test_pickle   s    


rp   c                 C   s<   t | }||}tt|}||}t|| d S rO   )r   r=   r>   rj   rk   rl   r   )rD   rP   rL   rm   rn   ro   r   r   r   test_pickle_bool_metrics   s
    


rq   c                 C   sX  t | d d d df } t |d d d df }t| t| }}dd }t |jd |jd f}t| D ],\}}t|D ]\}}	|||	|||f< qqttd| j	}
|

| |}t|
|t d| d dd t|| |

||}|jjstt|| |

||}|jjs&tt|| |

| |}|jjsJt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   r0   rV   )r   Zasarrayr3   r4   Zzerosshape	enumerater   r=   r:   r>   r   Zdist_to_rdistrs   r?   r@   rA   )rB   rC   rF   rG   ru   ZD_referenceixijZyjrv   rM   r   r   r   test_haversine_metric  s2      


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   rj   rk   rl   r>   r   )	rB   r   r~   Zeuclidean_pklZ
pyfunc_pklrm   ro   ZD1_pklZD2_pklr   r   r   test_pyfunc_metric5  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tt| | d S )Nr   r   r   )rw   rA   r   r   )xyr   r   r   custom_metricM  s    z+test_input_data_size.<locals>.custom_metricr   r}   r   r~   )r   r   r   )r   randr   r=   r   r>   )r   rngrB   r~   Zeuclr   r   r   test_input_data_sizeJ  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}   Frd   r    r!   r#   r$   )r   r   ri   r   r=   )r   weightsr%   r   r   r   test_readonly_kwargsY  s    
r   zw, err_type, err_msgr   r   iz!w cannot contain negative weightszw contains NaNz6A 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   s.   t j||d tjdd| d W 5 Q R X d S )Nmatchr   r   r&   )r;   raisesr   r=   )r'   Zerr_typeerr_msgr   r   r   -test_minkowski_metric_validate_weights_valuesi  s    r   c               	   C   sf   t td } tjdd| d}dtjd  d| jd  d}tjt	|d	 |
tt W 5 Q R X 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=   rX   rw   r;   r   
ValueErrorr>   rZ   )Zw2rL   msgr   r   r   +test_minkowski_metric_validate_weights_size|  s    r   zmetric, metric_kwargsr:   c                 C   s\   t jtt jti| }dd | D }ttj| |f|}t|j| f|}||ksXt	d S )Nc                 S   s   i | ]\}}||d  qS )r   r   )ra   kvr   r   r   
<dictcomp>  s      z)test_get_metric_dtype.<locals>.<dictcomp>)
r   r   r   rW   r   itemstyper   r=   rA   )rD   Zmetric_kwargsr:   Zspecialized_clsZgeneric_typeZspecialized_typer   r   r   test_get_metric_dtype  s      r   c               	   C   s4   t j} d}tjt|d td|  W 5 Q R X 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   s0   d} t jt| d tjddd W 5 Q R X 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   )Irg   r5   rj   numpyr   r;   Zscipy.sparsesparser3   Zscipy.spatial.distancer   Zsklearn.metricsr   Zsklearn.metrics._dist_metricsr   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r	   Zsklearn.utils.fixesr
   r   r   r   r   Zn1Zn2r   rX   rZ   ZastyperY   r[   ZX_mmapZY_mmaprW   rP   rQ   ZX_bool_mmapZY_bool_mmapr"   dotTr%   r8   ZMETRICS_DEFAULT_PARAMSmarkZparametrizerN   rS   rU   r\   r]   rp   rq   r|   r   r   r   arrayr   nanr4   	TypeErrorr   r   r   r   r   r   r   r   r   r   <module>   s   

  -   %  
"  
,
