Ë
    ÷Q(h¹  ã                   óÞ  — 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	            úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/neighbors/tests/test_ball_tree.pyÚbrute_force_neighborsr0   *   sŠ   € Ý.ä�q‹>œ; q›>€q€AØ!ˆ×!Ñ! &Ñ3¨FÑ3×<Ñ<¸QÀÓB€AÜ
�*‰*�Q˜QÔ
¢ 2 A 2 Ñ
&€CØŒR�Y‰Y�q—w‘w˜q‘zÓ"¢1 d 7Ñ+¨SÐ0Ñ1€DØ�ˆ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Ñ3°AÓ6ˆØ�×"Ñ" 8Ó,Ñ,×3Ñ3°AÓ6ˆÜ˜1˜jÓ)€AÜ˜1˜jÓ)€Aà	€Aá	 ¨Q°vÔ	>€BØ—(‘(˜1˜a“.�K€Eˆ4Ü'¨¨1¨a°Ó8�K€Eˆ4Ü˜e UÕ+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Ø	ŒB�E‰E‰	�C×%Ñ% gÓ.Ñ.€AÙ	 ¨Q°{Ô	C€BØ—(‘(˜1 �(Ó"�K€Eˆ4Ü'¨¨1°¸+ÔF�K€Eˆ4ä˜e U°KÕ@Ü˜d DÕ)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¼&ÔA€AÜ	�‰”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Ø
P€CÜ	�‰”y¨Ô	,ñ ?Ù˜qÐ)=Õ>÷?ð 9€CÜ	�‰”y¨Ô	,ñ 7Ù˜q¨Õ6÷7ð 7÷	?ð ?ú÷7ð 7ús   ¹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 )Né2   )Ú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ô —K‘K ¨Ó+€MÜ�tÐI q°ÑI¸=ÑI€EÜ�tÐI q°ÑI¸=ÑI€Eð 	
€AØ—k‘k $¨!�kÓ,�O€GˆVØ—k‘k $¨!�kÓ,�O€GˆVÜ�G˜W¨4Õ0Ü�˜Ô Ø�=‰=œBŸJ™JÒ&Ð&Ð&Ø�=‰=œBŸJ™JÒ&Ð&Ð&ð 	€AØ×Ñ ¨ÐÓ*€FØ×Ñ ¨ÐÓ*€FÜ˜f fÓ-ò %‰ˆ�Ü�V˜VÕ$ð%ð
 ×(Ñ(¨°ÀDÐ(ÓI�O€FˆGØ×(Ñ(¨°ÀDÐ(ÓI�O€FˆGÜ.1°&¸&À'È7Ó.Sò ,Ñ*ˆ�˜ (Ü�V˜VÔ$Ü˜ (°Õ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È   € ô 9ÐEWÔXÑ€Dˆ$��dä—K‘K ¨Ó+€MÜ�tÐI q°ÑI¸=ÑI€EÜ�tÐI q°ÑI¸=ÑI€Eà€FØ€AØ×$Ñ$ T¨Q°vÈTÐ$ÓR€IØ×$Ñ$ T¨Q°vÈTÐ$ÓR€IÜ�I˜y¨tÕ4Ø�?‰?œbŸj™jÒ(Ð(Ð(Ø�?‰?œbŸj™jÒ(Ð(Ñ(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   € ä8ÐEWÔXÑ€Dˆ$��dä�t rÔ*€EÜ�t rÔ*€Eä
�‰�A�q˜"Ó€Aà×+Ñ+¨D°AÀÐ+ÓE€IØ×+Ñ+¨D°AÀÐ+ÓE€IÜ�I˜yÕ)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 )Néd   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à�9‰9œ2Ÿ:™:¨Eˆ9Ó2€DØ�9‰9œ2Ÿ:™:¨Eˆ9Ó2€Dà�9‰9œ2Ÿ:™:¨Eˆ9Ó2€DØ�9‰9œ2Ÿ:™:¨Eˆ9Ó2€Dà��t˜TÐ!Ð!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à‡i�i×Ñ˜BÓ€Ø—‘˜˜A“€Ø�—‘�} m§o¡oÓ6€à€	ð ØÙ˜”Øñ	€ò 9Ð ò€ð ØðÐ òò,ð ‡�×Ñ˜ ? 9§?¡?°?ÐDTÓ#UÓVØ‡�×Ñ˜¨°Ð'8Ó9Ø‡�×ÑÐ1Ð3DÓEñ,ó Fó :ó Wð,ð& ‡�×ÑØ)©3Ð/@À1ÀaÀ&Ó+Ióñ*óð*ð ‡�×ÑÐ1Ð3DÓEñ"ó Fð"ð ‡�×ÑÐ1Ð3DÓEñ7ó Fð7ð" ‡�×Ñ˜ ? 9§?¡?°7¸OÓ#LÓMñ#,ó Nð#,ðL ‡�×Ñ˜ ? 9§?¡?°7¸OÓ#LÓMñ)ó Nð)ò"*ô"r1   