o
    i:                     @   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 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
Z.ej/j0de.d d! d"ej/0d#eefe e!fe"e#fgej/0d$ed%d& Z1ej/0d'eej/0d(e%e&fe'e(fgej/0d$ed)d* Z2ej/j0de.d+d! d"ej/0d,ee e"gej/0d$ed-d. Z3ej/j0de.d/d! d"d0d1 Z4ej/0d'eej/0d2e%e'gej/0d$ed3d4 Z5ej/0d5d6d7gej/j0de.d8d! d"ej/0d,ee gd9d: Z6ej/0d'eej/0d2e%e'gd;d< Z7ej/0d#eefe e!fe"e#fgej/0d$ed=d> Z8d?d@ Z9dAdB Z:dCdD Z;ej/0dEe<g dFe=dGfe<dHdIej>ge=dJfgdKdL eD e<g dMe=dNfe<g e=dOfdPdQ Z?dRdS Z@ej/0dTe.ej/0dUejAej$fdVdW ZBdXdY ZCdZd[ ZDdS )\    N)cdist)DistanceMetric)BOOL_METRICSDEPRECATED_METRICSDistanceMetric32DistanceMetric64)check_random_state)assert_allclosecreate_memmap_backed_dataignore_warnings)CSR_CONTAINERSc                 C   s   t | | | d|  S )Ng      ?)npsum)x1x2p r   a/home/kim/smarthome/.venv/lib/python3.10/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      | d S Nr   r   paramsr   r   r   <lambda>A       r.   )ZidszX, Ycsr_containerc                 C   s:  | \}}|  }||||}}tj|  D ]}	tt||	}
i }|dkr1|jtjkr1ddi}t	|||fi |
}t
j||jfi |
}|||}|jjsRJ t||fi | |||}|jjsgJ t||fi | |||}|jjs|J t||fi | |||}|jjsJ t||fi | qd S Nr$   rtolư>keys	itertoolsproductvaluesdictzipdtyper   r   r   r   
get_metricpairwiseflagsc_contiguousr	   )r)   XYr0   metric
param_gridr5   X_csrY_csrvalskwargs	rtol_dictD_scipy_cdistdm	D_sklearnr   r   r   
test_cdist@   s.   rL   rB   zX_bool, Y_boolc           	      C   s
  | t v r ttd t||| }W d    n1 sw   Y  nt||| }t| }|||}t|| ||||}}|||}|jj	sKJ t|| |||}|jj	s\J t|| |||}|jj	smJ t|| |||}|jj	s~J t|| d S N)category)
r   r   DeprecationWarningr   r   r<   r=   r	   r>   r?   )	rB   X_boolY_boolr0   rI   rJ   rK   
X_bool_csrZ
Y_bool_csrr   r   r   test_cdist_bool_metrick   s,   




rS   c                 C   r*   r+   r   r,   r   r   r   r.      r/   r@   c                 C   s  | \}}|  }||}tj|  D ]k}tt||}i }	|dkr,|jtjkr,ddi}	t	|||fi |}
t
j||jfi |}||}|jjsLJ t||
fi |	 ||}|jjs`J t||
fi |	 |||}|jjsuJ t||
fi |	 qd S r1   r4   )r)   r@   r0   rB   rC   r5   rD   rF   rG   rH   D_scipy_pdistrJ   rK   ZD_sklearn_csrr   r   r   
test_pdist   s(   

rU   c                 C   r*   r+   r   r,   r   r   r   r.      r/   c                 C   s   | \}}|  }d}tj|  D ]S}tt||}tj|tj	fi |}tj|tj
fi |}|t}	|t}
|	jtj	ksBJ |
jtj
ksJJ t|	|
|d |tt}	|tt}
t|	|
|d qd S )Ngh㈵>r2   )r5   r6   r7   r8   r9   r:   r   r<   r   float64r   r=   X64X32r;   r	   Y64Y32)r)   rB   rC   r5   r2   rF   rG   Zdm64Zdm32ZD64ZD32r   r   r   'test_distance_metrics_dtype_consistency   s    

r\   rP   c                 C   s   | t v r ttd t||| }W d    n1 sw   Y  nt||| }t| }||}t|| ||}||}t|| d S rM   )r   r   rO   r   r   r<   r=   r	   )rB   rP   r0   rT   rJ   rK   rR   r   r   r   test_pdist_bool_metrics   s   



r]   writable_kwargsTFc                 C   r*   r+   r   r,   r   r   r   r.      r/   c                 C   s   |\}}|  }tj|  D ]J}tdd |D r0t|}|D ]}t|tj	r/|j
| d q!t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>   s    ztest_pickle.<locals>.<genexpr>write)r5   r6   r7   r8   anycopydeepcopyr`   r   ra   setflagsr9   r:   r   r<   r;   r=   pickleloadsdumpsr	   )r^   r)   r@   rB   rC   r5   rF   rc   rG   rJ   D1dm2D2r   r   r   test_pickle   s    


rq   c                 C   s<   t | }||}tt|}||}t|| d S r_   )r   r<   r=   rk   rl   rm   r	   )rB   rP   rJ   rn   ro   rp   r   r   r   test_pickle_bool_metrics  s
   


rr   c                 C   sN  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< q@q8td| j}|| |}t	|
|t d| d dd t	|| |||}|jjs~J t	|| |||}|jjsJ t	|| || |}|jjsJ 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   r3   rV   )r   ZasarrayZzerosshape	enumerater   r<   r;   r=   r	   Zdist_to_rdistrt   r>   r?   )r@   rA   r0   rD   rE   rv   ZD_referenceixijZyjrw   rK   r   r   r   test_haversine_metric  s0   


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   rk   rl   rm   r=   r	   )	r@   r   r   Zeuclidean_pklZ
pyfunc_pklrn   rp   ZD1_pklZ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   )rx   r   r   )xyr   r   r   custom_metricW  s   z+test_input_data_size.<locals>.custom_metricr   r~   r   r   )r   r   r   )r   randr   r<   r	   r=   )r   rngr@   r   Zeuclr   r   r   test_input_data_sizeT  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~   Fre   r!   r"   r$   r%   )r   r   rj   r   r<   )r   weightsr&   r   r   r   test_readonly_kwargsc  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)rb   r0   r   r   r   
<listcomp>x  s    r   )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'   )pytestraisesr   r<   )r(   Zerr_typeerr_msgr   r   r   -test_minkowski_metric_validate_weights_valuess  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<   rX   rx   r   r   
ValueErrorr=   rZ   )Zw2rJ   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 s0J d S )Nc                 S   s   i | ]	\}}||d  qS )r   r   )rb   kvr   r   r   
<dictcomp>  s    z)test_get_metric_dtype.<locals>.<dictcomp>)	r   r   r   rW   r   itemstyper   r<   )rB   Zmetric_kwargsr;   Zspecialized_clsZgeneric_typeZspecialized_typer   r   r   test_get_metric_dtype  s   r   c                  C   sJ   t j} d}tjt|d td|  W d    d S 1 sw   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   sF   d} t jt| d tjddd W d    d S 1 sw   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   )Erh   r6   rk   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   Zn1Zn2r   rX   rZ   ZastyperY   r[   ZX_mmapZY_mmaprW   rP   rQ   ZX_bool_mmapZY_bool_mmapr#   dotTr&   r9   ZMETRICS_DEFAULT_PARAMSmarkZparametrizerL   rS   rU   r\   r]   rq   rr   r}   r   r   r   arrayr   nanr   r   r   r   r   r   r   r   r   r   <module>   s    


&$



,
