o
    Ö­j¢À  ã                   @   s¦  d dl Z d dlmZmZmZmZmZmZ d dlm	Z
 d dlZd dlmZ d dlZd dlmZmZmZmZ d dlmZ d dlmZ d dlZejeegd�d	d
„ ƒZdd„ Zdd„ ZG dd„ dƒZeG dd„ deƒƒZeG dd„ deƒƒZeG dd„ deƒƒZeG dd„ deƒƒZ G dd„ dƒZ!G dd„ dƒZ"G dd„ dƒZ#eG dd „ d e#ƒƒZ$eG d!d"„ d"e#ƒƒZ%eG d#d$„ d$e#ƒƒZ&eG d%d&„ d&e$ƒƒZ'eG d'd(„ d(e$ƒƒZ(eG d)d*„ d*e$ƒƒZ)eG d+d,„ d,e%ƒƒZ*eG d-d.„ d.e$ƒƒZ+eG d/d0„ d0e$ƒƒZ,d1d2„ Z-d3d4„ Z.G d5d6„ d6ƒZ/eG d7d8„ d8e/ƒƒZ0eG d9d:„ d:e/ƒƒZ1eG d;d<„ d<e0ƒƒZ2eG d=d>„ d>e1ƒƒZ3eG d?d@„ d@e0ƒƒZ4eG dAdB„ dBe1ƒƒZ5G dCdD„ dDƒZ6dEdF„ Z7dGdH„ Z8dIdJ„ Z9dKdL„ Z:G dMdN„ dNƒZ;eG dOdP„ dPe;ƒƒZ<G dQdR„ dRƒZ=eG dSdT„ dTe=ƒƒZ>dUdV„ Z?dWdX„ Z@dYdZ„ ZAd[d\„ ZBd]d^„ ZCd_d`„ ZDdadb„ ZEdcdd„ ZFdedf„ ZGdgdh„ ZHdidj„ ZIdkdl„ ZJdmdn„ ZKdodp„ ZLdqdr„ ZMdsdt„ ZNejO Pdu¡dvdw„ ƒZQdxdy„ ZRdzd{„ ZSd|d}„ ZTd~d„ ZUejOjVeƒ d€kd�d‚�dƒd„„ ƒZWd…d†„ ZXejO Pdu¡d‡dˆ„ ƒZYd‰dŠ„ ZZd‹dŒ„ Z[d�dŽ„ Z\d�d�„ Z]d‘d’„ Z^d“d”„ Z_d•d–„ Z`ejO ad—g d˜¢¡d™dš„ ƒZbeG d›dœ„ dœƒƒZcd�dž„ ZddŸd „ Zed¡d¢„ ZfejO ad£eeg¡d¤d¥„ ƒZgd¦d§„ Zhd¨d©„ ZiejO adªeeg¡d«d¬„ ƒZjdS )­é    N)Úassert_equalÚassert_array_equalÚassert_Úassert_almost_equalÚassert_array_almost_equalÚassert_allclose)Úraises)Úpython_implementation)ÚKDTreeÚ	RectangleÚdistance_matrixÚcKDTree)ÚcKDTreeNode©Úminkowski_distance)Úparamsc                 C   s   | j S ©N)Úparam)Úrequest© r   ú\/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/spatial/tests/test_kdtree.pyÚkdtree_type   s   r   c                 C   sp   | j  d¡s
tdƒ‚ttfD ]'}| j dd… d |j  }|tƒ v r'td| ƒ‚t|| fd|iƒ}|tƒ |< q| S )z‹Class decorator to create test cases for KDTree and cKDTree

    Tests use the class variable ``kdtree_type`` as the tree constructor.
    Ú_Testz)Expected a class name starting with _Testé   NÚ_zDuplicated test name: r   )Ú__name__Ú
startswithÚRuntimeErrorr
   r   ÚglobalsÚtype)ÚklsÚtreeÚ	test_nameÚ	test_caser   r   r   Ú
KDTreeTest   s   
r$   c                 C   sH   | | }||d| k  |8  < ||d| k   |7  < t |d|ƒ}|S )Nç      à?g      à¿r   r   )ÚaÚbÚpÚboxsizeÚdiffÚdr   r   r   Údistance_box+   s
   r,   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚConsistencyTestsc                 C   ó   t |||ƒS r   r   ©Úselfr&   r'   r(   r   r   r   Údistance3   ó   zConsistencyTests.distancec              	   C   s~   | j }| j |d¡\}}t|d t || j|  d ¡ƒ d}tt tj| j|tj	d d …f  d dd�|d | k¡ƒ d S )Nr   é   ç:Œ0âŽyE>©Úaxis)
ÚxÚkdtreeÚqueryr   ÚnpÚsumÚdatar   ÚallÚnewaxis)r0   r7   r+   ÚiÚepsr   r   r   Útest_nearest6   s
   "@zConsistencyTests.test_nearestc              	   C   sž   | j }| j}| j ||¡\}}t |¡}|t |¡ }t|d t || j	|  d ¡ƒ d}t
t tj| j	|tjd d …f  d dd�|d | k ¡|ƒ d S )Nr3   r4   r   r5   )r7   Úmr8   r9   r:   ÚamaxÚargmaxr   r;   r<   r   r>   )r0   r7   rB   ÚddÚiir+   r?   r@   r   r   r   Útest_m_nearest=   s   
"6þzConsistencyTests.test_m_nearestc           	      C   sÆ   | j }| j}| jj|| jj|d�\}}d}d}t||ƒD ]0\}}|tjkr&q|d7 }t|d t 	|| j
|  d ¡ƒ t||| k d|d›d|d›�ƒ qtt 	|  | j
|d¡|d | k ¡|ƒ d S )	N©ÚkÚdistance_upper_boundr4   r   r   r3   únear_d=Úgú should be less than )r7   r+   r8   r9   ÚnÚzipr:   Úinfr   r;   r<   r   r   r1   ©	r0   r7   r+   rE   rF   r@   ÚhitsÚnear_dÚnear_ir   r   r   Útest_points_nearJ   s   
"$,z!ConsistencyTests.test_points_nearc           	      C   s¼   | j }| j}| jj|| jjd|d�\}}d}d}t||ƒD ],\}}|tjkr'q|d7 }t||  	|| j
| d¡ƒ t||| k d|d›d|d›�ƒ qtt |  	| j
|d¡|| k ¡|ƒ d S )Nr   ©rI   r(   rJ   r4   r   rK   rL   rM   )r7   r+   r8   r9   rN   rO   r:   rP   r   r1   r<   r   r   r;   rQ   r   r   r   Útest_points_near_l1X   s   
$(z$ConsistencyTests.test_points_near_l1c           	      C   sÂ   | j }| j}| jj|| jjtj|d�\}}d}d}t||ƒD ]-\}}|tjkr(q|d7 }t||  	|| j
| tj¡ƒ t||| k d|d›d|d›�ƒ qtt |  	| j
|tj¡|| k ¡|ƒ d S )NrV   r4   r   r   rK   rL   rM   )r7   r+   r8   r9   rN   r:   rP   rO   r   r1   r<   r   r   r;   rQ   r   r   r   Útest_points_near_linff   s   
$*z&ConsistencyTests.test_points_near_linfc                 C   sV   | j }| j}d}| j ||¡\}}| jj|||d�\}}tt ||d|  k¡ƒ d S )Nçš™™™™™¹?)r@   r   )r7   rI   r8   r9   r   r:   r=   )r0   r7   rI   r@   Úd_realÚi_realr+   r?   r   r   r   Útest_approxt   s   zConsistencyTests.test_approxN)
r   Ú
__module__Ú__qualname__r1   rA   rG   rU   rW   rX   r\   r   r   r   r   r-   2   s    r-   c                   @   ó   e Zd Zdd„ ZdS )Ú_Test_randomc                 C   s^   d| _ d| _tj d¡ tj | j | j¡| _| j| jdd�| _tj | j¡| _	d| _
d| _d S )Néd   é   éÒ  r3   ©Úleafsizeçš™™™™™É?é
   )rN   rB   r:   ÚrandomÚseedÚrandnr<   r   r8   r7   r+   rI   ©r0   r   r   r   Úsetup_method   s   
z_Test_random.setup_methodN©r   r]   r^   rl   r   r   r   r   r`   }   ó    r`   c                       ó   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_farc                    s"   t ƒ  ¡  tj | j¡d | _d S )Nrg   )Úsuperrl   r:   rh   rj   rB   r7   rk   ©Ú	__class__r   r   rl   Œ   s   
z_Test_random_far.setup_method©r   r]   r^   rl   Ú__classcell__r   r   rr   r   rp   Š   ó    rp   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_Test_smallc                 C   sˆ   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡| _|  | j¡| _| jj| _| jj| _t j d	¡ t j 	d
¡| _
d| _d| _d S )N©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   ©r   r   r   rc   é   r%   rb   )r:   Úarrayr<   r   r8   rN   rB   rh   ri   rj   r7   r+   rI   rk   r   r   r   rl   “   s    
ù


z_Test_small.setup_methodc                 C   s   t | j dd¡dƒ d S )N©r   r   rY   r   )rY   r   ©r   r8   r9   rk   r   r   r   rA   ¤   s   þz_Test_small.test_nearestc                 C   s$   t | j dd¡ddgddgfƒ d S )Nrƒ   r3   rY   gÍÌÌÌÌÌì?r   r   r„   rk   r   r   r   Útest_nearest_two©   s   þz_Test_small.test_nearest_twoN)r   r]   r^   rl   rA   r…   r   r   r   r   rx   ‘   s    rx   c                       ro   )Ú_Test_small_nonleafc                    s    t ƒ  ¡  | j| jdd�| _d S )Nr   rd   )rq   rl   r   r<   r8   rk   rr   r   r   rl   ±   s   
z _Test_small_nonleaf.setup_methodrt   r   r   rr   r   r†   ¯   rv   r†   c                   @   ó<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTest_vectorization_KDTreec                 C   óL   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡| _t| jƒ| _d S ©	Nry   rz   r{   r|   r}   r~   r   r€   )r:   r‚   r<   r
   r8   rk   r   r   r   rl   ·   ó   
ùz&Test_vectorization_KDTree.setup_methodc                 C   s>   | j  t g d¢¡¡\}}tt|tƒƒ tt |tj¡ƒ d S ©Nry   )	r8   r9   r:   r‚   r   Ú
isinstanceÚfloatÚ
issubdtypeÚsignedinteger©r0   r+   r?   r   r   r   Útest_single_queryÂ   s   z+Test_vectorization_KDTree.test_single_queryc                 C   ó:   | j  t d¡¡\}}tt |¡dƒ tt |¡dƒ d S ©N©r3   rb   r�   )r3   rb   ©r8   r9   r:   Úzerosr   Úshaper‘   r   r   r   Útest_vectorized_queryÇ   ó   z/Test_vectorization_KDTree.test_vectorized_queryc                 C   s–   d}| j j| }| j jt g d¢¡|d�\}}tt |¡|fƒ tt |¡|fƒ tt t 	|| d … ¡ ¡ƒ tt || d … | j jk¡ƒ d S ©Né   ry   ©rI   )
r8   rN   r9   r:   r‚   r   r˜   r   r=   Úisfinite©r0   ÚsÚkkr+   r?   r   r   r   Ú$test_single_query_multiple_neighborsÌ   s    $z>Test_vectorization_KDTree.test_single_query_multiple_neighborsc              
   C   ó¶   d}| j j| }| j jt d¡|d�\}}tt |¡dd|fƒ tt |¡dd|fƒ tt t 	|d d …d d …| d …f ¡ ¡ƒ tt |d d …d d …| d …f | j jk¡ƒ d S ©Nrœ   r•   r�   r3   rb   ©
r8   rN   r9   r:   r—   r   r˜   r   r=   rž   rŸ   r   r   r   Ú(test_vectorized_query_multiple_neighborsÕ   ó   .2zBTest_vectorization_KDTree.test_vectorized_query_multiple_neighborsc                 C   sH   d}t jtdd�� | jj|d d� W d   ƒ d S 1 sw   Y  d S )Nç      ð?zk must be an integer or*©Úmatchr�   )Úpytestr   Ú
ValueErrorr8   r9   )r0   r7   r   r   r   Útest_query_raises_for_k_noneÞ   s   "ÿz6Test_vectorization_KDTree.test_query_raises_for_k_noneN)	r   r]   r^   rl   r’   r™   r¢   r¦   r­   r   r   r   r   rˆ   ¶   s    		rˆ   c                   @   r‡   )ÚTest_vectorization_cKDTreec                 C   r‰   rŠ   )r:   r‚   r<   r   r8   rk   r   r   r   rl   ä   r‹   z'Test_vectorization_cKDTree.setup_methodc                 C   s4   | j  g d¢¡\}}tt|tƒƒ tt|tƒƒ d S rŒ   )r8   r9   r   r�   rŽ   Úintr‘   r   r   r   r’   ï   s   z,Test_vectorization_cKDTree.test_single_queryc                 C   r“   r”   r–   r‘   r   r   r   r™   ô   rš   z0Test_vectorization_cKDTree.test_vectorized_queryc                 C   s^   t j d¡ t j dd¡j}| j |¡\}}t|||ƒD ]\}}}t| j |¡||fƒ qd S )Nrc   r�   éè  )	r:   rh   ri   rj   ÚTr8   r9   rO   r   )r0   ÚqsÚdsÚi_sÚqr+   r?   r   r   r   Ú*test_vectorized_query_noncontiguous_valuesù   s   ÿzETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_valuesc                 C   s�   d}| j j| }| j jg d¢|d�\}}tt |¡|fƒ tt |¡|fƒ tt t || d … ¡ ¡ƒ tt || d … | j jk¡ƒ d S r›   )	r8   rN   r9   r   r:   r˜   r   r=   rž   rŸ   r   r   r   r¢      s    $z?Test_vectorization_cKDTree.test_single_query_multiple_neighborsc              
   C   r£   r¤   r¥   rŸ   r   r   r   r¦   	  r§   zCTest_vectorization_cKDTree.test_vectorized_query_multiple_neighborsN)	r   r]   r^   rl   r’   r™   r¶   r¢   r¦   r   r   r   r   r®   ã   s    	r®   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Úball_consistencyç        c                 C   s   t |d |d |ƒS ©Nr¨   r   r/   r   r   r   r1     s   zball_consistency.distancec                 C   sÀ   t  | j¡}t  | j|jd d… ¡}| jj|| j| j| j	d�}t
|ƒD ]:\}}|  | j| || | j¡|| d| j	   }|  | j| || | j¡|| d| j	   }t|| j| k dƒ q#d S )Néÿÿÿÿ©r(   r@   r¨   T)r:   Ú
atleast_2dr7   Úbroadcast_tor+   r˜   r±   Úquery_ball_pointr(   r@   Ú	enumerater1   r<   r   Útol)r0   r7   r+   Úlr?   ÚindÚdistÚnormr   r   r   Útest_in_ball  s   ,,ýzball_consistency.test_in_ballc           	      C   sÜ   t  | j¡}t  | j|jd d… ¡}| jj|| j| j| j	d�}t
|ƒD ]H\}}t j| jjtd�}d||< |  | j| || | j¡|| d| j	   }|  | j| || | j¡|| d| j	   }t|| j | kdƒ q#d S )Nrº   r»   ©ÚdtypeFr¨   T)r:   r¼   r7   r½   r+   r˜   r±   r¾   r(   r@   r¿   ÚonesrN   Úboolr1   r<   r   rÀ   )	r0   r7   r+   rÁ   r?   rÂ   ÚcrÃ   rÄ   r   r   r   Útest_found_all!  s   ,,ûzball_consistency.test_found_allN)r   r]   r^   rÀ   r1   rÅ   rË   r   r   r   r   r·     s
    	r·   c                   @   r_   )Ú_Test_random_ballc                 C   sZ   d}d}t j d¡ t j ||¡| _| j| jdd�| _t j |¡| _d| _d| _	d| _
d S )	Nra   rb   rc   r3   rd   ç       @r   rf   )r:   rh   ri   rj   r<   r   r±   r7   r(   r@   r+   ©r0   rN   rB   r   r   r   rl   .  s   
z_Test_random_ball.setup_methodNrm   r   r   r   r   rÌ   ,  rn   rÌ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_Test_random_ball_periodicc                 C   ó   t |||dƒS r¹   ©r,   r/   r   r   r   r1   <  ó   z#_Test_random_ball_periodic.distancec                 C   s`   d}d}t j d¡ t jj||fd�| _| j| jddd�| _t  |d¡| _d	| _	d
| _
d| _d S )Ni'  rb   rc   ©Úsizer3   r   ©re   r)   rY   rÍ   r   rf   )r:   rh   ri   Úuniformr<   r   r±   Úfullr7   r(   r@   r+   rÎ   r   r   r   rl   ?  s   
z'_Test_random_ball_periodic.setup_methodc                 C   s°   | j j| jd | j| j| jd�}|D ]}t|  | j| | j| j¡| jd| j  kƒ q| j j| jd | j| j| jd�}|D ]}t|  | j| | j| j¡| jd| j  kƒ q=d S )Nr¨   r»   )	r±   r¾   r7   r+   r(   r@   r   r1   r<   )r0   rÁ   r?   r   r   r   Útest_in_ball_outsideJ  s    . .ÿz/_Test_random_ball_periodic.test_in_ball_outsidec                 C   sÊ   t j| jjtd�}| jj| jd | j| j| j	d�}d||< t  
|  | j| | j| j¡| jd| j	  k¡s6J ‚| jj| jd | j| j| j	d�}d||< t  
|  | j| | j| j¡| jd| j	  k¡scJ ‚d S )NrÆ   r¨   r»   F)r:   rÈ   r±   rN   rÉ   r¾   r7   r+   r(   r@   r=   r1   r<   )r0   rÊ   rÁ   r   r   r   Útest_found_all_outsideR  s    &ÿ &ÿz1_Test_random_ball_periodic.test_found_all_outsideN)r   r]   r^   r1   rl   rØ   rÙ   r   r   r   r   rÏ   :  s
    rÏ   c                   @   s   e Zd ZdZdd„ ZdS )Ú"_Test_random_ball_largep_issue9890g‚vIhÂ%<=c                 C   sX   d}d}t j d¡ t jjdd||fd�| _|  | j¡| _| j| _d| _d| _	d| _
d S )Nr°   r3   é{   ra   rÓ   r   rg   )r:   rh   ri   Úrandintr<   r   r±   r7   r(   r@   r+   rÎ   r   r   r   rl   g  s   
z/_Test_random_ball_largep_issue9890.setup_methodN)r   r]   r^   rÀ   rl   r   r   r   r   rÚ   a  s    rÚ   c                       ro   )Ú_Test_random_ball_approxc                    ó   t ƒ  ¡  d| _d S ©NrY   ©rq   rl   r@   rk   rr   r   r   rl   v  ó   

z%_Test_random_ball_approx.setup_methodrt   r   r   rr   r   rÝ   s  ó    rÝ   c                       ro   )Ú!_Test_random_ball_approx_periodicc                    rÞ   rß   rà   rk   rr   r   r   rl   ~  rá   z._Test_random_ball_approx_periodic.setup_methodrt   r   r   rr   r   rã   {  râ   rã   c                       ro   )Ú_Test_random_ball_farc                    rÞ   ©NrÍ   ©rq   rl   r+   rk   rr   r   r   rl   †  rá   z"_Test_random_ball_far.setup_methodrt   r   r   rr   r   rä   ƒ  râ   rä   c                       ro   )Ú_Test_random_ball_far_periodicc                    rÞ   rå   ræ   rk   rr   r   r   rl   �  rá   z+_Test_random_ball_far_periodic.setup_methodrt   r   r   rr   r   rç   Š  râ   rç   c                       ro   )Ú_Test_random_ball_l1c                    rÞ   )Nr   )rq   rl   r(   rk   rr   r   r   rl   •  rá   z!_Test_random_ball_l1.setup_methodrt   r   r   rr   r   rè   ’  râ   rè   c                       ro   )Ú_Test_random_ball_linfc                    ó   t ƒ  ¡  tj| _d S r   ©rq   rl   r:   rP   r(   rk   rr   r   r   rl   �  ó   
z#_Test_random_ball_linf.setup_methodrt   r   r   rr   r   ré   š  râ   ré   c                 C   s`   d}d}t j d¡ | t j ||¡ƒ}| t j dd|¡d¡}t|jdƒ tt|d t	ƒƒ d S )	Né   é   rc   r3   r�   r   ©r3   r�   ©r   r   )
r:   rh   ri   rj   r¾   r   r˜   r   r�   Úlist)r   rN   rB   r±   Úrr   r   r   Útest_random_ball_vectorized¢  s   ró   c           	      C   s¾   t j d¡ d}d}t j ||¡}| |ƒ}|j|ddd�}|j|ddd�}|j|ddd�}t|ƒD ]}|| s;|| rDt|| || ƒ q1t|ƒD ]}|| sS|| r\t|| || ƒ qId S )	Nr   éˆ  r3   gú~j¼t“h?r   ©Úworkersé@   rº   )r:   rh   ri   rj   r¾   Úranger   )	r   rN   rI   Úpointsr±   Úl1Úl2Úl3r?   r   r   r   Ú$test_query_ball_point_multithreading­  s"   €€þrý   c                   @   rw   )Útwo_trees_consistencyc                 C   r.   r   r   r/   r   r   r   r1   Â  r2   ztwo_trees_consistency.distancec                 C   sl   | j j| j| j| j| jd�}t|ƒD ]!\}}|D ]}|  | j| | j	| | j¡| jd| j  ks2J ‚qqd S )Nr»   r¨   )
ÚT1Úquery_ball_treeÚT2r+   r(   r@   r¿   r1   Údata1Údata2)r0   rò   r?   rÁ   Újr   r   r   Útest_all_in_ballÅ  s   
ÿÿÿz&two_trees_consistency.test_all_in_ballc                 C   s‚   | j j| j| j| j| jd�}t|ƒD ],\}}tj| jj	t
d�}d||< t |  | j| | j| | j¡| jd| j  k¡s>J ‚qd S )Nr»   rÆ   Fr¨   )rÿ   r   r  r+   r(   r@   r¿   r:   rÈ   rN   rÉ   r=   r1   r  r  )r0   rò   r?   rÁ   rÊ   r   r   r   rË   Ì  s   ÿýz$two_trees_consistency.test_found_allN)r   r]   r^   r1   r  rË   r   r   r   r   rþ   À  s    rþ   c                   @   r_   )Ú_Test_two_random_treesc                 C   sn   d}d}t j d¡ t j ||¡| _| j| jdd�| _t j ||¡| _| j| jdd�| _d| _	d| _
d| _d S )	Né2   rb   rc   r3   rd   rÍ   r   rf   )r:   rh   ri   rj   r  r   rÿ   r  r  r(   r@   r+   rÎ   r   r   r   rl   Ø  s   
z#_Test_two_random_trees.setup_methodNrm   r   r   r   r   r  Õ  s    r  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )Ú_Test_two_random_trees_periodicc                 C   rÐ   r¹   rÑ   r/   r   r   r   r1   ç  rÒ   z(_Test_two_random_trees_periodic.distancec                 C   sz   d}d}t j d¡ t jj||fd�| _| j| jddd�| _t jj||fd�| _| j| jddd�| _d| _	d	| _
d
| _d S )Nr  rb   rc   rÓ   r3   r¨   rÕ   rÍ   r   rf   )r:   rh   ri   rÖ   r  r   rÿ   r  r  r(   r@   r+   rÎ   r   r   r   rl   ê  s   
z,_Test_two_random_trees_periodic.setup_methodN)r   r]   r^   r1   rl   r   r   r   r   r	  å  s    r	  c                       ro   )Ú_Test_two_random_trees_farc                    rÞ   ©Nr3   ræ   rk   rr   r   r   rl   ú  rá   z'_Test_two_random_trees_far.setup_methodrt   r   r   rr   r   r
  ÷  râ   r
  c                       ro   )Ú#_Test_two_random_trees_far_periodicc                    rÞ   r  ræ   rk   rr   r   r   rl     rá   z0_Test_two_random_trees_far_periodic.setup_methodrt   r   r   rr   r   r  ÿ  râ   r  c                       ro   )Ú_Test_two_random_trees_linfc                    rê   r   rë   rk   rr   r   r   rl   
  rì   z(_Test_two_random_trees_linf.setup_methodrt   r   r   rr   r   r    râ   r  c                       ro   )Ú$_Test_two_random_trees_linf_periodicc                    rê   r   rë   rk   rr   r   r   rl     rì   z1_Test_two_random_trees_linf_periodic.setup_methodrt   r   r   rr   r   r    râ   r  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTest_rectanglec                 C   s   t ddgddgƒ| _d S ©Nr   r   )r   Úrectrk   r   r   r   rl     s   zTest_rectangle.setup_methodc                 C   s   t | j ddg¡dƒ d S )Nr%   r   ©r   r  Úmin_distance_pointrk   r   r   r   Útest_min_inside  ó   zTest_rectangle.test_min_insidec                 C   s   t | j ddg¡dƒ d S ©Nr%   g      ø?r  rk   r   r   r   Útest_min_one_side  r  z Test_rectangle.test_min_one_sidec                 C   s    t | j ddg¡t d¡ƒ d S r  )r   r  r  r:   Úsqrtrk   r   r   r   Útest_min_two_sides"  ó    z!Test_rectangle.test_min_two_sidesc                 C   s$   t | j ddg¡dt d¡ ƒ d S )Nr%   r   r3   ©r   r  Úmax_distance_pointr:   r  rk   r   r   r   Útest_max_inside%  ó   $zTest_rectangle.test_max_insidec                 C   s"   t | j ddg¡t dd¡ƒ d S r  )r   r  r  r:   Úhypotrk   r   r   r   Útest_max_one_side(  s   
ÿz Test_rectangle.test_max_one_sidec                 C   s$   t | j ddg¡dt d¡ ƒ d S r  r  rk   r   r   r   Útest_max_two_sides,  r  z!Test_rectangle.test_max_two_sidesc                 C   sV   | j  dd¡\}}t|jddgƒ t|jddgƒ t|jddgƒ t|jddgƒ d S )Nr   rY   r   )r  Úsplitr   ÚmaxesÚmins)r0   ÚlessÚgreaterr   r   r   Ú
test_split/  s
   zTest_rectangle.test_splitN)r   r]   r^   rl   r  r  r  r  r   r!  r'  r   r   r   r   r    s    r  c                   C   s$   t tddgddgdƒt d¡ƒ d S ©Nr   r   r3   )r   r   r:   r  r   r   r   r   Útest_distance_l27  r  r)  c                   C   s   t tddgddgdƒdƒ d S r(  )r   r   r   r   r   r   Útest_distance_l1;  s   r*  c                   C   s    t tddgddgtjƒdƒ d S r  )r   r   r:   rP   r   r   r   r   Útest_distance_linf?  r  r+  c                  C   sB   t j d¡ t j ddd¡} t j ddd¡}tt| |ƒjdƒ d S )Nrc   rg   r   r�   é   )rg   r,  )r:   rh   ri   rj   r   r   r˜   )r7   Úyr   r   r   Útest_distance_vectorizationC  s   r.  c                   @   rw   )Úcount_neighbors_consistencyc              	   C   ó:   d}t | j | j|¡t dd„ | j | j|¡D ƒ¡ƒ d S )Nrf   c                 S   ó   g | ]}t |ƒ‘qS r   ©Úlen©Ú.0rÁ   r   r   r   Ú
<listcomp>N  ó    z?count_neighbors_consistency.test_one_radius.<locals>.<listcomp>©r   rÿ   Úcount_neighborsr  r:   r;   r   ©r0   rò   r   r   r   Útest_one_radiusK  ó   ÿz+count_neighbors_consistency.test_one_radiusc              	   C   r0  )Nr°   c                 S   r1  r   r2  r4  r   r   r   r6  S  r7  zAcount_neighbors_consistency.test_large_radius.<locals>.<listcomp>r8  r:  r   r   r   Útest_large_radiusP  r<  z-count_neighbors_consistency.test_large_radiusc                 C   sv   t  t  t  d¡t  d¡d¡¡}| j | j|¡}tt  t  	|¡dk¡ƒ t
||ƒD ]\}}t| j | j|¡|ƒ q)d S )Nç{®Gáz„?rg   r�   r   )r:   ÚexpÚlinspaceÚlogrÿ   r9  r  r   r=   r*   rO   r   )r0   ÚrsÚresultsrò   Úresultr   r   r   Útest_multiple_radiusU  s    ÿz0count_neighbors_consistency.test_multiple_radiusN)r   r]   r^   r;  r=  rE  r   r   r   r   r/  J  s    r/  c                   @   r_   )Ú_Test_count_neighborsc                 C   sL   d}d}t j d¡ | jt j ||¡dd�| _| jt j ||¡dd�| _d S )Nr  r3   rc   rd   )r:   rh   ri   r   rj   rÿ   r  rÎ   r   r   r   rl   ^  s
   z"_Test_count_neighbors.setup_methodNrm   r   r   r   r   rF  \  rn   rF  c                   @   r‡   )Ú"sparse_distance_matrix_consistencyc                 C   r.   r   r   r/   r   r   r   r1   h  r2   z+sparse_distance_matrix_consistency.distancec              	   C   sœ   | j  | j| j¡}| j  | j| j¡}t|ƒD ]"\}}|D ]}t|||f |  | j j| | jj| | j	¡dd� qq| 
¡ D ]\\}}}t||| v ƒ q=d S )Né   ©Údecimal)rÿ   Úsparse_distance_matrixr  rò   r   r¿   r   r1   r<   r(   Úitemsr   )r0   ÚMrò   r?   rÁ   r  r+   r   r   r   Útest_consistency_with_neighborsk  s   
ýÿÿzBsparse_distance_matrix_consistency.test_consistency_with_neighborsc                 C   s   | j  | j | j¡ d S r   )rÿ   rK  rò   rk   r   r   r   Útest_zero_distancex  s   z5sparse_distance_matrix_consistency.test_zero_distancec                 C   sH   | j  | j| j¡}t| j j| jjƒ}d||| jk< t| ¡ |dd� d S )Nr   rH  rI  )rÿ   rK  r  rò   r   r<   r   Útoarray)r0   ÚM1Úexpectedr   r   r   Útest_consistency|  s   z3sparse_distance_matrix_consistency.test_consistencyc                 C   sX   t j d¡ t jt j dd¡td�}| j|ddd�}| |d¡ ¡ }t	||j
dd	� d S )
Nr   é   r3   rÆ   F©Úbalanced_treeÚcompact_nodesr�   rH  rI  )r:   rh   ri   r‚   rj   r¯   r   rK  rP  r   r±   )r0   Útoo_manyr!   r+   r   r   r   Ú#test_against_logic_error_regressionƒ  s   ÿzFsparse_distance_matrix_consistency.test_against_logic_error_regressionc                 C   s¬  t  | j| jf¡}t| jƒD ]&}t| jƒD ]}| j|d d …f | j|d d …f  }t  ||¡|||f< qqt  |¡}d||| jk< t  | j| jf¡}| j	j
| j| jdd�}| ¡ D ]\}}|||f |||f< qYt||dd� t  | j| jf¡}| j	j
| j| jdd�}t|jd ƒD ]}|d | }|d	 | }|d
 | }||||f< qŠt||dd� | j	j
| j| jdd�}t|| ¡ dd� | j	j
| j| jdd�}t|| ¡ dd� d S )Nr¸   Údict©Úoutput_typerH  rI  Úndarrayr   r?   r  ÚvÚ
dok_matrixÚ
coo_matrix)r:   r—   rN   rø   r  r  Údotr  rò   rÿ   rK  r  Úkeysr   r˜   rP  )r0   Úrefr?   r  r^  rÃ   rò   rI   r   r   r   Útest_ckdtree_return_typesŒ  s>   $þ
ÿÿÿz<sparse_distance_matrix_consistency.test_ckdtree_return_typesN)	r   r]   r^   r1   rN  rO  rS  rY  rd  r   r   r   r   rG  f  s    	rG  c                   @   r_   )Ú_Test_sparse_distance_matrixc                 C   sx   d}d}t j d¡ t j ||¡}t j ||¡}| j|dd�| _| j|dd�| _d| _d| _|| _	|| _
|| _|| _d S )Nr  rb   rc   r3   rd   r%   )r:   rh   ri   rj   r   rÿ   r  rò   r(   r  r  rN   rB   )r0   rN   rB   r  r  r   r   r   rl   ±  s   
z)_Test_sparse_distance_matrix.setup_methodNrm   r   r   r   r   re  ¯  rn   re  c                  C   sŽ   d} d}d}t j d¡ t j | |¡}t j ||¡}t||ƒ}t|j| |fƒ t| ƒD ]}t|ƒD ]}tt	|| || ƒ|||f ƒ q1q+d S )Nrg   é   rb   rc   )
r:   rh   ri   rj   r   r   r˜   rø   r   r   )rB   rN   rI   ÚxsÚysr³   r?   r  r   r   r   Útest_distance_matrixÁ  s   
"ÿÿri  c                  C   sZ   d} d}d}t j d¡ t j | |¡}t j ||¡}t||ƒ}t||dd�}t||ƒ d S )Nrg   rf  rb   rc   r   )Ú	threshold)r:   rh   ri   rj   r   r   )rB   rN   rI   rg  rh  r³   Údslr   r   r   Útest_distance_matrix_loopingÏ  s   
rl  c                 C   sZ   |   | |¡}tƒ }t|ƒD ]\}}|D ]}||k r | ||f¡ qqt||  |¡kƒ d S r   )r   Úsetr¿   Úaddr   Úquery_pairs)r±   r+   rò   r    r?   rÁ   r  r   r   r   Úcheck_onetree_queryÛ  s   €þrp  c                 C   s¦   t j d¡ d}d}t j ||¡}| |ƒ}t|dƒ t j d| |¡}|d |…  d9  < ||d| …  d7  < | |ƒ}t|dƒ t|dƒ t|dƒ t|d	ƒ d S )
Nr   r  rb   rY   r�   gü©ñÒMbP?r3   gñhãˆµøä>g�íµ ÷Æ°>)r:   rh   ri   rj   rp  )r   rN   rI   rù   r±   r   r   r   Útest_onetree_queryå  s   



rq  c                 C   s$   | ddggƒ}t | d¡tƒ ƒ d S )Nr   r   r%   )r   ro  rm  )r   r!   r   r   r   Útest_query_pairs_single_node÷  ó   rr  c                 C   sD  t j d¡ d}d}d}|d }t j ||¡}| |ƒ}tƒ }t|ƒD ]+}t|d |ƒD ]!}	||d d …f ||	d d …f  }
t  |
|
¡|krL| ||	f¡ q+q"t|ƒ}| 	|¡}t|ƒ}t
||ƒ |j	|dd�}t|ƒ}t
||ƒ tƒ }|j	|dd�}t|jd ƒD ]}| t||df ƒt||df ƒf¡ q�t|ƒ}t
||ƒ d S )	Nr   r  r3   rY   r   rm  r[  r]  )r:   rh   ri   rj   rm  rø   ra  rn  Úsortedro  r   r˜   r¯   )r   rN   rI   rò   Úr2rù   r±   Úbruter?   r  r^  Úl0r    rú   Úarrrû   r   r   r   Útest_kdtree_query_pairsü  s8    €ý


(ry  c                    st   t  d¡}t  dd| d¡}t  dd| d¡‰ ‡ fdd„|D ƒ}| |ƒ}|j|dd�}|j|d	 d
�}t||ƒ d S )Nr3   r   r�   rb   c                    s   g | ]}ˆ D ]}||f‘qqS r   r   )r5  ÚxiÚyi©Úy_ranger   r   r6  "  s    z(test_query_pairs_eps.<locals>.<listcomp>rY   )rò   r@   ç)\�Âõ(ð?©rò   )r:   r  r@  ro  r   )r   ÚspacingÚx_rangeÚxy_arrayr!   Ú	pairs_epsÚpairsr   r|  r   Útest_query_pairs_eps  s   
r…  c                 C   sŽ   t jdd…dd…f \}}tt| ¡ | ¡ ƒƒ}| |ƒ}ttg d¢ƒt| dd¡ƒƒ t j|t	d�}| |ƒ}ttg d¢ƒt| dd¡ƒƒ d S )Nr   rb   )rb   é   é	   é   )r3   r   r   rÆ   )
r:   Úmgridrñ   rO   Úravelr   rt  r¾   ÚasarrayrŽ   )r   r7   r-  rù   r!   r   r   r   Útest_ball_point_ints+  s   ÿÿrŒ  c                  C   s2   dd„ t dƒD ƒ} tt| ƒt| d d d… ƒƒ d S )Nc                 S   s   g | ]}t  ¡ ‘qS r   )r
   Únode©r5  r   r   r   r   r6  :  r7  z+test_kdtree_comparisons.<locals>.<listcomp>r�   rº   )rø   r   rt  )Únodesr   r   r   Útest_kdtree_comparisons8  s    r�  c                 C   sª   t j d¡ d}d}t j ||¡}| |ƒj|dd�d }| |dd�j|dd�d }| |dd	�j|dd�d }| |ddd
�j|dd�d }t||ƒ t||ƒ t||ƒ d S )Nr   rô   rb   rî   r�   rº   F)rW  )rV  )rW  rV  )r:   rh   ri   rj   r9   r   )r   rN   rI   rù   rÿ   r  ÚT3ÚT4r   r   r   Útest_kdtree_build_modes>  s"   ÿÿÿ

r“  c                 C   sx   dd l }tj d¡ d}d}tj ||¡}| |ƒ}| |¡}| |¡}|j|dd�d }|j|dd�d }t||ƒ d S )Nr   r  rb   rî   r�   rº   )	Úpickler:   rh   ri   rj   ÚdumpsÚloadsr9   r   ©r   r”  rN   rI   rù   rÿ   Útmpr  r   r   r   Útest_kdtree_pickleM  s   

r™  c                 C   s€   dd l }tj d¡ d}d}tjj||fd�}| |dd�}| |¡}| |¡}|j|dd�d	 }|j|dd�d	 }t||ƒ d S )
Nr   r  rb   rÓ   r¨   )r)   rî   r�   rº   )	r”  r:   rh   ri   rÖ   r•  r–  r9   r   r—  r   r   r   Útest_kdtree_pickle_boxsize[  s   

rš  c                 C   sz   t j d¡ d}d}t j ||¡}| |dd�}| ¡ }|j|dd�d }t j ||¡|d	< |j|dd�d }t||ƒ d S )
Nr   rô   rb   T)Ú	copy_datarî   r�   rº   .)r:   rh   ri   rj   Úcopyr9   r   )r   rN   rI   rù   r±   rµ   rÿ   r  r   r   r   Útest_kdtree_copy_datai  s   r�  c           	      C   sÎ   t j d¡ d}d}t j ||¡}| |ƒ}|j|ddd�d }|j|ddd�d }|j|dd�d }t||ƒ t||ƒ | td	d
d„ ¡ tj	t
dd�� |j|ddd� W d   ƒ d S 1 s`w   Y  d S )Nr   rô   rb   rî   r÷   )rI   rö   rº   r�   Ú	cpu_countc                   S   s   d S r   r   r   r   r   r   Ú<lambda>…  s    z'test_ckdtree_parallel.<locals>.<lambda>zCannot determine ther©   r   rõ   )r:   rh   ri   rj   r9   r   ÚsetattrÚosr«   r   ÚNotImplementedError)	r   ÚmonkeypatchrN   rI   rù   r±   rÿ   r  r‘  r   r   r   Útest_ckdtree_parallelx  s   

"ÿr¤  c                     s~   t j d¡ d} d}t j | |¡}t|ƒ‰ ‡ ‡fdd„‰ˆˆ jƒ ˆ j} tt  | j¡t	dƒƒ tˆ j
| jd d …f | jƒ d S )Nr   ra   rb   c                    s¦   t t| tƒƒ | jdkr't | jd u ƒ t | jd u ƒ t | jjd ˆ jkƒ d S ˆ| jƒ ˆ| jƒ | jj	d d …| jf }| jj	d d …| jf }t | 
¡ | ¡ k ƒ d S )Nrº   r   )r   r�   r   Ú	split_dimÚlesserr&  Úindicesr˜   re   Údata_pointsÚmaxÚmin)rN   r7   r-  ©r8   Úrecurse_treer   r   r¬  •  s   


z'test_ckdtree_view.<locals>.recurse_tree)r:   rh   ri   rj   r   r!   r   Úsortr§  rø   r<   r¨  )rN   rI   rù   r   r«  r   Útest_ckdtree_viewŠ  s   
 r®  c                 C   s6  d}d}g d¢}d}t j d¡ t jj||fd�}| |dd�}| ||¡\}}| ||¡\}	}
t||	ƒ t||
ƒ t  ddg¡}d}| ||¡\}}| ||¡\}	}
t|	|d	|d f ƒ t|
|d	|d f ƒ | |d¡\}}| |dg¡\}	}
tt|jƒdƒ tt|	jƒdƒ t|t  	|	¡ƒ t|t  	|
¡ƒ d S )
NéÈ   r3   )r   r3   r�   r�   rc   rÓ   r   rd   .)
r:   rh   ri   rÖ   r9   r   r‚   r3  r˜   rŠ  )r   rN   rB   ÚklistÚkintr<   r8   rE   rF   Údd1Úii1r   r   r   Útest_kdtree_list_k¬  s.   

r´  rg   c                 C   sò   d}d}d}t j d¡ t jj||fd�}| |ddd�}| |dd�}dd	d
t jfD ]M}|j|||d�\}}	|j|d ||d�\}
}t||
ƒ t|	|ƒ |j|d ||d�\}
}t||
ƒ t|	|ƒ t|||d|d�\}}t||ƒ t|	|ƒ q)d S )NéÐ  r�   rc   rÓ   r   r¨   rÕ   rd   r3   g      @©r(   )r)   r(   )	r:   rh   ri   rÖ   rP   r9   r   r   Úsimulate_periodic_box)r   rN   rB   rI   r<   r8   Úkdtree2r(   rE   rF   r²  r³  Údd2Úii2r   r   r   Útest_kdtree_boxÎ  s&   




ór»  c                 C   s–   d}d}d}t j d¡ t jj||fd�}| |ddd�}| |dd	�}ddt jfD ] }|j|||d
�\}}	|j|||d
�\}
}t||
ƒ t|	|ƒ q(d S )Nrµ  r3   r�   rc   rÓ   r   r¸   rÕ   rd   r¶  )r:   rh   ri   rÖ   rP   r9   r   r   )r   rN   rB   rI   r<   r8   r¸  r(   rE   rF   r²  r³  r   r   r   Útest_kdtree_box_0boxsizeê  s   
ûr¼  c                 C   s°   t  ddd¡ dd¡}|d d …df  d7  < t t¡� | |ddd� W d   ƒ n1 s.w   Y  t t¡� | |ddd� W d   ƒ n1 sJw   Y  | |dd	d� d S )
Nr   r3   rg   rº   r   r¨   rÕ   )r¸   rÍ   )rÍ   r¸   )r:   r@  Úreshaper«   r   r¬   ©r   r<   r   r   r   Útest_kdtree_box_upper_boundsý  s   ÿÿr¿  c                 C   s$   t  ddd¡}tt| |ddd� d S )Nrº   r   rg   r¨   rÕ   )r:   r@  Úassert_raisesr¬   r¾  r   r   r   Útest_kdtree_box_lower_bounds  rs  rÁ  c                 C   s8  g }g }t  d|jd  ¡}t  t  |dg|jd  ¡¡j}|d }|D ]*}	||	d |  }
| j|
||d�\}}| d|¡}| d|¡}| |¡ | |¡ q$t j	|dd�}t j	|dd�}t j
t|ƒt|ƒ| gddgd	�}||d
 d d …< ||d d d …< |jdd� |d d d …d |…f |d
 d d …d |…f fS )Nr�   r   r¨   r¶  rº   r5   )rF   Úi8)rE   Úf8rÆ   rF   rE   )Úorder)r:   Úaranger˜   r‚   Úunravel_indexr±   r9   r½  ÚappendÚconcatenateÚemptyr3  r­  )r8   r<   rI   r)   r(   rE   rF   r7   ÚnnrN   Úimager¹  rº  rD  r   r   r   r·    s,    
þ0r·  ÚPyPyz Fails on PyPy CI runs. See #9507)Úreasonc                  C   sz  zdd l } W n
 ty   Y d S w d\}}tjtdd| |ƒtdd| |ƒf \}}t |¡d t d||  ¡t |¡  }t |¡}||d d …< d}tj 	d|j
tj 	d¡d ¡}||j|< t t ||k¡¡j}	t t ||k¡¡j}
|  | j¡j}tdƒD ]}t|	ƒ}q�d}tdƒD ]&}|  | j¡j}t|	ƒ}|j|
d	d
d�\}}|  | j¡j}||kr´|d7 }qŽt|dk ƒ d S )Nr   )çš™™™™™©?rÎ  r   rî   rg   g     ÀX@r  ra   rb   r3   )rI   r(   )ÚresourceÚImportErrorr:   r‰  ÚsliceÚsinÚcosÚ
empty_likerh   rÜ   rÔ   ÚflatÚvstackÚnonzeror±   Ú	getrusageÚRUSAGE_SELFÚ	ru_maxrssrø   r   r9   r   )rÏ  ÚdxÚdyr-  r7   ÚzÚz_copyÚFILLVALÚmaskÚigoodÚibadÚmem_user?   r!   Ú	num_leaksrÃ   ÚiqueryÚnew_mem_user   r   r   Útest_ckdtree_memuse$  s<   þ
ÿ*


€rç  c              
   C   s®  t  ddd¡ dd¡}| |dd�}t jt|ƒdd�}| |¡}t|g d¢ƒ tt|j|d d… ƒ t	d	ƒD ]V}| 
|t  dd	|¡¡}|j
|t  dd	|¡||fd
�}|j
|t  dd	|¡|d fd
�}|j
|t  dd	|¡d |fd
�}	|j
|t  dd	|¡|d
� t||ƒ t||ƒ t||	ƒ q5t	t|ƒƒD ]B}| ¡ }
d|
|< ||
dk }| |ƒ}|j
|t  dd	d¡|
|
fd
�}| 
|t  dd	d¡¡}t||ƒ tt|j
|t  dd	d¡|
d
� q’d S )Nr   r   rb   rº   rd   Úf4rÆ   )rb   r3   r   r   r3   r   r   rg   )Úweightsra   )r:   r@  r½  rÈ   r3  Ú_build_weightsr   rÀ  r¬   rø   r9  rœ  )r   r<   Útree1ré  Únwr?   Úc1Úc2Úc3Úc4Úw1r  Útree2r   r   r   Útest_kdtree_weightsO  sJ   
ÿÿÿÿ

ÿ
ÿðró  c                 C   s´   d}d}t j d¡ t jj||fd�}| |dd�}g d¢}t  t|ƒ¡}| ||¡}|j||dd	�}t|| ¡ ƒ t	t
 |¡t
 |¡ƒD ]\}	}
| ||
¡}t||t|	ƒ ƒ qDd S )
Nrµ  r3   rc   rÓ   r   rd   )r   r>  r>  g{®Gáz”?rÎ  F©Ú
cumulative)r:   rh   ri   ÚnormalrÅ  r3  r9  r   ÚcumsumrO   Ú	itertoolsÚpermutationsr   rñ   )r   rN   rB   r<   r8   Úr0Úi0Ún0Únncr?   rò   r   r   r   Ú&test_kdtree_count_neighbous_multiple_r}  s    
ÿürþ  c                 C   s(  t j d¡}| dd¡}| dd¡}| |ƒ}|jddgdd�\}}| ddgd| ¡}t|g ƒ |j|dd�\}}| ¡ }| |d| ¡}t jdt	d	�}	|	 
g ¡ t|	|ƒ | |ƒ}
| |
d| ¡}	tdg g |	ƒ | |
d| ¡}	t|	d
kƒ |j|
d| dd�}	t|	t  d¡kdƒ |j|
d| dd�}	t|	t  d¡kdƒ |j|
d| dd�}	t|	i ƒ |j|
d| dd�}	dt jfdt jfdt jfg}t j|dd�}t jd|d	�}t|	|ƒ |j|dd�\}}|d d …df  ¡ }|jd| dd�}	t|	tƒ ƒ |jd| dd�}	t jdt jd	�}t|	|ƒ d S )Nrc   rg   r3   r%   r   r�   rY   )rg   )r˜   rÇ   r   r_  r[  )rg   rg   Tr`  rZ  r]  r?   r  r^  )Úalign)r   rº   rm  )r   r3   )r:   rh   ÚRandomStateÚrandr9   r¾   r   rª  rÉ  ÚobjectÚfillr   r9  r   rK  r—   r   ÚintpÚfloat64rÇ   ro  rm  )r   ÚrngÚXÚYr!   r+   r?   rÝ  Úmindr-  ÚotherÚ_dtypeÚ	res_dtyper   r   r   Útest_len0_arrays�  sH   




r  c              	   C   sÂ   d}t ddƒD ]W}t ||f¡}d||d d …< tjddd�D ]>\}}| |||dd�}|jdks2J ‚| tu r9|jn|jj}t	t 
|jj¡t d	|d ¡ƒ t	t 
|jj¡t |d |¡ƒ qqd S )
Ni   r   r†  r3   ©FT)Úrepeat)rV  rW  re   r�   r   )rø   r:   rÈ   rø  ÚproductrÔ   r   r!   Ú_noder   r­  r¦  r§  rÅ  r&  )r   rN   rB   r<   ÚbalancedÚcompactr8   r!   r   r   r   Útest_kdtree_duplicated_inputs¾  s,   ÿÿþþõür  c                 C   s,   | dggdd�}t t|j|ddgdd� d S )Nr   r   rd   rY   Frô  )rÀ  r¬   r9  )r   r8   r   r   r   Ú'test_kdtree_noncumulative_nondecreasingÕ  s   

ÿr  c                 C   s´   t jg d¢g d¢g d¢g d¢g d¢g d¢gdd�}| |ƒ}|j|d	d
d�\}}t|dt jt jt jgddt jt jgddt jt jgddt jt jgddt jt jgdt jt jt jggƒ d S )N)r¸   r¸   r¸   )r~  r¸   r¸   )r¸   r¨   r¸   )r¸   r~  r¸   )r¨   r¸   r¸   )r¨   r¨   r¸   r  rÆ   rb   rf   rH   r¸   r>  )r:   r‚   r9   r   rP   )r   ÚxyzÚckdtÚdeqÚieqr   r   r   Útest_short_knnß  s*   úù	ûÿr  c                    s”   t j d¡ t jjdd�}t jjdd�}| |ƒ‰ t jjddt|ƒd�}ˆ  ||¡}‡ fdd„t||ƒD ƒ}t||ƒD ]\}}tt	|ƒt	|ƒƒ q:d S )Nrc   ©ra   r�   rÓ   r   ç333333Ó?c                    s   g | ]
\}}ˆ   ||¡‘qS r   ©r¾   )r5  ÚqiÚdi©r!   r   r   r6    ó    z2test_query_ball_point_vector_r.<locals>.<listcomp>)
r:   rh   ri   rö  rÖ   r3  r¾   rO   r   rt  )r   r<   r9   r+   ÚrvectorÚrscalarr&   r'   r   r   r   Útest_query_ball_point_vector_rø  s   ÿr$  c                    s¨   t j d¡ t jjdd�}t jjdd�}| |ƒ‰d‰ ˆj|ˆ dd�}dd„ ˆj|ˆ d	d�D ƒ}‡ ‡fd
d„|D ƒ}‡ ‡fdd„|D ƒ}t||ƒ t||ƒ t||ƒ d S )Nrc   r  rÓ   r  T©Úreturn_lengthc                 S   r1  r   r2  )r5  rÂ   r   r   r   r6    r7  z0test_query_ball_point_length.<locals>.<listcomp>Fc                    s   g | ]
}t ˆ |ˆ ¡ƒ‘qS r   )r3  r¾   ©r5  r  ©r+   r!   r   r   r6    r!  c                    s   g | ]
}ˆj |ˆ d d�‘qS )Tr%  r  r'  r(  r   r   r6    r!  )r:   rh   ri   rö  r¾   r   )r   r<   r9   ÚlengthÚlength2Úlength3Úlength4r   r(  r   Útest_query_ball_point_length  s   

r-  c                 C   s  t j d¡ t jjdd�}t  d¡d }t  t  d¡d d d… d ¡d d d… }t jjdd�}t  |j¡j}|jd |jd ksBJ ‚|jd |jd ksNJ ‚| |ƒ}|j||dd�}|j||dd�}t	||ƒ | 
|d	¡\}	}
| 
|d	¡\}}t	|	|ƒ t	|
|ƒ d S )
Nrc   r  rÓ   ra   g{®Gáz¤?rº   Tr%  r   )r:   rh   ri   rö  rÅ  Úascontiguousarrayr±   Ústridesr¾   r   r9   )r   r<   Úd_contiguousÚd_discontiguousÚquery_contiguousÚquery_discontiguousr!   Úlength1r*  Úd1Úi1Úd2Úi2r   r   r   Útest_discontiguous  s0   ÿÿÿÿ

r9  zbalanced_tree, compact_nodes))TF)TT)FFr  c                 C   sÔ   t j d¡ t jdd�}t jdd�}t jdd�}| |||d�}|j|ddd	�}|d
ks-J ‚| |d¡\}}	|	jdks<J ‚|jdksCJ ‚t  |¡ 	¡ sLJ ‚| 
|d
dg¡}
t|
d
d
gƒ | |d¡}|jdkshJ ‚d S )Nrc   )r   r�   )r˜   )r   r�   rï   rU  r  Tr%  r   r3   )r3   r3   r   rð   )r:   rh   ri   rÉ  rÈ   r¾   r9   r˜   Úisinfr=   r9  r   rK  )r   rV  rW  Úempty_v3Úquery_v3Úquery_v2r!   r)  rE   rF   ÚNrM  r   r   r   Útest_kdtree_empty_input1  s"   ÿr?  c                   @   rw   )Ú_Test_sorted_query_ball_pointc                 C   s.   t j d¡ t j dd¡| _|  | j¡| _d S )Nrc   ra   r   )r:   rh   ri   rj   r7   r   r  rk   r   r   r   rl   O  s   z*_Test_sorted_query_ball_point.setup_methodc                 C   s\   | j j| jddd�}|D ]	}t|t|ƒƒ q| jD ]}| j j|ddd�}t|t|ƒƒ qd S )Nr¨   T©Úreturn_sorted)r  r¾   r7   r   rt  )r0   Ú	idxs_listÚidxsrz  r   r   r   Útest_return_sorted_TrueT  s   
þz5_Test_sorted_query_ball_point.test_return_sorted_Truec                    sr   ˆ j  ˆ jd¡}|D ]	}t|t|ƒƒ q
‡ fdd„ˆ jD ƒ}ˆ j jˆ jddd�}t||ƒD ]	\}}t||ƒ q-dS )z£Previous behavior was to sort the returned indices if there were
        multiple points per query but not sort them if there was a single point
        per query.r¨   c                    s   g | ]	}ˆ j  |d ¡‘qS )r¨   )r  r¾   )r5  rz  rk   r   r   r6  e  s    zI_Test_sorted_query_ball_point.test_return_sorted_None.<locals>.<listcomp>FrA  N)r  r¾   r7   r   rt  rO   )r0   rC  rD  Úidxs_list_singleÚidxs_list_FalseÚidxs0Úidxs1r   rk   r   Útest_return_sorted_None]  s   ÿz5_Test_sorted_query_ball_point.test_return_sorted_NoneN)r   r]   r^   rl   rE  rJ  r   r   r   r   r@  M  s    	r@  c                  C   sÎ   t j dd¡ t¡} tjtdd�� t| ƒ}W d   ƒ n1 s w   Y  t| j	ƒ}tjtdd�� | 
| ¡ W d   ƒ n1 sAw   Y  tjtdd�� |j| dd� W d   ƒ d S 1 s`w   Y  d S )Nrg   r3   zcomplex datar©   r   r  )r:   rh   r  ÚviewÚcomplexr«   r   Ú	TypeErrorr
   Úrealr9   r¾   ©rù   Útr   r   r   Útest_kdtree_complex_datak  s   
ÿ
ÿ"ÿrQ  c                  C   sD  t j d¡ t j dd¡} t| ƒ}|j}t|tjƒsJ ‚|j| j	d ks&J ‚|g}|r | 
d¡}t|tjƒrSt|jtƒs>J ‚|jt|jƒksHJ ‚t| |j |jjƒ nIt|tjƒs[J ‚t|jtƒscJ ‚d|j  krp|jk ssJ ‚ J ‚t|jtƒs{J ‚t|jtƒsƒJ ‚|j|jj|jj ks�J ‚| |j¡ | |j¡ |s+d S d S )Nrc   ra   rb   r   rº   )r:   rh   ri   r  r
   r!   r�   Ú	innernodeÚchildrenr˜   ÚpopÚleafnoder¯   r3  Úidxr   r  r¨  r¥  rB   r"  rŽ   r%  r&  rÇ  )rù   rP  Úrootr�  rN   r   r   r   Útest_kdtree_tree_access{  s,   
 ñrX  c                  C   sÆ   t j d¡ t j dd¡} t| ƒ}t|jtƒsJ ‚|j| j	d ks#J ‚t|jtƒs+J ‚|j| j	d ks5J ‚t|j
tƒs=J ‚|j
dksDJ ‚t|jt j| dd�ƒ t|jt j| dd�ƒ |j| u saJ ‚d S )Nrc   ra   rb   r   r   rg   r5   )r:   rh   ri   r  r
   r�   rB   r¯   rN   r˜   re   r   r#  rC   r$  Úaminr<   rO  r   r   r   Útest_kdtree_attributes™  s   rZ  Úkdtree_classc                    s  t j d¡}t  ddd¡}| d¡ d¡}| d¡ d¡}| d¡}| d	¡}| |ƒ}| |ƒ}|j||d
||fd�}	|d d d …f |d d …d f  ‰t jj|d d d …d d …f |d d …d d d …f  dd�‰ ‡ ‡fdd„tt	 
dg|d d… ¡|ƒD ƒ}
t|	|
ƒ d S )Nrc   rÎ  r   é   )r,  r�   é-   )é   r�   r,  r^  F)rõ  ré  rº   r5   c                    s*   g | ]\}}t  ˆ|ˆ k ˆ |k@  ¡‘qS r   )r:   r;   )r5  Úprev_radiusÚradius©rÃ   ré  r   r   r6  À  s    ÿz8test_kdtree_count_neighbors_weighted.<locals>.<listcomp>r   )r:   rh   r   rÅ  r½  r9  ÚlinalgrÄ   rO   rø  Úchainr   )r[  r  rò   ÚAÚBÚwAÚwBÚkdAÚkdBÚnABÚexpectr   ra  r   Ú$test_kdtree_count_neighbors_weighted­  s   

 8ÿrl  c                  C   sp   g d¢} t | ƒ}t | t |tj¡g¡d d …d f }tjtdd�� t|ƒ W d   ƒ d S 1 s1w   Y  d S )N)
r   rî   iöÿÿÿr,  éüÿÿÿiðÿÿÿiúÿÿÿé   r�   iõÿÿÿúmust be finiter©   )	r3  r:   rÈ  r×   Únanr«   r   r¬   r
   )ÚvalsrN   r<   r   r   r   Útest_kdtree_nanÅ  s   $
"ÿrr  c                  C   s¶  t j d¡} | jdddd�}t|ddd�}dd	„ td
ƒD ƒ}tjtdd�� | 	|¡ W d   ƒ n1 s5w   Y  tjtdd�� | 
|d¡ W d   ƒ n1 sRw   Y  t j|dd d …f< tjtdd�� t|ddd� W d   ƒ n1 syw   Y  tjtdd�� t|ddd� W d   ƒ n1 s—w   Y  tjtdd�� t|ddd� W d   ƒ n1 sµw   Y  tjtdd�� t|ddd� W d   ƒ d S 1 sÔw   Y  d S )Ni90  r  r¸   rY   )rÔ   ÚlowÚhighFrU  c                 S   s   g | ]}t j‘qS r   )r:   rp  rŽ  r   r   r   r6  Ñ  s    z2test_nonfinite_inputs_gh_18223.<locals>.<listcomp>r�   ro  r©   r   r   T)r:   rh   Údefault_rngrÖ   r
   rø   r«   r   r¬   r9   r¾   rp  )r  ÚcoordsrP  Ú	bad_coordr   r   r   Útest_nonfinite_inputs_gh_18223Í  s.   ÿÿÿÿÿ"ÿrx  Úincantationc                 C   s`   G dd„ dt jƒ}ddgddgddgg}t  |¡}||ƒ}| |d	ƒ}| |d
¡ | |d¡ d S )Nc                   @   r  )ztest_gh_18800.<locals>.ArrLikec                 S   s   t  |¡ | ¡}d |_|S r   )r:   r‹  rK  r=   )ÚclsÚinput_arrayÚobjr   r   r   Ú__new__ê  s   z&test_gh_18800.<locals>.ArrLike.__new__c                 S   s   |d u rd S t |dd ƒ| _d S )Nr=   )Úgetattrr=   )r0   r|  r   r   r   Ú__array_finalize__ñ  s   z1test_gh_18800.<locals>.ArrLike.__array_finalize__N)r   r]   r^   r}  r  r   r   r   r   ÚArrLikeé  s    r€  g®GázŽP@g…ëQ¸E@@g…ëQ¸…6@g¤p=
×c6@gÃõ(\�?@g=
×£pMT@rg   r   r¯  )r:   r]  r‚   r9   r¾   )ry  r€  rù   rx  Úarr_liker!   r   r   r   Útest_gh_18800ã  s   ý

r‚  )kr¡  Únumpy.testingr   r   r   r   r   r   r«   r   rÀ  Úplatformr	   Únumpyr:   Úscipy.spatialr
   r   r   r   Úscipy.spatial._ckdtreer   r   rø  Úfixturer   r$   r,   r-   r`   rp   rx   r†   rˆ   r®   r·   rÌ   rÏ   rÚ   rÝ   rã   rä   rç   rè   ré   ró   rý   rþ   r  r	  r
  r  r  r  r  r)  r*  r+  r.  r/  rF  rG  re  ri  rl  rp  rq  rr  ry  r…  rŒ  r�  r“  r™  rš  r�  r¤  r®  r´  ÚmarkÚ	fail_slowr»  r¼  r¿  rÁ  r·  Úskipifrç  ró  rþ  r  r  r  r  r$  r-  r9  Úparametrizer?  r@  rQ  rX  rZ  rl  rr  rx  r‚  r   r   r   r   Ú<module>   sò    
K-/& 	I
!"
"

ÿ
)
.
.
ÿ

