U
    »mœdé¸  ã                   @   sp  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„ ZNdudv„ ZOdwdx„ ZPdydz„ ZQd{d|„ ZRd}d~„ ZSejTjUeƒ dkd€d��d‚dƒ„ ƒZVd„d…„ ZWd†d‡„ ZXdˆd‰„ ZYdŠd‹„ ZZdŒd�„ Z[dŽd�„ Z\d�d‘„ Z]d’d“„ Z^d”d•„ Z_ejT `d–d—d˜d™dšg¡d›dœ„ ƒZaeG d�dž„ džƒƒZbdŸd „ Zcd¡d¢„ Zdd£d¤„ ZeejT `d¥eeg¡d¦d§„ ƒZfd¨d©„ Zgd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   úX/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/spatial/tests/test_kdtree.pyÚkdtree_type   s    r   c                 C   sp   | j  d¡stdƒ‚ttfD ]N}| j dd… d |j  }|tƒ krNt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.
    Z_Testz)Expected a class name starting with _Testé   NÚ_zDuplicated test name: r   )Ú__name__Ú
startswithÚRuntimeErrorr
   r   ÚglobalsÚtype)ZklsÚtreeZ	test_nameZ	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   s   t |||ƒS r   r   ©Úselfr"   r#   r$   r   r   r   Údistance3   s    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>©Zaxis)
ÚxÚkdtreeÚqueryr   ÚnpÚsumÚdatar   ÚallÚnewaxis)r+   r0   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 )Nr-   r.   r   r/   )r0   Úmr1   r2   r3   ÚamaxZargmaxr   r4   r5   r   r7   )r+   r0   r;   ÚddÚiir'   r8   r9   r   r   r   Útest_m_nearest=   s    
"zConsistencyTests.test_m_nearestc           	      C   s¾   | j }| j}| jj|| jj|d�\}}d}d}t||ƒD ]X\}}|tjkrLq8|d7 }t|d t 	|| j
|  d ¡ƒ t||| k d||f ƒ q8tt 	|  | j
|d¡|d | k ¡|ƒ d S )N©ÚkÚdistance_upper_boundr.   r   r   r-   ú near_d=%g should be less than %g)r0   r'   r1   r2   ÚnÚzipr3   Úinfr   r4   r5   r   r   r,   ©	r+   r0   r'   r=   r>   r9   ÚhitsZnear_dZnear_ir   r   r   Útest_points_nearG   s    
"z!ConsistencyTests.test_points_nearc           	      C   s´   | j }| j}| jj|| jjd|d�\}}d}d}t||ƒD ]P\}}|tjkrNq:|d7 }t||  	|| j
| d¡ƒ t||| k d||f ƒ q:tt |  	| j
|d¡|| k ¡|ƒ d S )Nr   ©rA   r$   rB   r.   r   rC   )r0   r'   r1   r2   rD   rE   r3   rF   r   r,   r5   r   r   r4   rG   r   r   r   Útest_points_near_l1U   s    
z$ConsistencyTests.test_points_near_l1c           	      C   sº   | j }| j}| jj|| jjtj|d�\}}d}d}t||ƒD ]R\}}|tjkrPq<|d7 }t||  	|| j
| tj¡ƒ t||| k d||f ƒ q<tt |  	| j
|tj¡|| k ¡|ƒ d S )NrJ   r.   r   r   rC   )r0   r'   r1   r2   rD   r3   rF   rE   r   r,   r5   r   r   r4   rG   r   r   r   Útest_points_near_linfc   s    
z&ConsistencyTests.test_points_near_linfc                 C   sV   | j }| j}d}| j ||¡\}}| jj|||d�\}}tt ||d|  k¡ƒ d S )Nçš™™™™™¹?)r9   r   )r0   rA   r1   r2   r   r3   r6   )r+   r0   rA   r9   Zd_realZi_realr'   r8   r   r   r   Útest_approxq   s    zConsistencyTests.test_approxN)
r   Ú
__module__Ú__qualname__r,   r:   r?   rI   rK   rL   rN   r   r   r   r   r)   2   s   
r)   c                   @   s   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   é   éÒ  r-   ©Úleafsizeçš™™™™™É?é
   )rD   r;   r3   ÚrandomÚseedÚrandnr5   r   r1   r0   r'   rA   ©r+   r   r   r   Úsetup_method|   s    z_Test_random.setup_methodN©r   rO   rP   r]   r   r   r   r   rQ   z   s   rQ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_farc                    s"   t ƒ  ¡  tj | j¡d | _d S )NrX   )Úsuperr]   r3   rY   r[   r;   r0   r\   ©Ú	__class__r   r   r]   ‰   s    
z_Test_random_far.setup_method©r   rO   rP   r]   Ú__classcell__r   r   ra   r   r_   ‡   s   r_   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_Test_smallc                 C   s˜   t  dddgdddgdddgdddgdddgdddgdddgdddgg¡| _|  | j¡| _| jj| _| jj| _t j d¡ t j 	d¡| _
d| _d| _d S )Nr   r   rT   é   r!   rS   )r3   Úarrayr5   r   r1   rD   r;   rY   rZ   r[   r0   r'   rA   r\   r   r   r   r]   �   s     ù

z_Test_small.setup_methodc                 C   s   t | j dd¡dƒ d S )N©r   r   rM   r   )rM   r   ©r   r1   r2   r\   r   r   r   r:   ¡   s    þz_Test_small.test_nearestc                 C   s$   t | j dd¡ddgddgfƒ d S )Nrh   r-   rM   gÍÌÌÌÌÌì?r   r   ri   r\   r   r   r   Útest_nearest_two¦   s    þz_Test_small.test_nearest_twoN)r   rO   rP   r]   r:   rj   r   r   r   r   re   Ž   s   re   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_small_nonleafc                    s    t ƒ  ¡  | j| jdd�| _d S )Nr   rU   )r`   r]   r   r5   r1   r\   ra   r   r   r]   ®   s    
z _Test_small_nonleaf.setup_methodrc   r   r   ra   r   rk   ¬   s   rk   c                   @   s<   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   s\   t  dddgdddgdddgdddgdddgdddgdddgdddgg¡| _t| jƒ| _d S ©Nr   r   )r3   rg   r5   r
   r1   r\   r   r   r   r]   ´   s    ùz&Test_vectorization_KDTree.setup_methodc                 C   s@   | j  t dddg¡¡\}}tt|tƒƒ tt |tj¡ƒ d S ©Nr   )	r1   r2   r3   rg   r   Ú
isinstanceÚfloatZ
issubdtypeZsignedinteger©r+   r'   r8   r   r   r   Útest_single_query¿   s    z+Test_vectorization_KDTree.test_single_queryc                 C   s:   | j  t d¡¡\}}tt |¡dƒ tt |¡dƒ d S ©N©r-   rS   rf   )r-   rS   ©r1   r2   r3   Úzerosr   Úshaperq   r   r   r   Útest_vectorized_queryÄ   s    z/Test_vectorization_KDTree.test_vectorized_queryc                 C   s˜   d}| j j| }| j jt dddg¡|d�\}}tt |¡|fƒ tt |¡|fƒ tt t 	|| d … ¡ ¡ƒ tt || d … | j jk¡ƒ d S ©Né   r   ©rA   )
r1   rD   r2   r3   rg   r   rw   r   r6   Úisfinite©r+   ÚsÚkkr'   r8   r   r   r   Ú$test_single_query_multiple_neighborsÉ   s      z>Test_vectorization_KDTree.test_single_query_multiple_neighborsc              
   C   s¶   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 ©Nrz   rt   r{   r-   rS   ©
r1   rD   r2   r3   rv   r   rw   r   r6   r|   r}   r   r   r   Ú(test_vectorized_query_multiple_neighborsÒ   s    .zBTest_vectorization_KDTree.test_vectorized_query_multiple_neighborsc              	   C   s2   d}t jtdd�� | jj|d d� W 5 Q R X d S )Nç      ð?zk must be an integer or*©Úmatchr{   )Úpytestr   Ú
ValueErrorr1   r2   )r+   r0   r   r   r   Útest_query_raises_for_k_noneÛ   s    z6Test_vectorization_KDTree.test_query_raises_for_k_noneN)	r   rO   rP   r]   rr   rx   r€   rƒ   r‰   r   r   r   r   rl   ³   s   		rl   c                   @   s<   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_cKDTreec                 C   s\   t  dddgdddgdddgdddgdddgdddgdddgdddgg¡| _t| jƒ| _d S rm   )r3   rg   r5   r   r1   r\   r   r   r   r]   á   s    ùz'Test_vectorization_cKDTree.setup_methodc                 C   s6   | j  dddg¡\}}tt|tƒƒ tt|tƒƒ d S rn   )r1   r2   r   ro   rp   Úintrq   r   r   r   rr   ì   s    z,Test_vectorization_cKDTree.test_single_queryc                 C   s:   | j  t d¡¡\}}tt |¡dƒ tt |¡dƒ d S rs   ru   rq   r   r   r   rx   ñ   s    z0Test_vectorization_cKDTree.test_vectorized_queryc                 C   s^   t j d¡ t j dd¡j}| j |¡\}}t|||ƒD ] \}}}t| j |¡||fƒ q8d S )NrT   rf   éè  )	r3   rY   rZ   r[   ÚTr1   r2   rE   r   )r+   ÚqsÚdsZi_sÚqr'   r8   r   r   r   Ú*test_vectorized_query_noncontiguous_valuesö   s
    zETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_valuesc                 C   s’   d}| j j| }| j jdddg|d�\}}tt |¡|fƒ tt |¡|fƒ tt t || d … ¡ ¡ƒ tt || d … | j jk¡ƒ d S ry   )	r1   rD   r2   r   r3   rw   r   r6   r|   r}   r   r   r   r€   ý   s     z?Test_vectorization_cKDTree.test_single_query_multiple_neighborsc              
   C   s¶   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 r�   r‚   r}   r   r   r   rƒ     s    .zCTest_vectorization_cKDTree.test_vectorized_query_multiple_neighborsN)	r   rO   rP   r]   rr   rx   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   r,     s    zball_consistency.distancec                 C   sÀ   t  | j¡}t  | j|jd d… ¡}| jj|| j| j| j	d�}t
|ƒD ]t\}}|  | j| || | j¡|| d| j	   }|  | j| || | j¡|| d| j	   }t|| j| k dƒ qFd S )Néÿÿÿÿ©r$   r9   r„   T)r3   Ú
atleast_2dr0   Úbroadcast_tor'   rw   r�   Úquery_ball_pointr$   r9   Ú	enumerater,   r5   r   Útol)r+   r0   r'   Úlr8   Ú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 ]�\}}t j| jjtd�}d||< |  | j| || | j¡|| d| j	   }|  | j| || | j¡|| d| j	   }t|| j | kdƒ qFd S )Nr•   r–   ©ÚdtypeFr„   T)r3   r—   r0   r˜   r'   rw   r�   r™   r$   r9   rš   ÚonesrD   Úboolr,   r5   r   r›   )	r+   r0   r'   rœ   r8   r�   Úcrž   rŸ   r   r   r   Útest_found_all  s    ,,zball_consistency.test_found_allN)r   rO   rP   r›   r,   r    r¦   r   r   r   r   r’     s   	r’   c                   @   s   e Zd Zdd„ ZdS )Ú_Test_random_ballc                 C   sZ   d}d}t j d¡ t j ||¡| _| j| jdd�| _t j |¡| _d| _d| _	d| _
d S )	NrR   rS   rT   r-   rU   ç       @r   rW   )r3   rY   rZ   r[   r5   r   r�   r0   r$   r9   r'   ©r+   rD   r;   r   r   r   r]   +  s    z_Test_random_ball.setup_methodNr^   r   r   r   r   r§   )  s   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   s   t |||dƒS r”   ©r(   r*   r   r   r   r,   9  s    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'  rS   rT   ©Úsizer-   r   ©rV   r%   rM   r¨   r   rW   )r3   rY   rZ   Úuniformr5   r   r�   Úfullr0   r$   r9   r'   r©   r   r   r   r]   <  s    z'_Test_random_ball_periodic.setup_methodc                 C   s°   | j j| jd | j| j| jd�}|D ]0}t|  | j| | j| j¡| jd| j  kƒ q$| j j| jd | j| j| jd�}|D ]0}t|  | j| | j| j¡| jd| j  kƒ qzd S )Nr„   r–   )	r�   r™   r0   r'   r$   r9   r   r,   r5   )r+   rœ   r8   r   r   r   Útest_in_ball_outsideG  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
t  |  | j| | j| j¡| jd| j	  k¡ƒ | jj| jd | j| j| j	d�}d||< t
t  |  | j| | j| j¡| jd| j	  k¡ƒ d S )Nr¡   r„   r–   F)r3   r£   r�   rD   r¤   r™   r0   r'   r$   r9   r   r6   r,   r5   )r+   r¥   rœ   r   r   r   Útest_found_all_outsideO  s     2 z1_Test_random_ball_periodic.test_found_all_outsideN)r   rO   rP   r,   r]   r±   r²   r   r   r   r   rª   7  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Œ   r-   é{   rR   r¬   r   rX   )r3   rY   rZ   Úrandintr5   r   r�   r0   r$   r9   r'   r©   r   r   r   r]   `  s    z/_Test_random_ball_largep_issue9890.setup_methodN)r   rO   rP   r›   r]   r   r   r   r   r³   Z  s   r³   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_approxc                    s   t ƒ  ¡  d| _d S ©NrM   ©r`   r]   r9   r\   ra   r   r   r]   o  s    
z%_Test_random_ball_approx.setup_methodrc   r   r   ra   r   r¶   l  s   r¶   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú!_Test_random_ball_approx_periodicc                    s   t ƒ  ¡  d| _d S r·   r¸   r\   ra   r   r   r]   w  s    
z._Test_random_ball_approx_periodic.setup_methodrc   r   r   ra   r   r¹   t  s   r¹   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_farc                    s   t ƒ  ¡  d| _d S ©Nr¨   ©r`   r]   r'   r\   ra   r   r   r]     s    
z"_Test_random_ball_far.setup_methodrc   r   r   ra   r   rº   |  s   rº   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_far_periodicc                    s   t ƒ  ¡  d| _d S r»   r¼   r\   ra   r   r   r]   †  s    
z+_Test_random_ball_far_periodic.setup_methodrc   r   r   ra   r   r½   ƒ  s   r½   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_l1c                    s   t ƒ  ¡  d| _d S )Nr   )r`   r]   r$   r\   ra   r   r   r]   Ž  s    
z!_Test_random_ball_l1.setup_methodrc   r   r   ra   r   r¾   ‹  s   r¾   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_linfc                    s   t ƒ  ¡  tj| _d S r   ©r`   r]   r3   rF   r$   r\   ra   r   r   r]   –  s    
z#_Test_random_ball_linf.setup_methodrc   r   r   ra   r   r¿   “  s   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é   é   rT   r-   rf   r   ©r-   rf   ©r   r   )
r3   rY   rZ   r[   r™   r   rw   r   ro   Úlist)r   rD   r;   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 ]&}|| sv|| rbt|| || ƒ qbt|ƒD ]&}|| s¦|| r’t|| || ƒ q’d S )	Nr   éˆ  r-   gú~j¼t“h?r   ©Úworkersé@   r•   )r3   rY   rZ   r[   r™   Úranger   )	r   rD   rA   Úpointsr�   Úl1Úl2Úl3r8   r   r   r   Ú$test_query_ball_point_multithreading¦  s    rÑ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Útwo_trees_consistencyc                 C   s   t |||ƒS r   r   r*   r   r   r   r,   »  s    ztwo_trees_consistency.distancec                 C   sl   | j j| j| j| j| jd�}t|ƒD ]B\}}|D ]4}t|  | j	| | j
| | j¡| jd| j  kƒ q0q$d S )Nr–   r„   )ÚT1Úquery_ball_treeÚT2r'   r$   r9   rš   r   r,   Údata1Údata2)r+   rÆ   r8   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 ]X\}}tj| jj	t
d�}d||< tt |  | j| | j| | j¡| jd| j  k¡ƒ q$d S )Nr–   r¡   Fr„   )rÓ   rÔ   rÕ   r'   r$   r9   rš   r3   r£   rD   r¤   r   r6   r,   r×   rÖ   )r+   rÆ   r8   rœ   r¥   r   r   r   r¦   Ä  s
    z$two_trees_consistency.test_found_allN)r   rO   rP   r,   rÙ   r¦   r   r   r   r   rÒ   ¹  s   rÒ   c                   @   s   e Zd Zdd„ ZdS )Ú_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   rS   rT   r-   rU   r¨   r   rW   )r3   rY   rZ   r[   rÖ   r   rÓ   r×   rÕ   r$   r9   r'   r©   r   r   r   r]   Ï  s    z#_Test_two_random_trees.setup_methodNr^   r   r   r   r   rÚ   Ì  s   rÚ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_Test_two_random_trees_periodicc                 C   s   t |||dƒS r”   r«   r*   r   r   r   r,   Þ  s    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Û   rS   rT   r¬   r-   r„   r®   r¨   r   rW   )r3   rY   rZ   r¯   rÖ   r   rÓ   r×   rÕ   r$   r9   r'   r©   r   r   r   r]   á  s    z,_Test_two_random_trees_periodic.setup_methodN)r   rO   rP   r,   r]   r   r   r   r   rÜ   Ü  s   rÜ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_two_random_trees_farc                    s   t ƒ  ¡  d| _d S ©Nr-   r¼   r\   ra   r   r   r]   ñ  s    
z'_Test_two_random_trees_far.setup_methodrc   r   r   ra   r   rÝ   î  s   rÝ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú#_Test_two_random_trees_far_periodicc                    s   t ƒ  ¡  d| _d S rÞ   r¼   r\   ra   r   r   r]   ù  s    
z0_Test_two_random_trees_far_periodic.setup_methodrc   r   r   ra   r   rß   ö  s   rß   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_two_random_trees_linfc                    s   t ƒ  ¡  tj| _d S r   rÀ   r\   ra   r   r   r]     s    
z(_Test_two_random_trees_linf.setup_methodrc   r   r   ra   r   rà   þ  s   rà   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú$_Test_two_random_trees_linf_periodicc                    s   t ƒ  ¡  tj| _d S r   rÀ   r\   ra   r   r   r]   	  s    
z1_Test_two_random_trees_linf_periodic.setup_methodrc   r   r   ra   r   rá     s   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 rm   )r   Úrectr\   r   r   r   r]     s    zTest_rectangle.setup_methodc                 C   s   t | j ddg¡dƒ d S )Nr!   r   ©r   rã   Úmin_distance_pointr\   r   r   r   Útest_min_inside  s    zTest_rectangle.test_min_insidec                 C   s   t | j ddg¡dƒ d S ©Nr!   g      ø?rä   r\   r   r   r   Útest_min_one_side  s    z Test_rectangle.test_min_one_sidec                 C   s    t | j ddg¡t d¡ƒ d S rÞ   )r   rã   rå   r3   Úsqrtr\   r   r   r   Útest_min_two_sides  s    z!Test_rectangle.test_min_two_sidesc                 C   s$   t | j ddg¡dt d¡ ƒ d S )Nr!   r   r-   ©r   rã   Úmax_distance_pointr3   ré   r\   r   r   r   Útest_max_inside  s    zTest_rectangle.test_max_insidec                 C   s"   t | j ddg¡t dd¡ƒ d S rç   )r   rã   rì   r3   Úhypotr\   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ë   r\   r   r   r   Útest_max_two_sides"  s    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   rM   r   )rã   Úsplitr   ÚmaxesÚmins)r+   ÚlessÚgreaterr   r   r   Ú
test_split%  s
    zTest_rectangle.test_splitN)r   rO   rP   r]   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   r-   )r   r   r3   ré   r   r   r   r   Útest_distance_l2-  s    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_l11  s    rù   c                   C   s    t tddgddgtjƒdƒ d S rm   )r   r   r3   rF   r   r   r   r   Útest_distance_linf5  s    rú   c                  C   sB   t j d¡ t j ddd¡} t j ddd¡}tt| |ƒjdƒ d S )NrT   rX   r   rf   é   )rX   rû   )r3   rY   rZ   r[   r   r   rw   )r0   Úyr   r   r   Útest_distance_vectorization9  s    rý   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Úcount_neighbors_consistencyc              	   C   s:   d}t | j | j|¡t dd„ | j | j|¡D ƒ¡ƒ d S )NrW   c                 S   s   g | ]}t |ƒ‘qS r   ©Úlen©Ú.0rœ   r   r   r   Ú
<listcomp>D  s     z?count_neighbors_consistency.test_one_radius.<locals>.<listcomp>©r   rÓ   Úcount_neighborsrÕ   r3   r4   rÔ   ©r+   rÆ   r   r   r   Útest_one_radiusA  s    ÿz+count_neighbors_consistency.test_one_radiusc              	   C   s:   d}t | j | j|¡t dd„ | j | j|¡D ƒ¡ƒ d S )NrŒ   c                 S   s   g | ]}t |ƒ‘qS r   rÿ   r  r   r   r   r  I  s     zAcount_neighbors_consistency.test_large_radius.<locals>.<listcomp>r  r  r   r   r   Útest_large_radiusF  s    ÿ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|¡|ƒ qRd S )Nç{®Gáz„?rX   rf   r   )r3   ÚexpÚlinspaceÚlogrÓ   r  rÕ   r   r6   r&   rE   r   )r+   ÚrsÚresultsrÆ   Úresultr   r   r   Útest_multiple_radiusK  s
     z0count_neighbors_consistency.test_multiple_radiusN)r   rO   rP   r  r  r  r   r   r   r   rþ   @  s   rþ   c                   @   s   e Zd Zdd„ ZdS )Ú_Test_count_neighborsc                 C   sL   d}d}t j d¡ | jt j ||¡dd�| _| jt j ||¡dd�| _d S )NrÛ   r-   rT   rU   )r3   rY   rZ   r   r[   rÓ   rÕ   r©   r   r   r   r]   T  s
    z"_Test_count_neighbors.setup_methodNr^   r   r   r   r   r  R  s   r  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú"sparse_distance_matrix_consistencyc                 C   s   t |||ƒS r   r   r*   r   r   r   r,   ^  s    z+sparse_distance_matrix_consistency.distancec              	   C   sœ   | j  | j| j¡}| j  | j| j¡}t|ƒD ]D\}}|D ]6}t|||f |  | j j| | jj| | j	¡dd� q8q,| 
¡ D ]\\}}}t||| kƒ qzd S )Né   ©Údecimal)rÓ   Úsparse_distance_matrixrÕ   rÆ   rÔ   rš   r   r,   r5   r$   Úitemsr   )r+   ÚMrÆ   r8   rœ   rØ   r'   r   r   r   Útest_consistency_with_neighborsa  s    þ
zBsparse_distance_matrix_consistency.test_consistency_with_neighborsc                 C   s   | j  | j | j¡ d S r   )rÓ   r  rÆ   r\   r   r   r   Útest_zero_distancel  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   r  r  )rÓ   r  rÕ   rÆ   r   r5   r   Útoarray)r+   ZM1Úexpectedr   r   r   Útest_consistencyp  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   é   r-   r¡   F©Úbalanced_treeÚcompact_nodesrf   r  r  )r3   rY   rZ   rg   r[   r‹   r   r  r  r   r�   )r+   Útoo_manyr   r'   r   r   r   Ú#test_against_logic_error_regressionw  s      ÿzFsparse_distance_matrix_consistency.test_against_logic_error_regressionc                 C   s®  t  | j| jf¡}t| jƒD ]L}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< q²t||dd� t  | j| jf¡}| j	j
| j| jdd�}t|jd ƒD ]6}|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_typer  r  Úndarrayr   r8   rØ   ÚvÚ
dok_matrixÚ
coo_matrix)r3   rv   rD   rÌ   rÖ   r×   Údotré   rÆ   rÓ   r  rÕ   Úkeysr   rw   r  )r+   Úrefr8   rØ   r(  rž   rÆ   rA   r   r   r   Útest_ckdtree_return_types€  s<    $
ÿÿÿz<sparse_distance_matrix_consistency.test_ckdtree_return_typesN)	r   rO   rP   r,   r  r  r  r#  r.  r   r   r   r   r  \  s   	r  c                   @   s   e Zd Zdd„ ZdS )Ú_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Û   rS   rT   r-   rU   r!   )r3   rY   rZ   r[   r   rÓ   rÕ   rÆ   r$   rÖ   r×   rD   r;   )r+   rD   r;   rÖ   r×   r   r   r   r]   ¥  s    z)_Test_sparse_distance_matrix.setup_methodNr^   r   r   r   r   r/  £  s   r/  c                  C   sŽ   d} d}d}t j d¡ t j | |¡}t j ||¡}t||ƒ}t|j| |fƒ t| ƒD ]2}t|ƒD ]$}tt	|| || ƒ|||f ƒ qbqVd S )NrX   é   rS   rT   )
r3   rY   rZ   r[   r   r   rw   rÌ   r   r   )r;   rD   rA   ÚxsÚysr�   r8   rØ   r   r   r   Útest_distance_matrixµ  s    
r3  c                  C   sZ   d} d}d}t j d¡ t j | |¡}t j ||¡}t||ƒ}t||dd�}t||ƒ d S )NrX   r0  rS   rT   r   )Ú	threshold)r3   rY   rZ   r[   r   r   )r;   rD   rA   r1  r2  r�   Zdslr   r   r   Útest_distance_matrix_loopingÃ  s    
r5  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~   r8   rœ   rØ   r   r   r   Úcheck_onetree_queryÏ  s    r9  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Û   rS   rM   rf   gü©ñÒMbP?r-   gñhãˆµøä>g�íµ ÷Æ°>)r3   rY   rZ   r[   r9  )r   rD   rA   rÍ   r�   r   r   r   Útest_onetree_queryÙ  s    



r:  c                 C   s$   | ddggƒ}t | d¡tƒ ƒ d S )Nr   r   r!   )r   r8  r6  )r   r   r   r   r   Útest_query_pairs_single_nodeë  s    r;  c                 C   sF  t j d¡ d}d}d}|d }t j ||¡}| |ƒ}tƒ }t|ƒD ]V}t|d |ƒD ]B}	||d d …f ||	d d …f  }
t  |
|
¡|krV| ||	f¡ qVqDt|ƒ}| 	|¡}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Û   r-   rM   r   r6  r%  r'  )r3   rY   rZ   r[   r6  rÌ   r+  r7  Úsortedr8  r   rw   r‹   )r   rD   rA   rÆ   Úr2rÍ   r�   Zbruter8   rØ   r(  Zl0r~   rÎ   ZarrrÏ   r   r   r   Útest_kdtree_query_pairsð  s4     


*r>  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 )Nr-   r   rf   rS   c                    s   g | ]}ˆ D ]}||f‘qqS r   r   )r  ÚxiÚyi©Zy_ranger   r   r    s       z(test_query_pairs_eps.<locals>.<listcomp>rM   )rÆ   r9   ç)\�Âõ(ð?©rÆ   )r3   ré   r  r8  r   )r   ÚspacingZx_rangeZxy_arrayr   Z	pairs_epsÚpairsr   rA  r   Útest_query_pairs_eps  s    
rF  c                 C   s–   t jdd…dd…f \}}tt| ¡ | ¡ ƒƒ}| |ƒ}ttddddgƒt| dd¡ƒƒ t j|t	d�}| |ƒ}ttddddgƒt| dd¡ƒƒ d S )	Nr   rS   é   é	   é   )r-   r   r   r¡   )
r3   ÚmgridrÅ   rE   Úravelr   r<  r™   Zasarrayrp   )r   r0   rü   rÍ   r   r   r   r   Útest_ball_point_ints  s    ÿÿrL  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)r  r   r   r   r   r  .  s     z+test_kdtree_comparisons.<locals>.<listcomp>rf   r•   )rÌ   r   r<  )Únodesr   r   r   Útest_kdtree_comparisons,  s    rO  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È   rS   rÂ   r{   r•   F)r!  )r   )r!  r   )r3   rY   rZ   r[   r2   r   )r   rD   rA   rÍ   rÓ   rÕ   ÚT3ZT4r   r   r   Útest_kdtree_build_modes2  s$    ÿ ÿÿ

rQ  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Û   rS   rÂ   r{   r•   )	Úpickler3   rY   rZ   r[   ÚdumpsÚloadsr2   r   ©r   rR  rD   rA   rÍ   rÓ   ÚtmprÕ   r   r   r   Útest_kdtree_pickleA  s    

rW  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Û   rS   r¬   r„   )r%   rÂ   r{   r•   )	rR  r3   rY   rZ   r¯   rS  rT  r2   r   rU  r   r   r   Útest_kdtree_pickle_boxsizeO  s    

rX  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È   rS   T)Z	copy_datarÂ   r{   r•   .)r3   rY   rZ   r[   Úcopyr2   r   )r   rD   rA   rÍ   r�   r�   rÓ   rÕ   r   r   r   Útest_kdtree_copy_data]  s    rZ  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 5 Q R X d S )Nr   rÈ   rS   rÂ   rË   )rA   rÊ   r•   r{   Ú	cpu_countc                   S   s   d S r   r   r   r   r   r   Ú<lambda>y  ó    z'test_ckdtree_parallel.<locals>.<lambda>zCannot determine ther…   r   rÉ   )r3   rY   rZ   r[   r2   r   ÚsetattrÚosr‡   r   ÚNotImplementedError)	r   ZmonkeypatchrD   rA   rÍ   r�   rÓ   rÕ   rP  r   r   r   Útest_ckdtree_parallell  s    

ra  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   rR   rS   c                    s¤   t t| tƒƒ | jdkrLt | jd kƒ t | jd kƒ t | jjd ˆ jkƒ nTˆ| jƒ ˆ| jƒ | jj	d d …| jf }| jj	d d …| jf }t | 
¡ | ¡ k ƒ d S )Nr•   r   )r   ro   r   Ú	split_dimÚlesserrõ   Úindicesrw   rV   Údata_pointsÚmaxÚmin)rD   r0   rü   ©r1   Úrecurse_treer   r   ri  ‰  s    


z'test_ckdtree_view.<locals>.recurse_tree)r3   rY   rZ   r[   r   r   r   Úsortrd  rÌ   r5   re  )rD   rA   rÍ   r   rh  r   Útest_ckdtree_view~  s    
rk  c                 C   s8  d}d}dddg}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éÈ   r-   r   rf   rT   r¬   rU   .)
r3   rY   rZ   r¯   r2   r   rg   r   rw   rK  )r   rD   r;   ZklistZkintr5   r1   r=   r>   Údd1Úii1r   r   r   Útest_kdtree_list_k   s.    


ro  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 ]š}|j|||d�\}}	|j|d ||d�\}
}t||
ƒ t|	|ƒ |j|d ||d�\}
}t||
ƒ t|	|ƒ t|||d|d�\}}t||ƒ t|	|ƒ qRd S )NéÐ  rf   rT   r¬   r   r„   r®   rU   r-   g      @©r$   )r%   r$   )	r3   rY   rZ   r¯   rF   r2   r   r   Úsimulate_periodic_box)r   rD   r;   rA   r5   r1   Úkdtree2r$   r=   r>   rm  rn  Údd2Úii2r   r   r   Útest_kdtree_boxÂ  s$    




rv  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|	|ƒ qPd S )Nrp  r-   rf   rT   r¬   r   r“   r®   rU   rq  )r3   rY   rZ   r¯   rF   r2   r   r   )r   rD   r;   rA   r5   r1   rs  r$   r=   r>   rm  rn  r   r   r   Útest_kdtree_box_0boxsizeÝ  s    
rw  c              	   C   sˆ   t  ddd¡ dd¡}|d d …df  d7  < t t¡� | |ddd� W 5 Q R X t t¡� | |ddd� W 5 Q R X | |dd	d� d S )
Nr   r-   rX   r•   r   r„   r®   )r“   r¨   )r¨   r“   )r3   r  Úreshaper‡   r   rˆ   ©r   r5   r   r   r   Útest_kdtree_box_upper_boundsð  s    rz  c                 C   s$   t  ddd¡}tt| |ddd� d S )Nr•   r   rX   r„   r®   )r3   r  Úassert_raisesrˆ   ry  r   r   r   Útest_kdtree_box_lower_boundsú  s    r|  c                 C   s8  g }g }t  d|jd  ¡}t  t  |dg|jd  ¡¡j}|d }|D ]T}	||	d |  }
| j|
||d�\}}| d|¡}| d|¡}| |¡ | |¡ qHt 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 )Nrf   r   r„   rq  r•   r/   )r>   Úi8)r=   Zf8r¡   r>   r=   )Úorder)r3   Úarangerw   rg   Zunravel_indexr�   r2   rx  ÚappendÚconcatenateÚemptyr   rj  )r1   r5   rA   r%   r$   r=   r>   r0   ÚnnrD   Úimagert  ru  r  r   r   r   rr  þ  s,     
þrr  ÚPyPyz Fails on PyPy CI runs. See #9507)Úreasonc                  C   s‚  zdd l } W n tk
r"   Y d S X 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 ]P}|  | j¡j}t|	ƒ}|j|
d	d
d�\}}|  | j¡j}||k�r |d7 }�q t|dk ƒ d S )Nr   )çš™™™™™©?r‡  r   rÂ   rX   g     ÀX@rÛ   rR   rS   r-   )rA   r$   )ÚresourceÚImportErrorr3   rJ  ÚsliceÚsinÚcosZ
empty_likerY   rµ   r­   ZflatZvstackZnonzeror�   Z	getrusageZRUSAGE_SELFZ	ru_maxrssrÌ   r   r2   r   )rˆ  ZdxZdyrü   r0   ÚzZz_copyZFILLVALÚmaskZigoodZibadZmem_user8   r   Z	num_leaksrž   ZiqueryZnew_mem_user   r   r   Útest_ckdtree_memuse  s8    ÿ
*


r�  c              
   C   sº  t  ddd¡ dd¡}| |dd�}t jt|ƒdd�}| |¡}t|dddddddgƒ tt|j|d d… ƒ t	d	ƒD ]¬}| 
|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||	ƒ qtt	t|ƒƒD ]†}| ¡ }
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   rS   r•   rU   Zf4r¡   r-   rX   )ÚweightsrR   )r3   r  rx  r£   r   Z_build_weightsr   r{  rˆ   rÌ   r  rY  )r   r5   Ztree1r�  Únwr8   Úc1Úc2Úc3Zc4Zw1r×   Ztree2r   r   r   Útest_kdtree_weightsB  sL    
ÿÿÿÿ

ÿ
  ÿr•  c                 C   sº   d}d}t j d¡ t jj||fd�}| |dd�}dddd	d
g}t  t|ƒ¡}| ||¡}|j||dd�}t|| ¡ ƒ t	t
 |¡t
 |¡ƒD ]&\}	}
| ||
¡}t||t|	ƒ ƒ qŽd S )Nrp  r-   rT   r¬   r   rU   r   r	  g{®Gáz”?r‡  F©Ú
cumulative)r3   rY   rZ   Únormalr  r   r  r   ZcumsumrE   Ú	itertoolsÚpermutationsr   rÅ   )r   rD   r;   r5   r1   Zr0Zi0Zn0Znncr8   rÆ   r   r   r   Ú&test_kdtree_count_neighbous_multiple_rp  s    
ÿr›  c                 C   s,  t j d¡ t j dd¡}t j 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 )NrT   rX   r-   r!   r   r{   rM   )rX   )rw   r¢   r   r)  r%  )rX   rX   Tr*  r$  r'  r8   rØ   r(  )Úalign)r   r•   r6  )r   r-   )r3   rY   rZ   Úrandr2   r™   r   rg  r‚  ÚobjectÚfillrÔ   r  r   r  rv   r   ZintpÚfloat64r¢   r8  r6  )r   ÚXÚYr   r'   r8   r�  Zmindrü   ÚotherZ_dtypeZ	res_dtyper   r   r   Útest_len0_arrays‚  sH    




r¤  c              	   C   sÂ   d}t ddƒD ]®}t ||f¡}d||d d …< tjddd�D ]|\}}| |||dd�}|jdksdt‚| tkrr|jn|jj	}t
t |jj¡t d	|d ¡ƒ t
t |jj¡t |d |¡ƒ q>qd S )
Ni   r   rG  r-   ©FT)Úrepeat)r   r!  rV   rf   r   )rÌ   r3   r£   r™  Úproductr­   ÚAssertionErrorr   r   Ú_noder   rj  rc  rd  r  rõ   )r   rD   r;   r5   ZbalancedÚcompactr1   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   rU   rM   Fr–  )r{  rˆ   r  )r   r1   r   r   r   Ú'test_kdtree_noncumulative_nondecreasingÇ  s      ÿr¬  c                 C   sÀ   t jdddgdddgdddgdddgdddgdddg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 )
Nr“   rB  r„   r   r¡   rS   rW   r@   r	  )r3   rg   r2   r   rF   )r   ZxyzÚckdtZdeqZ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	|ƒƒ qtd S )NrT   ©rR   rf   r¬   r   ç333333Ó?c                    s   g | ]\}}ˆ   ||¡‘qS r   ©r™   )r  ÚqiZdi©r   r   r   r  ó  s     z2test_query_ball_point_vector_r.<locals>.<listcomp>)
r3   rY   rZ   r˜  r¯   r   r™   rE   r   r<  )r   r5   r2   r'   ZrvectorZ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 )NrT   r¯  r¬   r°  T©Zreturn_lengthc                 S   s   g | ]}t |ƒ‘qS r   rÿ   )r  r�   r   r   r   r     s     z0test_query_ball_point_length.<locals>.<listcomp>Fc                    s   g | ]}t ˆ |ˆ ¡ƒ‘qS r   )r   r™   ©r  r²  ©r'   r   r   r   r    s     c                    s   g | ]}ˆj |ˆ d d�‘qS )Trµ  r±  r¶  r·  r   r   r    s     )r3   rY   rZ   r˜  r™   r   )r   r5   r2   ÚlengthÚlength2Zlength3Z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s„t‚|jd |jd ksœt‚| |ƒ}|j	||dd�}|j	||dd�}t
||ƒ | |d	¡\}	}
| |d	¡\}}t
|	|ƒ t
|
|ƒ d S )
NrT   r¯  r¬   rR   g{®Gáz¤?r•   Trµ  r   )r3   rY   rZ   r˜  r  Zascontiguousarrayr�   Ústridesr¨  r™   r   r2   )r   r5   Zd_contiguousZd_discontiguousZquery_contiguousZquery_discontiguousr   Zlength1r¹  Zd1Úi1Zd2Úi2r   r   r   Útest_discontiguous  s4    ÿÿ ÿ ÿ

r¾  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sZt‚| |d¡\}}	|	jdksxt‚|jdks†t‚t  	|¡ 
¡ s˜t‚| |d
dg¡}
t|
d
d
gƒ | |d¡}|jdksÐt‚d S )NrT   )r   rf   )rw   )r   rf   rÃ   r  r°  Trµ  r   r-   )r-   r-   r   rÄ   )r3   rY   rZ   r‚  r£   r™   r¨  r2   rw   Úisinfr6   r  r   r  )r   r   r!  Zempty_v3Zquery_v3Zquery_v2r   r¸  r=   r>   ÚNr  r   r   r   Útest_kdtree_empty_input#  s"    ÿrÁ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_Test_sorted_query_ball_pointc                 C   s.   t j d¡ t j dd¡| _|  | j¡| _d S )NrT   rR   r   )r3   rY   rZ   r[   r0   r   r­  r\   r   r   r   r]   A  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|ƒƒ q2d S )Nr„   T©Zreturn_sorted)r­  r™   r0   r   r<  )r+   Ú	idxs_listÚidxsr?  r   r   r   Útest_return_sorted_TrueF  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||ƒ qZd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™   )r  r?  r\   r   r   r  W  s     zI_Test_sorted_query_ball_point.test_return_sorted_None.<locals>.<listcomp>FrÃ  N)r­  r™   r0   r   r<  rE   )r+   rÄ  rÅ  Zidxs_list_singleZidxs_list_FalseZidxs0Zidxs1r   r\   r   Útest_return_sorted_NoneO  s    z5_Test_sorted_query_ball_point.test_return_sorted_NoneN)r   rO   rP   r]   rÆ  rÇ  r   r   r   r   rÂ  ?  s   	rÂ  c               	   C   s�   t j dd¡ t¡} tjtdd�� t| ƒ}W 5 Q R X t| j	ƒ}tjtdd�� | 
| ¡ W 5 Q R X tjtdd�� |j| dd� W 5 Q R X d S )NrX   r-   zcomplex datar…   r   rC  )r3   rY   r�  ÚviewÚcomplexr‡   r   Ú	TypeErrorr
   Úrealr2   r™   ©rÍ   Útr   r   r   Útest_kdtree_complex_data]  s    
rÎ  c                  C   sB  t j d¡ t j dd¡} t| ƒ}|j}t|tjƒs8t‚|j	| j
d ksLt‚|g}|�r>| d¡}t|tjƒr¨t|j	tƒs~t‚|j	t|jƒks’t‚t| |j |jjƒ qRt|tjƒs¸t‚t|jtƒsÈt‚d|j  krà|jk sæn t‚t|jtƒsöt‚t|j	tƒ�st‚|j	|jj	|jj	 k�s$t‚| |j¡ | |j¡ qRd S )NrT   rR   rS   r   r•   )r3   rY   rZ   r�  r
   r   ro   Z	innernoder¨  Úchildrenrw   ÚpopZleafnoder‹   r   Úidxr   r©  re  rb  r;   rñ   rp   rô   rõ   r€  )rÍ   rÍ  ÚrootrN  rD   r   r   r   Útest_kdtree_tree_accessm  s*    
rÓ  c                  C   sÆ   t j d¡ t j dd¡} t| ƒ}t|jtƒs2t‚|j	| j
d ksFt‚t|j	tƒsVt‚|j| j
d ksjt‚t|jtƒszt‚|jdksˆt‚t|jt j| dd�ƒ t|jt j| dd�ƒ |j| ksÂt‚d S )NrT   rR   rS   r   r   rX   r/   )r3   rY   rZ   r�  r
   ro   r;   r‹   r¨  rD   rw   rV   r   rò   r<   ró   Zaminr5   rÌ  r   r   r   Útest_kdtree_attributes‹  s    rÔ  Úkdtree_classc           
         s  t j d¡ t  ddd¡}t j d¡ d¡}t j d¡ d¡}t j d¡}t j 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 )NrT   r‡  r   é   )rû   rf   é-   )é   rf   rû   rØ  F)r—  r�  r•   r/   c                    s*   g | ]"\}}t  ˆ|ˆ k ˆ |k@  ¡‘qS r   )r3   r4   )r  Zprev_radiusZradius©rž   r�  r   r   r  ²  s   ÿz8test_kdtree_count_neighbors_weighted.<locals>.<listcomp>r   )r3   rY   rZ   r  rx  r  ZlinalgrŸ   rE   r™  Úchainr   )
rÕ  rÆ   ÚAÚBZwAZwBZkdAZkdBZnABÚexpectr   rÙ  r   Ú$test_kdtree_count_neighbors_weightedŸ  s     8ÿrÞ  c               
   C   sx   ddddddddd	d
g
} t | ƒ}t | t |tj¡g¡d d …d f }t|ƒ d¡}t|d |… ƒ d¡}||kstt‚d S )Nr   rÂ   iöÿÿÿrû   éüÿÿÿiðÿÿÿiúÿÿÿé   rf   iõÿÿÿr-   )r   r3   r�  r°   Únanr
   r8  r¨  )ÚvalsrD   r5   Zquery_with_nansZquery_without_nansr   r   r   Útest_kdtree_nan·  s    $rã  )hr_  Znumpy.testingr   r   r   r   r   r   r‡   r   r{  Úplatformr	   Únumpyr3   Zscipy.spatialr
   r   r   r   Zscipy.spatial._ckdtreer   r   r™  Zfixturer   r    r(   r)   rQ   r_   re   rk   rl   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  r/  r3  r5  r9  r:  r;  r>  rF  rL  rO  rQ  rW  rX  rZ  ra  rk  ro  rv  rw  rz  r|  rr  ÚmarkZskipifr�  r•  r›  r¤  r«  r¬  r®  r´  rº  r¾  ZparametrizerÁ  rÂ  rÎ  rÓ  rÔ  rÞ  rã  r   r   r   r   Ú<module>   sî    
H-/"	G
!""
ÿ
)..
ýÿ

