
    (ph                        S SK r S SKJrJrJrJrJrJr  S SKJ	r
  S SKrS SKJr  S SKrS SKJrJrJrJr  S SKJr  S SKJr  S SKr\R0                  " \\/S9S	 5       rS
 rS r " S S5      r\ " S S\5      5       r\ " S S\5      5       r\ " S S\5      5       r\ " S S\5      5       r  " S S5      r! " S S5      r" " S S5      r#\ " S S\#5      5       r$\ " S S\#5      5       r%\ " S  S!\#5      5       r&\ " S" S#\$5      5       r'\ " S$ S%\$5      5       r(\ " S& S'\$5      5       r)\ " S( S)\%5      5       r*\ " S* S+\$5      5       r+\ " S, S-\$5      5       r,S. r-S/ r. " S0 S15      r/\ " S2 S3\/5      5       r0\ " S4 S5\/5      5       r1\ " S6 S7\05      5       r2\ " S8 S9\15      5       r3\ " S: S;\05      5       r4\ " S< S=\15      5       r5 " S> S?5      r6S@ r7SA r8SB r9SC r: " SD SE5      r;\ " SF SG\;5      5       r< " SH SI5      r=\ " SJ SK\=5      5       r>SL r?SM r@SN rASO rBSP rCSQ rDSR rESS rFST rGSU rHSV rISW rJSX rKSY rLSZ rMS[ rN\R                  R                  S\5      S] 5       rQS^ rRS_ rSS` rTSa rU\R                  R                  \" 5       Sb:H  ScSd9Se 5       rWSf rX\R                  R                  S\5      Sg 5       rYSh rZSi r[Sj r\Sk r]Sl r^Sm r_Sn r`\R                  R                  So/ SpQ5      Sq 5       rb\ " Sr Ss5      5       rcSt rdSu reSv rf\R                  R                  Sw\\/5      Sx 5       rgSy rhSz ri\R                  R                  S{\\/5      S| 5       rjg)}    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                     U R                   $ N)param)requests    R/var/www/html/venv/lib/python3.13/site-packages/scipy/spatial/tests/test_kdtree.pykdtree_typer      s    ==    c                 0   U R                   R                  S5      (       d  [        S5      e[        [        4 HZ  nU R                   SS S-   UR                   -   nU[        5       ;   a  [        SU-   5      e[        X 4SU05      nU[        5       U'   M\     U $ )zClass 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!LL$s*T]]:		!7)CDD F]D,AB	(	) " Jr   c                 p    X-
  nXDSU-  :  ==   U-  ss'   XDSU-  :  ==   U-  ss'   [        USU5      nU$ )N      ?g      r   r   )abpboxsizediffds         r   distance_boxr0   +   sJ    5Dg	')w	7*4A&AHr   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)ConsistencyTests2   c                     [        XU5      $ r   r   selfr*   r+   r,   s       r   distanceConsistencyTests.distance3       !!**r   c                    U R                   nU R                  R                  US5      u  p#[        US-  [        R
                  " XR                  U   -
  S-  5      5        Sn[        [        R                  " [        R
                  " U R                  U[        R                  S S 24   -
  S-  SS9US-  U-
  :  5      5        g )Nr      :0yE>axis)
xkdtreequeryr   npsumdatar   allnewaxis)r6   r?   r/   iepss        r   test_nearestConsistencyTests.test_nearest6   s    FF{{  A&AqD"&&!IIaL.1)<"=>rvvtyy2::q=)99A=AFAcQRSr   c                    U R                   nU R                  nU R                  R                  X5      u  p4[        R
                  " U5      nU[        R                  " U5         n[        US-  [        R                  " XR                  U   -
  S-  5      5        Sn[        [        R                  " [        R                  " U R                  U[        R                  S S 24   -
  S-  SS9US-  U-   :  5      U5        g )Nr;   r<   r   r=   )r?   mr@   rA   rB   amaxargmaxr   rC   rD   r   rF   )r6   r?   rL   ddiir/   rG   rH   s           r   test_m_nearestConsistencyTests.test_m_nearest=   s    FFFF""1(GGBKryy}AqD"&&!IIaL.1)<"=>FF266499Qrzz1}%559BQT#XMN	
r   c           	         U R                   nU R                  nU R                  R                  XR                  R                  US9u  p4SnSn[        X45       Hn  u  pxU[        R                  :X  a  M  US-  n[        US-  [        R                  " XR                  U   -
  S-  5      5        [        XrU-   :  SUS SUS 35        Mp     [        [        R                  " U R                  U R                  US5      US-  U-   :  5      U5        g )	Nkdistance_upper_boundr<   r   r   r;   near_d=g should be less than )r?   r/   r@   rA   nziprB   infr   rC   rD   r   r   r7   	r6   r?   r/   rO   rP   rH   hitsnear_dnear_is	            r   test_points_near!ConsistencyTests.test_points_nearJ   s    FFFF""1A"N!"kNFAID	2661YYv5F3F2J+KLFsUNgfQZ7LQqE$RS * 	RVVDMM$))Q:QT#XEFMr   c           	         U R                   nU R                  nU R                  R                  XR                  R                  SUS9u  p4SnSn[        X45       Ha  u  pxU[        R                  :X  a  M  US-  n[        XpR                  XR                  U   S5      5        [        XrU-   :  SUS SUS 35        Mc     [        [        R                  " U R                  U R                  US5      X%-   :  5      U5        g )Nr   rU   r,   rV   r<   r   rW   rX   rY   )r?   r/   r@   rA   rZ   r[   rB   r\   r   r7   rD   r   r   rC   r]   s	            r   test_points_near_l1$ConsistencyTests.test_points_near_l1X   s    FFFF""1QR"S!"kNFAIDa69JA(NOFsUNgfQZ7LQqE$RS * 	RVVDMM$))Q:QUBCTJr   c           	      R   U R                   nU R                  nU R                  R                  XR                  R                  [
        R                  US9u  p4SnSn[        X45       Ho  u  pxU[
        R                  :X  a  M  US-  n[        XpR                  XR                  U   [
        R                  5      5        [        XrU-   :  SUS SUS 35        Mq     [        [
        R                  " U R                  U R                  U[
        R                  5      X%-   :  5      U5        g )Nrd   r<   r   r   rW   rX   rY   )r?   r/   r@   rA   rZ   rB   r\   r[   r   r7   rD   r   r   rC   r]   s	            r   test_points_near_linf&ConsistencyTests.test_points_near_linff   s    FFFF""1VW"X!"kNFAIDa69JBFF(STFsUNgfQZ7LQqE$RS * 	RVVDMM$))Q?!%GH$Or   c                     U R                   nU R                  nSnU R                  R                  X5      u  pEU R                  R                  XUS9u  pg[	        [
        R                  " XdSU-   -  :*  5      5        g )N皙?rH   r   )r?   rU   r@   rA   r   rB   rE   )r6   r?   rU   rH   d_reali_realr/   rG   s           r   test_approxConsistencyTests.test_approxt   sf    FFFF**10{{  3 /qAcEN*+,r    N)r   
__module____qualname____firstlineno__r7   rI   rQ   ra   re   rh   ro   __static_attributes__rq   r   r   r2   r2   2   s)    +T
NKP-r   r2   c                       \ rS rSrS rSrg)_Test_random}   c                    SU l         SU l        [        R                  R	                  S5        [        R                  R                  U R                   U R                  5      U l        U R                  U R                  SS9U l        [        R                  R                  U R                  5      U l	        SU l
        SU l        g )Nd        r;   leafsize皙?
   )rZ   rL   rB   randomseedrandnrD   r   r@   r?   r/   rU   r6   s    r   setup_method_Test_random.setup_method   s    
		tIIOODFFDFF3	&&tyy1&=(r   r/   rD   rU   r@   rL   rZ   r?   Nr   rr   rs   rt   r   ru   rq   r   r   rw   rw   }   s    r   rw   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_far   c                    > [         TU ]  5         [        R                  R	                  U R
                  5      S-   U l        g )Nr   )superr   rB   r   r   rL   r?   r6   	__class__s    r   r   _Test_random_far.setup_method   s+    (+r   )r?   r   rr   rs   rt   r   ru   __classcell__r   s   @r   r   r      s    , ,r   r   c                   &    \ rS rSrS rS rS rSrg)_Test_small   c                    [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      U l        U R                  U R                  5      U l        U R                  R
                  U l        U R                  R                  U l        [         R                  R                  S	5        [         R                  R                  S
5      U l
        SU l        SU l        g )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   r|      r)   r{   )rB   arrayrD   r   r@   rZ   rL   r   r   r   r?   r/   rU   r   s    r   r   _Test_small.setup_method   s    HHi''''''') *	 &&tyy1
		t#r   c                 P    [        U R                  R                  SS5      S5        g )Nr   r   rk   r   )rk   r   r   r@   rA   r   s    r   rI   _Test_small.test_nearest   s!    !!+q1	r   c                 \    [        U R                  R                  SS5      SS/SS/45        g )Nr   r;   rk   g?r   r   r   r   s    r   test_nearest_two_Test_small.test_nearest_two   s.    !!+q1saV$	&r   r   N)r   rr   rs   rt   r   rI   r   ru   rq   r   r   r   r      s    "
&r   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_small_nonleaf   c                 `   > [         TU ]  5         U R                  U R                  SS9U l        g )Nr   r}   )r   r   r   rD   r@   r   s    r   r    _Test_small_nonleaf.setup_method   s)    &&tyy1&=r   )r@   r   r   s   @r   r   r      s    > >r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
Test_vectorization_KDTree   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      U l        [        U R                  5      U l        g 	Nr   r   r   r   r   r   r   r   )rB   r   rD   r   r@   r   s    r   r   &Test_vectorization_KDTree.setup_method   s@    HHi''''''') *	 TYY'r   c                     U R                   R                  [        R                  " / SQ5      5      u  p[	        [        U[        5      5        [	        [        R                  " U[        R                  5      5        g Nr   )	r@   rA   rB   r   r   
isinstancefloat
issubdtypesignedintegerr6   r/   rG   s      r   test_single_query+Test_vectorization_KDTree.test_single_query   sI    {{  )!45
1e$%a!1!123r   c                     U R                   R                  [        R                  " S5      5      u  p[	        [        R
                  " U5      S5        [	        [        R
                  " U5      S5        g Nr;   r{   r   )r;   r{   r@   rA   rB   zerosr   shaper   s      r   test_vectorized_query/Test_vectorization_KDTree.test_vectorized_query   E    {{  )!45RXXa[&)RXXa[&)r   c           	         SnU R                   R                  U-   nU R                   R                  [        R                  " / SQ5      US9u  p4[        [        R                  " U5      U45        [        [        R                  " U5      U45        [        [        R                  " [        R                  " X1* S  5      ) 5      5        [        [        R                  " XA* S  U R                   R                  :H  5      5        g N   r   rU   )
r@   rZ   rA   rB   r   r   r   r   rE   isfiniter6   skkr/   rG   s        r   $test_single_query_multiple_neighbors>Test_vectorization_KDTree.test_single_query_multiple_neighbors   s    [[]]1_{{  )!4 ;RXXa[2%(RXXa[2%(AbcF++,-qv./0r   c                 .   SnU R                   R                  U-   nU R                   R                  [        R                  " S5      US9u  p4[        [        R                  " U5      SSU45        [        [        R                  " U5      SSU45        [        [        R                  " [        R                  " US S 2S S 2U* S 24   5      ) 5      5        [        [        R                  " US S 2S S 2U* S 24   U R                   R                  :H  5      5        g Nr   r   r   r;   r{   
r@   rZ   rA   rB   r   r   r   r   rE   r   r   s        r   (test_vectorized_query_multiple_neighborsBTest_vectorization_KDTree.test_vectorized_query_multiple_neighbors       [[]]1_{{  )!4 ;RXXa[1a*-RXXa[1a*-AaQBCiL1123qArs|t{{}}456r   c                     Sn[         R                  " [        SS9   U R                  R	                  US S9  S S S 5        g ! , (       d  f       g = f)N      ?zk must be an integer or*matchr   )pytestr	   
ValueErrorr@   rA   )r6   r?   s     r   test_query_raises_for_k_none6Test_vectorization_KDTree.test_query_raises_for_k_none   s:    ]]:-GHKKa4( IHHs   A  
ArD   r@   N)r   rr   rs   rt   r   r   r   r   r   r   ru   rq   r   r   r   r      s     	(4
*
17)r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
Test_vectorization_cKDTree   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      U l        [        U R                  5      U l        g r   )rB   r   rD   r   r@   r   s    r   r   'Test_vectorization_cKDTree.setup_method   s@    HHi''''''') *	 dii(r   c                     U R                   R                  / SQ5      u  p[        [        U[        5      5        [        [        U[
        5      5        g r   )r@   rA   r   r   r   intr   s      r   r   ,Test_vectorization_cKDTree.test_single_query   s6    {{  +
1e$%
1c"#r   c                     U R                   R                  [        R                  " S5      5      u  p[	        [        R
                  " U5      S5        [	        [        R
                  " U5      S5        g r   r   r   s      r   r   0Test_vectorization_cKDTree.test_vectorized_query   r   r   c                 H   [         R                  R                  S5        [         R                  R                  SS5      R                  nU R
                  R                  U5      u  p#[        XU5       H,  u  pEn[        U R
                  R                  U5      XV45        M.     g )Nr|   r     )	rB   r   r   r   Tr@   rA   r[   r   )r6   qsdsi_sqr/   rG   s          r   *test_vectorized_query_noncontiguous_valuesETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_values   sr    
		tYY__Q%''++##B'23'GA!**1-v6 (r   c           	         SnU R                   R                  U-   nU R                   R                  / SQUS9u  p4[        [        R
                  " U5      U45        [        [        R
                  " U5      U45        [        [        R                  " [        R                  " X1* S  5      ) 5      5        [        [        R                  " XA* S  U R                   R                  :H  5      5        g r   )	r@   rZ   rA   r   rB   r   r   rE   r   r   s        r   r   ?Test_vectorization_cKDTree.test_single_query_multiple_neighbors   s    [[]]1_{{  b 1RXXa[2%(RXXa[2%(AbcF++,-qv./0r   c                 .   SnU R                   R                  U-   nU R                   R                  [        R                  " S5      US9u  p4[        [        R                  " U5      SSU45        [        [        R                  " U5      SSU45        [        [        R                  " [        R                  " US S 2S S 2U* S 24   5      ) 5      5        [        [        R                  " US S 2S S 2U* S 24   U R                   R                  :H  5      5        g r   r   r   s        r   r   CTest_vectorization_cKDTree.test_vectorized_query_multiple_neighbors	  r   r   r   N)r   rr   rs   rt   r   r   r   r   r   r   ru   rq   r   r   r   r      s     	)$
*
717r   r   c                   *    \ rS rSrSrS rS rS rSrg)ball_consistencyi          c                 (    [        US-  US-  U5      $ Nr   r   r5   s       r   r7   ball_consistency.distance  s    !!c'1s7A66r   c                 t   [         R                  " U R                  5      n[         R                  " U R                  UR
                  S S 5      nU R                  R                  XR                  U R                  U R                  S9n[        U5       H  u  pEU R                  U R                  U   X   U R                  5      X$   SU R                  -   -  -
  nU R                  U R                  U   X   U R                  5      X$   SU R                  -   -  -   n[        X`R                  U-  :  S5        M     g )Nr,   rH   r   T)rB   
atleast_2dr?   broadcast_tor/   r   r   query_ball_pointr,   rH   	enumerater7   rD   r   tol)r6   r?   r/   lrG   inddistnorms           r   test_in_ballball_consistency.test_in_ball  s    MM$&&!OODFFAGGCRL1FF##AvvTXX#FlFA==3tvv>r$(({ASSD==3tvv>r$(({ASSDthho5t< #r   c                    [         R                  " U R                  5      n[         R                  " U R                  UR
                  S S 5      nU R                  R                  XR                  U R                  U R                  S9n[        U5       H  u  pE[         R                  " U R                  R                  [        S9nSXe'   U R                  U R                  U   X   U R                  5      X$   SU R                  -   -  -
  nU R                  U R                  U   X   U R                  5      X$   SU R                  -   -  -   n[!        XpR"                  * U-  :  S5        M     g )Nr   r   dtypeFr   T)rB   r   r?   r  r/   r   r   r  r,   rH   r  onesrZ   boolr7   rD   r   r  )	r6   r?   r/   r  rG   r  cr  r  s	            r   test_found_allball_consistency.test_found_all!  s   MM$&&!OODFFAGGCRL1FF##AvvTXX#FlFA-AAF==1qtTVV<qtR[?QQD==1qtTVV<qtR[?QQDtxxi$&66= #r   rq   N)	r   rr   rs   rt   r  r7   r	  r  ru   rq   r   r   r   r     s    
C7=	>r   r   c                       \ rS rSrS rSrg)_Test_random_balli,  c                 B   SnSn[         R                  R                  S5        [         R                  R                  X5      U l        U R                  U R                  SS9U l        [         R                  R                  U5      U l        SU l        SU l	        SU l
        g )	Nrz   r{   r|   r;   r}          @r   r   )rB   r   r   r   rD   r   r   r?   r,   rH   r/   r6   rZ   rL   s      r   r   _Test_random_ball.setup_method.  st    
		tIIOOA)	!!$))a!8#r   r   r/   rD   rH   r,   r?   Nr   rq   r   r   r  r  ,  s    	r   r  c                   ,    \ rS rSrS rS rS rS rSrg)_Test_random_ball_periodici:  c                     [        XUS5      $ r   r0   r5   s       r   r7   #_Test_random_ball_periodic.distance<      A!S))r   c                 2   SnSn[         R                  R                  S5        [         R                  R                  X4S9U l        U R                  U R                  SSS9U l        [         R                  " US5      U l        S	U l	        S
U l
        SU l        g )Ni'  r{   r|   sizer;   r   r~   r-   rk   r  r   r   )rB   r   r   uniformrD   r   r   fullr?   r,   rH   r/   r  s      r   r   '_Test_random_ball_periodic.setup_method?  sz    
		tII%%A6%2	!!$))a!CCr   c                    U R                   R                  U R                  S-   U R                  U R                  U R
                  S9nU H]  n[        U R                  U R                  U   U R                  U R                  5      U R                  SU R
                  -   -  :*  5        M_     U R                   R                  U R                  S-
  U R                  U R                  U R
                  S9nU H]  n[        U R                  U R                  U   U R                  U R                  5      U R                  SU R
                  -   -  :*  5        M_     g )Nr   r   )	r   r  r?   r/   r,   rH   r   r7   rD   )r6   r  rG   s      r   test_in_ball_outside/_Test_random_ball_periodic.test_in_ball_outsideJ  s    FF##DFFSL$&&DFF#QADMM$))A,?4662dhh;CWWX FF##DFFSL$&&DFF#QADMM$))A,?4662dhh;CWWX r   c                 :   [         R                  " U R                  R                  [        S9nU R                  R                  U R                  S-   U R                  U R                  U R                  S9nSX'   [         R                  " U R                  U R                  U   U R                  U R                  5      U R                  SU R                  -   -  :  5      (       d   eU R                  R                  U R                  S-
  U R                  U R                  U R                  S9nSX'   [         R                  " U R                  U R                  U   U R                  U R                  5      U R                  SU R                  -   -  :  5      (       d   eg )Nr  r   r   F)rB   r  r   rZ   r  r  r?   r/   r,   rH   rE   r7   rD   )r6   r  r  s      r   test_found_all_outside1_Test_random_ball_periodic.test_found_all_outsideR  s.   GGDFFHHD)FF##DFFSL$&&DFF#QvvMM$))A,74662dhh;;OO
 
 	
 
 FF##DFFSL$&&DFF#QvvMM$))A,74662dhh;;OO
 
 	
 
r   r  N)	r   rr   rs   rt   r7   r   r(  r+  ru   rq   r   r   r  r  :  s    *	Y
r   r  c                       \ rS rSrSrS rSrg)"_Test_random_ball_largep_issue9890ia  gvIh%<=c                     SnSn[         R                  R                  S5        [         R                  R                  SSX4S9U l        U R                  U R                  5      U l        U R                  U l        SU l        SU l	        SU l
        g )Nr   r;   {   rz   r!  r   r   )rB   r   r   randintrD   r   r   r?   r,   rH   r/   r  s      r   r   /_Test_random_ball_largep_issue9890.setup_methodg  sq    
		sII%%c4qf%=	!!$)),r   r  N)r   rr   rs   rt   r  r   ru   rq   r   r   r.  r.  a  s     C	r   r.  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_ball_approxis  c                 0   > [         TU ]  5         SU l        g Nrk   r   r   rH   r   s    r   r   %_Test_random_ball_approx.setup_methodv      r   rl   r   r   s   @r   r4  r4  s       r   r4  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )!_Test_random_ball_approx_periodici{  c                 0   > [         TU ]  5         SU l        g r6  r7  r   s    r   r   ._Test_random_ball_approx_periodic.setup_method~  r9  r   rl   r   r   s   @r   r<  r<  {  r:  r   r<  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_ball_fari  c                 0   > [         TU ]  5         SU l        g Nr  r   r   r/   r   s    r   r   "_Test_random_ball_far.setup_method      r   r/   r   r   s   @r   r@  r@         r   r@  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_ball_far_periodici  c                 0   > [         TU ]  5         SU l        g rB  rC  r   s    r   r   +_Test_random_ball_far_periodic.setup_method  rE  r   rF  r   r   s   @r   rI  rI    rG  r   rI  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_ball_l1i  c                 0   > [         TU ]  5         SU l        g )Nr   )r   r   r,   r   s    r   r   !_Test_random_ball_l1.setup_method      r   r,   r   r   s   @r   rM  rM         r   rM  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_ball_linfi  c                 L   > [         TU ]  5         [        R                  U l        g r   r   r   rB   r\   r,   r   s    r   r   #_Test_random_ball_linf.setup_method      r   rQ  r   r   s   @r   rT  rT         r   rT  c                 Z   SnSn[         R                  R                  S5        U " [         R                  R                  X5      5      nUR	                  [         R                  R                  SSU5      S5      n[        UR                  S5        [        [        US   [        5      5        g )	N      r|   r;   r   r   r;   r   r   r   )
rB   r   r   r   r  r   r   r   r   list)r   rZ   rL   r   rs        r   test_random_ball_vectorizedra    sw    
A	AIINN4BIIOOA)*A	299??1a3Q7A&!Jqw%&r   c                    [         R                  R                  S5        SnSn[         R                  R                  X5      nU " U5      nUR	                  USSS9nUR	                  USSS9nUR	                  USSS9n[        U5       H'  nXX   (       d  Xh   (       d  M  [        XX   Xh   5        M)     [        U5       H'  nXX   (       d  Xx   (       d  M  [        XX   Xx   5        M)     g )	Nr     r;   g~jth?r   workers@   r   )rB   r   r   r   r  ranger   )	r   rZ   rU   pointsr   l1l2l3rG   s	            r   $test_query_ball_point_multithreadingrl    s    IINN1A	AYY__Q"FFA	
		FE1		5B	
		FE2		6B	
		FE2		6B1X5BEErube,  1X5BEErube, r   c                   &    \ rS rSrS rS rS rSrg)two_trees_consistencyi  c                     [        XU5      $ r   r   r5   s       r   r7   two_trees_consistency.distance  r9   r   c                 t   U R                   R                  U R                  U R                  U R                  U R
                  S9n[        U5       He  u  p#U HZ  nU R                  U R                  U   U R                  U   U R                  5      U R                  SU R
                  -   -  ::  a  MZ   e   Mg     g )Nr   r   )
T1query_ball_treeT2r/   r,   rH   r  r7   data1data2)r6   r`  rG   r  js        r   test_all_in_ball&two_trees_consistency.test_all_in_ball  s    GG##DGGTVVtvv488#LaLDAdjjmTZZ]DFFK662dhh;/0 1 0  !r   c                    U R                   R                  U R                  U R                  U R                  U R
                  S9n[        U5       H  u  p#[        R                  " U R                  R                  [        S9nSXC'   [        R                  " U R                  U R                  U   U R                  U   U R                  5      U R                  SU R
                  -   -  :  5      (       a  M   e   g )Nr   r  Fr   )rr  rs  rt  r/   r,   rH   r  rB   r  rZ   r  rE   r7   rv  ru  )r6   r`  rG   r  r  s        r   r  $two_trees_consistency.test_found_all  s    GG##DGGTVVtvv488#LaLDA		.AAD66$--

1tzz!}dffM!VVR[12 3 3 3 3 !r   rq   N)r   rr   rs   rt   r7   rx  r  ru   rq   r   r   rn  rn    s    +13r   rn  c                       \ rS rSrS rSrg)_Test_two_random_treesi  c                    SnSn[         R                  R                  S5        [         R                  R                  X5      U l        U R                  U R                  SS9U l        [         R                  R                  X5      U l        U R                  U R                  SS9U l        SU l	        SU l
        SU l        g )	Nr3   r{   r|   r;   r}   r  r   r   )rB   r   r   r   ru  r   rr  rv  rt  r,   rH   r/   r  s      r   r   #_Test_two_random_trees.setup_method  s    
		tYY__Q*
""4::":YY__Q*
""4::":r   rr  rt  r/   ru  rv  rH   r,   Nr   rq   r   r   r}  r}    s    
r   r}  c                        \ rS rSrS rS rSrg)_Test_two_random_trees_periodici  c                     [        XUS5      $ r   r  r5   s       r   r7   (_Test_two_random_trees_periodic.distance  r  r   c                    SnSn[         R                  R                  S5        [         R                  R                  X4S9U l        U R                  U R                  SSS9U l        [         R                  R                  X4S9U l        U R                  U R                  SSS9U l        SU l	        S	U l
        S
U l        g )Nr3   r{   r|   r!  r;   r   r#  r  r   r   )rB   r   r   r$  ru  r   rr  rv  rt  r,   rH   r/   r  s      r   r   ,_Test_two_random_trees_periodic.setup_method  s    
		tYY&&QF&3
""4::3"GYY&&QF&3
""4::3"Gr   r  N)r   rr   rs   rt   r7   r   ru   rq   r   r   r  r    s    *
r   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_two_random_trees_fari  c                 0   > [         TU ]  5         SU l        g Nr;   rC  r   s    r   r   '_Test_two_random_trees_far.setup_method  rP  r   rF  r   r   s   @r   r  r    rR  r   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )#_Test_two_random_trees_far_periodici  c                 0   > [         TU ]  5         SU l        g r  rC  r   s    r   r   0_Test_two_random_trees_far_periodic.setup_method  rP  r   rF  r   r   s   @r   r  r    rR  r   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_two_random_trees_linfi  c                 L   > [         TU ]  5         [        R                  U l        g r   rV  r   s    r   r   (_Test_two_random_trees_linf.setup_method
  rX  r   rQ  r   r   s   @r   r  r    rY  r   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )$_Test_two_random_trees_linf_periodici  c                 L   > [         TU ]  5         [        R                  U l        g r   rV  r   s    r   r   1_Test_two_random_trees_linf_periodic.setup_method  rX  r   rQ  r   r   s   @r   r  r    rY  r   r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)Test_rectanglei  c                 .    [        SS/SS/5      U l        g Nr   r   )r   rectr   s    r   r   Test_rectangle.setup_method  s    q!fq!f-	r   c                 R    [        U R                  R                  SS/5      S5        g )Nr)   r   r   r  min_distance_pointr   s    r   test_min_insideTest_rectangle.test_min_inside  s    DII88#sDaHr   c                 R    [        U R                  R                  SS/5      S5        g Nr)   g      ?r  r   s    r   test_min_one_side Test_rectangle.test_min_one_side  s    DII88#sDcJr   c                 z    [        U R                  R                  SS/5      [        R                  " S5      5        g r  )r   r  r  rB   sqrtr   s    r   test_min_two_sides!Test_rectangle.test_min_two_sides"  s'    DII88!Q@"''!*Mr   c                     [        U R                  R                  SS/5      S[        R                  " S5      -  5        g )Nr)   r   r;   r   r  max_distance_pointrB   r  r   s    r   test_max_insideTest_rectangle.test_max_inside%  s,    DII88#sDaPQ
lSr   c                 |    [        U R                  R                  SS/5      [        R                  " SS5      5        g r  )r   r  r  rB   hypotr   s    r   test_max_one_side Test_rectangle.test_max_one_side(  s-    DII88#sDHHS#.	0r   c                     [        U R                  R                  SS/5      S[        R                  " S5      -  5        g r  r  r   s    r   test_max_two_sides!Test_rectangle.test_max_two_sides,  s+    DII88!Q@!BGGAJ,Or   c                     U R                   R                  SS5      u  p[        UR                  SS/5        [        UR                  SS/5        [        UR                  SS/5        [        UR                  SS/5        g )Nr   rk   r   )r  splitr   maxesmins)r6   lessgreaters      r   
test_splitTest_rectangle.test_split/  s`    		3/4::Qx0499q!f-7==1a&17<<#q2r   )r  N)r   rr   rs   rt   r   r  r  r  r  r  r  r  ru   rq   r   r   r  r    s/    .IKNT0P3r   r  c                  b    [        [        SS/SS/S5      [        R                  " S5      5        g Nr   r   r;   )r   r   rB   r  rq   r   r   test_distance_l2r  7  s&    *Aq6Aq61=rwwqzJr   c                  :    [        [        SS/SS/S5      S5        g r  )r   r   rq   r   r   test_distance_l1r  ;  s    *Aq6Aq61=qAr   c                  V    [        [        SS/SS/[        R                  5      S5        g r  )r   r   rB   r\   rq   r   r   test_distance_linfr  ?  s"    *Aq6Aq6266BAFr   c                     [         R                  R                  S5        [         R                  R                  SSS5      n [         R                  R                  SSS5      n[	        [        X5      R                  S5        g )Nr|   r   r   r      )r   r  )rB   r   r   r   r   r   r   )r?   ys     r   test_distance_vectorizationr  C  sT    IINN4
		Aq!A
		1a A#A)//9r   c                   &    \ rS rSrS rS rS rSrg)count_neighbors_consistencyiJ  c                    Sn[        U R                  R                  U R                  U5      [        R
                  " U R                  R                  U R                  U5       Vs/ s H  n[        U5      PM     sn5      5        g s  snf )Nr   r   rr  count_neighborsrt  rB   rC   rs  lenr6   r`  r  s      r   test_one_radius+count_neighbors_consistency.test_one_radiusK  s`    TWW,,TWWa8(?(?(KL(K1A(KLM	OL   %Bc                    Sn[        U R                  R                  U R                  U5      [        R
                  " U R                  R                  U R                  U5       Vs/ s H  n[        U5      PM     sn5      5        g s  snf )Nr   r  r  s      r   test_large_radius-count_neighbors_consistency.test_large_radiusP  s`    TWW,,TWWa8(?(?(KL(K1A(KLM	OLr  c                    [         R                  " [         R                  " [         R                  " S5      [         R                  " S5      S5      5      nU R                  R                  U R                  U5      n[        [         R                  " [         R                  " U5      S:  5      5        [        X5       H5  u  p4[        U R                  R                  U R                  U5      U5        M7     g )N{Gz?r   r   r   )rB   explinspacelogrr  r  rt  r   rE   r.   r[   r   )r6   rsresultsr`  results        r   test_multiple_radius0count_neighbors_consistency.test_multiple_radiusU  s    VVBKKtbffRj!<=''))$''26rwww'1,-.R)IA00!<fE *r   rq   N)r   rr   rs   rt   r  r  r  ru   rq   r   r   r  r  J  s    O
O
Fr   r  c                       \ rS rSrS rSrg)_Test_count_neighborsi\  c                    SnSn[         R                  R                  S5        U R                  [         R                  R	                  X5      SS9U l        U R                  [         R                  R	                  X5      SS9U l        g )Nr3   r;   r|   r}   )rB   r   r   r   r   rr  rt  r  s      r   r   "_Test_count_neighbors.setup_method^  sd    
		t""299??1#81"E""299??1#81"Er   )rr  rt  Nr   rq   r   r   r  r  \  s    Fr   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
"sparse_distance_matrix_consistencyif  c                     [        XU5      $ r   r   r5   s       r   r7   +sparse_distance_matrix_consistency.distanceh  r9   r   c           
         U R                   R                  U R                  U R                  5      nU R                   R	                  U R                  U R                  5      n[        U5       Hf  u  p4U H[  n[        XU4   U R                  U R                   R                  U   U R                  R                  U   U R                  5      SS9  M]     Mh     UR                  5        H  u  u  p5n[        XRU   ;   5        M     g )N   decimal)rr  sparse_distance_matrixrt  r`  rs  r  r   r7   rD   r,   itemsr   )r6   Mr`  rG   r  rw  r/   s          r   test_consistency_with_neighborsBsparse_distance_matrix_consistency.test_consistency_with_neighborsk  s    GG**477DFF;GG##DGGTVV4aLDA#dGMM$'',,q/477<<?DFFK  ! 779KVaQA1I %r   c                 d    U R                   R                  U R                   U R                  5        g r   )rr  r  r`  r   s    r   test_zero_distance5sparse_distance_matrix_consistency.test_zero_distancex  s    &&tww7r   c                     U R                   R                  U R                  U R                  5      n[	        U R                   R
                  U R                  R
                  5      nSX"U R                  :  '   [        UR                  5       USS9  g )Nr   r  r  )rr  r  rt  r`  r   rD   r   toarray)r6   M1expecteds      r   test_consistency3sparse_distance_matrix_consistency.test_consistency|  s_    WW++DGGTVV<"477<<>&'DFF"#!"**,"Er   c                 :   [         R                  R                  S5        [         R                  " [         R                  R	                  SS5      [
        S9nU R                  USSS9nUR                  US5      R                  5       n[        X3R                  SS	9  g )
Nr      r;   r  Fbalanced_treecompact_nodesr   r  r  )rB   r   r   r   r   r   r   r  r  r   r   )r6   too_manyr$   r/   s       r   #test_against_logic_error_regressionFsparse_distance_matrix_consistency.test_against_logic_error_regression  sw    
		q88BIIOOB2#>E   @''a088:!!SS"5r   c                 
   [         R                  " U R                  U R                  45      n[        U R                  5       H`  n[        U R                  5       HD  nU R                  US S 24   U R
                  US S 24   -
  n[         R                  " XD5      XU4'   MF     Mb     [         R                  " U5      nSXU R                  :  '   [         R                  " U R                  U R                  45      nU R                  R                  U R                  U R                  SS9nUR                  5        H  u  p#XbU4   XRU4'   M     [        XSS9  [         R                  " U R                  U R                  45      nU R                  R                  U R                  U R                  SS9n[        UR                  S   5       H   nUS   U   nUS	   U   nUS
   U   nXEX#4'   M"     [        XSS9  U R                  R                  U R                  U R                  SS9n[        XR                  5       SS9  U R                  R                  U R                  U R                  SS9n[        XR                  5       SS9  g )Nr   dictoutput_typer  r  ndarrayr   rG   rw  v
dok_matrix
coo_matrix)rB   r   rZ   rg  ru  rv  dotr  r`  rr  r  rt  keysr   r   r  )r6   refrG   rw  r  r  r`  rU   s           r   test_ckdtree_return_types<sparse_distance_matrix_consistency.test_ckdtree_return_types  s   hh'(tvvA466]JJq!t$tzz!Q$'77FF1LqD	 #  ggcl$&&Lxx()GG**477DFF*OFFHDAq6DAJ !#R8xx()GG**477DFF! + #qwwqz"A#q	A#q	A#q	AJ	 #
 	"#R8GG**477DFF$ + &!#yy{B?GG**477DFF$ + &!#yy{B?r   rq   N)r   rr   rs   rt   r7   r  r  r  r  r  ru   rq   r   r   r  r  f  s"    +8F6 @r   r  c                       \ rS rSrS rSrg)_Test_sparse_distance_matrixi  c                 f   SnSn[         R                  R                  S5        [         R                  R                  X5      n[         R                  R                  X5      nU R	                  USS9U l        U R	                  USS9U l        SU l        SU l        X0l	        X@l
        Xl        X l        g )Nr3   r{   r|   r;   r}   r)   )rB   r   r   r   r   rr  rt  r`  r,   ru  rv  rZ   rL   )r6   rZ   rL   ru  rv  s        r   r   )_Test_sparse_distance_matrix.setup_method  s    
		t		%		%""51"5""51"5

r   )rr  rt  ru  rv  rL   rZ   r,   r`  Nr   rq   r   r   r  r    s    r   r  c            	         Sn SnSn[         R                  R                  S5        [         R                  R                  X5      n[         R                  R                  X5      n[	        X45      n[        UR                  X45        [        U 5       H3  n[        U5       H!  n[        [        X6   XG   5      XVU4   5        M#     M5     g )Nr      r{   r|   )
rB   r   r   r   r   r   r   rg  r   r   )rL   rZ   rU   xsysr   rG   rw  s           r   test_distance_matrixr    s    
A
A	AIINN4		B		B		 BA6"1XqA 225"% @"T(K  r   c                  
   Sn SnSn[         R                  R                  S5        [         R                  R                  X5      n[         R                  R                  X5      n[	        X45      n[	        X4SS9n[        XV5        g )Nr   r  r{   r|   r   )	threshold)rB   r   r   r   r   r   )rL   rZ   rU   r  r  r   dsls          r   test_distance_matrix_loopingr    sc    
A
A	AIINN4		B		B		 B
"A
.Cr   c                     U R                  X5      n[        5       n[        U5       H'  u  pEU H  nXF:  d  M
  UR                  XF45        M     M)     [	        X0R                  U5      :H  5        g r   )rs  setr  addr   query_pairs)r   r/   r`  r   rG   r  rw  s          r   check_onetree_queryr!    s[    	!AA!Auqf  
 Aq!!"r   c                    [         R                  R                  S5        SnSn[         R                  R                  X5      nU " U5      n[	        US5        [         R                  R                  SU-  U5      nUS U=== S-  sss& X1SU-  === S-  sss& U " U5      n[	        US5        [	        US5        [	        US5        [	        US	5        g )
Nr   r3   r{   rk   r   gMbP?r;   gh㈵>gư>)rB   r   r   r   r!  )r   rZ   rU   rh  r   s        r   test_onetree_queryr#    s    IINN1
A	AYY__Q"FFA3YY__QqS!$F
2AJ%J
QqSMQMFA35!7#4 r   c                 `    U " SS//5      n[        UR                  S5      [        5       5        g )Nr   r   r)   )r   r   r  )r   r$   s     r   test_query_pairs_single_noder%    s)    Ax D!!#&.r   c           	      0   [         R                  R                  S5        SnSnSnUS-  n[         R                  R                  X5      nU " U5      n[	        5       n[        U5       HX  n[        US-   U5       HB  n	XXS S 24   XYS S 24   -
  n
[         R                  " X5      U::  d  M0  UR                  X45        MD     MZ     [        U5      nUR                  U5      n[        U5      n[        X5        UR                  USS9n[        U5      n[        X5        [	        5       nUR                  USS9n[        UR                  S   5       H0  nUR                  [        XS4   5      [        XS4   5      45        M2     [        U5      n[        X5        g )	Nr   r3   r;   rk   r   r  r  r  )rB   r   r   r   r  rg  r  r  sortedr   r   r   r   )r   rZ   rU   r`  r2rh  r   bruterG   rw  r  l0r   ri  arrrj  s                   r   test_kdtree_query_pairsr,    sV   IINN1
A	AA	
ABYY__Q"FFAEE1XqsAA!tvd|+Avva|r!		1&!  
 
B	aA	Br	aU+A	BrA
--y-
1C399Q< 	s3!t9~s3!t9~./ !	Brr   c                 N   [         R                  " S5      n[         R                  " SSU-  S5      n[         R                  " SSU-  S5      nU VVs/ s H  oC  H  oTU4PM     M     nnnU " U5      nUR                  USS9nUR                  US-  S9n	[	        X5        g s  snnf )	Nr;   r   r   r{   rk   )r`  rH   )\(?r`  )rB   r  r  r   r   )
r   spacingx_rangey_rangexiyixy_arrayr$   	pairs_epspairss
             r   test_query_pairs_epsr8    s    ggajGkk!Q[!,Gkk!Q[!,G#*=7RWrRW7H=x D  7 3Iw~.E" >s   B!c           	         [         R                  SS2SS24   u  p[        [        UR	                  5       UR	                  5       5      5      nU " U5      n[        [        / SQ5      [        UR                  SS5      5      5        [         R                  " U[        S9nU " U5      n[        [        / SQ5      [        UR                  SS5      5      5        g )Nr   r{   )r{      	      )r;   r   r   r  )
rB   mgridr_  r[   ravelr   r'  r  asarrayr   )r   r?   r  rh  r$   s        r   test_ball_point_intsr@  +  s    88AaC1HDA#aggi+,FvD&--fa89;ZZe,FvD&--fa89;r   c            	          [        S5       V s/ s H  n [        R                  " 5       PM     nn [        [	        U5      [	        US S S2   5      5        g s  sn f )Nr   r   )rg  r   noder   r'  )r   nodess     r   test_kdtree_comparisonsrD  8  s@    $)!H-HqV[[]HE-uTrT{ 34 .s   Ac                    [         R                  R                  S5        SnSn[         R                  R                  X5      nU " U5      R	                  USS9S   nU " USS9R	                  USS9S   nU " USS	9R	                  USS9S   nU " USSS
9R	                  USS9S   n[        XE5        [        XF5        [        XG5        g )Nr   rc  r{   r\  r   r   F)r  )r  )r  r  )rB   r   r   r   rA   r   )r   rZ   rU   rh  rr  rt  T3T4s           r   test_kdtree_build_modesrH  >  s    IINN1A	AYY__Q"F	V		"	"6Q	"	/	3B	V5	1	7	7!	7	DR	HB	V5	1	7	7!	7	DR	HB	V5#(
**/%!%*<R
ABrrrr   c                 F   SS K n[        R                  R                  S5        SnSn[        R                  R	                  X#5      nU " U5      nUR                  U5      nUR                  U5      nUR                  USS9S   nUR                  USS9S   n[        XW5        g )Nr   r3   r{   r\  r   r   )	picklerB   r   r   r   dumpsloadsrA   r   r   rJ  rZ   rU   rh  rr  tmprt  s           r   test_kdtree_picklerO  M  s    IINN1
A	AYY__Q"F	V	B
,,r
C	c	B	&A	r	"B	&A	r	"Brr   c                 B   SS K n[        R                  R                  S5        SnSn[        R                  R	                  X#4S9nU " USS9nUR                  U5      nUR                  U5      nUR                  USS9S	   nUR                  USS9S	   n[        XW5        g )
Nr   r3   r{   r!  r   )r-   r\  r   r   )	rJ  rB   r   r   r$  rK  rL  rA   r   rM  s           r   test_kdtree_pickle_boxsizerQ  [  s    IINN1
A	AYYQF+F	VS	)B
,,r
C	c	B	&A	r	"B	&A	r	"Brr   c                 \   [         R                  R                  S5        SnSn[         R                  R                  X5      nU " USS9nUR	                  5       nUR                  USS9S   n[         R                  R                  X5      US	'   UR                  USS9S   n[        Xg5        g )
Nr   rc  r{   T)	copy_datar\  r   r   .)rB   r   r   r   copyrA   r   )r   rZ   rU   rh  r   r   rr  rt  s           r   test_kdtree_copy_datarU  i  s     IINN1A	AYY__Q"FFd+AA	
a	B))//!'F3K	
a	Brr   c                    [         R                  R                  S5        SnSn[         R                  R                  X#5      nU " U5      nUR	                  USSS9S   nUR	                  USSS9S   nUR	                  USS9S   n[        Xg5        [        Xh5        UR                  [        S	S
 5        [        R                  " [        SS9   UR	                  USSS9  S S S 5        g ! , (       d  f       g = f)Nr   rc  r{   r\  rf  )rU   re  r   r   	cpu_countc                      g r   rq   rq   r   r   <lambda>'test_ckdtree_parallel.<locals>.<lambda>  s    r   zCannot determine ther   r   rd  )rB   r   r   r   rA   r   setattrosr   r	   NotImplementedError)	r   monkeypatchrZ   rU   rh  r   rr  rt  rF  s	            r   test_ckdtree_parallelr_  x  s    IINN1A	AYY__Q"FFA	
1b	)"	-B	
1b	)"	-B	
1	b	!BrrK6	*2H	I	2& 
J	I	Is   C((
C6c                    ^^ [         R                  R                  S5        Sn Sn[         R                  R                  X5      n[	        U5      mUU4S jmT" TR
                  5        TR
                  n [        [         R                  " U R                  5      [        S5      5        [        TR                  U R                  S S 24   U R                  5        g )Nr   rz   r{   c                 L  > [        [        U [        5      5        U R                  S:X  a^  [        U R                  S L 5        [        U R
                  S L 5        [        U R                  R                  S   TR                  :*  5        g T" U R                  5        T" U R
                  5        U R                  R                  S S 2U R                  4   nU R
                  R                  S S 2U R                  4   n[        UR                  5       UR                  5       :  5        g )Nr   r   )r   r   r   	split_dimlesserr  indicesr   r~   data_pointsmaxmin)rZ   r?   r  r@   recurse_trees      r   rh  'test_ckdtree_view.<locals>.recurse_tree  s    
1k*+;;"AHH$%AII%&AIIOOA&&//9:"#$$Q^4A		%%an5AAEEGaeeg%&r   )rB   r   r   r   r   r$   r   sortrd  rg  rD   re  )rZ   rU   rh  r@   rh  s      @@r   test_ckdtree_viewrk    s     IINN1A	AYY__Q"FV_F' Arwwqyy)5:6v{{199a<0!--@r   c                 2   SnSn/ SQnSn[         R                  R                  S5        [         R                  R                  X4S9nU " USS9nUR	                  XS5      u  pxUR	                  XT5      u  p[        Xy5        [        X5        [         R                  " SS/5      nSnUR	                  XT5      u  pxUR	                  XS5      u  p[        XS	US-
  4   5        [        XS	US-
  4   5        UR	                  US5      u  pxUR	                  US/5      u  p[        [        UR                  5      S5        [        [        U	R                  5      S5        [        U[         R                  " U	5      5        [        U[         R                  " U
5      5        g )
N   r;   )r   r;   r   r   r|   r!  r   r}   .)
rB   r   r   r$  rA   r   r   r  r   r>  )r   rZ   rL   klistkintrD   r@   rO   rP   dd1ii1s              r   test_kdtree_list_krr    sP   A	AEDIINN4991&)D*F \\$&FB||D'HC HHaVED\\$%FB||D(HCeai()eai() \\$"FB||D1#&HCRXX"SYY#RXXc]#RXXc]#r   r   c           	         SnSnSn[         R                  R                  S5        [         R                  R                  X4S9nU " USSS9nU " USS9nSS	S
[         R                  4 H  nUR                  XCUS9u  pUR                  US-   X7S9u  p[        X5        [        X5        UR                  US-
  X7S9u  p[        X5        [        X5        [        XdUSUS9u  p[        X5        [        X5        M     g )N  r   r|   r!  r   r   r#  r}   r;   g      @rQ  )r-   r,   )	rB   r   r   r$  r\   rA   r   r   simulate_periodic_box)r   rZ   rL   rU   rD   r@   kdtree2r,   rO   rP   rp  rq  dd2ii2s                 r   test_kdtree_boxry    s     	A	A	AIINN4991&)D37F $+GC d+<<s
A<3B$R<<s
A<3B$R(3!LB$R !r   c                 P   SnSnSn[         R                  R                  S5        [         R                  R                  X4S9nU " USSS9nU " USS	9nSS[         R                  4 H=  nUR                  XCUS
9u  pUR                  XCUS
9u  p[        X5        [        X5        M?     g )Nrt  r;   r   r|   r!  r   r   r#  r}   rQ  )rB   r   r   r$  r\   rA   r   r   )r   rZ   rL   rU   rD   r@   rv  r,   rO   rP   rp  rq  s               r   test_kdtree_box_0boxsizer{    s    A	A	AIINN4991&)D37F $+GBFF^d+==A=.B$R r   c                 v   [         R                  " SSS5      R                  SS5      nUS S 2S4==   S-  ss'   [        R                  " [
        5         U " USSS9  S S S 5        [        R                  " [
        5         U " USSS9  S S S 5        U " USS	S9  g ! , (       d  f       NB= f! , (       d  f       N(= f)
Nr   r;   r   r   r   r   r#  )r   r  )r  r   )rB   r  reshaper   r	   r   r   rD   s     r   test_kdtree_box_upper_boundsr    s    ;;q!R ((Q/DAJ"J	z	"D1c2 
#	z	"D1j9 
# q*5 
#	"	"	"s   	B?	B*
B'*
B8c                 T    [         R                  " SSS5      n[        [        XSSS9  g )Nr   r   r   r   r#  )rB   r  assert_raisesr   r~  s     r   test_kdtree_box_lower_boundsr    s"    ;;r1b!D*k!SIr   c                    / n/ n[         R                  " SUR                  S   -  5      n[         R                  " [         R                  " US/UR                  S   -  5      5      R
                  nUS-
  nU He  n	XS-  U-  -   n
U R                  XUS9u  pUR                  SU5      nUR                  SU5      nUR                  U5        UR                  U5        Mg     [         R                  " USS9n[         R                  " USS9n[         R                  " [        U5      [        U5      U-  /SS/S	9nXmS
   S S & X]S   S S & UR                  SS9  US   S S 2S U24   US
   S S 2S U24   4$ )Nr   r   r   rQ  r   r=   )rP   i8)rO   f8r  rP   rO   )order)rB   aranger   r   unravel_indexr   rA   r}  appendconcatenateemptyr  rj  )r@   rD   rU   r-   r,   rO   rP   r?   nnrZ   imagerw  rx  r  s                 r   ru  ru    sf   	B	B
		!tzz!}$%A	"""1qcDJJqM&9:	;	=	=B	cB3w((<<A<.kk"a kk"a 
		#
		#  
	$B		$BXXs4y#b'A+.7 F 4LO4LO
KKdK$<2A2tQU 333r   PyPyz Fails on PyPy CI runs. See #9507)reasonc                      SS K n Su  p[        R                  [	        SSU-   U5      [	        SSU-   U5      4   u  p4[        R
                  " U5      S-  [        R                  " SX4-  -   5      [        R                  " U5      -  -   n[        R                  " U5      nXVS S & Sn[        R                  R                  SUR                  [        R                  R                  S5      S-   5      nXvR                  U'   [        R                  " [        R                  " XG:g  5      5      R                  n	[        R                  " [        R                  " XG:H  5      5      R                  n
U R                  U R                   5      R"                  n[%        S5       H  n['        U	5      nM     Sn[%        S5       Hy  nU R                  U R                   5      R"                  n['        U	5      nUR)                  U
S	S
S9u  nnU R                  U R                   5      R"                  nUU:  d  Mt  US-  nM{     [+        US:  5        g ! [         a     g f = f)Nr   )皙?r  r   r\  r   g     X@r3   rz   r{   r;   )rU   r,   )resourceImportErrorrB   r=  slicesincos
empty_liker   r1  r"  flatvstacknonzeror   	getrusageRUSAGE_SELF	ru_maxrssrg  r   rA   r   )r  dxdyr  r?   zz_copyFILLVALmaskigoodibadmem_userG   r$   	num_leaksr  iquerynew_mem_uses                     r   test_ckdtree_memuser  $  s   
 FB88E!QVR(!QVR() *DA
q	2rACx(266!944A]]1F1IG99Q		(9(9"(=(ABDKKIIbjj./11E99RZZ-.00D  !5!56@@G2Yu~  I3Z$$X%9%9:DDu~zz$!qz1f(()=)=>HH NI  IN?  s   I 
IIc                    [         R                  " SSS5      R                  SS5      nU " USS9n[         R                  " [	        U5      SS9nUR                  U5      n[        U/ SQ5        [        [        UR
                  US S 5        [        S	5       H  nUR                  U[         R                  " SS	U5      5      nUR                  U[         R                  " SS	U5      X34S
9nUR                  U[         R                  " SS	U5      US 4S
9nUR                  U[         R                  " SS	U5      S U4S
9n	UR                  U[         R                  " SS	U5      US
9  [        Xg5        [        Xh5        [        Xi5        M     [        [	        U5      5       H  nUR                  5       n
SX'   XS:g     nU " U5      nUR                  U[         R                  " SS	S5      X4S
9nUR                  U[         R                  " SS	S5      5      n[        Xg5        [        [        UR                  U[         R                  " SS	S5      U
S
9  M     g )Nr   r   r{   r   r}   f4r  )r{   r;   r   r   r;   r   r   r   )weightsrz   )rB   r  r}  r  r  _build_weightsr   r  r   rg  r  rT  )r   rD   tree1r  nwrG   c1c2c3c4w1rv  tree2s                r   test_kdtree_weightsr  O  s    ;;q!Q''A.Dq)Eggc$it,G			g	&Br01*e22GCRLA2Y""5"++aQ*?@""5"++aQ*? * # ,""5"++aQ*? $ # )""5"++aQ*?w # )eR[[B%: 	 	! 	2"2"2"   3t9\\^1WE"""5"++aS*A # " ""5"++aS*AB2" 	j%"7"72;;q"c*B	8! r   c                    SnSn[         R                  R                  S5        [         R                  R                  X4S9nU " USS9n/ SQn[         R                  " [        U5      5      nUR                  XE5      nUR                  XESS	9n[        XxR                  5       5        [        [        R                  " U5      [        R                  " U5      5       H-  u  pUR                  XJ5      n[        X[        U	5         5        M/     g )
Nrt  r;   r|   r!  r   r}   )r   r  r  g{Gz?r  F
cumulative)rB   r   r   normalr  r  r  r   cumsumr[   	itertoolspermutationsr   r_  )r   rZ   rL   rD   r@   r0i0n0nncrG   r`  s              r   &test_kdtree_count_neighbous_multiple_rr  }  s    A	AIINN499!(D*F	$B	3r7	B				+B

 
 
 
>CZZ\"I**2.**2.0 ""6-1ak*	0r   c                    [         R                  R                  S5      nUR                  SS5      nUR                  SS5      nU " U5      nUR	                  SS/SS9u  pVUR                  SS/SU-  5      n[        U/ 5        UR	                  USS9u  pVUR                  5       nUR                  USU-  5      n[         R                  " S[        S	9n	U	R                  / 5        [        X5        U " U5      n
UR                  U
SU-  5      n	[        S/ /-  U	5        UR                  U
SU-  5      n	[        U	S
:H  5        UR                  U
SU-  SS9n	[        U	[         R                  " S5      :H  S5        UR                  U
SU-  SS9n	[        U	[         R                  " S5      :H  S5        UR                  U
SU-  SS9n	[!        U	0 5        UR                  U
SU-  SS9n	S[         R"                  4S[         R"                  4S[         R$                  4/n[         R&                  " USS9n[         R                  " SUS	9n[        X5        UR	                  USS9u  pVUS S 2S4   R                  5       nUR)                  SU-  SS9n	[!        U	[+        5       5        UR)                  SU-  SS9n	[         R                  " S[         R"                  S	9n[        X5        g )Nr|   r   r;   r)   r   r   rk   )r   )r   r  r   r	  r  )r   r   Tr
  r  r  rG   rw  r  )align)r   r   r  )r   r;   )rB   r   RandomStaterandrA   r  r   rg  r  objectfillrs  r  r   r  r   r   intpfloat64r  r   r  )r   rngXYr$   r/   rG   r  mindr  other_dtype	res_dtypes                r   test_len0_arraysr    s    ))


%CQAQAq>D::r2h!:$DAr2hA.Aq"::a1:DA557DaT*A
vV,AFF2JqNEUCH-Ar2$w"UCH-AAFO##E3t8#NAqBHHX..5##E3t8#NAqBHHX..5##E3t8#HAB##E3t8#KABGGnsBGGnsBJJ.?@Ft,I
uI.Aq::a1:DAQU8<<>DTu5ACETy9A
vRWW-Aqr   c           
      d   Sn[        SS5       GH  n[        R                  " X45      nSX1S-  S & [        R                  " SSS9 H  u  pEU " X4USS9nUR
                  S:X  d   eU [        L a  UR                  OUR                  R                  n[        [        R                  " UR                  R                  5      [        R                  " S	US-  5      5        [        [        R                  " UR                  R                  5      [        R                  " US-  U5      5        M     GM      g )
Ni   r   r:  r;   FT)repeat)r  r  r~   r   r   )rg  rB   r  r  productr"  r   r$   _noder   rj  rc  rd  r  r  )r   rZ   rL   rD   balancedcompactr@   r$   s           r   test_kdtree_duplicated_inputsr    s    A1a[wwvTU!*!2!2=!KH /6DF;;!####.'#9FKKKK%%  ++,		!Q!V$& ,,-		!q&!$& "L	 r   c                 P    U " S//SS9n[        [        UR                  USS/SS9  g )Nr   r   r}   rk   Fr  )r  r   r  )r   r@   s     r   'test_kdtree_noncumulative_nondecreasingr    s1    
 1#+F*f44aU,r   c                 d   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/SS9nU " U5      nUR                  US	S
S9u  p4[        US[         R                  [         R                  [         R                  /SS[         R                  [         R                  /SS[         R                  [         R                  /SS[         R                  [         R                  /SS[         R                  [         R                  /S[         R                  [         R                  [         R                  //5        g )N)r   r   r   )r.  r   r   )r   r   r   )r   r.  r   )r   r   r   )r   r   r   r  r  r{   r   rT   r   r  )rB   r   rA   r   r\   )r   xyzckdtdeqieqs        r   test_short_knnr    s     (( C sDzz#z=HCc"&&"&&"&&)rvvrvv&rvvrvv&rvvrvv&rvvrvv&(*+r   c                    [         R                  R                  S5        [         R                  R                  SS9n[         R                  R                  SS9nU " U5      n[         R                  R	                  SS[        U5      S9nUR                  X$5      n[        X$5       VVs/ s H  u  pgUR                  Xg5      PM     nnn[        XX5       H#  u  p[        [        U	5      [        U
5      5        M%     g s  snnf )Nr|   rz   r   r!  r   333333?)
rB   r   r   r  r$  r  r  r[   r   r'  )r   rD   rA   r$   r/   rvectorqidirscalarr*   r+   s              r   test_query_ball_point_vector_rr    s    IINN499*DII(+EtD
		!Ss5z2A##E-G;>u=I=t$$R,=GIG%6!9fQi0 & Js   )C<c           	      .   [         R                  R                  S5        [         R                  R                  SS9n[         R                  R                  SS9nU " U5      nSnUR	                  X$SS9nUR	                  X$SS9 Vs/ s H  n[        U5      PM     nnU Vs/ s H  n[        UR	                  X5      5      PM     n	nU Vs/ s H  oR	                  XSS9PM     n
n[        XW5        [        XY5        [        XZ5        g s  snf s  snf s  snf )Nr|   r  r!  r  Treturn_lengthF)rB   r   r   r  r  r  r   )r   rD   rA   r$   r/   lengthr  length2r  length3length4s              r   test_query_ball_point_lengthr    s    IINN499*DII(+EtDA""54"@F#'#8#8QV#8#WX#WCs3x#WGX;@A5Rs4((/05GAJOP%B$$R$$?%GPv'v'v' YAPs   D!$DDc                    [         R                  R                  S5        [         R                  R                  SS9n[         R                  " S5      S-  n[         R
                  " [         R                  " S5      S S S2   S-  5      S S S2   n[         R                  R                  SS9n[         R
                  " UR                  5      R                  nUR                  S   UR                  S   :w  d   eUR                  S   UR                  S   :w  d   eU " U5      nUR                  UUSS9nUR                  UUSS9n[        Xx5        UR                  US	5      u  pUR                  US	5      u  p[        X5        [        X5        g )
Nr|   r  r!  rz   g{Gz?r   Tr  r   )rB   r   r   r  r  ascontiguousarrayr   stridesr  r   rA   )r   rD   d_contiguousd_discontiguousquery_contiguousquery_discontiguousr$   length1r  d1i1d2i2s                r   test_discontiguousr     su   IINN499*D99S>D(L**))C.2.577;t=Oyy''X'6../?/A/ABDD&&r*.>.F.Fr.JJJJ""2&,*>*>r*BBBBtD##$4$0 $ FG##$7$34 $ IG w(ZZ(!,FBZZ+Q/FBrrr   zbalanced_tree, compact_nodes))TF)TT)FFr  c                 L   [         R                  R                  S5        [         R                  " SS9n[         R                  " SS9n[         R                  " SS9nU " X1US9nUR                  USSS	9nUS
:X  d   eUR                  US5      u  pU	R                  S:X  d   eUR                  S:X  d   e[         R                  " U5      R                  5       (       d   eUR                  US
S/5      n
[        U
S
S
/5        UR                  US5      nUR                  S:X  d   eg )Nr|   )r   r   )r   )r   r   r]  r  r  Tr  r   r;   )r;   r;   r   r^  )rB   r   r   r  r  r  rA   r   isinfrE   r  r   r  )r   r  r  empty_v3query_v3query_v2r$   r  rO   rP   Nr  s               r   test_kdtree_empty_inputr  1  s    IINN4xxf%HwwV$HwwV$Hx%24D""8S"EFQ;;ZZ!$FB88v88v88B<TAq6*Aq1a&!##D#.A77fr   c                   &    \ rS rSrS rS rS rSrg)_Test_sorted_query_ball_pointiM  c                     [         R                  R                  S5        [         R                  R                  SS5      U l        U R                  U R                  5      U l        g )Nr|   rz   r   )rB   r   r   r   r?   r   r  r   s    r   r   *_Test_sorted_query_ball_point.setup_methodO  s>    
		ta($$TVV,	r   c                    U R                   R                  U R                  SSS9nU H  n[        U[	        U5      5        M     U R                   H3  nU R                   R                  USSS9n[        U[	        U5      5        M5     g )Nr   Treturn_sorted)r  r  r?   r   r'  )r6   	idxs_listidxsr3  s       r   test_return_sorted_True5_Test_sorted_query_ball_point.test_return_sorted_TrueT  sr    II..tvvr.N	DtVD\2  &&B99--b"D-IDtVD\2 r   c                    U R                   R                  U R                  S5      nU H  n[        U[	        U5      5        M     U R                   Vs/ s H  o0R                   R                  US5      PM      nnU R                   R                  U R                  SSS9n[        XT5       H  u  pg[        Xg5        M     gs  snf )zPrevious 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'  r[   )r6   r  r  r3  idxs_list_singleidxs_list_Falseidxs0idxs1s           r   test_return_sorted_None5_Test_sorted_query_ball_point.test_return_sorted_None]  s     II..tvvr:	DtVD\2  JNP2II66r2>P))44TVVRu4UBLEu, C Qs   %B?)r  r?   N)r   rr   rs   rt   r   r  r  ru   rq   r   r   r	  r	  M  s    -
3-r   r	  c                     [         R                  R                  SS5      R                  [        5      n [
        R                  " [        SS9   [        U 5      nS S S 5        [        U R                  5      n[
        R                  " [        SS9   UR                  U 5        S S S 5        [
        R                  " [        SS9   UR                  U SS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       NR= f! , (       d  f       g = f)Nr   r;   zcomplex datar   r   r/  )rB   r   r  viewcomplexr   r	   	TypeErrorr   realrA   r  rh  ts     r   test_kdtree_complex_datar!  k  s    YY^^B"''0F	y	76N 
8 	v{{A	y	7	 
8 
y	7	6Q' 
8	7 
8	7
 
8	7 
8	7s$   CC-C>
C*-
C;>
Dc                     [         R                  R                  S5        [         R                  R                  SS5      n [	        U 5      nUR
                  n[        U[        R                  5      (       d   eUR                  U R                  S   :X  d   eU/nU(       Ga  UR                  S5      n[        U[        R                  5      (       at  [        UR                  [        5      (       d   eUR                  [        UR                  5      :X  d   e[        XR                     UR                   R"                  5        GO[        U[        R                  5      (       d   e[        UR$                  [        5      (       d   eSUR$                  s=::  a  UR&                  :  d   e   e[        UR(                  [*        5      (       d   e[        UR                  [        5      (       d   eUR                  UR,                  R                  UR.                  R                  -   :X  d   eUR1                  UR.                  5        UR1                  UR,                  5        U(       a  GM  g g )Nr|   rz   r{   r   r   )rB   r   r   r  r   r$   r   	innernodechildrenr   popleafnoder   r  idxr   r  re  rb  rL   r  r   r  r  r  )rh  r   rootrC  rZ   s        r   test_kdtree_tree_accessr)  {  s   IINN4YY^^C#FvA66DdF,,----==FLLO+++ FE
IIbMa))ajj#....::QUU+++vee}agg.A.ABa!1!12222akk3////)acc)))))aggu----ajj#....::1993E3E!EEEELL#LL  %r   c                     [         R                  R                  S5        [         R                  R                  SS5      n [	        U 5      n[        UR                  [        5      (       d   eUR                  U R                  S   :X  d   e[        UR                  [        5      (       d   eUR                  U R                  S   :X  d   e[        UR                  [        5      (       d   eUR                  S:X  d   e[        UR                  [         R                  " U SS95        [        UR                  [         R                  " U SS95        UR                   U L d   eg )Nr|   rz   r{   r   r   r   r=   )rB   r   r   r  r   r   rL   r   rZ   r   r~   r   r  rM   r  aminrD   r  s     r   test_kdtree_attributesr,    s    IINN4YY^^C#FvAacc333&,,q/!!!acc333&,,q/!!!ajj#&&&&::qwwQ 78qvvrwwvA6766Vr   kdtree_classc           
         [         R                  R                  S5      n[         R                  " SSS5      nUR                  S5      R	                  S5      nUR                  S5      R	                  S5      nUR                  S5      nUR                  S	5      nU " U5      nU " U5      nUR                  XS
XV4S9n	US S S 24   US S 2S 4   -  n
[         R                  R                  US S S 2S S 24   US S 2S S S 24   -
  SS9n[        [        R                  " S/US S 5      U5       VVs/ s H%  u  p[         R                  " XU:  X:*  -     5      PM'     nnn[        X5        g s  snnf )Nr|   r  r      )r  r   -   )   r   r  r1  F)r  r  r   r=   r   )rB   r   r  r  r}  r  linalgr  r[   r  chainrC   r   )r-  r  r`  ABwAwBkdAkdBnABr  r  prev_radiusradiusexpects                  r   $test_kdtree_count_neighbors_weightedr>    sM   
))


%C
		$4 A

2u%A

2v&A	AB	BB
q/C
q/C


c

HC qkBq$wK'G99>>!D!QJ-!AtQJ-7b>AD),Y__aS!CR&-I1)MO)M%+ ffWD0T^DEF)M  OC Os   ,,E'c                  "   / SQn [        U 5      n[        R                  " U [        R                  " U[        R                  5      /5      S S 2S 4   n[
        R                  " [        SS9   [        U5        S S S 5        g ! , (       d  f       g = f)N)
r   r\  ir  ii   r   imust be finiter   )	r  rB   r  r%  nanr   r	   r   r   )valsrZ   rD   s      r   test_kdtree_nanrE    s]    1DD	A>>4BFF!345ag>D	z)9	:t 
;	:	:s   +B  
Bc                     [         R                  R                  S5      n U R                  SSSS9n[	        USSS9n[        S5       Vs/ s H  n[         R                  PM     nn[        R                  " [        S	S
9   UR                  U5        S S S 5        [        R                  " [        S	S
9   UR                  US5        S S S 5        [         R                  USS S 24'   [        R                  " [        S	S
9   [	        USSS9  S S S 5        [        R                  " [        S	S
9   [	        USSS9  S S S 5        [        R                  " [        S	S
9   [	        USSS9  S S S 5        [        R                  " [        S	S
9   [	        USSS9  S S S 5        g s  snf ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Ni90  r  r   rk   )r"  lowhighFr  r   rB  r   r   r   T)rB   r   default_rngr$  r   rg  rC  r   r	   r   rA   r  )r  coordsr   r   	bad_coords        r   test_nonfinite_inputs_gh_18223rL    s_   
))


&C[[hCc[:FvU%@A!&q*AI*	z)9	:		 
;	z)9	:	9a( 
; 66F1a4L	z)9	:vT? 
;	z)9	:vU$? 
;	z)9	:vT> 
;	z)9	:vU%@ 
;	: +	:	:	:	: 
;	:	:	:	:	:	:	:sN   	F>F1F/<G )GG"G3
F,/
F= 
G
G"
G03
Hincantationc                      " S S[         R                  5      nSS/SS/SS//n[         R                  " U5      nU" U5      nU " US	5      nUR                  US
5        UR	                  US5        g )Nc                        \ rS rSrS rS rSrg)test_gh_18800.<locals>.ArrLikei  c                 ^    [         R                  " U5      R                  U 5      nS Ul        U$ r   )rB   r?  r  rE   )clsinput_arrayobjs      r   __new__&test_gh_18800.<locals>.ArrLike.__new__  s)    **[)..s3C CGJr   c                 0    Uc  g [        USS 5      U l        g )NrE   )getattrrE   )r6   rT  s     r   __array_finalize__1test_gh_18800.<locals>.ArrLike.__array_finalize__  s    {sE40DHr   )rE   N)r   rr   rs   rt   rU  rY  ru   rq   r   r   ArrLikerP    s    		1r   r[  gGzP@gQE@@gQ6@gp=
c6@g(\?@g=
ףpMT@r   r   rm  )rB   r  r   rA   r  )rM  r[  rh  r+  arr_liker$   s         r   test_gh_18800r]    ss    1"** 1 
		
F
 ((6
Cs|Hvr"DJJx(C(r   )kr\  numpy.testingr   r   r   r   r   r   r   r	   r  platformr
   numpyrB   scipy.spatialr   r   r   r   scipy.spatial._ckdtreer   r   r  fixturer   r'   r0   r2   rw   r   r   r   r   r   r   r  r  r.  r4  r<  r@  rI  rM  rT  ra  rl  rn  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r,  r8  r@  rD  rH  rO  rQ  rU  r_  rk  rr  mark	fail_slowry  r{  r  r  ru  skipifr  r  r  r  r  r  r  r  r  r   parametrizer  r	  r!  r)  r,  r>  rE  rL  r]  rq   r   r   <module>rh     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42 )+v5=  ?'?'R,8\ r+ +$,\&.,+21( 8 7

. - - -:( !<( &'):;! <!.A, &(9:) ;)r   