U
    }h&                     @   s   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 d dlmZ ejdZeddZeeejZdZd	d
dgZddddddgZdd Zejde eeejdddgdd Zdd Zdd Zdd ZdS )     N)assert_array_almost_equal)BallTree)check_random_state)_convert_container)check_array
      ZhammingZcanberraZ
braycurtisZjaccardZdiceZrogerstanimotoZ
russellraoZsokalmichenerZsokalsneathc           	      K   s~   ddl m} t| t| } }|j|f||| }tj|ddd d d |f }|t|jd d d d f |f }||fS )Nr   )DistanceMetric   )Zaxis)	Zsklearn.metricsr	   r   Z
get_metricZpairwisenpZargsortZarangeshape)	XYkmetrickwargsr	   Dinddist r   J/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/neighbors/tests/test_ball_tree.pybrute_force_neighbors   s    $r   r   
array_typelistarrayc                 C   s   t d}| tkr2|dd}|dd}n0| tkrbd|d d}d|d d}t||}t||}d}t|d| d}|||\}}t|||| \}	}
t	||	 d S )Nr   )(   r   )r   r         r
   Z	leaf_sizer   )
r   BOOLEAN_METRICSrandom_sampleroundDISCRETE_METRICSr   r   queryr   r   )r   r   rngr   r   r   btdist1ind1dist2ind2r   r   r   test_ball_tree_query_metrics(   s    

r*   c                  C   sh   t d} dtj | d }t|ddd}|j|dd\}}t||ddd	\}}t|| t|| d S )
Nr      )r   r+   r
   Z	haversiner   r   )r   )r   r   )r   r   pir    r   r#   r   r   )r$   r   r%   r&   r'   r(   r)   r   r   r   test_query_haversine=   s    
r-   c               	   C   s:   t jdddgtd} tjtdd t|  W 5 Q R X dS )z/Check that we do not accept object dtype array.)r
   r+   r   )r+   r   )r   r   r
   r+   )Zdtypez(setting an array element with a sequencematchN)r   r   objectpytestraises
ValueErrorr   )r   r   r   r   test_array_object_typeH   s    r4   c               	   C   sr   dd } dd }t d}d}tjt|d t|| d W 5 Q R X d	}tjt|d t||d W 5 Q R X d S )
Nc                 S   s   dS )N1r   )xyr   r   r   wrong_returned_valueP   s    z4test_bad_pyfunc_metric.<locals>.wrong_returned_valuec                 S   s   dS )Ng      ?r   )r6   r   r   r   one_arg_funcS   s    z,test_bad_pyfunc_metric.<locals>.one_arg_func)r   r+   zDCustom distance function must accept two vectors and return a float.r.   )r   z,takes 1 positional argument but 2 were given)r   Zonesr1   r2   	TypeErrorr   )r8   r9   r   msgr   r   r   test_bad_pyfunc_metricO   s    
r<   ) 	itertoolsZnumpyr   r1   Znumpy.testingr   Zsklearn.neighbors._ball_treer   Zsklearn.utilsr   Zsklearn.utils._testingr   Zsklearn.utils.validationr   randomZRandomStater$   ZrandZV_mahalanobisdotTZ	DIMENSIONr"   r   r   markZparametrizechainr*   r-   r4   r<   r   r   r   r   <module>   s4   


