
    sg                        d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ ej$                  j'                  d      Zej+                  dd      Z ej.                  eej0                        ZdZi i  ed	      i d
Zg dZg dZee
gZd Zd Z ejB                  jE                  d e jF                  ee            ejB                  jE                  dddg      ejB                  jE                  de      d                      Z$ejB                  jE                  d e%eddg            d        Z&ejB                  jE                  de      d        Z'ejB                  jE                  de      d        Z(ejB                  jE                  d e jF                  ee            d        Z)ejB                  jE                  d e jF                  ee            d        Z*d Z+ddZ,y)     N)assert_allcloseassert_array_almost_equalassert_equal)BallTree
BallTree32
BallTree64)check_random_state)_convert_container)check_array
      )p)	euclidean	manhattan	minkowski	chebyshev)hammingcanberra
braycurtis)jaccarddicerogerstanimoto
russellraosokalmichenersokalsneathc                 $   ddl m} t        |       t        |      }}  |j                  |fi |j	                  ||       }t        j                  |d      d d d |f   }|t        j                  |j                  d         d d d f   |f   }||fS )Nr   )DistanceMetric   )axis)	sklearn.metricsr   r   
get_metricpairwisenpargsortarangeshape)	XYkmetrickwargsr   Dinddists	            Y/var/www/html/venv/lib/python3.12/site-packages/sklearn/neighbors/tests/test_ball_tree.pybrute_force_neighborsr0   *   s    .q>;q>qA!!!&3F3<<QBA
**QQ
2A2
&CRYYqwwqz"1d7+S01D9    c                  0    t        t        t              sJ y )N)
issubclassr   r    r1   r/   $test_BallTree_is_BallTree64_subclassr5   4   s    h
+++r1   r*   
array_typelistarrayBallTreeImplementationc                    t        d      }| t        v rA|j                  d      j                  d      }|j                  d      j                  d      }nN| t        v rFd|j                  d      z  j                  d      }d|j                  d      z  j                  d      }t        |      }t        |      }d} ||d|       }|j                  ||      \  }}	t        ||||       \  }
}t        ||
       y )Nr   )(   r   )r   r         r   	leaf_sizer*   )	r	   BOOLEAN_METRICSrandom_sampleroundDISCRETE_METRICSr
   queryr0   r   )r*   r6   r9   rngr'   r(   r)   btdist1ind1dist2ind2s               r/   test_ball_tree_query_metricsrK   8   s     Q
C h'--a0h'--a0	#	#""8,,33A6""8,,33A61j)A1j)A	A	Qv	>B((1a.KE4'1a8KE4eU+r1   z#BallTreeImplementation, decimal_tol   r=   c                     t        d      }dt        j                  z  |j                  d      z  } | |dd      }|j	                  |d      \  }}t        ||dd	      \  }}t        |||
       t        ||       y )Nr      )r;   rN   r   	haversiner>   r=   r)   )r)   r*   )decimal)r	   r#   pirA   rD   r0   r   )	r9   decimal_tolrE   r'   rF   rG   rH   rI   rJ   s	            r/   test_query_haversinerT   N   sy     Q
C	BEE	C%%g..A	Q{	CB((1("KE4'1+FKE4eUK@dD)r1   c                     t        j                  g dt              }t        j                  t
        d      5   | |       ddd       y# 1 sw Y   yxY w)z/Check that we do not accept object dtype array.))r   rN   r   )rN   r=   )r=   r=   r   rN   )dtypez(setting an array element with a sequencematchN)r#   r8   objectpytestraises
ValueError)r9   r'   s     r/   test_array_object_typer]   \   sA     	2&AA	z)S	T "q!" " "s   	AAc                 *   d }d }t        j                  d      }d}t        j                  t        |      5   | ||       d d d        d}t        j                  t        |      5   | ||       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nc                      y)N1r4   )xys     r/   wrong_returned_valuez4test_bad_pyfunc_metric.<locals>.wrong_returned_valuef       r1   c                      y)Ng      ?r4   )ra   s    r/   one_arg_funcz,test_bad_pyfunc_metric.<locals>.one_arg_funci   rd   r1   )r=   rN   zDCustom distance function must accept two vectors and return a float.rW   )r*   z,takes 1 positional argument but 2 were given)r#   onesrZ   r[   	TypeError)r9   rc   rf   r'   msgs        r/   test_bad_pyfunc_metricrj   d   s     	A
PC	y	, ?q)=>? 9C	y	, 7q67 7	? ?7 7s   A=)B	=B	Bc                 h   t        | d      \  }}}}t        j                  |i       }t        |fd|d|}t	        |fd|d|}d}	|j                  ||	      \  }
}|j                  ||	      \  }}t        |
|d       t        ||       |
j                  t        j                  k(  sJ |j                  t        j                  k(  sJ d	}|j                  ||
      }|j                  ||
      }t        ||      D ]  \  }}t        ||        |j                  ||d      \  }}
|j                  ||d      \  }}t        |||
|      D ]_  \  }}}}t        ||       t        ||d       |j                  t        j                  k(  sJ |j                  t        j                  k(  r_J  y )N2   )random_seedfeaturesr   r>   r=   rP   h㈵>rtolg
ףp=
@)rT)rr   return_distance)get_dataset_for_binary_treeMETRICSgetr   r   rD   r   r   rV   r#   float64float32query_radiuszip)global_random_seedr*   X_64X_32Y_64Y_32metric_paramsbt_64bt_32r)   dist_64ind_64dist_32ind_32rr   _ind64_ind32_dist_64_dist_32s                      r/   $test_ball_tree_numerical_consistencyr   v   s    9&D$d KK+MtIqI=IEtIqI=IE 	
Akk$!k,OGVkk$!k,OGVGW40 ==BJJ&&&==BJJ&&& 	A*F*Fff- %VV$%
 ((D(IOFG((D(IOFG.1&&'7.S ,*(VV$(6~~+++~~+++	,r1   c                    t        |       \  }}}}t        j                  |i       }t        |fd|d|}t	        |fd|d|}d}	d}
|j                  ||
|	d      }|j                  ||
|	d      }t        ||d	       |j                  t        j                  k(  sJ |j                  t        j                  k(  sJ y )
Nrm   r   r>   gaussiang?T)hkernelbreadth_firstro   rp   )rt   ru   rv   r   r   kernel_densityr   rV   r#   rw   rx   )r{   r*   r|   r}   r~   r   r   r   r   r   r   	density64	density32s                r/   )test_kernel_density_numerical_consistencyr      s     9EWXD$dKK+MtIqI=IEtIqI=IEFA$$TQvT$RI$$TQvT$RIIyt4??bjj(((??bjj(((r1   c                     t        |       \  }}}}t        |d      }t        |d      }t        j                  ddd      }|j                  ||d      }|j                  ||d      }	t        ||	       y )Nr   r   )r?   r   r   T)rr   dualtree)rt   r   r   r#   linspacetwo_point_correlationr   )
r{   r|   r}   r~   r   r   r   rr   	counts_64	counts_32s
             r/   0test_two_point_correlation_numerical_consistencyr      sx    8EWXD$dtr*Etr*E
Aq"A++DA+EI++DA+EIIy)r1   c                    t         j                  j                  |       }|j                  d|      }|j                  d|      }|j	                  t         j
                  d      }|j	                  t         j
                  d      }|j	                  t         j                  d      }|j	                  t         j                  d      }||||fS )Nd   r=   F)rV   copy)r#   randomRandomStaterandastyperw   rx   )	rm   rn   rE   _X_Yr|   r~   r}   r   s	            r/   rt   rt      s    
))


,C	#x	 B	!X	B992::E92D992::E92D992::E92D992::E92DtT!!r1   )r   )-	itertoolsnumpyr#   rZ   numpy.testingr   r   r   sklearn.neighbors._ball_treer   r   r   sklearn.utilsr	   sklearn.utils._testingr
   sklearn.utils.validationr   r   r   rE   r   V_mahalanobisdotT	DIMENSIONdictru   rC   r@   BALL_TREE_CLASSESr0   r5   markparametrizechainrK   rz   rT   r]   rj   r   r   r   rt   r4   r1   r/   <module>r      s      R R I I , 5 0iiBA}moo6	 	 9   , ?9???DT#UV'8913DE, F : W,& )3/@1a&+I** 13DE" F" 13DE7 F7" ?9??7O#LM#, N#,L ?9??7O#LM) N)"*"r1   