Ë
    âQ(h¢À  ã                   óÈ  — 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j0                  eeg¬«      d	„ «       Zd
„ Zd„ Z G d„ d«      Ze G d„ de«      «       Ze G d„ de«      «       Ze G d„ de«      «       Ze G d„ de«      «       Z  G d„ d«      Z! G d„ d«      Z" G d„ d«      Z#e G d„ de#«      «       Z$e G d„ de#«      «       Z%e G d „ d!e#«      «       Z&e G d"„ d#e$«      «       Z'e G d$„ d%e$«      «       Z(e G d&„ d'e$«      «       Z)e G d(„ d)e%«      «       Z*e G d*„ d+e$«      «       Z+e G d,„ d-e$«      «       Z,d.„ Z-d/„ Z. G d0„ d1«      Z/e G d2„ d3e/«      «       Z0e G d4„ d5e/«      «       Z1e G d6„ d7e0«      «       Z2e G d8„ d9e1«      «       Z3e G d:„ d;e0«      «       Z4e G d<„ d=e1«      «       Z5 G d>„ d?«      Z6d@„ Z7dA„ Z8dB„ Z9dC„ Z: G dD„ dE«      Z;e G dF„ dGe;«      «       Z< G dH„ dI«      Z=e G dJ„ dKe=«      «       Z>dL„ Z?dM„ Z@dN„ ZAdO„ ZBdP„ ZCdQ„ ZDdR„ ZEdS„ ZFdT„ ZGdU„ ZHdV„ ZIdW„ ZJdX„ ZKdY„ ZLdZ„ ZMd[„ ZNejž                  j¡                  d\«      d]„ «       ZQd^„ ZRd_„ ZSd`„ ZTda„ ZUejž                  j­                   e«       dbk(  dc¬d«      de„ «       ZWdf„ ZXejž                  j¡                  d\«      dg„ «       ZYdh„ ZZdi„ Z[dj„ Z\dk„ Z]dl„ Z^dm„ Z_dn„ Z`ejž                  jÃ                  dog dp¢«      dq„ «       Zbe G dr„ ds«      «       Zcdt„ Zddu„ Zedv„ Zfejž                  jÃ                  dweeg«      dx„ «       Zgdy„ Zhdz„ Ziejž                  jÃ                  d{eeg«      d|„ «       Zjy)}é    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                 ó   — | j                   S ©N)Úparam)Úrequests    ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/spatial/tests/test_kdtree.pyÚkdtree_typer      s   € à�=‰=Ðó    c                 ó   — | j                   j                  d«      st        d«      ‚t        t        fD ]X  }| j                   dd dz   |j                   z   }|t        «       v rt        d|z   «      ‚t        || fd|i«      }|t        «       |<   ŒZ | S )z‹Class decorator to create test cases for KDTree and cKDTree

    Tests use the class variable ``kdtree_type`` as the tree constructor.
    Ú_Testz)Expected a class name starting with _Testé   NÚ_zDuplicated test name: r   )Ú__name__Ú
startswithÚRuntimeErrorr   r   ÚglobalsÚtype)ÚklsÚtreeÚ	test_nameÚ	test_cases       r   Ú
KDTreeTestr'      s™   € ð
 �<‰<×"Ñ" 7Ô+ÜÐFÓGÐGäœÐ!ò )ˆØ—L‘L  Ð$ sÑ*¨T¯]©]Ñ:ˆ	àœ›	Ñ!ÜÐ7¸)ÑCÓDÐDô ˜ S F¨]¸DÐ,AÓBˆ	Ø(Œ‹	�)Òð)ð €Jr   c                 óv   — | |z
  }||d|z  kD  xx   |z  cc<   ||d|z  k  xx   |z  cc<   t        |d|«      }|S )Nç      à?g      à¿r   r   )ÚaÚbÚpÚboxsizeÚdiffÚds         r   Údistance_boxr0   +   sP   € Øˆq‰5€DØˆ��g‘Ñ	Ó 'Ñ)ÓØˆ��w‘Ñ	Ó 7Ñ*ÓÜ˜4  AÓ&€AØ€Hr   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚConsistencyTestsc                 ó   — t        |||«      S r   r   ©Úselfr*   r+   r,   s       r   ÚdistancezConsistencyTests.distance3   ó   € Ü! ! Q¨Ó*Ð*r   c                 óŠ  — | j                   }| j                  j                  |d«      \  }}t        |dz  t	        j
                  || j                  |   z
  dz  «      «       d}t        t	        j                  t	        j
                  | j                  |t        j                  d d …f   z
  dz  d¬«      |dz  |z
  kD  «      «       y )Nr   é   ç:Œ0âŽyE>©Úaxis)
ÚxÚkdtreeÚqueryr   ÚnpÚsumÚdatar   ÚallÚnewaxis)r5   r=   r/   ÚiÚepss        r   Útest_nearestzConsistencyTests.test_nearest6   s–   € Ø�F‰FˆØ�{‰{× Ñ   AÓ&‰ˆˆ1Ü˜A˜q™D¤"§&¡&¨!¨D¯I©I°a©L©.¸1Ñ)<Ó"=Ô>ØˆÜ”—‘”r—v‘v˜tŸy™y¨¬2¯:©:²q¨=Ñ)9Ñ9¸AÑ=ÀAÔFÈÈAÉÈcÉÑQÓRÕSr   c                 óþ  — | j                   }| j                  }| j                  j                  ||«      \  }}t	        j
                  |«      }|t	        j                  |«         }t        |dz  t	        j                  || j                  |   z
  dz  «      «       d}t        t	        j                  t	        j                  | j                  |t        j                  d d …f   z
  dz  d¬«      |dz  |z   k  «      |«       y )Nr9   r:   r   r;   )r=   Úmr>   r?   r@   ÚamaxÚargmaxr   rA   rB   r   rD   )r5   r=   rI   ÚddÚiir/   rE   rF   s           r   Útest_m_nearestzConsistencyTests.test_m_nearest=   sÄ   € Ø�F‰FˆØ�F‰FˆØ—‘×"Ñ" 1 aÓ(‰ˆˆBÜ�G‰G�B‹KˆØŒr�y‰y˜‹}ÑˆÜ˜A˜q™D¤"§&¡&¨!¨D¯I©I°a©L©.¸1Ñ)<Ó"=Ô>ØˆÜÜ�F‰F”2—6‘6˜4Ÿ9™9 Q¤r§z¡z²1 }Ñ%5Ñ5¸Ñ9ÀÔBÀQÈÁTÈ#ÁXÑMÓNØõ	
r   c           	      ó$  — | j                   }| j                  }| j                  j                  || j                  j                  |¬«      \  }}d}d}t        ||«      D ]m  \  }}|t        j                  k(  rŒ|dz  }t        |dz  t        j                  || j                  |   z
  dz  «      «       t        |||z   k  d|d›d|d›�«       Œo t        t        j                  | j                  | j                  |d«      |dz  |z   k  «      |«       y )	N©ÚkÚdistance_upper_boundr:   r   r   r9   únear_d=Úgú should be less than )r=   r/   r>   r?   ÚnÚzipr@   Úinfr   rA   rB   r   r   r6   ©	r5   r=   r/   rL   rM   rF   ÚhitsÚnear_dÚnear_is	            r   Útest_points_nearz!ConsistencyTests.test_points_nearJ   sù   € Ø�F‰FˆØ�F‰FˆØ—‘×"Ñ" 1¨¯©¯©ÈAÐ"ÓN‰ˆˆBØˆØˆÜ! " b›kò 	T‰NˆF�FØœŸ™ÒØØ�A‰IˆDÜ ¨¡	¬2¯6©6°1°T·Y±Y¸vÑ5FÑ3FÈÑ2JÓ+KÔLÜ�F˜Q˜s™U‘N g¨f°Q¨ZÐ7LÈQÈqÈEÐ$RÕSð	Tô 	”R—V‘V˜DŸM™M¨$¯)©)°Q¸Ó:¸QÀ¹TÀ#¹XÑEÓFÈÕMr   c           	      ó
  — | j                   }| j                  }| j                  j                  || j                  j                  d|¬«      \  }}d}d}t        ||«      D ]b  \  }}|t        j                  k(  rŒ|dz  }t        || j                  || j                  |   d«      «       t        |||z   k  d|d›d|d›�«       Œd t        t        j                  | j                  | j                  |d«      ||z   k  «      |«       y )Nr   ©rQ   r,   rR   r:   r   rS   rT   rU   )r=   r/   r>   r?   rV   rW   r@   rX   r   r6   rB   r   r   rA   rY   s	            r   Útest_points_near_l1z$ConsistencyTests.test_points_near_l1X   sî   € Ø�F‰FˆØ�F‰FˆØ—‘×"Ñ" 1¨¯©¯©¸ÐQRÐ"ÓS‰ˆˆBØˆØˆÜ! " b›kò 	T‰NˆF�FØœŸ™ÒØØ�A‰IˆDÜ ¨¯©°a¸¿¹À6Ñ9JÈAÓ(NÔOÜ�F˜Q˜s™U‘N g¨f°Q¨ZÐ7LÈQÈqÈEÐ$RÕSð	Tô 	”R—V‘V˜DŸM™M¨$¯)©)°Q¸Ó:¸Q¸s¹UÑBÓCÀTÕJr   c           	      ó^  — | j                   }| j                  }| j                  j                  || j                  j                  t
        j                  |¬«      \  }}d}d}t        ||«      D ]p  \  }}|t
        j                  k(  rŒ|dz  }t        || j                  || j                  |   t
        j                  «      «       t        |||z   k  d|d›d|d›�«       Œr t        t        j                  | j                  | j                  |t
        j                  «      ||z   k  «      |«       y )Nr_   r:   r   r   rS   rT   rU   )r=   r/   r>   r?   rV   r@   rX   rW   r   r6   rB   r   r   rA   rY   s	            r   Útest_points_near_linfz&ConsistencyTests.test_points_near_linff   sú   € Ø�F‰FˆØ�F‰FˆØ—‘×"Ñ" 1¨¯©¯©¼¿¹ÐVWÐ"ÓX‰ˆˆBØˆØˆÜ! " b›kò 	T‰NˆF�FØœŸ™ÒØØ�A‰IˆDÜ ¨¯©°a¸¿¹À6Ñ9JÌBÏFÉFÓ(SÔTÜ�F˜Q˜s™U‘N g¨f°Q¨ZÐ7LÈQÈqÈEÐ$RÕSð	Tô 	”R—V‘V˜DŸM™M¨$¯)©)°Q¼¿¹Ó?À!ÀCÁ%ÑGÓHÈ$ÕOr   c                 ó  — | j                   }| j                  }d}| j                  j                  ||«      \  }}| j                  j                  |||¬«      \  }}t	        t        j                  ||d|z   z  k  «      «       y )Nçš™™™™™¹?)rF   r   )r=   rQ   r>   r?   r   r@   rC   )r5   r=   rQ   rF   Úd_realÚi_realr/   rE   s           r   Útest_approxzConsistencyTests.test_approxt   sp   € Ø�F‰FˆØ�F‰FˆØˆØŸ™×*Ñ*¨1¨aÓ0‰ˆ�Ø�{‰{× Ñ   A¨3Ð Ó/‰ˆˆ1Ü”—‘�q˜F A c¡E™NÑ*Ó+Õ,r   N)
r   Ú
__module__Ú__qualname__r6   rG   rN   r]   r`   rb   rg   © r   r   r2   r2   2   s)   „ ò+òTò
òNòKòPó-r   r2   c                   ó   — e Zd Zd„ Zy)Ú_Test_randomc                 óŒ  — d| _         d| _        t        j                  j	                  d«       t        j                  j                  | j                   | j                  «      | _        | j                  | j                  d¬«      | _        t        j                  j                  | j                  «      | _	        d| _
        d| _        y )Néd   é   éÒ  r9   ©Úleafsizeçš™™™™™É?é
   )rV   rI   r@   ÚrandomÚseedÚrandnrB   r   r>   r=   r/   rQ   ©r5   s    r   Úsetup_methodz_Test_random.setup_method   s   € ØˆŒØˆŒÜ
�	‰	�‰�tÔÜ—I‘I—O‘O D§F¡F¨D¯F©FÓ3ˆŒ	Ø×&Ñ& t§y¡y¸1Ð&Ó=ˆŒÜ—‘—‘ §¡Ó(ˆŒØˆŒØˆ�r   N©r   rh   ri   ry   rj   r   r   rl   rl   }   s   „ ór   rl   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_random_farc                 ó„   •— t         ‰| �  «        t        j                  j	                  | j
                  «      dz   | _        y )Nrt   )Úsuperry   r@   ru   rw   rI   r=   ©r5   Ú	__class__s    €r   ry   z_Test_random_far.setup_methodŒ   s+   ø€ Ü‰ÑÔÜ—‘—‘ §¡Ó(¨Ñ+ˆ�r   ©r   rh   ri   ry   Ú__classcell__©r€   s   @r   r|   r|   Š   s   ø„ ÷,ð ,r   r|   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú_Test_smallc                 ó¶  — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g«      | _        | j                  | j                  «      | _        | j                  j
                  | _        | j                  j                  | _        t         j                  j                  d	«       t         j                  j                  d
«      | _
        d| _        d| _        y )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   rp   é   r)   ro   )r@   ÚarrayrB   r   r>   rV   rI   ru   rv   rw   r=   r/   rQ   rx   s    r   ry   z_Test_small.setup_method“   s–   € Ü—H‘HšiÚ'Ú'Ú'Ú'Ú'Ú'Ú'ð)ó *ˆŒ	ð ×&Ñ& t§y¡yÓ1ˆŒØ—‘—‘ˆŒØ—‘—‘ˆŒÜ
�	‰	�‰�tÔÜ—‘—‘ Ó#ˆŒØˆŒØˆ�r   c                 óP   — t        | j                  j                  dd«      d«       y )N©r   r   rd   r   )rd   r   ©r   r>   r?   rx   s    r   rG   z_Test_small.test_nearest¤   s!   € ÜØ—‘×!Ñ! +¨qÓ1Øõ	r   c                 ó\   — t        | j                  j                  dd«      ddgddgf«       y )Nr’   r9   rd   gÍÌÌÌÌÌì?r   r   r“   rx   s    r   Útest_nearest_twoz_Test_small.test_nearest_two©   s.   € ÜØ—‘×!Ñ! +¨qÓ1Ø�s�˜a ˜VÐ$õ	&r   N)r   rh   ri   ry   rG   r•   rj   r   r   r…   r…   ‘   s   „ òò"ó
&r   r…   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_small_nonleafc                 óf   •— t         ‰| �  «        | j                  | j                  d¬«      | _        y )Nr   rq   )r~   ry   r   rB   r>   r   s    €r   ry   z _Test_small_nonleaf.setup_method±   s)   ø€ Ü‰ÑÔØ×&Ñ& t§y¡y¸1Ð&Ó=ˆ�r   r�   rƒ   s   @r   r—   r—   ¯   s   ø„ ÷>ð >r   r—   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTest_vectorization_KDTreec                 óœ   — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g«      | _        t        | j                  «      | _        y ©	Nr‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   )r@   r�   rB   r   r>   rx   s    r   ry   z&Test_vectorization_KDTree.setup_method·   s@   € Ü—H‘HšiÚ'Ú'Ú'Ú'Ú'Ú'Ú'ð)ó *ˆŒ	ô ˜TŸY™YÓ'ˆ�r   c                 óö   — | j                   j                  t        j                  g d¢«      «      \  }}t	        t        |t        «      «       t	        t        j                  |t        j                  «      «       y ©Nr‡   )	r>   r?   r@   r�   r   Ú
isinstanceÚfloatÚ
issubdtypeÚsignedinteger©r5   r/   rE   s      r   Útest_single_queryz+Test_vectorization_KDTree.test_single_queryÂ   sK   € Ø�{‰{× Ñ ¤§¡ª)Ó!4Ó5‰ˆˆ1Ü”
˜1œeÓ$Ô%Ü”—‘˜a¤×!1Ñ!1Ó2Õ3r   c                 óâ   — | j                   j                  t        j                  d«      «      \  }}t	        t        j
                  |«      d«       t	        t        j
                  |«      d«       y ©N©r9   ro   r�   )r9   ro   ©r>   r?   r@   Úzerosr   Úshaper£   s      r   Útest_vectorized_queryz/Test_vectorization_KDTree.test_vectorized_queryÇ   óG   € Ø�{‰{× Ñ ¤§¡¨)Ó!4Ó5‰ˆˆ1Ü”R—X‘X˜a“[ &Ô)Ü”R—X‘X˜a“[ &Õ)r   c           	      ó  — d}| j                   j                  |z   }| j                   j                  t        j                  g d¢«      |¬«      \  }}t        t        j                  |«      |f«       t        t        j                  |«      |f«       t        t        j                  t        j                  || d  «       «      «       t        t        j                  || d  | j                   j                  k(  «      «       y ©Né   r‡   ©rQ   )
r>   rV   r?   r@   r�   r   rª   r   rC   Úisfinite©r5   ÚsÚkkr/   rE   s        r   Ú$test_single_query_multiple_neighborsz>Test_vectorization_KDTree.test_single_query_multiple_neighborsÌ   s±   € ØˆØ�[‰[�]‰]˜1‰_ˆØ�{‰{× Ñ ¤§¡ª)Ó!4¸Ð Ó;‰ˆˆ1Ü”R—X‘X˜a“[ 2 %Ô(Ü”R—X‘X˜a“[ 2 %Ô(Ü”—‘œŸ™ A q b c FÓ+Ð+Ó,Ô-Ü”—‘�q˜!˜˜�v §¡§¡Ñ.Ó/Õ0r   c                 ó*  — d}| j                   j                  |z   }| j                   j                  t        j                  d«      |¬«      \  }}t        t        j                  |«      dd|f«       t        t        j                  |«      dd|f«       t        t        j                  t        j                  |d d …d d …| d …f   «       «      «       t        t        j                  |d d …d d …| d …f   | j                   j                  k(  «      «       y ©Nr¯   r§   r°   r9   ro   ©
r>   rV   r?   r@   r©   r   rª   r   rC   r±   r²   s        r   Ú(test_vectorized_query_multiple_neighborszBTest_vectorization_KDTree.test_vectorized_query_multiple_neighborsÕ   óÅ   € ØˆØ�[‰[�]‰]˜1‰_ˆØ�{‰{× Ñ ¤§¡¨)Ó!4¸Ð Ó;‰ˆˆ1Ü”R—X‘X˜a“[ 1 a¨ *Ô-Ü”R—X‘X˜a“[ 1 a¨ *Ô-Ü”—‘œŸ™ A¢aª¨Q¨B©C i¡LÓ1Ð1Ó2Ô3Ü”—‘�qššA ˜r™s˜‘| t§{¡{§}¡}Ñ4Ó5Õ6r   c                 ó¢   — d}t        j                  t        d¬«      5  | j                  j	                  |d ¬«       d d d «       y # 1 sw Y   y xY w)Nç      ð?zk must be an integer or*©Úmatchr°   )Úpytestr	   Ú
ValueErrorr>   r?   )r5   r=   s     r   Útest_query_raises_for_k_nonez6Test_vectorization_KDTree.test_query_raises_for_k_noneÞ   sB   € ØˆÜ�]‰]œ:Ð-GÔHñ 	)Ø�K‰K×Ñ˜a 4ÐÔ(÷	)÷ 	)ñ 	)ús   žAÁAN)	r   rh   ri   ry   r¤   r«   rµ   r¹   rÁ   rj   r   r   rš   rš   ¶   s    „ ò	(ò4ò
*ò
1ò7ó)r   rš   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTest_vectorization_cKDTreec                 óœ   — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g«      | _        t        | j                  «      | _        y rœ   )r@   r�   rB   r   r>   rx   s    r   ry   z'Test_vectorization_cKDTree.setup_methodä   s@   € Ü—H‘HšiÚ'Ú'Ú'Ú'Ú'Ú'Ú'ð)ó *ˆŒ	ô ˜dŸi™iÓ(ˆ�r   c                 ó¨   — | j                   j                  g d¢«      \  }}t        t        |t        «      «       t        t        |t
        «      «       y rž   )r>   r?   r   rŸ   r    Úintr£   s      r   r¤   z,Test_vectorization_cKDTree.test_single_queryï   s8   € Ø�{‰{× Ñ ¢Ó+‰ˆˆ1Ü”
˜1œeÓ$Ô%Ü”
˜1œcÓ"Õ#r   c                 óâ   — | j                   j                  t        j                  d«      «      \  }}t	        t        j
                  |«      d«       t	        t        j
                  |«      d«       y r¦   r¨   r£   s      r   r«   z0Test_vectorization_cKDTree.test_vectorized_queryô   r¬   r   c                 óL  — t         j                  j                  d«       t         j                  j                  dd«      j                  }| j
                  j                  |«      \  }}t        |||«      D ]-  \  }}}t        | j
                  j                  |«      ||f«       Œ/ y )Nrp   r�   éè  )	r@   ru   rv   rw   ÚTr>   r?   rW   r   )r5   ÚqsÚdsÚi_sÚqr/   rE   s          r   Ú*test_vectorized_query_noncontiguous_valueszETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_valuesù   s   € Ü
�	‰	�‰�tÔÜ�Y‰Y�_‰_˜Q Ó%×'Ñ'ˆØ—+‘+×#Ñ# BÓ'‰ˆˆCÜ˜2˜r 3Ó'ò 	7‰GˆAˆq�!Ü˜Ÿ™×*Ñ*¨1Ó-°°1¨vÕ6ñ	7r   c           	      óÜ  — d}| j                   j                  |z   }| j                   j                  g d¢|¬«      \  }}t        t	        j
                  |«      |f«       t        t	        j
                  |«      |f«       t        t	        j                  t	        j                  || d  «       «      «       t        t	        j                  || d  | j                   j                  k(  «      «       y r®   )	r>   rV   r?   r   r@   rª   r   rC   r±   r²   s        r   rµ   z?Test_vectorization_cKDTree.test_single_query_multiple_neighbors   s¨   € ØˆØ�[‰[�]‰]˜1‰_ˆØ�{‰{× Ñ ¢¨bÐ Ó1‰ˆˆ1Ü”R—X‘X˜a“[ 2 %Ô(Ü”R—X‘X˜a“[ 2 %Ô(Ü”—‘œŸ™ A q b c FÓ+Ð+Ó,Ô-Ü”—‘�q˜!˜˜�v §¡§¡Ñ.Ó/Õ0r   c                 ó*  — d}| j                   j                  |z   }| j                   j                  t        j                  d«      |¬«      \  }}t        t        j                  |«      dd|f«       t        t        j                  |«      dd|f«       t        t        j                  t        j                  |d d …d d …| d …f   «       «      «       t        t        j                  |d d …d d …| d …f   | j                   j                  k(  «      «       y r·   r¸   r²   s        r   r¹   zCTest_vectorization_cKDTree.test_vectorized_query_multiple_neighbors	  rº   r   N)	r   rh   ri   ry   r¤   r«   rÏ   rµ   r¹   rj   r   r   rÃ   rÃ   ã   s    „ ò	)ò$ò
*ò
7ò1ó7r   rÃ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Úball_consistencyç        c                 ó(   — t        |dz  |dz  |«      S ©Nr¼   r   r4   s       r   r6   zball_consistency.distance  s   € Ü! ! c¡'¨1¨s©7°AÓ6Ð6r   c                 ó€  — t        j                  | j                  «      }t        j                  | j                  |j
                  d d «      }| j                  j                  || j                  | j                  | j                  ¬«      }t        |«      D ]§  \  }}| j                  | j                  |   ||   | j                  «      ||   d| j                  z   z  z
  }| j                  | j                  |   ||   | j                  «      ||   d| j                  z   z  z   }t        || j                  |z  k  d«       Œ© y )Néÿÿÿÿ©r,   rF   r¼   T)r@   Ú
atleast_2dr=   Úbroadcast_tor/   rª   rÊ   Úquery_ball_pointr,   rF   Ú	enumerater6   rB   r   Útol)r5   r=   r/   ÚlrE   ÚindÚdistÚnorms           r   Útest_in_ballzball_consistency.test_in_ball  sù   € Ü�M‰M˜$Ÿ&™&Ó!ˆÜ�O‰O˜DŸF™F A§G¡G¨C¨R LÓ1ˆØ�F‰F×#Ñ# A t§v¡v°·±¸T¿X¹XÐ#ÓFˆÜ “lò 	=‰FˆAˆsØ—=‘= §¡¨3¡°°1±°t·v±vÓ>ÀÀ1ÁÀrÈ$Ï(É(Á{ÑASÑSˆDØ—=‘= §¡¨3¡°°1±°t·v±vÓ>ÀÀ1ÁÀrÈ$Ï(É(Á{ÑASÑSˆDÜ˜t d§h¡h°¡oÑ5°tÕ<ñ	=r   c                 óê  — t        j                  | j                  «      }t        j                  | j                  |j
                  d d «      }| j                  j                  || j                  | j                  | j                  ¬«      }t        |«      D ]Ü  \  }}t        j                  | j                  j                  t        ¬«      }d||<   | j                  | j                  |   ||   | j                  «      ||   d| j                  z   z  z
  }| j                  | j                  |   ||   | j                  «      ||   d| j                  z   z  z   }t!        || j"                   |z  kD  d«       ŒÞ y )NrØ   rÙ   ©ÚdtypeFr¼   T)r@   rÚ   r=   rÛ   r/   rª   rÊ   rÜ   r,   rF   rÝ   ÚonesrV   Úboolr6   rB   r   rÞ   )	r5   r=   r/   rß   rE   rà   Úcrá   râ   s	            r   Útest_found_allzball_consistency.test_found_all!  s  € Ü�M‰M˜$Ÿ&™&Ó!ˆÜ�O‰O˜DŸF™F A§G¡G¨C¨R LÓ1ˆØ�F‰F×#Ñ# A t§v¡v°·±¸T¿X¹XÐ#ÓFˆÜ “lò 	>‰FˆAˆsÜ—‘˜Ÿ™Ÿ™¬Ô-ˆAØˆAˆc‰FØ—=‘= §¡¨1¡¨q°©t°T·V±VÓ<¸qÀ¹tÀRÈÏÉÁ[Ñ?QÑQˆDØ—=‘= §¡¨1¡¨q°©t°T·V±VÓ<¸qÀ¹tÀRÈÏÉÁ[Ñ?QÑQˆDÜ˜t t§x¡x i°$Ñ&6Ñ6¸Õ=ñ	>r   N)r   rh   ri   rÞ   r6   rã   rê   rj   r   r   rÓ   rÓ     s   „ Ø
€Cò7ò=ó	>r   rÓ   c                   ó   — e Zd Zd„ Zy)Ú_Test_random_ballc                 óJ  — d}d}t         j                  j                  d«       t         j                  j                  ||«      | _        | j                  | j                  d¬«      | _        t         j                  j                  |«      | _        d| _        d| _	        d| _
        y )	Nrn   ro   rp   r9   rq   ç       @r   rs   )r@   ru   rv   rw   rB   r   rÊ   r=   r,   rF   r/   ©r5   rV   rI   s      r   ry   z_Test_random_ball.setup_method.  sv   € ØˆØˆÜ
�	‰	�‰�tÔÜ—I‘I—O‘O A qÓ)ˆŒ	Ø×!Ñ! $§)¡)°aÐ!Ó8ˆŒÜ—‘—‘ Ó#ˆŒØˆŒØˆŒØˆ�r   Nrz   rj   r   r   rì   rì   ,  s   „ ó	r   rì   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú_Test_random_ball_periodicc                 ó   — t        |||d«      S rÖ   ©r0   r4   s       r   r6   z#_Test_random_ball_periodic.distance<  ó   € Ü˜A˜q ! SÓ)Ð)r   c                 ó>  — d}d}t         j                  j                  d«       t         j                  j                  ||f¬«      | _        | j                  | j                  dd¬«      | _        t        j                  |d«      | _        d	| _	        d
| _
        d| _        y )Ni'  ro   rp   ©Úsizer9   r   ©rr   r-   rd   rî   r   rs   )r@   ru   rv   ÚuniformrB   r   rÊ   Úfullr=   r,   rF   r/   rï   s      r   ry   z'_Test_random_ball_periodic.setup_method?  s|   € ØˆØˆÜ
�	‰	�‰�tÔÜ—I‘I×%Ñ%¨A¨q¨6Ð%Ó2ˆŒ	Ø×!Ñ! $§)¡)°aÀÐ!ÓCˆŒÜ—‘˜˜C“ˆŒØˆŒØˆŒØˆ�r   c                 ó°  — | j                   j                  | j                  dz   | j                  | j                  | j
                  ¬«      }|D ]\  }t        | j                  | j                  |   | j                  | j                  «      | j                  d| j
                  z   z  k  «       Œ^ | j                   j                  | j                  dz
  | j                  | j                  | j
                  ¬«      }|D ]\  }t        | j                  | j                  |   | j                  | j                  «      | j                  d| j
                  z   z  k  «       Œ^ y )Nr¼   rÙ   )	rÊ   rÜ   r=   r/   r,   rF   r   r6   rB   )r5   rß   rE   s      r   Útest_in_ball_outsidez/_Test_random_ball_periodic.test_in_ball_outsideJ  sü   € Ø�F‰F×#Ñ# D§F¡F¨S¡L°$·&±&¸D¿F¹FÈÏÉÐ#ÓQˆØò 	YˆAÜ�D—M‘M $§)¡)¨A¡,°·±¸¿¹Ó?À4Ç6Á6È2ÈdÏhÉhÉ;ÑCWÑWÕXð	Yà�F‰F×#Ñ# D§F¡F¨S¡L°$·&±&¸D¿F¹FÈÏÉÐ#ÓQˆØò 	YˆAÜ�D—M‘M $§)¡)¨A¡,°·±¸¿¹Ó?À4Ç6Á6È2ÈdÏhÉhÉ;ÑCWÑWÕXñ	Yr   c                 ó6  — t        j                  | j                  j                  t        ¬«      }| j                  j                  | j                  dz   | j                  | j                  | j                  ¬«      }d||<   t        j                  | j                  | j                  |   | j                  | j                  «      | j                  d| j                  z   z  k\  «      sJ ‚| j                  j                  | j                  dz
  | j                  | j                  | j                  ¬«      }d||<   t        j                  | j                  | j                  |   | j                  | j                  «      | j                  d| j                  z   z  k\  «      sJ ‚y )Nrå   r¼   rÙ   F)r@   rç   rÊ   rV   rè   rÜ   r=   r/   r,   rF   rC   r6   rB   )r5   ré   rß   s      r   Útest_found_all_outsidez1_Test_random_ball_periodic.test_found_all_outsideR  s(  € Ü�G‰G�D—F‘F—H‘H¤DÔ)ˆØ�F‰F×#Ñ# D§F¡F¨S¡L°$·&±&¸D¿F¹FÈÏÉÐ#ÓQˆØˆˆ!‰Ü�v‰vØ�M‰M˜$Ÿ)™) A™,¨¯©°·±Ó7¸4¿6¹6À2ÀdÇhÁhÁ;Ñ;OÑOô
ð 	
ð 
ð �F‰F×#Ñ# D§F¡F¨S¡L°$·&±&¸D¿F¹FÈÏÉÐ#ÓQˆØˆˆ!‰Ü�v‰vØ�M‰M˜$Ÿ)™) A™,¨¯©°·±Ó7¸4¿6¹6À2ÀdÇhÁhÁ;Ñ;OÑOô
ð 	
ñ 
r   N)r   rh   ri   r6   ry   rü   rþ   rj   r   r   rñ   rñ   :  s   „ ò*ò	òYó
r   rñ   c                   ó   — e Zd ZdZd„ Zy)Ú"_Test_random_ball_largep_issue9890g‚vIhÂ%<=c                 ó(  — d}d}t         j                  j                  d«       t         j                  j                  dd||f¬«      | _        | j                  | j                  «      | _        | j                  | _        d| _        d| _	        d| _
        y )NrÉ   r9   é{   rn   rö   r   rt   )r@   ru   rv   ÚrandintrB   r   rÊ   r=   r,   rF   r/   rï   s      r   ry   z/_Test_random_ball_largep_issue9890.setup_methodg  ss   € ØˆØˆÜ
�	‰	�‰�sÔÜ—I‘I×%Ñ% c¨4°q¸!°fÐ%Ó=ˆŒ	Ø×!Ñ! $§)¡)Ó,ˆŒØ—‘ˆŒØˆŒØˆŒØˆ�r   N)r   rh   ri   rÞ   ry   rj   r   r   r   r   a  s   „ ð €Có	r   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_random_ball_approxc                 ó0   •— t         ‰| �  «        d| _        y ©Nrd   ©r~   ry   rF   r   s    €r   ry   z%_Test_random_ball_approx.setup_methodv  ó   ø€ Ü‰ÑÔØˆ�r   r�   rƒ   s   @r   r  r  s  ó   ø„ ÷ð r   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú!_Test_random_ball_approx_periodicc                 ó0   •— t         ‰| �  «        d| _        y r  r  r   s    €r   ry   z._Test_random_ball_approx_periodic.setup_method~  r	  r   r�   rƒ   s   @r   r  r  {  r
  r   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_random_ball_farc                 ó0   •— t         ‰| �  «        d| _        y ©Nrî   ©r~   ry   r/   r   s    €r   ry   z"_Test_random_ball_far.setup_method†  ó   ø€ Ü‰ÑÔØˆ�r   r�   rƒ   s   @r   r  r  ƒ  ó   ø„ ÷ð r   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_random_ball_far_periodicc                 ó0   •— t         ‰| �  «        d| _        y r  r  r   s    €r   ry   z+_Test_random_ball_far_periodic.setup_method�  r  r   r�   rƒ   s   @r   r  r  Š  r  r   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_random_ball_l1c                 ó0   •— t         ‰| �  «        d| _        y )Nr   )r~   ry   r,   r   s    €r   ry   z!_Test_random_ball_l1.setup_method•  ó   ø€ Ü‰ÑÔØˆ�r   r�   rƒ   s   @r   r  r  ’  ó   ø„ ÷ð r   r  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_random_ball_linfc                 óL   •— t         ‰| �  «        t        j                  | _        y r   ©r~   ry   r@   rX   r,   r   s    €r   ry   z#_Test_random_ball_linf.setup_method�  ó   ø€ Ü‰ÑÔÜ—‘ˆ�r   r�   rƒ   s   @r   r  r  š  ó   ø„ ÷ð r   r  c                 ó\  — d}d}t         j                  j                  d«        | t         j                  j                  ||«      «      }|j	                  t         j                  j                  dd|«      d«      }t        |j                  d«       t        t        |d   t        «      «       y )	Né   é   rp   r9   r�   r   ©r9   r�   ©r   r   )
r@   ru   rv   rw   rÜ   r   rª   r   rŸ   Úlist)r   rV   rI   rÊ   Úrs        r   Útest_random_ball_vectorizedr*  ¢  sy   € Ø
€AØ	€AÜ‡I�I‡N�N�4ÔÙ”B—I‘I—O‘O A qÓ)Ó*€Aà	×Ñœ2Ÿ9™9Ÿ?™?¨1¨a°Ó3°QÓ7€AÜ�—‘˜&Ô!ÜŒJ�q˜‘w¤Ó%Õ&r   c                 óÆ  — t         j                  j                  d«       d}d}t         j                  j                  ||«      } | |«      }|j	                  |dd¬«      }|j	                  |dd¬«      }|j	                  |dd¬«      }t        |«      D ]  }||   s||   sŒt        ||   ||   «       Œ! t        |«      D ]  }||   s||   sŒt        ||   ||   «       Œ! y )	Nr   éˆ  r9   gú~j¼t“h?r   ©Úworkersé@   rØ   )r@   ru   rv   rw   rÜ   Úranger   )	r   rV   rQ   ÚpointsrÊ   Úl1Úl2Úl3rE   s	            r   Ú$test_query_ball_point_multithreadingr5  ­  så   € Ü‡I�I‡N�N�1ÔØ€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÙ�FÓ€AØ	
×	Ñ	˜F E°1Ð	Ó	5€BØ	
×	Ñ	˜F E°2Ð	Ó	6€BØ	
×	Ñ	˜F E°2Ð	Ó	6€Bä�1‹Xò -ˆØˆaŠ5�B�q“EÜ˜r !™u b¨¡eÕ,ð-ô �1‹Xò -ˆØˆaŠ5�B�q“EÜ˜r !™u b¨¡eÕ,ñ-r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Útwo_trees_consistencyc                 ó   — t        |||«      S r   r   r4   s       r   r6   ztwo_trees_consistency.distanceÂ  r7   r   c                 ór  — | j                   j                  | j                  | j                  | j                  | j
                  ¬«      }t        |«      D ]b  \  }}|D ]X  }| j                  | j                  |   | j                  |   | j                  «      | j                  d| j
                  z   z  k  rŒXJ ‚ Œd y )NrÙ   r¼   )
ÚT1Úquery_ball_treeÚT2r/   r,   rF   rÝ   r6   Údata1Údata2)r5   r)  rE   rß   Újs        r   Útest_all_in_ballz&two_trees_consistency.test_all_in_ballÅ  sœ   € Ø�G‰G×#Ñ# D§G¡G¨T¯V©V°t·v±vÀ4Ç8Á8Ð#ÓLˆÜ˜a“Lò 	1‰DˆAˆqØò 1�ØŸ™ d§j¡j°¡m°T·Z±ZÀ±]ÀDÇFÁFÓKØŸ6™6 2 d§h¡h¡;Ñ/ó0ð 1ð 0ñ1ñ	1r   c                 óò  — | j                   j                  | j                  | j                  | j                  | j
                  ¬«      }t        |«      D ]¢  \  }}t        j                  | j                  j                  t        ¬«      }d||<   t        j                  | j                  | j                  |   | j                  |   | j                  «      | j                  d| j
                  z   z  k\  «      rŒ¢J ‚ y )NrÙ   rå   Fr¼   )r:  r;  r<  r/   r,   rF   rÝ   r@   rç   rV   rè   rC   r6   r>  r=  )r5   r)  rE   rß   ré   s        r   rê   z$two_trees_consistency.test_found_allÌ  s¹   € Ø�G‰G×#Ñ# D§G¡G¨T¯V©V°t·v±vÀ4Ç8Á8Ð#ÓLˆÜ˜a“Lò 	3‰DˆAˆqÜ—‘˜Ÿ™Ÿ	™	¬Ô.ˆAØˆAˆa‰DÜ—6‘6˜$Ÿ-™-¨¯
©
°1©°t·z±zÀ!±}ÀdÇfÁfÓMØ!ŸV™V R¨¯©¡[Ñ1ñ2õ 3ð 3ð 3ñ	3r   N)r   rh   ri   r6   r@  rê   rj   r   r   r7  r7  À  s   „ ò+ò1ó3r   r7  c                   ó   — e Zd Zd„ Zy)Ú_Test_two_random_treesc                 ó�  — d}d}t         j                  j                  d«       t         j                  j                  ||«      | _        | j                  | j                  d¬«      | _        t         j                  j                  ||«      | _        | j                  | j                  d¬«      | _        d| _	        d| _
        d| _        y )	Né2   ro   rp   r9   rq   rî   r   rs   )r@   ru   rv   rw   r=  r   r:  r>  r<  r,   rF   r/   rï   s      r   ry   z#_Test_two_random_trees.setup_methodØ  s“   € ØˆØˆÜ
�	‰	�‰�tÔÜ—Y‘Y—_‘_ Q¨Ó*ˆŒ
Ø×"Ñ" 4§:¡:¸Ð"Ó:ˆŒÜ—Y‘Y—_‘_ Q¨Ó*ˆŒ
Ø×"Ñ" 4§:¡:¸Ð"Ó:ˆŒØˆŒØˆŒØˆ�r   Nrz   rj   r   r   rC  rC  Õ  s   „ ó
r   rC  c                   ó   — e Zd Zd„ Zd„ Zy)Ú_Test_two_random_trees_periodicc                 ó   — t        |||d«      S rÖ   ró   r4   s       r   r6   z(_Test_two_random_trees_periodic.distanceç  rô   r   c                 óœ  — d}d}t         j                  j                  d«       t         j                  j                  ||f¬«      | _        | j                  | j                  dd¬«      | _        t         j                  j                  ||f¬«      | _        | j                  | j                  dd¬«      | _        d| _	        d	| _
        d
| _        y )NrE  ro   rp   rö   r9   r¼   rø   rî   r   rs   )r@   ru   rv   rù   r=  r   r:  r>  r<  r,   rF   r/   rï   s      r   ry   z,_Test_two_random_trees_periodic.setup_methodê  s¥   € ØˆØˆÜ
�	‰	�‰�tÔÜ—Y‘Y×&Ñ&¨Q°¨FÐ&Ó3ˆŒ
Ø×"Ñ" 4§:¡:¸À3Ð"ÓGˆŒÜ—Y‘Y×&Ñ&¨Q°¨FÐ&Ó3ˆŒ
Ø×"Ñ" 4§:¡:¸À3Ð"ÓGˆŒØˆŒØˆŒØˆ�r   N)r   rh   ri   r6   ry   rj   r   r   rG  rG  å  s   „ ò*ó
r   rG  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_two_random_trees_farc                 ó0   •— t         ‰| �  «        d| _        y ©Nr9   r  r   s    €r   ry   z'_Test_two_random_trees_far.setup_methodú  r  r   r�   rƒ   s   @r   rK  rK  ÷  r  r   rK  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú#_Test_two_random_trees_far_periodicc                 ó0   •— t         ‰| �  «        d| _        y rM  r  r   s    €r   ry   z0_Test_two_random_trees_far_periodic.setup_method  r  r   r�   rƒ   s   @r   rO  rO  ÿ  r  r   rO  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú_Test_two_random_trees_linfc                 óL   •— t         ‰| �  «        t        j                  | _        y r   r   r   s    €r   ry   z(_Test_two_random_trees_linf.setup_method
  r!  r   r�   rƒ   s   @r   rR  rR    r"  r   rR  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú$_Test_two_random_trees_linf_periodicc                 óL   •— t         ‰| �  «        t        j                  | _        y r   r   r   s    €r   ry   z1_Test_two_random_trees_linf_periodic.setup_method  r!  r   r�   rƒ   s   @r   rU  rU    r"  r   rU  c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTest_rectanglec                 ó.   — t        ddgddg«      | _        y ©Nr   r   )r   Úrectrx   s    r   ry   zTest_rectangle.setup_method  s   € Ü˜q !˜f q¨! fÓ-ˆ�	r   c                 óR   — t        | j                  j                  ddg«      d«       y )Nr)   r   ©r   r[  Úmin_distance_pointrx   s    r   Útest_min_insidezTest_rectangle.test_min_inside  s   € Ü˜DŸI™I×8Ñ8¸#¸s¸ÓDÀaÕHr   c                 óR   — t        | j                  j                  ddg«      d«       y ©Nr)   g      ø?r]  rx   s    r   Útest_min_one_sidez Test_rectangle.test_min_one_side  s   € Ü˜DŸI™I×8Ñ8¸#¸s¸ÓDÀcÕJr   c                 óx   — t        | j                  j                  ddg«      t        j                  d«      «       y rM  )r   r[  r^  r@   Úsqrtrx   s    r   Útest_min_two_sidesz!Test_rectangle.test_min_two_sides"  s'   € Ü˜DŸI™I×8Ñ8¸!¸Q¸Ó@Ä"Ç'Á'È!Ã*ÕMr   c                 ó~   — t        | j                  j                  ddg«      dt        j                  d«      z  «       y )Nr)   r   r9   ©r   r[  Úmax_distance_pointr@   rd  rx   s    r   Útest_max_insidezTest_rectangle.test_max_inside%  s,   € Ü˜DŸI™I×8Ñ8¸#¸s¸ÓDÀaÌÏÉÐPQË
ÁlÕSr   c                 óz   — t        | j                  j                  ddg«      t        j                  dd«      «       y ra  )r   r[  rh  r@   Úhypotrx   s    r   Útest_max_one_sidez Test_rectangle.test_max_one_side(  s-   € Ü˜DŸI™I×8Ñ8¸#¸s¸ÓDÜŸH™H S¨#Ó.õ	0r   c                 ó~   — t        | j                  j                  ddg«      dt        j                  d«      z  «       y rM  rg  rx   s    r   Útest_max_two_sidesz!Test_rectangle.test_max_two_sides,  s+   € Ü˜DŸI™I×8Ñ8¸!¸Q¸Ó@À!ÄBÇGÁGÈAÃJÁ,ÕOr   c                 ó  — | j                   j                  dd«      \  }}t        |j                  ddg«       t        |j                  ddg«       t        |j                  ddg«       t        |j                  ddg«       y )Nr   rd   r   )r[  Úsplitr   ÚmaxesÚmins)r5   ÚlessÚgreaters      r   Ú
test_splitzTest_rectangle.test_split/  sb   € ØŸ	™	Ÿ™¨¨3Ó/‰ˆˆgÜ˜4Ÿ:™:¨¨Q xÔ0Ü˜4Ÿ9™9 q¨! fÔ-Ü˜7Ÿ=™=¨1¨a¨&Ô1Ü˜7Ÿ<™<¨#¨q¨Õ2r   N)r   rh   ri   ry   r_  rb  re  ri  rl  rn  ru  rj   r   r   rX  rX    s/   „ ò.òIòKòNòTò0òPó3r   rX  c                  ó`   — t        t        ddgddgd«      t        j                  d«      «       y ©Nr   r   r9   )r   r   r@   rd  rj   r   r   Útest_distance_l2rx  7  s&   € ÜÔ*¨A¨q¨6°A°q°6¸1Ó=¼r¿w¹wÀq»zÕJr   c                  ó:   — t        t        ddgddgd«      d«       y rw  )r   r   rj   r   r   Útest_distance_l1rz  ;  s   € ÜÔ*¨A¨q¨6°A°q°6¸1Ó=¸qÕAr   c                  óV   — t        t        ddgddgt        j                  «      d«       y rZ  )r   r   r@   rX   rj   r   r   Útest_distance_linfr|  ?  s"   € ÜÔ*¨A¨q¨6°A°q°6¼2¿6¹6ÓBÀAÕFr   c                  ó  — t         j                  j                  d«       t         j                  j                  ddd«      } t         j                  j                  ddd«      }t	        t        | |«      j                  d«       y )Nrp   rt   r   r�   é   )rt   r~  )r@   ru   rv   rw   r   r   rª   )r=   Úys     r   Útest_distance_vectorizationr€  C  sV   € Ü‡I�I‡N�N�4ÔÜ
�	‰	�‰˜˜A˜qÓ!€AÜ
�	‰	�‰˜˜1˜aÓ €AÜÔ# A qÓ)×/Ñ/°Õ9r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Úcount_neighbors_consistencyc                 ó  — d}t        | j                  j                  | j                  |«      t	        j
                  | j                  j                  | j                  |«      D �cg c]  }t        |«      ‘Œ c}«      «       y c c}w )Nrs   ©r   r:  Úcount_neighborsr<  r@   rA   r;  Úlen©r5   r)  rß   s      r   Útest_one_radiusz+count_neighbors_consistency.test_one_radiusK  sZ   € ØˆÜ�T—W‘W×,Ñ,¨T¯W©W°aÓ8Ü—‘¨¯©×(?Ñ(?ÀÇÁÈÓ(KÖL 1œ˜A�ÒLÓMõ	OùÚLó   Á$Bc                 ó  — d}t        | j                  j                  | j                  |«      t	        j
                  | j                  j                  | j                  |«      D �cg c]  }t        |«      ‘Œ c}«      «       y c c}w )NrÉ   r„  r‡  s      r   Útest_large_radiusz-count_neighbors_consistency.test_large_radiusP  sZ   € ØˆÜ�T—W‘W×,Ñ,¨T¯W©W°aÓ8Ü—‘¨¯©×(?Ñ(?ÀÇÁÈÓ(KÖL 1œ˜A�ÒLÓMõ	OùÚLr‰  c                 óà  — t        j                  t        j                  t        j                  d«      t        j                  d«      d«      «      }| j                  j                  | j                  |«      }t        t        j                  t        j                  |«      dk\  «      «       t        ||«      D ]5  \  }}t        | j                  j                  | j                  |«      |«       Œ7 y )Nç{®Gáz„?rt   r�   r   )r@   ÚexpÚlinspaceÚlogr:  r…  r<  r   rC   r.   rW   r   )r5   ÚrsÚresultsr)  Úresults        r   Útest_multiple_radiusz0count_neighbors_consistency.test_multiple_radiusU  s¡   € Ü�V‰V”B—K‘K¤§¡ t£¬b¯f©f°R«j¸!Ó<Ó=ˆØ—'‘'×)Ñ)¨$¯'©'°2Ó6ˆÜ”—‘”r—w‘w˜wÓ'¨1Ñ,Ó-Ô.Ü˜R Ó)ò 	F‰IˆAˆvÜ˜Ÿ™×0Ñ0°·±¸!Ó<¸fÕEñ	Fr   N)r   rh   ri   rˆ  r‹  r”  rj   r   r   r‚  r‚  J  s   „ òOò
Oó
Fr   r‚  c                   ó   — e Zd Zd„ Zy)Ú_Test_count_neighborsc                 ó"  — d}d}t         j                  j                  d«       | j                  t         j                  j	                  ||«      d¬«      | _        | j                  t         j                  j	                  ||«      d¬«      | _        y )NrE  r9   rp   rq   )r@   ru   rv   r   rw   r:  r<  rï   s      r   ry   z"_Test_count_neighbors.setup_method^  sh   € ØˆØˆÜ
�	‰	�‰�tÔØ×"Ñ"¤2§9¡9§?¡?°1°aÓ#8À1Ð"ÓEˆŒØ×"Ñ"¤2§9¡9§?¡?°1°aÓ#8À1Ð"ÓEˆ�r   Nrz   rj   r   r   r–  r–  \  s   „ óFr   r–  c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú"sparse_distance_matrix_consistencyc                 ó   — t        |||«      S r   r   r4   s       r   r6   z+sparse_distance_matrix_consistency.distanceh  r7   r   c           
      ó  — | j                   j                  | j                  | j                  «      }| j                   j	                  | j                  | j                  «      }t        |«      D ]h  \  }}|D ]^  }t        |||f   | j                  | j                   j                  |   | j                  j                  |   | j                  «      d¬«       Œ` Œj |j                  «       D ]  \  \  }}}t        |||   v «       Œ y )Né   ©Údecimal)r:  Úsparse_distance_matrixr<  r)  r;  rÝ   r   r6   rB   r,   Úitemsr   )r5   ÚMr)  rE   rß   r?  r/   s          r   Útest_consistency_with_neighborszBsparse_distance_matrix_consistency.test_consistency_with_neighborsk  sÕ   € Ø�G‰G×*Ñ*¨4¯7©7°D·F±FÓ;ˆØ�G‰G×#Ñ# D§G¡G¨T¯V©VÓ4ˆÜ˜a“Lò 	‰DˆAˆqØò �Ü#Ø�a˜�d‘GØ—M‘M $§'¡'§,¡,¨q¡/°4·7±7·<±<À±?ÀDÇFÁFÓKØöñð	ð Ÿ7™7›9ò 	‰K‰Vˆa��QÜ�A˜˜1™�IÕñ	r   c                 ód   — | j                   j                  | j                   | j                  «       y r   )r:  rŸ  r)  rx   s    r   Útest_zero_distancez5sparse_distance_matrix_consistency.test_zero_distancex  s   € à�‰×&Ñ& t§w¡w°·±Õ7r   c                 ó(  — | j                   j                  | j                  | j                  «      }t	        | j                   j
                  | j                  j
                  «      }d||| j                  kD  <   t        |j                  «       |d¬«       y )Nr   rœ  r�  )r:  rŸ  r<  r)  r   rB   r   Útoarray)r5   ÚM1Úexpecteds      r   Útest_consistencyz3sparse_distance_matrix_consistency.test_consistency|  sa   € à�W‰W×+Ñ+¨D¯G©G°T·V±VÓ<ˆÜ" 4§7¡7§<¡<°·±·±Ó>ˆØ&'ˆ�˜DŸF™FÑ"Ñ#Ü! "§*¡*£,°À"ÖEr   c                 óL  — t         j                  j                  d«       t        j                  t         j                  j	                  dd«      t
        ¬«      }| j                  |dd¬«      }|j                  |d«      j                  «       }t        ||j                  d¬	«       y )
Nr   é   r9   rå   F©Úbalanced_treeÚcompact_nodesr�   rœ  r�  )r@   ru   rv   r�   rw   rÆ   r   rŸ  r¦  r   rÊ   )r5   Útoo_manyr$   r/   s       r   Ú#test_against_logic_error_regressionzFsparse_distance_matrix_consistency.test_against_logic_error_regressionƒ  sy   € ä
�	‰	�‰�qÔÜ—8‘8œBŸI™IŸO™O¨B°Ó2¼#Ô>ˆØ×ÑØ E¸ð  ó @ˆà×'Ñ'¨¨aÓ0×8Ñ8Ó:ˆÜ! ! Q§S¡S°"Ö5r   c                 ó8  — t        j                  | j                  | j                  f«      }t        | j                  «      D ]^  }t        | j                  «      D ]D  }| j                  |d d …f   | j
                  |d d …f   z
  }t        j                  ||«      |||f<   ŒF Œ` t        j                  |«      }d||| j                  kD  <   t        j                  | j                  | j                  f«      }| j                  j                  | j                  | j                  d¬«      }|j                  «       D ]  \  }}|||f   |||f<   Œ t        ||d¬«       t        j                  | j                  | j                  f«      }| j                  j                  | j                  | j                  d¬«      }t        |j                  d   «      D ]!  }|d   |   }|d	   |   }|d
   |   }||||f<   Œ# t        ||d¬«       | j                  j                  | j                  | j                  d¬«      }t        ||j                  «       d¬«       | j                  j                  | j                  | j                  d¬«      }t        ||j                  «       d¬«       y )NrÔ   Údict©Úoutput_typerœ  r�  Úndarrayr   rE   r?  ÚvÚ
dok_matrixÚ
coo_matrix)r@   r©   rV   r0  r=  r>  Údotrd  r)  r:  rŸ  r<  Úkeysr   rª   r¦  )r5   ÚrefrE   r?  r¶  rá   r)  rQ   s           r   Útest_ckdtree_return_typesz<sparse_distance_matrix_consistency.test_ckdtree_return_typesŒ  s4  € ä�h‰h˜Ÿ™ §¡Ð'Ó(ˆÜ�t—v‘v“ò 	)ˆAÜ˜4Ÿ6™6“]ò )�Ø—J‘J˜q¢!˜tÑ$ t§z¡z°!²Q°$Ñ'7Ñ7�ÜŸF™F 1 a›L��A�q�D’	ñ)ð	)ô �g‰g�c‹lˆØˆˆC�$—&‘&‰LÑä�x‰x˜Ÿ™ §¡Ð(Ó)ˆØ�G‰G×*Ñ*¨4¯7©7°D·F±FÈÐ*ÓOˆØ—F‘F“Hò 	#‰DˆAˆqØ˜A˜q˜6™ˆD��A�ŠJð	#ä! # t°RÕ8ä�x‰x˜Ÿ™ §¡Ð(Ó)ˆØ�G‰G×*Ñ*¨4¯7©7°D·F±FØ!ð +ó #ˆä�q—w‘w˜q‘zÓ"ò 	ˆAØ�#‘�q‘	ˆAØ�#‘�q‘	ˆAØ�#‘�q‘	ˆAØˆD��A�ŠJð		ô
 	" # t°RÕ8à�G‰G×*Ñ*¨4¯7©7°D·F±FØ$ð +ó &ˆä! # q§y¡y£{¸BÕ?à�G‰G×*Ñ*¨4¯7©7°D·F±FØ$ð +ó &ˆä! # q§y¡y£{¸BÖ?r   N)	r   rh   ri   r6   r¢  r¤  r©  r°  r¼  rj   r   r   r™  r™  f  s"   „ ò+òò8òFò6ó @r   r™  c                   ó   — e Zd Zd„ Zy)Ú_Test_sparse_distance_matrixc                 ó~  — d}d}t         j                  j                  d«       t         j                  j                  ||«      }t         j                  j                  ||«      }| j	                  |d¬«      | _        | j	                  |d¬«      | _        d| _        d| _        || _	        || _
        || _        || _        y )NrE  ro   rp   r9   rq   r)   )r@   ru   rv   rw   r   r:  r<  r)  r,   r=  r>  rV   rI   )r5   rV   rI   r=  r>  s        r   ry   z)_Test_sparse_distance_matrix.setup_method±  sœ   € ØˆØˆÜ
�	‰	�‰�tÔÜ—	‘	—‘  1Ó%ˆÜ—	‘	—‘  1Ó%ˆØ×"Ñ" 5°1Ð"Ó5ˆŒØ×"Ñ" 5°1Ð"Ó5ˆŒØˆŒØˆŒØˆŒ
ØˆŒ
ØˆŒØˆ�r   Nrz   rj   r   r   r¾  r¾  ¯  s   „ ór   r¾  c            	      ó˜  — d} d}d}t         j                  j                  d«       t         j                  j                  | |«      }t         j                  j                  ||«      }t	        ||«      }t        |j                  | |f«       t        | «      D ]3  }t        |«      D ]#  }t        t        ||   ||   «      |||f   «       Œ% Œ5 y )Nrt   é   ro   rp   )
r@   ru   rv   rw   r   r   rª   r0  r   r   )rI   rV   rQ   ÚxsÚysrÌ   rE   r?  s           r   Útest_distance_matrixrÄ  Á  s³   € Ø
€AØ
€AØ	€AÜ‡I�I‡N�N�4ÔÜ	�‰�‰˜˜AÓ	€BÜ	�‰�‰˜˜AÓ	€BÜ	˜˜RÓ	 €BÜ�—‘˜A˜q˜6Ô"Ü�1‹Xò LˆÜ�q“ò 	LˆAÜÔ 2°2°a±5¸"¸Q¹%Ó @À"ÀQÈÀTÁ(ÕKñ	LñLr   c                  ó  — d} d}d}t         j                  j                  d«       t         j                  j                  | |«      }t         j                  j                  ||«      }t	        ||«      }t	        ||d¬«      }t        ||«       y )Nrt   rÁ  ro   rp   r   )Ú	threshold)r@   ru   rv   rw   r   r   )rI   rV   rQ   rÂ  rÃ  rÌ   Údsls          r   Útest_distance_matrix_loopingrÈ  Ï  sm   € Ø
€AØ
€AØ	€AÜ‡I�I‡N�N�4ÔÜ	�‰�‰˜˜AÓ	€BÜ	�‰�‰˜˜AÓ	€BÜ	˜˜RÓ	 €BÜ
˜"˜b¨AÔ
.€CÜ��SÕr   c                 óÜ   — | j                  | |«      }t        «       }t        |«      D ]%  \  }}|D ]  }||k  sŒ	|j                  ||f«       Œ Œ' t	        || j                  |«      k(  «       y r   )r;  ÚsetrÝ   Úaddr   Úquery_pairs)rÊ   r/   r)  r³   rE   rß   r?  s          r   Úcheck_onetree_queryrÍ  Û  so   € Ø	×Ñ˜!˜QÓ€AÜ‹€AÜ˜!“ò ‰ˆˆ1Øò 	ˆAØ�1‹uØ—‘�q˜!�f•ñ	ðô
 ˆA�—‘˜qÓ!Ñ!Õ"r   c                 ó¦  — t         j                  j                  d«       d}d}t         j                  j                  ||«      } | |«      }t	        |d«       t         j                  j                  d|z  |«      }|d |xxx dz  ccc ||d|z  xxx dz  ccc  | |«      }t	        |d«       t	        |d«       t	        |d«       t	        |d	«       y )
Nr   rE  ro   rd   r�   gü©ñÒMbP?r9   gñhãˆµøä>g�íµ ÷Æ°>)r@   ru   rv   rw   rÍ  )r   rV   rQ   r1  rÊ   s        r   Útest_onetree_queryrÏ  å  s²   € Ü‡I�I‡N�N�1ÔØ
€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÙ�FÓ€AÜ˜˜3Ôä�Y‰Y�_‰_˜Q˜q™S !Ó$€FØ
ˆ2ˆAƒJ�%ÑƒJØ
ˆ1ˆQˆq‰SƒM�QÑƒMÙ�FÓ€AÜ˜˜3ÔÜ˜˜5Ô!Ü˜˜7Ô#Ü˜˜4Õ r   c                 ó`   —  | ddgg«      }t        |j                  d«      t        «       «       y )Nr   r   r)   )r   rÌ  rÊ  )r   r$   s     r   Útest_query_pairs_single_noderÑ  ÷  s)   € Ù˜˜A˜�xÓ €DÜ�×!Ñ! #Ó&¬«Õ.r   c           	      ó>  — t         j                  j                  d«       d}d}d}|dz  }t         j                  j                  ||«      } | |«      }t	        «       }t        |«      D ]V  }t        |dz   |«      D ]B  }	||d d …f   ||	d d …f   z
  }
t        j                  |
|
«      |k  sŒ0|j                  ||	f«       ŒD ŒX t        |«      }|j                  |«      }t        |«      }t        ||«       |j                  |d¬«      }t        |«      }t        ||«       t	        «       }|j                  |d¬«      }t        |j                  d   «      D ]1  }|j                  t        ||df   «      t        ||df   «      f«       Œ3 t        |«      }t        ||«       y )	Nr   rE  r9   rd   r   rÊ  r³  rµ  )r@   ru   rv   rw   rÊ  r0  r¹  rË  ÚsortedrÌ  r   rª   rÆ   )r   rV   rQ   r)  Úr2r1  rÊ   ÚbruterE   r?  r¶  Úl0r³   r2  Úarrr3  s                   r   Útest_kdtree_query_pairsrØ  ü  sy  € Ü‡I�I‡N�N�1ÔØ
€AØ	€AØ€AØ	
ˆA‰€BÜ�Y‰Y�_‰_˜Q Ó"€FÙ�FÓ€Aä‹E€EÜ�1‹Xò "ˆÜ�q˜‘s˜A“ò 	"ˆAØ�qš!�t‘˜v aª d™|Ñ+ˆAÜ�v‰v�a˜‹|˜rÓ!Ø—	‘	˜1˜a˜&Õ!ñ	"ð"ô
 
�‹€Bà	�‰�aÓ€AÜ	�‹€BÜ�r˜2Ôà	�‰�a UˆÓ+€AÜ	�‹€BÜ�r˜2Ôä‹€AØ
�-‰-˜ yˆ-Ó
1€CÜ�3—9‘9˜Q‘<Ó ò 0ˆØ	�‰Œs�3�q˜!�t‘9‹~œs 3 q¨! t¡9›~Ð.Õ/ð0ä	�‹€BÜ�r˜2Õr   c                 óN  — t        j                  d«      }t        j                  dd|z  d«      }t        j                  dd|z  d«      }|D ��cg c]  }|D ]  }||f‘Œ Œ }}} | |«      }|j                  |d¬«      }|j                  |dz  ¬«      }	t	        |	|«       y c c}}w )	Nr9   r   r�   ro   rd   )r)  rF   ç)\�Âõ(ð?©r)  )r@   rd  r�  rÌ  r   )
r   ÚspacingÚx_rangeÚy_rangeÚxiÚyiÚxy_arrayr$   Ú	pairs_epsÚpairss
             r   Útest_query_pairs_epsrä    s£   € Ü�g‰g�a‹j€Gä�k‰k˜!˜Q ™[¨!Ó,€GÜ�k‰k˜!˜Q ™[¨!Ó,€GØ#*×=˜R°WÒ=¨r��R’Ð=�Ð=€HÑ=Ù�xÓ €DØ× Ñ  7°Ð Ó3€Ià×Ñ˜w¨™~ÐÓ.€Eä�˜	Õ"ùó >s   ÁB!c           	      ó´  — t         j                  dd…dd…f   \  }}t        t        |j	                  «       |j	                  «       «      «      } | |«      }t        t        g d¢«      t        |j                  dd«      «      «       t        j                  |t        ¬«      } | |«      }t        t        g d¢«      t        |j                  dd«      «      «       y )Nr   ro   )ro   é   é	   é   )r9   r   r   rå   )
r@   Úmgridr(  rW   Úravelr   rÓ  rÜ   Úasarrayr    )r   r=   r  r1  r$   s        r   Útest_ball_point_intsrì  +  s©   € ä�8‰8�A�a�C˜˜1˜�HÑ�D€A€qÜ”#�a—g‘g“i §¡£Ó+Ó,€FÙ�vÓ€DÜ”šÓ&Ü˜×-Ñ-¨f°aÓ8Ó9ô;ä�Z‰Z˜¤eÔ,€FÙ�vÓ€DÜ”šÓ&Ü˜×-Ñ-¨f°aÓ8Ó9õ;r   c            	      óª   — t        d«      D � cg c]  } t        j                  «       ‘Œ }} t        t	        |«      t	        |d d d…   «      «       y c c} w )Nr�   rØ   )r0  r   Únoder   rÓ  )r   Únodess     r   Útest_kdtree_comparisonsrð  8  s?   € ä$)¨!£HÖ-˜qŒV�[‰[�]Ð-€EÐ-Ü”˜“¤ u©T¨r¨T¡{Ó 3Õ4ùò .s   ŽAc                 óÀ  — t         j                  j                  d«       d}d}t         j                  j                  ||«      } | |«      j	                  |d¬«      d   } | |d¬«      j	                  |d¬«      d   } | |d¬	«      j	                  |d¬«      d   } | |dd¬
«      j	                  |d¬«      d   }t        ||«       t        ||«       t        ||«       y )Nr   r,  ro   r%  r°   rØ   F)r®  )r­  )r®  r­  )r@   ru   rv   rw   r?   r   )r   rV   rQ   r1  r:  r<  ÚT3ÚT4s           r   Útest_kdtree_build_modesrô  >  sÖ   € ä‡I�I‡N�N�1ÔØ€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÙ	�VÓ	×	"Ñ	" 6¨QÐ	"Ó	/°Ñ	3€BÙ	�V¨5Ô	1×	7Ñ	7¸À!Ð	7Ó	DÀRÑ	H€BÙ	�V¨5Ô	1×	7Ñ	7¸À!Ð	7Ó	DÀRÑ	H€BÙ	�V¨5Ø#(ô
*ß*/©%°¸!¨%Ó*<¸Rñ
A€Bä�r˜2ÔÜ�r˜2ÔÜ�r˜2Õr   c                 óV  — dd l }t        j                  j                  d«       d}d}t        j                  j	                  ||«      } | |«      }|j                  |«      }|j                  |«      }|j                  |d¬«      d   }|j                  |d¬«      d   }t        ||«       y )Nr   rE  ro   r%  r°   rØ   )	Úpickler@   ru   rv   rw   ÚdumpsÚloadsr?   r   ©r   rö  rV   rQ   r1  r:  Útmpr<  s           r   Útest_kdtree_picklerû  M  s‘   € ãÜ‡I�I‡N�N�1ÔØ
€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÙ	�VÓ	€BØ
�,‰,�rÓ
€CØ	�‰�cÓ	€BØ	�‰�&˜AˆÓ	˜rÑ	"€BØ	�‰�&˜AˆÓ	˜rÑ	"€BÜ�r˜2Õr   c                 ó^  — dd l }t        j                  j                  d«       d}d}t        j                  j	                  ||f¬«      } | |d¬«      }|j                  |«      }|j                  |«      }|j                  |d¬«      d	   }|j                  |d¬«      d	   }t        ||«       y )
Nr   rE  ro   rö   r¼   )r-   r%  r°   rØ   )	rö  r@   ru   rv   rù   r÷  rø  r?   r   rù  s           r   Útest_kdtree_pickle_boxsizerý  [  sš   € ãÜ‡I�I‡N�N�1ÔØ
€AØ	€AÜ�Y‰Y×Ñ Q¨ FÐÓ+€FÙ	�V SÔ	)€BØ
�,‰,�rÓ
€CØ	�‰�cÓ	€BØ	�‰�&˜AˆÓ	˜rÑ	"€BØ	�‰�&˜AˆÓ	˜rÑ	"€BÜ�r˜2Õr   c                 ót  — t         j                  j                  d«       d}d}t         j                  j                  ||«      } | |d¬«      }|j	                  «       }|j                  |d¬«      d   }t         j                  j                  ||«      |d	<   |j                  |d¬«      d   }t        ||«       y )
Nr   r,  ro   T)Ú	copy_datar%  r°   rØ   .)r@   ru   rv   rw   Úcopyr?   r   )r   rV   rQ   r1  rÊ   rÎ   r:  r<  s           r   Útest_kdtree_copy_datar  i  s—   € ô ‡I�I‡N�N�1ÔØ€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÙ�F dÔ+€AØ�‰‹€AØ	
�‰��aˆ‹˜Ñ	€BÜ—)‘)—/‘/ ! QÓ'€Fˆ3�KØ	
�‰��aˆ‹˜Ñ	€BÜ�r˜2Õr   c                 ó
  — t         j                  j                  d«       d}d}t         j                  j                  ||«      } | |«      }|j	                  |dd¬«      d   }|j	                  |dd¬«      d   }|j	                  |d¬«      d   }t        ||«       t        ||«       |j                  t        d	d
„ «       t        j                  t        d¬«      5  |j	                  |dd¬«       d d d «       y # 1 sw Y   y xY w)Nr   r,  ro   r%  r/  )rQ   r.  rØ   r°   Ú	cpu_countc                   ó   — y r   rj   rj   r   r   ú<lambda>z'test_ckdtree_parallel.<locals>.<lambda>…  s   � r   zCannot determine ther½   r   r-  )r@   ru   rv   rw   r?   r   ÚsetattrÚosr¿   r	   ÚNotImplementedError)	r   ÚmonkeypatchrV   rQ   r1  rÊ   r:  r<  rò  s	            r   Útest_ckdtree_parallelr
  x  sà   € ä‡I�I‡N�N�1ÔØ€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÙ�FÓ€AØ	
�‰�˜1 bˆÓ	)¨"Ñ	-€BØ	
�‰�˜1 bˆÓ	)¨"Ñ	-€BØ	
�‰�˜1ˆÓ	˜bÑ	!€BÜ�r˜2ÔÜ�r˜2Ôà×Ñœ˜K©Ô6Ü	�‰Ô*Ð2HÔ	Iñ 'Ø	�‰�˜ 2ˆÔ&÷'÷ 'ñ 'ús   ÃC9Ã9Dc                  ó²  ‡‡— t         j                  j                  d«       d} d}t         j                  j                  | |«      }t	        |«      Šˆˆfd„Š ‰‰j
                  «       ‰j
                  } t        t        j                  | j                  «      t        d«      «       t        ‰j                  | j                  d d …f   | j                  «       y )Nr   rn   ro   c                 óJ  •— t        t        | t        «      «       | j                  dk(  r^t        | j                  d u «       t        | j
                  d u «       t        | j                  j                  d   ‰j                  k  «       y  ‰| j                  «        ‰| j
                  «       | j                  j                  d d …| j                  f   }| j
                  j                  d d …| j                  f   }t        |j                  «       |j                  «       k  «       y )NrØ   r   )r   rŸ   r   Ú	split_dimÚlesserrt  Úindicesrª   rr   Údata_pointsÚmaxÚmin)rV   r=   r  r>   Úrecurse_trees      €€r   r  z'test_ckdtree_view.<locals>.recurse_tree•  sÇ   ø€ Ü”
˜1œkÓ*Ô+Ø�;‰;˜"ÒÜ�A—H‘H Ð$Ô%Ü�A—I‘I Ð%Ô&Ü�A—I‘I—O‘O AÑ&¨&¯/©/Ñ9Õ:á˜Ÿ™Ô"Ù˜Ÿ™Ô#Ø—‘×$Ñ$¢Q¨¯© ^Ñ4ˆAØ—	‘	×%Ñ%¢a¨¯© nÑ5ˆAÜ�A—E‘E“G˜aŸe™e›gÑ%Õ&r   )r@   ru   rv   rw   r   r$   r   Úsortr  r0  rB   r  )rV   rQ   r1  r>   r  s      @@r   Útest_ckdtree_viewr  Š  s’   ù€ ô ‡I�I‡N�N�1ÔØ€AØ	€AÜ�Y‰Y�_‰_˜Q Ó"€FÜ�V‹_€Fõ'ñ �—‘Ôà�‰€AÜ”r—w‘w˜qŸy™yÓ)¬5°«:Ô6ä�v—{‘{ 1§9¡9ªa <Ñ0°!·-±-Õ@r   c                 óV  — d}d}g d¢}d}t         j                  j                  d«       t         j                  j                  ||f¬«      } | |d¬«      }|j	                  ||«      \  }}|j	                  ||«      \  }	}
t        ||	«       t        ||
«       t        j                  ddg«      }d}|j	                  ||«      \  }}|j	                  ||«      \  }	}
t        |	|d	|dz
  f   «       t        |
|d	|dz
  f   «       |j	                  |d«      \  }}|j	                  |dg«      \  }	}
t        t        |j                  «      d«       t        t        |	j                  «      d«       t        |t        j                  |	«      «       t        |t        j                  |
«      «       y )
NéÈ   r9   )r   r9   r�   r�   rp   rö   r   rq   .)
r@   ru   rv   rù   r?   r   r�   r†  rª   rê  )r   rV   rI   ÚklistÚkintrB   r>   rL   rM   Údd1Úii1s              r   Útest_kdtree_list_kr  ¬  sn  € à€AØ	€AÚ€EØ€Dä‡I�I‡N�N�4ÔÜ�9‰9×Ñ 1 a &ÐÓ)€DÙ˜¨Ô*€Fð �\‰\˜$ Ó&�F€BˆØ�|‰|˜D $Ó'�H€CˆÜ��SÔÜ��SÔô �H‰H�a˜�VÓ€EØ€DØ�\‰\˜$ Ó%�F€BˆØ�|‰|˜D %Ó(�H€CˆÜ��b˜˜e a™i˜Ñ(Ô)Ü��b˜˜e a™i˜Ñ(Ô)ð �\‰\˜$ Ó"�F€BˆØ�|‰|˜D 1 #Ó&�H€CˆÜ”�R—X‘X“ Ô"Ü”�S—Y‘Y“ Ô#Ü�”R—X‘X˜c“]Ô#Ü�”R—X‘X˜c“]Õ#r   rt   c                 ó:  — d}d}d}t         j                  j                  d«       t         j                  j                  ||f¬«      } | |dd¬«      } | |d¬«      }dd	d
t         j                  fD ]¨  }|j                  |||¬«      \  }}	|j                  |dz   ||¬«      \  }
}t        ||
«       t        |	|«       |j                  |dz
  ||¬«      \  }
}t        ||
«       t        |	|«       t        |||d|¬«      \  }}t        ||«       t        |	|«       Œª y )NéÐ  r�   rp   rö   r   r¼   rø   rq   r9   g      @©r,   )r-   r,   )	r@   ru   rv   rù   rX   r?   r   r   Úsimulate_periodic_box)r   rV   rI   rQ   rB   r>   Úkdtree2r,   rL   rM   r  r  Údd2Úii2s                 r   Útest_kdtree_boxr$  Î  s  € ð 	€AØ	€AØ	€AÜ‡I�I‡N�N�4ÔÜ�9‰9×Ñ 1 a &ÐÓ)€DÙ˜¨°3Ô7€Fñ ˜$¨Ô+€Gà��CœŸ™Ð ò ˆØ—‘˜d A¨�Ó+‰ˆˆBà—<‘<  s¡
¨A°�<Ó3‰ˆˆSÜ˜B Ô$Ü�R˜Ôà—<‘<  s¡
¨A°�<Ó3‰ˆˆSÜ˜B Ô$Ü�R˜Ôä(¨°$¸À3È!ÔL‰ˆˆSÜ˜B Ô$Ü�R˜Õñr   c                 óx  — d}d}d}t         j                  j                  d«       t         j                  j                  ||f¬«      } | |dd¬«      } | |d¬	«      }ddt         j                  fD ]H  }|j                  |||¬
«      \  }}	|j                  |||¬
«      \  }
}t        ||
«       t        |	|«       ŒJ y )Nr  r9   r�   rp   rö   r   rÔ   rø   rq   r  )r@   ru   rv   rù   rX   r?   r   r   )r   rV   rI   rQ   rB   r>   r!  r,   rL   rM   r  r  s               r   Útest_kdtree_box_0boxsizer&  ê  sµ   € à€AØ	€AØ	€AÜ‡I�I‡N�N�4ÔÜ�9‰9×Ñ 1 a &ÐÓ)€DÙ˜¨°3Ô7€Fñ ˜$¨Ô+€Gà�”B—F‘Fˆ^ò ˆØ—‘˜d A¨�Ó+‰ˆˆBà—=‘=  q¨A�=Ó.‰ˆˆSÜ˜B Ô$Ü�R˜Õñr   c                 ón  — t        j                  ddd«      j                  dd«      }|d d …dfxx   dz  cc<   t        j                  t
        «      5   | |dd¬«       d d d «       t        j                  t
        «      5   | |dd¬«       d d d «        | |dd	¬«       y # 1 sw Y   ŒBxY w# 1 sw Y   Œ!xY w)
Nr   r9   rt   rØ   r   r¼   rø   )rÔ   rî   )rî   rÔ   )r@   r�  Úreshaper¿   r	   rÀ   ©r   rB   s     r   Útest_kdtree_box_upper_boundsr*  ý  s›   € Ü�;‰;�q˜!˜RÓ ×(Ñ(¨¨QÓ/€DØŠˆAˆƒJ�"ÑƒJÜ	�‰”zÓ	"ñ 3Ù�D 1¨cÕ2÷3ä	�‰”zÓ	"ñ :Ù�D 1¨jÕ9÷:ñ �˜q¨*Ö5÷3ð 3ú÷:ð :ús   ÁBÁ?B+ÂB(Â+B4c                 óZ   — t        j                  ddd«      }t        t        | |dd¬«       y )NrØ   r   rt   r¼   rø   )r@   r�  Úassert_raisesrÀ   r)  s     r   Útest_kdtree_box_lower_boundsr-    s$   € Ü�;‰;�r˜1˜bÓ!€DÜ”*˜k¨4¸!ÀSÖIr   c                 óü  — g }g }t        j                  d|j                  d   z  «      }t        j                  t        j                  |dg|j                  d   z  «      «      j
                  }|dz
  }|D ]j  }	||	dz  |z  z   }
| j                  |
||¬«      \  }}|j                  d|«      }|j                  d|«      }|j                  |«       |j                  |«       Œl t        j                  |d¬«      }t        j                  |d¬«      }t        j                  t        |«      t        |«      |z  gddg¬	«      }||d
   d d  ||d   d d  |j                  d¬«       |d   d d …d |…f   |d
   d d …d |…f   fS )Nr�   r   r¼   r  rØ   r;   )rM   Úi8)rL   Úf8rå   rM   rL   )Úorder)r@   Úarangerª   r�   Úunravel_indexrÊ   r?   r(  ÚappendÚconcatenateÚemptyr†  r  )r>   rB   rQ   r-   r,   rL   rM   r=   ÚnnrV   Úimager"  r#  r“  s                 r   r   r     su  € Ø	€BØ	€BÜ
�	‰	�!�t—z‘z !‘}Ñ$Ó%€AÜ	�‰”"×"Ñ" 1 q c¨D¯J©J°q©MÑ&9Ó:Ó	;×	=Ñ	=€BØ	ˆc‰€BØò ˆØ�q˜3‘w Ñ(Ñ(ˆØ—<‘<  q¨A�<Ó.‰ˆˆSØ�k‰k˜"˜aÓ ˆØ�k‰k˜"˜aÓ ˆØ
�	‰	�#ŒØ
�	‰	�#�ðô 
�‰˜ Ô	$€BÜ	�‰˜ Ô	$€Bä�X‰X”s˜4“y¤# b£'¨A¡+Ð.ØØð7ô €Fð €Fˆ4�L‘€OØ€Fˆ4�L‘€OØ
‡K�K�d€KÔØ�$‰<š˜2˜A˜2˜Ñ  t¡ªQ°°°¨UÑ 3Ð3Ð3r   ÚPyPyz Fails on PyPy CI runs. See #9507)Úreasonc                  ó   — 	 dd l } d\  }}t        j                  t	        dd|z   |«      t	        dd|z   |«      f   \  }}t        j
                  |«      dz  t        j                  d||z  z   «      t        j                  |«      z  z   }t        j                  |«      }||d d  d}t        j                  j                  d|j                  t        j                  j                  d«      dz   «      }||j                  |<   t        j                  t        j                  ||k7  «      «      j                  }	t        j                  t        j                  ||k(  «      «      j                  }
| j                  | j                   «      j"                  }t%        d«      D ]  }t'        |	«      }Œ d}t%        d«      D ]y  }| j                  | j                   «      j"                  }t'        |	«      }|j)                  |
d	d
¬«      \  }}| j                  | j                   «      j"                  }||kD  sŒu|dz  }Œ{ t+        |dk  «       y # t        $ r Y y w xY w)Nr   )çš™™™™™©?r<  r   r%  rt   g     ÀX@rE  rn   ro   r9   )rQ   r,   )ÚresourceÚImportErrorr@   ré  ÚsliceÚsinÚcosÚ
empty_likeru   r  r÷   ÚflatÚvstackÚnonzerorÊ   Ú	getrusageÚRUSAGE_SELFÚ	ru_maxrssr0  r   r?   r   )r=  ÚdxÚdyr  r=   ÚzÚz_copyÚFILLVALÚmaskÚigoodÚibadÚmem_userE   r$   Ú	num_leaksrá   ÚiqueryÚnew_mem_uses                     r   Útest_ckdtree_memuserU  $  sù  € ðÛð
 �F€BˆÜ�8‰8”E˜!˜Q ™V RÓ(Ü˜!˜Q ™V RÓ(ð)ñ *�D€A€qä
�‰ˆq‹	�2‰œŸ™˜r A a¡C™xÓ(¬2¯6©6°!«9Ñ4Ñ4€AÜ�]‰]˜1Ó€FØ€F‰1€Ià€GÜ�9‰9×Ñ˜Q §¡¬¯	©	×(9Ñ(9¸"Ó(=ÀÑ(AÓB€DØ€F‡K�K�ÑÜ�I‰I”b—j‘j  g¡Ó.Ó/×1Ñ1€EÜ�9‰9”R—Z‘Z  W¡Ó-Ó.×0Ñ0€DØ× Ñ  ×!5Ñ!5Ó6×@Ñ@€Gä�2‹Yò ˆÜ�u‹~‰ðð €IÜ�3‹Zò ˆØ×$Ñ$ X×%9Ñ%9Ó:×DÑDˆÜ�u‹~ˆØ—z‘z $¨!¨q�zÓ1‰ˆˆfØ×(Ñ(¨×)=Ñ)=Ó>×HÑHˆØ˜Ó Ø˜‰N‰Iðô ˆI˜‰NÕøô? ò áðús   ‚I É	IÉIc                 óÈ  — t        j                  ddd«      j                  dd«      } | |d¬«      }t        j                  t	        |«      d¬«      }|j                  |«      }t        |g d¢«       t        t        |j
                  |d d «       t        d	«      D ]÷  }|j                  |t        j                  dd	|«      «      }|j                  |t        j                  dd	|«      ||f¬
«      }|j                  |t        j                  dd	|«      |d f¬
«      }|j                  |t        j                  dd	|«      d |f¬
«      }	|j                  |t        j                  dd	|«      |¬
«       t        ||«       t        ||«       t        ||	«       Œù t        t	        |«      «      D ]¸  }|j                  «       }
d|
|<   ||
dk7     } | |«      }|j                  |t        j                  dd	d«      |
|
f¬
«      }|j                  |t        j                  dd	d«      «      }t        ||«       t        t        |j                  |t        j                  dd	d«      |
¬
«       Œº y )Nr   r   ro   rØ   rq   Úf4rå   )ro   r9   r   r   r9   r   r   rt   )Úweightsrn   )r@   r�  r(  rç   r†  Ú_build_weightsr   r,  rÀ   r0  r…  r   )r   rB   Útree1rX  ÚnwrE   Úc1Úc2Úc3Úc4Úw1r>  Útree2s                r   Útest_kdtree_weightsrb  O  s:  € ä�;‰;�q˜!˜QÓ×'Ñ'¨¨AÓ.€DÙ˜ qÔ)€EÜ�g‰g”c˜$“i tÔ,€Gà	×	Ñ	˜gÓ	&€BÜ�rÒ0Ô1ä”*˜e×2Ñ2°G¸C¸R°LÔAä�2‹Yò #ˆà×"Ñ" 5¬"¯+©+°a¸¸QÓ*?Ó@ˆØ×"Ñ" 5¬"¯+©+°a¸¸QÓ*?Ø  'Ð*ð #ó ,ˆà×"Ñ" 5¬"¯+©+°a¸¸QÓ*?Ø  $˜ð #ó )ˆà×"Ñ" 5¬"¯+©+°a¸¸QÓ*?Ø˜w˜ð #ó )ˆà×Ñ˜e¤R§[¡[°°B¸Ó%:Øð 	ô 	!ô 	˜2˜rÔ"Ü˜2˜rÔ"Ü˜2˜rÕ"ð#ô  ”3�t“9Óò 8ˆà�\‰\‹^ˆØˆˆ1‰Ø�R˜1‘W‘ˆÙ˜EÓ"ˆà×"Ñ" 5¬"¯+©+°a¸¸SÓ*AØ˜R˜ð #ó "ˆð ×"Ñ" 5¬"¯+©+°a¸¸SÓ*AÓBˆä˜2˜rÔ"ô 	”j %×"7Ñ"7Ø”2—;‘;˜q " cÓ*°Bö	8ñ!8r   c                 ó.  — d}d}t         j                  j                  d«       t         j                  j                  ||f¬«      } | |d¬«      }g d¢}t        j                  t        |«      «      }|j                  ||«      }|j                  ||d¬	«      }t        ||j                  «       «       t        t        j                  |«      t        j                  |«      «      D ]/  \  }	}
|j                  ||
«      }t        ||t        |	«         «       Œ1 y )
Nr  r9   rp   rö   r   rq   )r   r�  r�  g{®Gáz”?r<  F©Ú
cumulative)r@   ru   rv   Únormalr2  r†  r…  r   ÚcumsumrW   Ú	itertoolsÚpermutationsr   r(  )r   rV   rI   rB   r>   Úr0Úi0Ún0ÚnncrE   r)  s              r   Ú&test_kdtree_count_neighbous_multiple_rrn  }  sì   € à€AØ	€AÜ‡I�I‡N�N�4ÔÜ�9‰9×Ñ ! Q ÐÓ(€DÙ˜¨Ô*€FÚ	$€BÜ	�‰”3�r“7Ó	€BØ	×	Ñ	 ¨Ó	+€BØ
×
 Ñ
  ¨¸Ð
 Ó
>€CÜ��S—Z‘Z“\Ô"ä”I×*Ñ*¨2Ó.Ü×*Ñ*¨2Ó.ó0ò +‰ˆˆ1ð ×"Ñ" 6¨1Ó-ˆÜ˜1˜b¤ a£™kÕ*ñ	+r   c                 ó  — t         j                  j                  d«      }|j                  dd«      }|j                  dd«      } | |«      }|j	                  ddgd¬«      \  }}|j                  ddgd|z  «      }t        |g «       |j	                  |d¬«      \  }}|j                  «       }|j                  |d|z  «      }t        j                  dt        ¬	«      }	|	j                  g «       t        |	|«        | |«      }
|j                  |
d|z  «      }	t        dg gz  |	«       |j                  |
d|z  «      }	t        |	d
k(  «       |j                  |
d|z  d¬«      }	t        |	t        j                  d«      k(  d«       |j                  |
d|z  d¬«      }	t        |	t        j                  d«      k(  d«       |j                  |
d|z  d¬«      }	t!        |	i «       |j                  |
d|z  d¬«      }	dt         j"                  fdt         j"                  fdt         j$                  fg}t        j&                  |d¬«      }t        j                  d|¬	«      }t        |	|«       |j	                  |d¬«      \  }}|d d …df   j                  «       }|j)                  d|z  d¬«      }	t!        |	t+        «       «       |j)                  d|z  d¬«      }	t        j                  dt         j"                  ¬	«      }t        |	|«       y )Nrp   rt   r9   r)   r   r°   rd   )rt   )rª   ræ   r   r·  r³  )rt   rt   Tr¸  r²  rµ  rE   r?  r¶  )Úalign)r   rØ   rÊ  )r   r9   )r@   ru   ÚRandomStateÚrandr?   rÜ   r   r  r6  ÚobjectÚfillr;  r…  r   rŸ  r©   r   ÚintpÚfloat64ræ   rÌ  rÊ  )r   ÚrngÚXÚYr$   r/   rE   rK  Úmindr  ÚotherÚ_dtypeÚ	res_dtypes                r   Útest_len0_arraysr~  �  s£  € ô �)‰)×
Ñ
 Ó
%€CØ�‰��Q‹€AØ�‰��Q‹€AÙ�q‹>€Dà�:‰:�r˜2�h !ˆ:Ó$�D€A€qØ×Ñ˜r 2˜h¨¨A©Ó.€AÜ�q˜"Ôà�:‰:�a˜1ˆ:Ó�D€A€qØ�5‰5‹7€DØ×Ñ˜a  T¡Ó*€AÜ
�‰�v¤VÔ,€AØ‡F�Fˆ2„JÜ�q˜!Ôá˜‹N€EØ×Ñ˜U C¨¡HÓ-€AÜ�r˜2˜$‘w Ô"à×Ñ˜U C¨¡HÓ-€AÜˆA�‰F„Oà×#Ñ# E¨3¨t©8ÀÐ#ÓN€AÜ�qœBŸH™H XÓ.Ñ.°Ô5Ø×#Ñ# E¨3¨t©8ÀÐ#ÓN€AÜ�qœBŸH™H XÓ.Ñ.°Ô5Ø×#Ñ# E¨3¨t©8ÀÐ#ÓH€AÜ��BÔØ×#Ñ# E¨3¨t©8ÀÐ#ÓK€AØ”B—G‘Gˆn˜s¤B§G¡G˜n¨s´B·J±JÐ.?Ð@€FÜ—‘˜ tÔ,€IÜ
�‰�u IÔ.€AÜ�q˜!Ôà�:‰:�a˜1ˆ:Ó�D€A€qØŠQ�ˆU‰8�<‰<‹>€DØ×Ñ˜˜T™¨uÐÓ5€AÜ�”C“EÔØ×Ñ˜˜T™¨yÐÓ9€AÜ
�‰�v¤R§W¡WÔ-€AÜ�q˜!Õr   c           
      ó`  — d}t        dd«      D �]  }t        j                  ||f«      }d||dz  d  t        j                  dd¬«      D ]à  \  }} | |||d¬«      }|j
                  dk(  sJ ‚| t        u r|j                  n|j                  j                  }t        t        j                  |j                  j                  «      t        j                  d	|dz  «      «       t        t        j                  |j                  j                  «      t        j                  |dz  |«      «       Œâ �Œ y )
Ni   r   ræ  r9   ©FT)Úrepeat)r­  r®  rr   r�   r   )r0  r@   rç   rh  Úproductr÷   r   r$   Ú_noder   r  r  r  r2  rt  )r   rV   rI   rB   ÚbalancedÚcompactr>   r$   s           r   Útest_kdtree_duplicated_inputsr†  ¾  s  € à€AÜ�1�a‹[ó &ˆÜ�w‰w˜˜1�v‹ˆØˆˆQ�‰TˆUˆä!*×!2Ñ!2°=ÈÔ!Kò 	&ÑˆH�gÙ  °XØ/6ÀôDˆFà—;‘; !Ò#Ð#Ð#à#.´'Ñ#9�F—K’KØ—K‘K×%Ñ%ð ô Ü—‘˜Ÿ™×+Ñ+Ó,Ü—	‘	˜!˜Q !™VÓ$ô&ô Ü—‘˜Ÿ™×,Ñ,Ó-Ü—	‘	˜!˜q™& !Ó$õ&ò	&ñ	&r   c                 ó\   —  | dggd¬«      }t        t        |j                  |ddgd¬«       y )Nr   r   rq   rd   Frd  )r,  rÀ   r…  )r   r>   s     r   Ú'test_kdtree_noncumulative_nondecreasingrˆ  Õ  s1   € ñ
 ˜1˜#˜¨Ô+€Fä”*˜f×4Ñ4Ø��a� Uö,r   c                 óp  — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢gd¬«      } | |«      }|j                  |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«       y )N)rÔ   rÔ   rÔ   )rÚ  rÔ   rÔ   )rÔ   r¼   rÔ   )rÔ   rÚ  rÔ   )r¼   rÔ   rÔ   )r¼   r¼   rÔ   rv  rå   ro   rs   rP   rÔ   r�  )r@   r�   r?   r   rX   )r   ÚxyzÚckdtÚdeqÚieqs        r   Útest_short_knnrŽ  ß  sá   € ô �(‰(ÚÚÚÚÚÚðð ô€Cñ �sÓ€Dà�z‰z˜# ¸ˆzÓ=�H€Cˆä˜cØ”"—&‘&œ"Ÿ&™&¤"§&¡&Ð)Ø�”r—v‘vœrŸv™vÐ&Ø�”r—v‘vœrŸv™vÐ&Ø�”r—v‘vœrŸv™vÐ&Ø�”r—v‘vœrŸv™vÐ&Ø”—‘œŸ™¤§¡Ð(ð*õ+r   c                 ó  — t         j                  j                  d«       t         j                  j                  d¬«      }t         j                  j                  d¬«      } | |«      }t         j                  j	                  ddt        |«      ¬«      }|j                  ||«      }t        ||«      D ��cg c]  \  }}|j                  ||«      ‘Œ }}}t        ||«      D ]#  \  }	}
t        t        |	«      t        |
«      «       Œ% y c c}}w )Nrp   ©rn   r�   rö   r   ç333333Ó?)
r@   ru   rv   rf  rù   r†  rÜ   rW   r   rÓ  )r   rB   r?   r$   r/   ÚrvectorÚqiÚdiÚrscalarr*   r+   s              r   Útest_query_ball_point_vector_rr–  ø  s×   € ä‡I�I‡N�N�4ÔÜ�9‰9×Ñ ÐÓ*€DÜ�I‰I×Ñ (ÐÓ+€EÙ�tÓ€DÜ
�	‰	×Ñ˜!˜S¤s¨5£zÐÓ2€Aà×#Ñ# E¨1Ó-€GÜ;>¸uÀa»=×I±°°Rˆt×$Ñ$ R¨Õ,ÐI€GÑIÜ�G˜WÓ%ò 1‰ˆˆ1Üœ6 !›9¤f¨Q£iÕ0ñ1ùó Js   Â4Dc           	      óJ  — t         j                  j                  d«       t         j                  j                  d¬«      }t         j                  j                  d¬«      } | |«      }d}|j	                  ||d¬«      }|j	                  ||d¬«      D �cg c]  }t        |«      ‘Œ }}|D �cg c]  }t        |j	                  ||«      «      ‘Œ }	}|D �cg c]  }|j	                  ||d¬«      ‘Œ }
}t        ||«       t        ||	«       t        ||
«       y c c}w c c}w c c}w )Nrp   r�  rö   r‘  T©Úreturn_lengthF)r@   ru   rv   rf  rÜ   r†  r   )r   rB   r?   r$   r/   Úlengthrà   Úlength2r“  Úlength3Úlength4s              r   Útest_query_ball_point_lengthrž    s  € ä‡I�I‡N�N�4ÔÜ�9‰9×Ñ ÐÓ*€DÜ�I‰I×Ñ (ÐÓ+€EÙ�tÓ€DØ€Aà×"Ñ" 5¨!¸4Ð"Ó@€FØ#'×#8Ñ#8¸ÀÐQVÐ#8Ó#WÖX˜CŒs�3�xÐX€GÐXØ;@ÖA°RŒs�4×(Ñ(¨¨QÓ/Õ0ÐA€GÐAØJOÖPÀBˆt×$Ñ$ R¨¸$Ð$Õ?ÐP€GÐPÜ�v˜wÔ'Ü�v˜wÔ'Ü�v˜wÕ'ùò YùÚAùÚPs   ÂDÂ,"DÃD c                 ó2  — t         j                  j                  d«       t         j                  j                  d¬«      }t        j                  d«      dz  }t        j
                  t        j                  d«      d d d…   dz  «      d d d…   }t         j                  j                  d¬«      }t        j
                  |j                  «      j                  }|j                  d   |j                  d   k7  sJ ‚|j                  d   |j                  d   k7  sJ ‚ | |«      }|j                  ||d¬«      }|j                  ||d¬«      }t        ||«       |j                  |d	«      \  }	}
|j                  |d	«      \  }}t        |	|«       t        |
|«       y )
Nrp   r�  rö   rn   g{®Gáz¤?rØ   Tr˜  r   )r@   ru   rv   rf  r2  ÚascontiguousarrayrÊ   ÚstridesrÜ   r   r?   )r   rB   Úd_contiguousÚd_discontiguousÚquery_contiguousÚquery_discontiguousr$   Úlength1r›  Úd1Úi1Úd2Úi2s                r   Útest_discontiguousr«    s  € ä‡I�I‡N�N�4ÔÜ�9‰9×Ñ ÐÓ*€DÜ—9‘9˜S“> DÑ(€LÜ×*Ñ*ÜŸ)™) C›.©¨2¨Ñ.°Ñ5ó7Ù7;¸°tñ=€Oä—y‘y×'Ñ'¨XÐ'Ó6ÐÜ×.Ñ.Ð/?×/AÑ/AÓB×DÑDÐØ×&Ñ& rÑ*Ð.>×.FÑ.FÀrÑ.JÒJÐJÐJØ×"Ñ" 2Ñ&¨,×*>Ñ*>¸rÑ*BÒBÐBÐBá�tÓ€Dà×#Ñ#Ð$4Ø$0Àð $ó F€Gà×#Ñ#Ð$7Ø$3À4ð $ó I€Gô �w Ô(à�Z‰ZÐ(¨!Ó,�F€BˆØ�Z‰ZÐ+¨QÓ/�F€Bˆä�r˜2ÔÜ�r˜2Õr   zbalanced_tree, compact_nodes))TF)TT)FFr€  c                 óT  — t         j                  j                  d«       t        j                  d¬«      }t        j                  d¬«      }t        j                  d¬«      } | |||¬«      }|j                  |dd¬	«      }|d
k(  sJ ‚|j                  |d«      \  }}	|	j                  dk(  sJ ‚|j                  dk(  sJ ‚t        j                  |«      j                  «       sJ ‚|j                  |d
dg«      }
t        |
d
d
g«       |j                  |d«      }|j                  dk(  sJ ‚y )Nrp   )r   r�   )rª   )r   r�   r&  r¬  r‘  Tr˜  r   r9   )r9   r9   r   r'  )r@   ru   rv   r6  rç   rÜ   r?   rª   ÚisinfrC   r…  r   rŸ  )r   r­  r®  Úempty_v3Úquery_v3Úquery_v2r$   rš  rL   rM   ÚNr¡  s               r   Útest_kdtree_empty_inputr²  1  s  € ô ‡I�I‡N�N�4ÔÜ�x‰x˜fÔ%€HÜ�w‰w˜VÔ$€HÜ�w‰w˜VÔ$€Há�x¨}Ø%2ô4€Dà×"Ñ" 8¨SÀÐ"ÓE€FØ�QŠ;Ðˆ;à�Z‰Z˜ !Ó$�F€BˆØ�8‰8�vÒÐÐØ�8‰8�vÒÐÐÜ�8‰8�B‹<×ÑÔÐÐà×Ñ˜T A q 6Ó*€AÜ�q˜1˜a˜&Ô!à×#Ñ# D¨#Ó.€AØ�7‰7�fÒÐÑr   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú_Test_sorted_query_ball_pointc                 óÌ   — t         j                  j                  d«       t         j                  j                  dd«      | _        | j                  | j                  «      | _        y )Nrp   rn   r   )r@   ru   rv   rw   r=   r   r‹  rx   s    r   ry   z*_Test_sorted_query_ball_point.setup_methodO  s>   € Ü
�	‰	�‰�tÔÜ—‘—‘  aÓ(ˆŒØ×$Ñ$ T§V¡VÓ,ˆ�	r   c                 ó  — | j                   j                  | j                  dd¬«      }|D ]  }t        |t	        |«      «       Œ | j                  D ]5  }| j                   j                  |dd¬«      }t        |t	        |«      «       Œ7 y )Nr¼   T©Úreturn_sorted)r‹  rÜ   r=   r   rÓ  )r5   Ú	idxs_listÚidxsrß  s       r   Útest_return_sorted_Truez5_Test_sorted_query_ball_point.test_return_sorted_TrueT  s|   € Ø—I‘I×.Ñ.¨t¯v©v°rÈÐ.ÓNˆ	Øò 	3ˆDÜ˜t¤V¨D£\Õ2ð	3ð —&‘&ò 	3ˆBØ—9‘9×-Ñ-¨b°"ÀDÐ-ÓIˆDÜ˜t¤V¨D£\Õ2ñ	3r   c                 óˆ  — | j                   j                  | j                  d«      }|D ]  }t        |t	        |«      «       Œ | j                  D �cg c]  }| j                   j                  |d«      ‘Œ  }}| j                   j                  | j                  dd¬«      }t        ||«      D ]  \  }}t        ||«       Œ yc c}w )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¼   Fr·  N)r‹  rÜ   r=   r   rÓ  rW   )r5   r¹  rº  rß  Úidxs_list_singleÚidxs_list_FalseÚidxs0Úidxs1s           r   Útest_return_sorted_Nonez5_Test_sorted_query_ball_point.test_return_sorted_None]  s²   € ð —I‘I×.Ñ.¨t¯v©v°rÓ:ˆ	Øò 	3ˆDÜ˜t¤V¨D£\Õ2ð	3ð JNÏÉÖPÀ2˜DŸI™I×6Ñ6°r¸2Õ>ÐPÐÐPØŸ)™)×4Ñ4°T·V±V¸RÈuÐ4ÓUˆÜ Ð1AÓBò 	-‰LˆE�5Ü˜u eÕ,ñ	-ùò Qs   Á#B?N)r   rh   ri   ry   r»  rÁ  rj   r   r   r´  r´  M  s   „ ò-ò
3ó-r   r´  c                  ó  — t         j                  j                  dd«      j                  t        «      } t        j                  t        d¬«      5  t        | «      }d d d «       t        | j                  «      }t        j                  t        d¬«      5  |j                  | «       d d d «       t        j                  t        d¬«      5  |j                  | d¬«       d d d «       y # 1 sw Y   Œ‹xY w# 1 sw Y   ŒMxY w# 1 sw Y   y xY w)Nrt   r9   zcomplex datar½   r   rÛ  )r@   ru   rr  ÚviewÚcomplexr¿   r	   Ú	TypeErrorr   Úrealr?   rÜ   ©r1  Úts     r   Útest_kdtree_complex_datarÉ  k  sÈ   € ä�Y‰Y�^‰^˜B Ó"×'Ñ'¬Ó0€Fä	�‰”y¨Ô	7ñ Ü�6‹Nˆ÷ô 	ˆv�{‰{Ó€Aä	�‰”y¨Ô	7ñ Ø	�‰�Œ÷ô 
�‰”y¨Ô	7ñ (Ø	×Ñ˜6 QÐÔ'÷(ð (÷ð ú÷
ð ú÷(ð (ús$   ÁC%ÂC1ÃC=Ã%C.Ã1C:Ã=Dc                  óz  — t         j                  j                  d«       t         j                  j                  dd«      } t	        | «      }|j
                  }t        |t        j                  «      sJ ‚|j                  | j                  d   k(  sJ ‚|g}|�r¥|j                  d«      }t        |t        j                  «      rot        |j                  t        «      sJ ‚|j                  t        |j                  «      k(  sJ ‚t        | |j                     |j                   j"                  «       �nt        |t        j                  «      sJ ‚t        |j$                  t        «      sJ ‚d|j$                  cxk  r|j&                  k  sJ ‚ J ‚t        |j(                  t*        «      sJ ‚t        |j                  t        «      sJ ‚|j                  |j,                  j                  |j.                  j                  z   k(  sJ ‚|j1                  |j.                  «       |j1                  |j,                  «       |r�Œ¤y y )Nrp   rn   ro   r   rØ   )r@   ru   rv   rr  r   r$   rŸ   Ú	innernodeÚchildrenrª   ÚpopÚleafnoderÆ   r†  Úidxr   rƒ  r  r  rI   rp  r    rs  rt  r4  )r1  rÈ  Úrootrï  rV   s        r   Útest_kdtree_tree_accessrÑ  {  sš  € ä‡I�I‡N�N�4ÔÜ�Y‰Y�^‰^˜C Ó#€FÜˆv‹€AØ�6‰6€Dä�dœF×,Ñ,Ô-Ð-Ð-Ø�=‰=˜FŸL™L¨™OÒ+Ð+Ð+ð ˆF€EÚ
Ø�I‰I�b‹Mˆä�aœŸ™Ô)Ü˜aŸj™j¬#Ô.Ð.Ð.Ø—:‘:¤ Q§U¡U£Ò+Ð+Ð+Ü˜v a§e¡e™}¨a¯g©g×.AÑ.AÖBä˜a¤×!1Ñ!1Ô2Ð2Ð2Ü˜aŸk™k¬3Ô/Ð/Ð/Ø˜Ÿ™Ô) a§c¡cÒ)Ð)Ñ)Ð)Ð)Ü˜aŸg™g¤uÔ-Ð-Ð-Ü˜aŸj™j¬#Ô.Ð.Ð.Ø—:‘: §¡§¡°1·9±9×3EÑ3EÑ!EÒEÐEÐEØ�L‰L˜Ÿ™Ô#Ø�L‰L˜Ÿ™Ô õ r   c                  ó¦  — t         j                  j                  d«       t         j                  j                  dd«      } t	        | «      }t        |j                  t        «      sJ ‚|j                  | j                  d   k(  sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  d   k(  sJ ‚t        |j                  t        «      sJ ‚|j                  dk(  sJ ‚t        |j                  t        j                  | d¬«      «       t        |j                  t        j                  | d¬«      «       |j                   | u sJ ‚y )Nrp   rn   ro   r   r   rt   r;   )r@   ru   rv   rr  r   rŸ   rI   rÆ   rV   rª   rr   r   rq  rJ   rr  ÚaminrB   rÇ  s     r   Útest_kdtree_attributesrÔ  ™  sõ   € ä‡I�I‡N�N�4ÔÜ�Y‰Y�^‰^˜C Ó#€FÜˆv‹€Aä�a—c‘cœ3ÔÐÐØ�3‰3�&—,‘,˜q‘/Ò!Ð!Ð!ä�a—c‘cœ3ÔÐÐØ�3‰3�&—,‘,˜q‘/Ò!Ð!Ð!ä�a—j‘j¤#Ô&Ð&Ð&Ø�:‰:˜ÒÐÐä�q—w‘w¤§¡¨°QÔ 7Ô8Ü�q—v‘vœrŸw™w v°AÔ6Ô7Ø�6‰6�VÑÐÑr   Úkdtree_classc           
      óæ  — t         j                  j                  d«      }t        j                  ddd«      }|j                  d«      j	                  d«      }|j                  d«      j	                  d«      }|j                  d«      }|j                  d	«      } | |«      } | |«      }|j                  ||d
||f¬«      }	|d d d …f   |d d …d f   z  }
t         j                  j                  |d d d …d d …f   |d d …d d d …f   z
  d¬«      }t        t        j                  dg|d d «      |«      D ��cg c]&  \  }}t        j                  |
||k  ||k  z     «      ‘Œ( }}}t        |	|«       y c c}}w )Nrp   r<  r   é   )r~  r�   é-   )é   r�   r~  rÙ  F)re  rX  rØ   r;   r   )r@   ru   rq  r2  r(  r…  Úlinalgrâ   rW   rh  ÚchainrA   r   )rÕ  rw  r)  ÚAÚBÚwAÚwBÚkdAÚkdBÚnABrX  rá   Úprev_radiusÚradiusÚexpects                  r   Ú$test_kdtree_count_neighbors_weightedræ  ­  sV  € ä
�)‰)×
Ñ
 Ó
%€CÜ
�	‰	�$˜˜4Ó €Aà�
‰
�2‹×Ñ˜uÓ%€AØ�
‰
�2‹×Ñ˜vÓ&€Aà	�‰�A‹€BØ	�‰�B‹€Bá
�q‹/€CÙ
�q‹/€Cà
×
Ñ
˜c 1°ÀÀBÀÐ
Ó
H€Cð �’q�‰k˜Bšq $˜w™KÑ'€GÜ�9‰9�>‰>˜!˜D¢!¢Q˜J™-¨!ªA¨t²Q¨J©-Ñ7¸bˆ>ÓA€Dä),¬Y¯_©_¸a¸SÀ!ÀCÀRÀ&Ó-IÈ1Ó)M÷OÙ%�+˜vô �f‰f�W˜k¨DÑ0°T¸V±^ÑDÑEÕFð O€Fñ Oä�C˜Õ ùóOs   Ä2+E-c                  ó  — g d¢} t        | «      }t        j                  | t        j                  |t        j                  «      g«      d d …d f   }t        j                  t        d¬«      5  t        |«       d d d «       y # 1 sw Y   y xY w)N)
r   r%  iöÿÿÿr~  éüÿÿÿiðÿÿÿiúÿÿÿé   r�   iõÿÿÿúmust be finiter½   )	r†  r@   r5  rú   Únanr¿   r	   rÀ   r   )ÚvalsrV   rB   s      r   Útest_kdtree_nanrí  Å  sf   € Ú1€DÜˆD‹	€AÜ�>‰>˜4¤§¡¨¬B¯F©FÓ!3Ð4Ó5²a¸°gÑ>€DÜ	�‰”zÐ)9Ô	:ñ ÜˆtŒ÷÷ ñ ús   Á+B Â B	c                  ó  — t         j                  j                  d«      } | j                  ddd¬«      }t	        |dd¬«      }t        d«      D �cg c]  }t         j                  ‘Œ }}t        j                  t        d	¬
«      5  |j                  |«       d d d «       t        j                  t        d	¬
«      5  |j                  |d«       d d d «       t         j                  |dd d …f<   t        j                  t        d	¬
«      5  t	        |dd¬«       d d d «       t        j                  t        d	¬
«      5  t	        |dd¬«       d d d «       t        j                  t        d	¬
«      5  t	        |dd¬«       d d d «       t        j                  t        d	¬
«      5  t	        |dd¬«       d d d «       y c c}w # 1 sw Y   �Œ%xY w# 1 sw Y   ŒûxY w# 1 sw Y   Œ¾xY w# 1 sw Y   Œ˜xY w# 1 sw Y   ŒrxY w# 1 sw Y   y xY w)Ni90  r�  rÔ   rd   )r÷   ÚlowÚhighFr¬  r�   rê  r½   r   r   T)r@   ru   Údefault_rngrù   r   r0  rë  r¿   r	   rÀ   r?   rÜ   )rw  ÚcoordsrÈ  r   Ú	bad_coords        r   Útest_nonfinite_inputs_gh_18223rô  Í  s¡  € Ü
�)‰)×
Ñ
 Ó
&€CØ�[‰[˜h¨C°cˆ[Ó:€FÜˆv U¸%Ô@€AÜ!& q£Ö*˜A”—“Ð*€IÐ*ä	�‰”zÐ)9Ô	:ñ Ø	�‰�	Ô÷ä	�‰”zÐ)9Ô	:ñ )Ø	×Ñ˜9 aÔ(÷)ô —6‘6€Fˆ1Šaˆ4�LÜ	�‰”zÐ)9Ô	:ñ @Üˆv T¸Õ?÷@ä	�‰”zÐ)9Ô	:ñ @Üˆv U¸$Õ?÷@ä	�‰”zÐ)9Ô	:ñ ?Üˆv T¸Õ>÷?ä	�‰”zÐ)9Ô	:ñ AÜˆv U¸%Õ@÷Að Aùò +÷ñ ú÷)ð )ú÷@ð @ú÷@ð @ú÷?ð ?ú÷Að AúsN   ÁF3ÂF8Â8GÄGÄ7GÅ)G)ÆG5Æ8GÇGÇGÇG&Ç)G2Ç5G>Úincantationc                 óà   —  G d„ dt         j                  «      }ddgddgddgg}t        j                  |«      } ||«      } | |d	«      }|j                  |d
«       |j	                  |d«       y )Nc                   ó   — e Zd Zd„ Zd„ Zy)útest_gh_18800.<locals>.ArrLikec                 ó\   — t        j                  |«      j                  | «      }d |_        |S r   )r@   rë  rÃ  rC   )ÚclsÚinput_arrayÚobjs      r   Ú__new__z&test_gh_18800.<locals>.ArrLike.__new__ê  s)   € Ü—*‘*˜[Ó)×.Ñ.¨sÓ3ˆCð ˆCŒGØˆJr   c                 ó.   — |€y t        |dd «      | _        y )NrC   )ÚgetattrrC   )r5   rü  s     r   Ú__array_finalize__z1test_gh_18800.<locals>.ArrLike.__array_finalize__ñ  s   € Øˆ{ØÜ˜s E¨4Ó0ˆD�Hr   N)r   rh   ri   rý  r   rj   r   r   ÚArrLikerø  é  s   „ ò	ó	1r   r  g®GázŽP@g…ëQ¸E@@g…ëQ¸…6@g¤p=
×c6@gÃõ(\�?@g=
×£pMT@rt   r   r  )r@   rµ  r�   r?   rÜ   )rõ  r  r1  r×  Úarr_liker$   s         r   Útest_gh_18800r  ã  ss   € ô1”"—*‘*ô 1ð 
�ˆØ	�ˆØ	�ˆð
€Fô
 �(‰(�6Ó
€CÙ�s‹|€HÙ�v˜rÓ"€DØ‡J�Jˆx˜ÔØ×Ñ˜( CÕ(r   )kr  Únumpy.testingr   r   r   r   r   r   r¿   r	   r,  Úplatformr
   Únumpyr@   Úscipy.spatialr   r   r   r   Úscipy.spatial._ckdtreer   r   rh  Úfixturer   r'   r0   r2   rl   r|   r…   r—   rš   rÃ   rÓ   rì   rñ   r   r  r  r  r  r  r  r*  r5  r7  rC  rG  rK  rO  rR  rU  rX  rx  rz  r|  r€  r‚  r–  r™  r¾  rÄ  rÈ  rÍ  rÏ  rÑ  rØ  rä  rì  rð  rô  rû  rý  r  r
  r  r  ÚmarkÚ	fail_slowr$  r&  r*  r-  r   ÚskipifrU  rb  rn  r~  r†  rˆ  rŽ  r–  rž  r«  Úparametrizer²  r´  rÉ  rÑ  rÔ  ræ  rí  rô  r  rj   r   r   ú<module>r     sì  ðó 
÷,÷ ,õ +Û Ý *Û ß EÓ EÝ .Ý ,ã à€‡�˜ Ð(Ô)ñó *ðòò(÷H-ñ H-ðV ô	Ð#ó 	ó ð	ð ô,�|ó ,ó ð,ð ô&Ð"ó &ó ð&ð: ô>˜+ó >ó ð>÷+)ñ +)÷Z-7ñ -7÷^>ñ >ð4 ô
Ð(ó 
ó ð
ð ô#
Ð!1ó #
ó ð#
ðL ôÐ)9ó ó ðð" ôÐ0ó ó ðð ôÐ(9ó ó ðð ôÐ-ó ó ðð ôÐ%?ó ó ðð ôÐ,ó ó ðð ôÐ.ó ó ðò'ò-÷&3ñ 3ð* ôÐ2ó ó ðð ôÐ&;ó ó ðð" ôÐ!7ó ó ðð ôÐ*Ió ó ðð ôÐ"8ó ó ðð ôÐ+Jó ó ð÷3ñ 3ò@KòBòGò:÷Fñ Fð$ ôFÐ7ó Fó ðF÷F@ñ F@ðR ôÐ#Eó ó ðò"Lò	ò#ò!ò$/ò
òB#ò
;ò5òòòòò'ò$AòD $ðD ‡�×Ñ�rÓñó ðò6ò&6òJò4ð2 ‡�×ÑÑ)Ó+¨vÑ5Ø=ð ó ?ñ'ó?ð'òR,8ð\ ‡�×Ñ�rÓñ+ó ð+ò$,ò\&ò.,ò+ò21ò(ò ð8 ‡�×ÑÐ7òóñ
óð
ð. ÷-ð -ó ð-ò:(ò !ò<ð( ‡�×Ñ˜¨&°'Ð):Ó;ñ!ó <ð!ò.òAð, ‡�×Ñ˜¨°&Ð(9Ó:ñ)ó ;ñ)r   