a
    ˆù»jsÆ  ã                   @   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„ 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–g d—¢¡d˜d™„ ƒZaeG dšd›„ d›ƒƒZbdœd�„ ZcdždŸ„ Zdd d¡„ ZeejT `d¢eeg¡d£d¤„ ƒZfd¥d¦„ Zgd§d¨„ ZhejT `d©eeg¡dªd«„ ƒZid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   úEE:\soccer\ml_env\Lib\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ƒ v 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    
"6þzConsistencyTests.test_m_nearestc           	      C   sÆ   | j }| j}| jj|| jj|d�\}}d}d}t||ƒD ]`\}}|tjkrLq8|d7 }t|d t 	|| j
|  d ¡ƒ t||| k d|d›d|d›�ƒ q8tt 	|  | j
|d¡|d | k ¡|ƒ d S )	N©ÚkÚdistance_upper_boundr.   r   r   r-   únear_d=Úgú should be less than )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_nearJ   s    
"$z!ConsistencyTests.test_points_nearc           	      C   s¼   | j }| j}| jj|| jjd|d�\}}d}d}t||ƒD ]X\}}|tjkrNq:|d7 }t||  	|| j
| d¡ƒ t||| k d|d›d|d›�ƒ q:tt |  	| j
|d¡|| k ¡|ƒ d S )Nr   ©rA   r$   rB   r.   r   rC   rD   rE   )r0   r'   r1   r2   rF   rG   r3   rH   r   r,   r5   r   r   r4   rI   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 ]Z\}}|tjkrPq<|d7 }t||  	|| j
| tj¡ƒ t||| k d|d›d|d›�ƒ q<tt |  	| j
|tj¡|| k ¡|ƒ d S )NrL   r.   r   r   rC   rD   rE   )r0   r'   r1   r2   rF   r3   rH   rG   r   r,   r5   r   r   r4   rI   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çš™™™™™¹?)r9   r   )r0   rA   r1   r2   r   r3   r6   )r+   r0   rA   r9   Zd_realZi_realr'   r8   r   r   r   Útest_approxt   s    zConsistencyTests.test_approxN)
r   Ú
__module__Ú__qualname__r,   r:   r?   rK   rM   rN   rP   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çš™™™™™É?é
   )rF   r;   r3   ÚrandomÚseedÚrandnr5   r   r1   r0   r'   rA   ©r+   r   r   r   Úsetup_method   s    z_Test_random.setup_methodN©r   rQ   rR   r_   r   r   r   r   rS   }   s   rS   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_farc                    s"   t ƒ  ¡  tj | j¡d | _d S )NrZ   )Úsuperr_   r3   r[   r]   r;   r0   r^   ©Ú	__class__r   r   r_   Œ   s    
z_Test_random_far.setup_method©r   rQ   rR   r_   Ú__classcell__r   r   rc   r   ra   Š   s   ra   c                   @   s$   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   rV   é   r!   rU   )r3   Úarrayr5   r   r1   rF   r;   r[   r\   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   rO   r   )rO   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 )Nrr   r-   rO   gÍÌÌÌÌÌì?r   r   rs   r^   r   r   r   Útest_nearest_two©   s    þz_Test_small.test_nearest_twoN)r   rQ   rR   r_   r:   rt   r   r   r   r   rg   ‘   s   rg   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_small_nonleafc                    s    t ƒ  ¡  | j| jdd�| _d S )Nr   rW   )rb   r_   r   r5   r1   r^   rc   r   r   r_   ±   s    
z _Test_small_nonleaf.setup_methodre   r   r   rc   r   ru   ¯   s   ru   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   sL   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡| _t| jƒ| _d S ©	Nrh   ri   rj   rk   rl   rm   rn   ro   )r3   rq   r5   r
   r1   r^   r   r   r   r_   ·   s    
ùz&Test_vectorization_KDTree.setup_methodc                 C   s>   | j  t g d¢¡¡\}}tt|tƒƒ tt |tj¡ƒ d S ©Nrh   )	r1   r2   r3   rq   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-   rU   rp   )r-   rU   ©r1   r2   r3   Úzerosr   Úshaper{   r   r   r   Útest_vectorized_queryÇ   s    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é   rh   ©rA   )
r1   rF   r2   r3   rq   r   r�   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 ©Nr„   r~   r…   r-   rU   ©
r1   rF   r2   r3   r€   r   r�   r   r6   r†   r‡   r   r   r   Ú(test_vectorized_query_multiple_neighborsÕ   s    .zBTest_vectorization_KDTree.test_vectorized_query_multiple_neighborsc                 C   sF   d}t jtdd��  | jj|d d� W d   ƒ n1 s80    Y  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   rQ   rR   r_   r|   r‚   rŠ   r�   r“   r   r   r   r   rv   ¶   s   		rv   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   sL   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡| _t| jƒ| _d S rw   )r3   rq   r5   r   r1   r^   r   r   r   r_   ä   s    
ùz'Test_vectorization_cKDTree.setup_methodc                 C   s4   | j  g d¢¡\}}tt|tƒƒ tt|tƒƒ d S rx   )r1   r2   r   ry   rz   Úintr{   r   r   r   r|   ï   s    z,Test_vectorization_cKDTree.test_single_queryc                 C   s:   | j  t d¡¡\}}tt |¡dƒ tt |¡dƒ d S r}   r   r{   r   r   r   r‚   ô   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 )NrV   rp   éè  )	r3   r[   r\   r]   ÚTr1   r2   rG   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g d¢|d�\}}tt |¡|fƒ tt |¡|fƒ tt t || d … ¡ ¡ƒ tt || d … | j jk¡ƒ d S rƒ   )	r1   rF   r2   r   r3   r�   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   rQ   rR   r_   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   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'   r�   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'   r�   r—   r£   r$   r9   r¤   ÚonesrF   Ú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   rQ   rR   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 )	NrT   rU   rV   r-   rW   ç       @r   rY   )r3   r[   r\   r]   r5   r   r—   r0   r$   r9   r'   ©r+   rF   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,   <  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'  rU   rV   ©Úsizer-   r   ©rX   r%   rO   r²   r   rY   )r3   r[   r\   Ú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_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¡slJ ‚| jj| jd | j| j| j	d�}d||< t  
|  | j| | j| j¡| jd| j	  k¡sÆJ ‚d S )Nr«   rŽ   r    F)r3   r­   r—   rF   r®   r£   r0   r'   r$   r9   r6   r,   r5   )r+   r¯   r¦   r   r   r   Útest_found_all_outsideR  s     &ÿ &ÿz1_Test_random_ball_periodic.test_found_all_outsideN)r   rQ   rR   r,   r_   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–   r-   é{   rT   r¶   r   rZ   )r3   r[   r\   Úrandintr5   r   r—   r0   r$   r9   r'   r³   r   r   r   r_   g  s    z/_Test_random_ball_largep_issue9890.setup_methodN)r   rQ   rR   r¥   r_   r   r   r   r   r½   a  s   r½   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_approxc                    s   t ƒ  ¡  d| _d S ©NrO   ©rb   r_   r9   r^   rc   r   r   r_   v  s    
z%_Test_random_ball_approx.setup_methodre   r   r   rc   r   rÀ   s  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^   rc   r   r   r_   ~  s    
z._Test_random_ball_approx_periodic.setup_methodre   r   r   rc   r   rÃ   {  s   rÃ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_Test_random_ball_farc                    s   t ƒ  ¡  d| _d S ©Nr²   ©rb   r_   r'   r^   rc   r   r   r_   †  s    
z"_Test_random_ball_far.setup_methodre   r   r   rc   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^   rc   r   r   r_   �  s    
z+_Test_random_ball_far_periodic.setup_methodre   r   r   rc   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   )rb   r_   r$   r^   rc   r   r   r_   •  s    
z!_Test_random_ball_l1.setup_methodre   r   r   rc   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   ©rb   r_   r3   rH   r$   r^   rc   r   r   r_   �  s    
z#_Test_random_ball_linf.setup_methodre   r   r   rc   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é   é   rV   r-   rp   r   ©r-   rp   ©r   r   )
r3   r[   r\   r]   r£   r   r�   r   ry   Úlist)r   rF   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   r[   r\   r]   r£   Úranger   )	r   rF   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}|  | j| | j	| | j¡| jd| j  ks0J ‚q0q$d S )Nr    rŽ   )
ÚT1Úquery_ball_treeÚT2r'   r$   r9   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 |  | j| | j| | j¡| jd| j  k¡s$J ‚q$d S )Nr    r«   FrŽ   )rÝ   rÞ   rß   r'   r$   r9   r¤   r3   r­   rF   r®   r6   r,   rá   rà   )r+   rÐ   r8   r¦   r¯   r   r   r   r°   Ì  s    ÿz$two_trees_consistency.test_found_allN)r   rQ   rR   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   rU   rV   r-   rW   r²   r   rY   )r3   r[   r\   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å   rU   rV   r¶   r-   rŽ   r¸   r²   r   rY   )r3   r[   r\   r¹   rà   r   rÝ   rá   rß   r$   r9   r'   r³   r   r   r   r_   ê  s    z,_Test_two_random_trees_periodic.setup_methodN)r   rQ   rR   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^   rc   r   r   r_   ú  s    
z'_Test_two_random_trees_far.setup_methodre   r   r   rc   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^   rc   r   r   r_     s    
z0_Test_two_random_trees_far_periodic.setup_methodre   r   r   rc   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^   rc   r   r   r_   
  s    
z(_Test_two_random_trees_linf.setup_methodre   r   r   rc   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^   rc   r   r   r_     s    
z1_Test_two_random_trees_linf_periodic.setup_methodre   r   r   rc   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 ©Nr   r   )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   rO   r   )rî   Úsplitr   ÚmaxesÚmins)r+   ÚlessÚgreaterr   r   r   Ú
test_split/  s
    zTest_rectangle.test_splitN)r   rQ   rR   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_l27  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_l1;  s    r  c                   C   s    t tddgddgtjƒdƒ d S rí   )r   r   r3   rH   r   r   r   r   Útest_distance_linf?  s    r  c                  C   sB   t j d¡ t j ddd¡} t j ddd¡}tt| |ƒjdƒ d S )NrV   rZ   r   rp   é   )rZ   r  )r3   r[   r\   r]   r   r   r�   )r0   Úyr   r   r   Útest_distance_vectorizationC  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 )NrY   c                 S   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ß   r3   r4   rÞ   ©r+   rÐ   r   r   r   Útest_one_radiusK  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  S  r  zAcount_neighbors_consistency.test_large_radius.<locals>.<listcomp>r  r  r   r   r   Útest_large_radiusP  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„?rZ   rp   r   )r3   ÚexpÚlinspaceÚlogrÝ   r  rß   r   r6   r&   rG   r   )r+   ÚrsÚresultsrÐ   Úresultr   r   r   Útest_multiple_radiusU  s
     z0count_neighbors_consistency.test_multiple_radiusN)r   rQ   rR   r  r  r  r   r   r   r   r	  J  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-   rV   rW   )r3   r[   r\   r   r]   rÝ   rß   r³   r   r   r   r_   ^  s
    z"_Test_count_neighbors.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	d
„ Zdd„ ZdS )Ú"sparse_distance_matrix_consistencyc                 C   s   t |||ƒS r   r   r*   r   r   r   r,   h  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||| v ƒ 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_neighborsk  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_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   r  r   )rÝ   r"  rß   rÐ   r   r5   r   Útoarray)r+   Z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   é   r-   r«   F©Úbalanced_treeÚcompact_nodesrp   r  r   )r3   r[   r\   rq   r]   r•   r   r"  r'  r   r—   )r+   Ú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 ]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   r€   rF   rÖ   rà   rá   Údotrô   rÐ   rÝ   r"  rß   Úkeysr   r�   r'  )r+   Úrefr8   râ   r4  r¨   rÐ   rA   r   r   r   Útest_ckdtree_return_typesŒ  s<    $
ÿÿÿz<sparse_distance_matrix_consistency.test_ckdtree_return_typesN)	r   rQ   rR   r,   r%  r&  r)  r/  r:  r   r   r   r   r  f  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å   rU   rV   r-   rW   r!   )r3   r[   r\   r]   r   rÝ   rß   rÐ   r$   rà   rá   rF   r;   )r+   rF   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 )NrZ   é   rU   rV   )
r3   r[   r\   r]   r   r   r�   rÖ   r   r   )r;   rF   rA   ÚxsÚysr™   r8   râ   r   r   r   Útest_distance_matrixÁ  s    
r?  c                  C   sZ   d} d}d}t j d¡ t j | |¡}t j ||¡}t||ƒ}t||dd�}t||ƒ d S )NrZ   r<  rU   rV   r   )Ú	threshold)r3   r[   r\   r]   r   r   )r;   rF   rA   r=  r>  r™   Zdslr   r   r   Útest_distance_matrix_loopingÏ  s    
rA  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    rE  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å   rU   rO   rp   gü©ñÒMbP?r-   gñhãˆµøä>g�íµ ÷Æ°>)r3   r[   r\   r]   rE  )r   rF   rA   r×   r—   r   r   r   Útest_onetree_queryå  s    



rF  c                 C   s$   | ddggƒ}t | d¡tƒ ƒ d S )Nr   r   r!   )r   rD  rB  )r   r   r   r   r   Útest_query_pairs_single_node÷  s    rG  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-   rO   r   rB  r1  r3  )r3   r[   r\   r]   rB  rÖ   r7  rC  ÚsortedrD  r   r�   r•   )r   rF   rA   rÐ   Úr2r×   r—   Zbruter8   râ   r4  Zl0rˆ   rØ   ÚarrrÙ   r   r   r   Útest_kdtree_query_pairsü  s4     


*rK  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   rp   rU   c                    s   g | ]}ˆ D ]}||f‘qqS r   r   )r  ÚxiÚyi©Zy_ranger   r   r  "  r  z(test_query_pairs_eps.<locals>.<listcomp>rO   )rÐ   r9   ç)\�Âõ(ð?©rÐ   )r3   rô   r  rD  r   )r   ÚspacingZx_rangeZxy_arrayr   Z	pairs_epsÚpairsr   rN  r   Útest_query_pairs_eps  s    
rS  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   rU   )rU   é   é	   é   )r-   r   r   r«   )
r3   ÚmgridrÏ   rG   Úravelr   rH  r£   Úasarrayrz   )r   r0   r  r×   r   r   r   r   Útest_ball_point_ints+  s    ÿÿrZ  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  :  r  z+test_kdtree_comparisons.<locals>.<listcomp>rp   rŸ   )rÖ   r   rH  )Ú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Ò   rU   rÌ   r…   rŸ   F)r-  )r,  )r-  r,  )r3   r[   r\   r]   r2   r   )r   rF   rA   r×   rÝ   rß   ÚT3Z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å   rU   rÌ   r…   rŸ   )	Úpickler3   r[   r\   r]   ÚdumpsÚloadsr2   r   ©r   ra  rF   rA   r×   rÝ   Útmprß   r   r   r   Útest_kdtree_pickleM  s    

rf  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å   rU   r¶   rŽ   )r%   rÌ   r…   rŸ   )	ra  r3   r[   r\   r¹   rb  rc  r2   r   rd  r   r   r   Útest_kdtree_pickle_boxsize[  s    

rg  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Ò   rU   T)Z	copy_datarÌ   r…   rŸ   .)r3   r[   r\   r]   Úcopyr2   r   )r   rF   rA   r×   r—   rš   rÝ   rß   r   r   r   Útest_kdtree_copy_datai  s    ri  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   ƒ n1 s¾0    Y  d S )Nr   rÒ   rU   rÌ   rÕ   )rA   rÔ   rŸ   r…   Ú	cpu_countc                   S   s   d S r   r   r   r   r   r   Ú<lambda>…  r  z'test_ckdtree_parallel.<locals>.<lambda>zCannot determine ther�   r   rÓ   )r3   r[   r\   r]   r2   r   ÚsetattrÚosr‘   r   ÚNotImplementedError)	r   ZmonkeypatchrF   rA   r×   r—   rÝ   rß   r_  r   r   r   Útest_ckdtree_parallelx  s    

ro  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   rT   rU   c                    s¤   t t| tƒƒ | jdkrLt | jd u ƒ t | jd u ƒ 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   ry   r   Ú	split_dimÚlesserr   Úindicesr�   rX   Údata_pointsÚmaxÚmin)rF   r0   r  ©r1   Úrecurse_treer   r   rw  •  s    


z'test_ckdtree_view.<locals>.recurse_tree)r3   r[   r\   r]   r   r   r   Úsortrr  rÖ   r5   rs  )rF   rA   r×   r   rv  r   Útest_ckdtree_viewŠ  s    
ry  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éÈ   r-   )r   r-   rp   rp   rV   r¶   r   rW   .)
r3   r[   r\   r¹   r2   r   rq   r  r�   rX  )r   rF   r;   ZklistZkintr5   r1   r=   r>   Údd1Úii1r   r   r   Útest_kdtree_list_k¬  s.    

r}  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éÐ  rp   rV   r¶   r   rŽ   r¸   rW   r-   g      @©r$   )r%   r$   )	r3   r[   r\   r¹   rH   r2   r   r   Úsimulate_periodic_box)r   rF   r;   rA   r5   r1   Úkdtree2r$   r=   r>   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|	|ƒ qPd S )Nr~  r-   rp   rV   r¶   r   r�   r¸   rW   r  )r3   r[   r\   r¹   rH   r2   r   r   )r   rF   r;   rA   r5   r1   r�  r$   r=   r>   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\0    Y  t t¡� | |ddd� W d   ƒ n1 s”0    Y  | |dd	d� d S )
Nr   r-   rZ   rŸ   r   rŽ   r¸   )r�   r²   )r²   r�   )r3   r  Úreshaper‘   r   r’   ©r   r5   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   rZ   rŽ   r¸   )r3   r  Úassert_raisesr’   r‡  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 )Nrp   r   rŽ   r  rŸ   r/   )r>   Úi8)r=   Zf8r«   r>   r=   )Úorder)r3   Úaranger�   rq   Zunravel_indexr—   r2   r†  ÚappendÚconcatenateÚemptyr  rx  )r1   r5   rA   r%   r$   r=   r>   r0   ÚnnrF   Úimager‚  rƒ  r  r   r   r   r€  
  s,     
þr€  ÚPyPyz Fails on PyPy CI runs. See #9507)Úreasonc                  C   s€  zdd l } W n ty    Y d S 0 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Ì   rZ   g     ÀX@rå   rT   rU   r-   )rA   r$   )ÚresourceÚImportErrorr3   rW  ÚsliceÚsinÚcosZ
empty_liker[   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|g d¢ƒ 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||	ƒ qjt	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   rU   rŸ   rW   Zf4r«   )rU   r-   r   r   r-   r   r   rZ   )ÚweightsrT   )r3   r  r†  r­   r  Z_build_weightsr   r‰  r’   rÖ   r  rh  )r   r5   Ztree1rž  Únwr8   Úc1Úc2Úc3Zc4Zw1rá   Ztree2r   r   r   Útest_kdtree_weightsN  sH    
ÿÿÿÿ

ÿ
ÿ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|	ƒ ƒ qˆd S )
Nr~  r-   rV   r¶   r   rW   )r   r  r  g{®Gáz”?r•  F©Ú
cumulative)r3   r[   r\   Únormalr�  r  r  r   ZcumsumrG   Ú	itertoolsÚpermutationsr   rÏ   )r   rF   r;   r5   r1   Zr0Zi0Zn0Znncr8   rÐ   r   r   r   Ú&test_kdtree_count_neighbous_multiple_r|  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 )NrV   rZ   r-   r!   r   r…   rO   )rZ   )r�   r¬   r   r5  r1  )rZ   rZ   Tr6  r0  r3  r8   râ   r4  )Úalign)r   rŸ   rB  )r   r-   )r3   r[   r\   Úrandr2   r£   r   ru  r�  ÚobjectÚfillrÞ   r  r   r"  r€   r   ZintpÚfloat64r¬   rD  rB  )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sdJ ‚| tu rr|jn|jj}t	t 
|jj¡t d	|d ¡ƒ t	t 
|jj¡t |d |¡ƒ q>qd S )
Ni   r   rT  r-   ©FT)Úrepeat)r,  r-  rX   rp   r   )rÖ   r3   r­   r§  Úproductr·   r   r   Ú_noder   rx  rq  rr  r�  r   )r   rF   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   rW   rO   Fr¤  )r‰  r’   r  )r   r1   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�   )rO  r�   r�   )r�   rŽ   r�   )r�   rO  r�   )rŽ   r�   r�   )rŽ   rŽ   r�   r®  r«   rU   rY   r@   r�   r  )r3   rq   r2   r   rH   )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 )NrV   ©rT   rp   r¶   r   ç333333Ó?c                    s   g | ]\}}ˆ   ||¡‘qS r   ©r£   )r  ÚqiZdi©r   r   r   r  ÿ  r  z2test_query_ball_point_vector_r.<locals>.<listcomp>)
r3   r[   r\   r¦  r¹   r  r£   rG   r   rH  )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 )NrV   r¼  r¶   r½  T©Zreturn_lengthc                 S   s   g | ]}t |ƒ‘qS r   r
  )r  r§   r   r   r   r    r  z0test_query_ball_point_length.<locals>.<listcomp>Fc                    s   g | ]}t ˆ |ˆ ¡ƒ‘qS r   )r  r£   ©r  r¿  ©r'   r   r   r   r    r  c                    s   g | ]}ˆj |ˆ d d�‘qS )TrÂ  r¾  rÃ  rÄ  r   r   r    r  )r3   r[   r\   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„J ‚|jd |jd ksœJ ‚| |ƒ}|j||dd�}|j||dd�}t	||ƒ | 
|d	¡\}	}
| 
|d	¡\}}t	|	|ƒ t	|
|ƒ d S )
NrV   r¼  r¶   rT   g{®Gáz¤?rŸ   TrÂ  r   )r3   r[   r\   r¦  r�  Zascontiguousarrayr—   Ústridesr£   r   r2   )r   r5   Zd_contiguousZd_discontiguousZquery_contiguousZquery_discontiguousr   Zlength1rÆ  Zd1Úi1Zd2Úi2r   r   r   Útest_discontiguous  s0    ÿÿÿÿ

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sZJ ‚| |d¡\}}	|	jdksxJ ‚|jdks†J ‚t  |¡ 	¡ s˜J ‚| 
|d
dg¡}
t|
d
d
gƒ | |d¡}|jdksÐJ ‚d S )NrV   )r   rp   )r�   )r   rp   rÍ   r+  r½  TrÂ  r   r-   )r-   r-   r   rÎ   )r3   r[   r\   r�  r­   r£   r2   r�   Ú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 )NrV   rT   r   )r3   r[   r\   r]   r0   r   rº  r^   r   r   r   r_   M  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   rH  )r+   Ú	idxs_listÚidxsrL  r   r   r   Útest_return_sorted_TrueR  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  rL  r^   r   r   r  c  r  zI_Test_sorted_query_ball_point.test_return_sorted_None.<locals>.<listcomp>FrÐ  N)rº  r£   r0   r   rH  rG   )r+   rÑ  rÒ  Zidxs_list_singleZidxs_list_FalseZidxs0Zidxs1r   r^   r   Útest_return_sorted_None[  s    z5_Test_sorted_query_ball_point.test_return_sorted_NoneN)r   rQ   rR   r_   rÓ  rÔ  r   r   r   r   rÏ  K  s   	rÏ  c                  C   sÌ   t j dd¡ t¡} tjtdd�� t| ƒ}W d   ƒ n1 s@0    Y  t| j	ƒ}tjtdd�� | 
| ¡ W d   ƒ n1 s‚0    Y  tjtdd�� |j| dd� W d   ƒ n1 s¾0    Y  d S )NrZ   r-   zcomplex datar�   r   rP  )r3   r[   r«  ÚviewÚcomplexr‘   r   Ú	TypeErrorr
   Úrealr2   r£   ©r×   Útr   r   r   Útest_kdtree_complex_datai  s    &
(rÛ  c                  C   sB  t j d¡ t j dd¡} t| ƒ}|j}t|tjƒs8J ‚|j| j	d ksLJ ‚|g}|�r>| 
d¡}t|tjƒr¨t|jtƒs~J ‚|jt|jƒks’J ‚t| |j |jjƒ qRt|tjƒs¸J ‚t|jtƒsÈJ ‚d|j  krà|jk sæn J ‚t|jtƒsöJ ‚t|jtƒ�sJ ‚|j|jj|jj k�s$J ‚| |j¡ | |j¡ qRd S )NrV   rT   rU   r   rŸ   )r3   r[   r\   r«  r
   r   ry   Z	innernodeÚchildrenr�   ÚpopZleafnoder•   r  Úidxr   r¶  rs  rp  r;   rü   rz   rÿ   r   rŽ  )r×   rÚ  Úrootr]  rF   r   r   r   Útest_kdtree_tree_accessy  s*    
rà  c                  C   sÆ   t j d¡ t j dd¡} t| ƒ}t|jtƒs2J ‚|j| j	d ksFJ ‚t|jtƒsVJ ‚|j| j	d ksjJ ‚t|j
tƒszJ ‚|j
dksˆJ ‚t|jt j| dd�ƒ t|jt j| dd�ƒ |j| u sÂJ ‚d S )NrV   rT   rU   r   r   rZ   r/   )r3   r[   r\   r«  r
   ry   r;   r•   rF   r�   rX   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 )NrV   r•  r   é   )r  rp   é-   )é   rp   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   r[   r\   r�  r†  r  Zlinalgr©   rG   r§  Úchainr   )
râ  rÐ   ÚAÚBZwAZwBZkdAZkdBZnABÚexpectr   ræ  r   Ú$test_kdtree_count_neighbors_weighted«  s     8ÿrë  c                  C   sn   g d¢} t | ƒ}t | t |tj¡g¡d d …d f }tjtdd�� t|ƒ W d   ƒ n1 s`0    Y  d S )N)
r   rÌ   iöÿÿÿr  éüÿÿÿiðÿÿÿiúÿÿÿé   rp   iõÿÿÿúmust be finiter�   )	r  r3   r�  rº   Únanr‘   r   r’   r
   )ÚvalsrF   r5   r   r   r   Útest_kdtree_nanÃ  s
    $rñ  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 sj0    Y  tjtdd�� | 
|d¡ W d   ƒ n1 s¤0    Y  t j|dd d …f< tjtdd�� t|ddd� W d   ƒ n1 sò0    Y  tjtdd�� t|ddd� W d   ƒ n1 �s00    Y  tjtdd�� t|ddd� W d   ƒ n1 �sn0    Y  tjtdd�� t|ddd� W d   ƒ n1 �s¬0    Y  d S )Ni90  r¼  r�   rO   )r·   ÚlowÚhighFr+  c                 S   s   g | ]
}t j‘qS r   )r3   rï  r\  r   r   r   r  Ï  r  z2test_nonfinite_inputs_gh_18223.<locals>.<listcomp>rp   rî  r�   r   r   T)r3   r[   Zdefault_rngr¹   r
   rÖ   r‘   r   r’   r2   r£   rï  )ÚrngÚcoordsrÚ  Z	bad_coordr   r   r   Útest_nonfinite_inputs_gh_18223Ë  s"    (*,..rö  Ú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                   @   s   e Zd Zdd„ Zdd„ ZdS )ztest_gh_18800.<locals>.ArrLikec                 S   s   t  |¡ | ¡}d |_|S r   )r3   rY  rÕ  r6   )ÚclsZ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 )Nr6   )Úgetattrr6   )r+   rù  r   r   r   Ú__array_finalize__ï  s    z1test_gh_18800.<locals>.ArrLike.__array_finalize__N)r   rQ   rR   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@rZ   r   rz  )r3   r3  rq   r2   r£   )r÷  rý  r×   rJ  Zarr_liker   r   r   r   Útest_gh_18800á  s    ý

rþ  )jrm  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)   rS   ra   rg   ru   rv   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;  r?  rA  rE  rF  rG  rK  rS  rZ  r^  r`  rf  rg  ri  ro  ry  r}  r„  r…  rˆ  rŠ  r€  ÚmarkZskipifr�  r£  r©  r²  r¸  r¹  r»  rÁ  rÇ  rË  ZparametrizerÎ  rÏ  rÛ  rà  rá  rë  rñ  rö  rþ  r   r   r   r   Ú<module>   sì    
K-/& 	I
!""
ÿ
)..
ÿ

