
    CpjL                        S SK r 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rS SKJr  S SKJrJrJrJr  S SKJr  S SKJrJr  S SKJrJr  S S	KJrJrJrJ r   \	RB                  " \\/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       r0\# " S& S'\-5      5       r1\# " S( S)\-5      5       r2\# " S* S+\.5      5       r3\# " S, S-\-5      5       r4\# " S. S/\-5      5       r5S0 r6\	Rn                  Rq                  S1S29\	Rn                  Rs                  S35      S4 5       5       r:\	Rn                  Rq                  S1S29\	Rn                  Rs                  S35      S5 5       5       r; " S6 S75      r<\# " S8 S9\<5      5       r=\# " S: S;\<5      5       r>\# " S< S=\=5      5       r?\# " S> S?\>5      5       r@\# " S@ SA\=5      5       rA\# " SB SC\>5      5       rB " SD SE5      rCSF rDSG rESH rFSI rG " SJ SK5      rH\# " SL SM\H5      5       rI " SN SO5      rJ\# " SP SQ\J5      5       rKSR rLSS rMST rNSU rOSV rPSW rQSX rRSY rSSZ rTS[ rUS\ rVS] rWS^ rXS_ rYS` rZSa r[\	Rn                  Rs                  Sb5      Sc 5       r\Sd r]Se r^Sf r_Sg r`\	Rn                  R                  Sh 5       rbSi rc\	Rn                  Rs                  Sb5      Sj 5       rdSk reSl rfSm rgSn rhSo riSp rjSq rk\	Rn                  R                  Sr/ SsQ5      St 5       rm\# " Su Sv5      5       rnSw roSx rpSy rq\	Rn                  Rq                  SzS29S{ 5       rrS| rs\	Rn                  R                  S}\\/5      S~ 5       rtS ruS rv\	Rn                  R                  S\\/5      S 5       rwS rxg)    N)assert_equalassert_array_equalassert_assert_almost_equalassert_array_almost_equalassert_allclose)raises)_run_concurrent_barrier)KDTree	Rectangledistance_matrixcKDTree)cKDTreeNode)minkowski_distanceminkowski_distance_p)cdist	minkowski)	dok_array	coo_array
dok_matrix
coo_matrix)paramsc                     U R                   $ N)param)requests    [/var/www/html/pdf-tiff/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_boxr7   .   sJ    5Dg	')w	7*$1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
)ConsistencyTests5   c                     [        XU5      $ r   r0   selfr1   r2   r3   s       r   distanceConsistencyTests.distance6       q!!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)r=   rF   r6   iepss        r   test_nearestConsistencyTests.test_nearest9   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 )NrB   rC   r"   rD   )rF   mrG   rH   rI   amaxargmaxr   rJ   rK   r   rM   )r=   rF   rS   ddiir6   rN   rO   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_boundrC   r   r"   rB   near_d=g should be less than )rF   r6   rG   rH   nziprI   infr   rJ   rK   r   r   r>   	r=   rF   r6   rV   rW   rO   hitsnear_dnear_is	            r   test_points_near!ConsistencyTests.test_points_nearM   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"   r\   r3   r]   rC   r   r^   r_   r`   )rF   r6   rG   rH   ra   rb   rI   rc   r   r>   rK   r   r   rJ   rd   s	            r   test_points_near_l1$ConsistencyTests.test_points_near_l1[   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 )Nrk   rC   r   r"   r^   r_   r`   )rF   r6   rG   rH   ra   rI   rc   rb   r   r>   rK   r   r   rJ   rd   s	            r   test_points_near_linf&ConsistencyTests.test_points_near_linfi   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皙?rO   r"   )rF   r\   rG   rH   r   rI   rL   )r=   rF   r\   rO   d_reali_realr6   rN   s           r   test_approxConsistencyTests.test_approxw   sf    FFFF**10{{  3 /qAcEN*+,r    N)r$   
__module____qualname____firstlineno__r>   rP   rX   rh   rl   ro   rv   __static_attributes__rx   r   r   r9   r9   5   s)    "T
NKP-r   r9   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        rB   leafsize皙?
   )ra   rS   rI   randomseedrandnrK   r   rG   rF   r6   r\   r=   s    r   setup_method_Test_random.setup_method   s    
		tIIOODFFDFF3	&&tyy1&=(r   r6   rK   r\   rG   rS   ra   rF   Nr$   ry   rz   r{   r   r|   rx   r   r   r~   r~      s    r   r~   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   rI   r   r   rS   rF   r=   	__class__s    r   r   _Test_random_far.setup_method   s+    (+r   )rF   r$   ry   rz   r{   r   r|   __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   )rI   arrayrK   r   rG   ra   rS   r   r   r   rF   r6   r\   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   rr   r"   )rr   r   r   rG   rH   r   s    r   rP   _Test_small.test_nearest   s!    !!+q1	r   c                 \    [        U R                  R                  SS5      SS/SS/45        g )Nr   rB   rr   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$   ry   rz   r{   r   rP   r   r|   rx   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   rK   rG   r   s    r   r    _Test_small_nonleaf.setup_method   s)    &&tyy1&=r   )rG   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   )rI   r   rK   r   rG   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   )	rG   rH   rI   r   r   
isinstancefloat
issubdtypesignedintegerr=   r6   rN   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rB   r   r   )rB   r   rG   rH   rI   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   r\   )
rG   ra   rH   rI   r   r   r   r   rL   isfiniter=   skkr6   rN   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   rB   r   
rG   ra   rH   rI   r   r   r   r   rL   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	   
ValueErrorrG   rH   )r=   rF   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rK   rG   N)r$   ry   rz   r{   r   r   r   r   r   r   r|   rx   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   )rI   r   rK   r   rG   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   )rG   rH   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     )	rI   r   r   r   TrG   rH   rb   r   )r=   qsdsi_sqr6   rN   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   )	rG   ra   rH   r   rI   r   r   rL   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$   ry   rz   r{   r   r   r   r   r   r   r|   rx   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   r0   r<   s       r   r>   ball_consistency.distance  s    S!c'1--r   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r3   rO   r   T)rI   
atleast_2drF   broadcast_tor6   r   r   query_ball_pointr3   rO   	enumerater>   rK   r   tol)r=   rF   r6   lrN   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)rI   r  rF   r  r6   r   r   r	  r3   rO   r
  onesra   boolr>   rK   r   r  )	r=   rF   r6   r  rN   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   rx   N)	r$   ry   rz   r{   r  r>   r  r  r|   rx   r   r   r   r     s    
C.=	>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 )	Nr   r   r   rB   r          @r   r   )rI   r   r   r   rK   r   r   rF   r3   rO   r6   r=   ra   rS   s      r   r   _Test_random_ball.setup_method1  st    
		tIIOOA)	!!$))a!8#r   r   r6   rK   rO   r3   rF   Nr   rx   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  r7   r<   s       r   r>   #_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 )N'  r   r   sizerB   r"   r   r4   rr   r  r   r   )rI   r   r   uniformrK   r   r   fullrF   r3   rO   r6   r  s      r   r   '_Test_random_ball_periodic.setup_methodB  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	  rF   r6   r3   rO   r   r>   rK   )r=   r  rN   s      r   test_in_ball_outside/_Test_random_ball_periodic.test_in_ball_outsideM  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)rI   r  r   ra   r  r	  rF   r6   r3   rO   rL   r>   rK   )r=   r  r  s      r   test_found_all_outside1_Test_random_ball_periodic.test_found_all_outsideU  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$   ry   rz   r{   r>   r   r0  r3  r|   rx   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_issue9890id  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   rB   {   r   r)  r   r   )rI   r   r   randintrK   r   r   rF   r3   rO   r6   r  s      r   r   /_Test_random_ball_largep_issue9890.setup_methodj  sq    
		sII%%c4qf%=	!!$)),r   r   N)r$   ry   rz   r{   r  r   r|   rx   r   r   r6  r6  d  s     C	r   r6  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )_Test_random_ball_approxiv  c                 0   > [         TU ]  5         SU l        g Nrr   r   r   rO   r   s    r   r   %_Test_random_ball_approx.setup_methody      r   rs   r   r   s   @r   r<  r<  v       r   r<  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 r>  r?  r   s    r   r   ._Test_random_ball_approx_periodic.setup_method  rA  r   rs   r   r   s   @r   rD  rD  ~  rB  r   rD  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   r6   r   s    r   r   "_Test_random_ball_far.setup_method      r   r6   r   r   s   @r   rH  rH         r   rH  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 rJ  rK  r   s    r   r   +_Test_random_ball_far_periodic.setup_method  rM  r   rN  r   r   s   @r   rQ  rQ    rO  r   rQ  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   r3   r   s    r   r   !_Test_random_ball_l1.setup_method      r   r3   r   r   s   @r   rU  rU         r   rU  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   rI   rc   r3   r   s    r   r   #_Test_random_ball_linf.setup_method      r   rY  r   r   s   @r   r\  r\         r   r\  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   rB   r   r"   rB   r   r   r   )
rI   r   r   r   r	  r   r   r   r   list)r   ra   rS   r   rs        r   test_random_ball_vectorizedri    sw    
A	AIINN4BIIOOA)*A	299??1a3Q7A&!Jqw%&r   zTest spawns worker threads)reasonrd  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     rB   g~jth?r"   workers@   r  )rI   r   r   r   r	  ranger   )	r   ra   r\   pointsr   l1l2l3rN   s	            r   +test_query_ball_point_multithreaded_workersru    s     IINN1A	AYY__Q"FFA	
		FE1		5B	
		FE2		6B	
		FE2		6B1X5BEErube,  1X5BEErube, r   c                   ^ [         R                  R                  S5      nSnSnUR                  X#5      nU " U5      nSnX&-  U-  U:X  d   eUR                  XbU-  U5      n[         R                  " XrU45      nSmU4S jn	[        XiXW5      n
UR                  UT5      n[        [         R                  " [         R                  " U
5      5      [         R                  " U5      5        g )Nl   e]IG r(  rB   r   333333?c                 ,   > UR                  X    T5      $ r   )r	  )rN   r*   search_pointsradiuss      r   worker_funcAtest_query_ball_point_multithreaded_explicit.<locals>.worker_func  s    $$]%5v>>r   )
rI   r   RandomStater   reshaper
   r	  r   sortconcatenate)r   rngra   r\   rq  r*   max_workersry  all_search_pointsr{  resultsserial_resultsrz  s               @r   ,test_query_ball_point_multithreaded_explicitr    s     ))



+CA	AYYq_FvDK>K'1,-,IIkk>1=M

=a&9F? &$7G **+<fEN rwwr~~g679PQr   c                   &    \ rS rSrS rS rS rSrg)two_trees_consistencyi  c                     [        XU5      $ r   r0   r<   s       r   r>   two_trees_consistency.distance  r@   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T2r6   r3   rO   r
  r>   data1data2)r=   rh  rN   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   )r  r  r  r6   r3   rO   r
  rI   r  ra   r  rL   r>   r  r  )r=   rh  rN   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   rx   N)r$   ry   rz   r{   r>   r  r  r|   rx   r   r   r  r    s    "13r   r  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 )	N2   r   r   rB   r   r  r   r   )rI   r   r   r   r  r   r  r  r  r3   rO   r6   r  s      r   r   #_Test_two_random_trees.setup_method  s    
		tYY__Q*
""4::":YY__Q*
""4::":r   r  r  r6   r  r  rO   r3   Nr   rx   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$  r<   s       r   r>   (_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 )Nr  r   r   r)  rB   r   r+  r  r   r   )rI   r   r   r,  r  r   r  r  r  r3   rO   r6   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$   ry   rz   r{   r>   r   r|   rx   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 NrB   rK  r   s    r   r   '_Test_two_random_trees_far.setup_method  rX  r   rN  r   r   s   @r   r  r    rZ  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  rK  r   s    r   r   0_Test_two_random_trees_far_periodic.setup_method"  rX  r   rN  r   r   s   @r   r  r    rZ  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   r^  r   s    r   r   (_Test_two_random_trees_linf.setup_method*  r`  r   rY  r   r   s   @r   r  r  '  ra  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   r^  r   s    r   r   1_Test_two_random_trees_linf_periodic.setup_method2  r`  r   rY  r   r   s   @r   r  r  /  ra  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_rectanglei7  c                 .    [        SS/SS/5      U l        g )Nr   r"   )r   rectr   s    r   r   Test_rectangle.setup_method9  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/         ?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  rI   sqrtr   s    r   test_min_two_sides!Test_rectangle.test_min_two_sidesB  s'    DII88!Q@"''!*Mr   c                     [        U R                  R                  SS/5      S[        R                  " S5      -  5        g )Nr/   r"   rB   r   r  max_distance_pointrI   r  r   s    r   test_max_insideTest_rectangle.test_max_insideE  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  rI   hypotr   s    r   test_max_one_side Test_rectangle.test_max_one_sideH  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_sidesL  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   rr   r"   )r  splitr   maxesmins)r=   lessgreaters      r   
test_splitTest_rectangle.test_splitO  s`    		3/4::Qx0499q!f-7==1a&17<<#q2r   )r  N)r$   ry   rz   r{   r   r  r  r  r  r  r  r  r|   rx   r   r   r  r  7  s/    .IKNT0P3r   r  c                  P   [         R                  " SS9   [        [        SS/SS/S5      [        R
                  " S5      5        S S S 5        [         R                  " SS9   [        [        SS/SS/S5      S5        S S S 5        g ! , (       d  f       NG= f! , (       d  f       g = fN1.20.0r   r   r"   rB   )r   deprecated_callr   r   rI   r  r   rx   r   r   test_distance_l2r  W  s{    			h	/.1v1vqA2771:N 
0			h	/0!Q!QCQG 
0	/ 
0	/	/	/s   0B!B
B
B%c                      [         R                  " SS9   [        [        SS/SS/S5      S5        S S S 5        g ! , (       d  f       g = fr  )r   r  r   r   rx   r   r   test_distance_l1r  ^  s8    			h	/.1v1vqA1E 
0	/	/s	   :
Ac                      [         R                  " SS9   [        [        SS/SS/[        R
                  5      S5        S S S 5        g ! , (       d  f       g = f)Nr  r   r   r"   )r   r  r   r   rI   rc   rx   r   r   test_distance_linfr  c  s<    			h	/.1v1vrvvFJ 
0	/	/s   *A
Ac                  `   [         R                  R                  S5        [         R                  R                  SSS5      n [         R                  R                  SSS5      n[        R
                  " SS9   [        [        X5      R                  S5        S S S 5        g ! , (       d  f       g = f)	Nr   r   r"   r      r  r   )r   r  )	rI   r   r   r   r   r  r   r   r   )rF   ys     r   test_distance_vectorizationr  h  sn    IINN4
		Aq!A
		1a A			h	/'-33W= 
0	/	/s   6 B
B-c                   &    \ rS rSrS rS rS rSrg)count_neighbors_consistencyip  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  count_neighborsr  rI   rJ   r  lenr=   rh  r  s      r   test_one_radius+count_neighbors_consistency.test_one_radiusq  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_radiusv  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   )rI   explinspacelogr  r  r  r   rL   r5   rb   r   )r=   rsr  rh  results        r   test_multiple_radius0count_neighbors_consistency.test_multiple_radius{  s    VVBKKtbffRj!<=''))$''26rwww'1,-.R)IA00!<fE *r   rx   N)r$   ry   rz   r{   r  r  r  r|   rx   r   r   r  r  p  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 )Nr  rB   r   r   )rI   r   r   r   r   r  r  r  s      r   r   "_Test_count_neighbors.setup_method  sd    
		t""299??1#81"E""299??1#81"Er   )r  r  Nr   rx   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_consistencyi  c                     [        XU5      $ r   r0   r<   s       r   r>   +sparse_distance_matrix_consistency.distance  r@   r   c           
         U R                   R                  U R                  U R                  SS9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 )Nr   output_type   decimal)r  sparse_distance_matrixr  rh  r  r
  r   r>   rK   r3   itemsr   )r=   Mrh  rN   r  r  r6   s          r   test_consistency_with_neighborsBsparse_distance_matrix_consistency.test_consistency_with_neighbors  s    GG**477DFF*TGG##DGGTVV4aLDA#dGMM$'',,q/477<<?DFFK  ! 779KVaQA1I %r   c                 b    U R                   R                  U R                   U R                  SS9  g )Nr   r  )r  r  rh  r   s    r   test_zero_distance5sparse_distance_matrix_consistency.test_zero_distance  s#    &&twwK&Pr   c                    U R                   R                  U R                  U R                  SS9n[	        U R                   R
                  U R                  R
                  5      nSX"U R                  :  '   [        UR                  5       USS9  g )Nr   r  r   r  r	  )r  r  r  rh  r   rK   r   toarray)r=   M1expecteds      r   test_consistency3sparse_distance_matrix_consistency.test_consistency  sd    WW++DGGTVV+Utww||4&'DFF"#!"**,"Er   c                 8   [         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SS	9R                  5       n[        X3R                  S
S9  g )Nr      rB   r  Fbalanced_treecompact_nodesr   r   r  r  r	  )rI   r   r   r   r   r   r   r  r  r   r   )r=   too_manyr*   r6   s       r   #test_against_logic_error_regressionFsparse_distance_matrix_consistency.test_against_logic_error_regression  s|    
		q88BIIOOB2#>E   @''a['IQQS!!SS"5r   c                 l   [         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["        5      (       d   eU R                  R                  U R                  U R                  SS9n[        XR                  5       SS9  [!        U[$        5      (       d   eU R                  R                  U R                  U R                  SS9n[        XR                  5       SS9  [!        U[&        5      (       d   eU R                  R                  U R                  U R                  SS9n[        XR                  5       SS9  [!        U[(        5      (       d   eU R                  R                  U R                  U R                  5      n[!        U[$        5      (       d   eg )Nr   dictr  r  r	  ndarrayr   rN   r  vr   r   r   r   )rI   r   ra   rp  r  r  dotr  rh  r  r  r  keysr   r   r  r   r   r   r   r   )r=   refrN   r  r$  r  rh  r\   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?!Y''''GG**477DFF$ + &!#yy{B?!Z((((GG**477DFF# + %!#yy{B?!Y''''GG**477DFF$ + &!#yy{B?!Z((((GG**477DFF;!Z((((r   rx   N)r$   ry   rz   r{   r>   r  r  r  r  r(  r|   rx   r   r   r  r    s"    "Q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 )Nr  r   r   rB   r   r/   )rI   r   r   r   r   r  r  rh  r3   r  r  ra   rS   )r=   ra   rS   r  r  s        r   r   )_Test_sparse_distance_matrix.setup_method  s    
		t		%		%""51"5""51"5

r   )r  r  r  r  rS   ra   r3   rh  Nr   rx   r   r   r+  r+    s    r   r+  c            
      L   Sn SnSn[         R                  R                  S5        [         R                  R                  X5      n[         R                  R                  X5      n[        R
                  " SS9   [        X45      nS S S 5        [        WR                  X45        [        U 5       HP  n[        U5       H>  n[        R
                  " SS9   [        [        X6   XG   5      XVU4   5        S S S 5        M@     MR     g ! , (       d  f       N= f! , (       d  f       Mg  = f)Nr      r   r   r  r   )rI   r   r   r   r   r  r   r   r   rp  r   r   )rS   ra   r\   xsysr   rN   r  s           r   test_distance_matrixr2    s    
A
A	AIINN4		B		B			h	/R$ 
0A6"1XqA''h7#$6rube$DbAhO 87   
0	/
 87s   8DD
D
D#c                     Sn SnSn[         R                  R                  S5        [         R                  R                  X5      n[         R                  R                  X5      n[        R
                  " SS9   [        X45      nS S S 5        [        R
                  " SS9   [        X4SS9nS S S 5        [        WW5        g ! , (       d  f       NB= f! , (       d  f       N,= f)	Nr   r/  r   r   r  r   r"   )	threshold)rI   r   r   r   r   r  r   r   )rS   ra   r\   r0  r1  r   dsls          r   test_distance_matrix_loopingr6    s    
A
A	AIINN4		B		B			h	/R$ 
0			h	/b2 
0S	 
0	/	/	/s   8C  C 
C
C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   )r  setr
  addr   query_pairs)r   r6   rh  r   rN   r  r  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   r  r   rr   r   gMbP?rB   gh㈵>gư>)rI   r   r   r   r;  )r   ra   r\   rq  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:  r8  )r   r*   s     r   test_query_pairs_single_noder?  0  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   r  rB   rr   r"   r8  r  r#  )rI   r   r   r   r8  rp  r%  r9  sortedr:  r   r   r   )r   ra   r\   rh  r2rq  r   bruterN   r  r$  l0r   rr  arrrs  s                   r   test_kdtree_query_pairsrF  5  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 )	NrB   r   r   r   rr   )rh  rO   )\(?rh  )rI   r  r  r:  r   )
r   spacingx_rangey_rangexiyixy_arrayr*   	pairs_epspairss
             r   test_query_pairs_epsrR  V  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      	      )rB   r   r"   r  )
rI   mgridrg  rb   ravelr   rA  r	  asarrayr   )r   rF   r  rq  r*   s        r   test_ball_point_intsrZ  d  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  )rp  r   noder   rA  )r#   nodess     r   test_kdtree_comparisonsr^  q  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   rl  r   rd  r   r  F)r  )r  )r  r  )rI   r   r   r   rH   r   )r   ra   r\   rq  r  r  T3T4s           r   test_kdtree_build_modesrb  w  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   r  r   rd  r   r  )	picklerI   r   r   r   dumpsloadsrH   r   r   rd  ra   r\   rq  r  tmpr  s           r   test_kdtree_pickleri    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   r  r   r)  r   r4   rd  r   r  )	rd  rI   r   r   r,  re  rf  rH   r   rg  s           r   test_kdtree_pickle_boxsizerl    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   rl  r   T)	copy_datard  r   r  .)rI   r   r   r   copyrH   r   )r   ra   r\   rq  r   r   r  r  s           r   test_kdtree_copy_datarp    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   rl  r   rd  ro  )r\   rn  r  r   	cpu_countc                      g r   rx   rx   r   r   <lambda>'test_ckdtree_parallel.<locals>.<lambda>  s    r   zCannot determine ther   r"   rm  )rI   r   r   r   rH   r   setattrosr   r	   NotImplementedError)	r   monkeypatchra   r\   rq  r   r  r  r`  s	            r   test_ckdtree_parallelrz    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   r   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)ra   rF   r  rG   recurse_trees      r   r  'test_ckdtree_view.<locals>.recurse_tree  s    
1k*+;;"AHH$%AII%&AIIOOA&&//9:"#$$Q^4A		%%an5AAEEGaeeg%&r   )rI   r   r   r   r   r*   r   r  r  rp  rK   r  )ra   r\   rq  rG   r  s      @@r   test_ckdtree_viewr    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   rB   )r"   rB   r   r   r   r)  r"   r   .)
rI   r   r   r,  rH   r   r   r  r   rX  )r   ra   rS   klistkintrK   rG   rV   rW   dd1ii1s              r   test_kdtree_list_kr    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   rB   g      @rY  )r4   r3   )	rI   r   r   r,  rc   rH   r   r   simulate_periodic_box)r   ra   rS   r\   rK   rG   kdtree2r3   rV   rW   r  r  dd2ii2s                 r   test_kdtree_boxr    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 )Nr  rB   r   r   r)  r"   r   r+  r   rY  )rI   r   r   r,  rc   rH   r   r   )r   ra   rS   r\   rK   rG   r  r3   rV   rW   r  r  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   rB   r   r  r"   r   r+  )r   r  )r  r   )rI   r  r~  r   r	   r   r   rK   s     r   test_kdtree_box_upper_boundsr  6  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+  )rI   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   rY  r  rD   )rW   i8)rV   f8r  rW   rV   )order)rI   aranger   r   unravel_indexr   rH   r~  appendr  emptyr  r  )rG   rK   r\   r4   r3   rV   rW   rF   nnra   imager  r  r  s                 r   r  r  D  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   c                      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"   rd  r   g     X@r  r   r   rB   )r\   r3   )resourceImportErrorrI   rW  slicesincos
empty_liker   r9  r*  flatvstacknonzeror   	getrusageRUSAGE_SELF	ru_maxrssrp  r   rH   r   )r  dxdyr  rF   zz_copyFILLVALmaskigoodibadmem_userN   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   rB   r"   r"   rB   r"   r"   r   )weightsr   )rI   r  r~  r  r  _build_weightsr   r  r   rp  r  ro  )r   rK   tree1r  nwrN   c1c2c3c4w1r  tree2s                r   test_kdtree_weightsr    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 )
Nr  rB   r   r)  r"   r   )r   r  r  g{Gz?r  F
cumulative)rI   r   r   normalr  r  r  r   cumsumrb   	itertoolspermutationsr   rg  )r   ra   rS   rK   rG   r0i0n0nncrN   rh  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   rB   r/   r"   r   rr   )r   )r   r  r   r   r  )r   r   Tr   r"  r#  rN   r  r$  )align)r   r  r8  )r   rB   )rI   r   r}  randrH   r	  r   r  r  objectfillr  r  r   r  r   r   intpfloat64r  r:  r8  )r   r  XYr*   r6   rN   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#MAqBHHX..5##E3t8#MA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"   rT  rB   FT)repeat)r  r  r   r   r   )rp  rI   r  r  productr*  r   r*   _noder   r  r~  r  r  r  )r   ra   rS   rK   balancedcompactrG   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   rr   Fr  )r  r   r  )r   rG   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   )rH  r   r   )r   r   r   )r   rH  r   )r   r   r   )r   r   r   r  r  r   r   r[   r   r  )rI   r   rH   r   rc   )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   r   r   r)  r   rw  )
rI   r   r   r  r,  r  r	  rb   r   rA  )r   rK   rH   r*   r6   rvectorqidirscalarr1   r2   s              r   test_query_ball_point_vector_rr  1  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)  rw  Treturn_lengthF)rI   r   r   r  r	  r  r   )r   rK   rH   r*   r6   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)  r   g{Gz?r  Tr   r"   )rI   r   r   r  r  ascontiguousarrayr   stridesr	  r   rH   )r   rK   d_contiguousd_discontiguousquery_contiguousquery_discontiguousr*   length1r  d1i1d2i2s                r   test_discontiguousr  N  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                 J   [         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SS9nUR                  S:X  d   eg )Nr   )r   r   )r   )r"   r   re  r  rw  Tr   r   rB   )rB   rB   r"   r   r  rf  )rI   r   r   r  r  r	  rH   r   isinfrL   r  r   r  )r   r  r  empty_v3query_v3query_v2r*   r  rV   rW   Nr  s               r   test_kdtree_empty_inputr  j  s    IINN4xxf%HwwV$HwwV$Hx%24D""8S"EFQ;;ZZ!$FB88v88v88B<TAq6*Aq1a&!##D#;#GA77fr   c                   &    \ rS rSrS rS rS rSrg)_Test_sorted_query_ball_pointi  c                     [         R                  R                  S5        [         R                  R                  SS5      U l        U R                  U R                  5      U l        g )Nr   r   r"   )rI   r   r   r   rF   r   r  r   s    r   r   *_Test_sorted_query_ball_point.setup_method  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	  rF   r   rA  )r=   	idxs_listidxsrM  s       r   test_return_sorted_True5_Test_sorted_query_ball_point.test_return_sorted_True  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	  rF   r   rA  rb   )r=   r"  r#  rM  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  rF   N)r$   ry   rz   r{   r   r$  r+  r|   rx   r   r   r  r    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   rB   zcomplex datar   r"   rI  )rI   r   r  viewcomplexr   r	   	TypeErrorr   realrH   r	  rq  ts     r   test_kdtree_complex_datar4    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                 J   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R)                  UR&                  5        UR)                  UR$                  5        U(       a  GM  g g )Nr   r  )r*   r   r   	innernodechildrenr   popleafnoder   r  idxr   r  r  r}  rS   r  r   r  r  r  )rN   r3  rq  rootr]  ra   s         r   
visit_treer<    s   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[        SX5        g )Nr   r   r   r   )rI   r   r   r  r   r<  r2  s     r   test_kdtree_tree_accessr>    s9    IINN4YY^^C#FvAq!r   zSpawns worker threadsc                      [         R                  R                  S5      n U R                  SS5      n[	        U5      n[        S[        X!5        g )Nl   ]Qs r   r   r   )rI   r   r}  r  r   r
   r<  )r  rq  r3  s      r   test_multithreaded_tree_accessr@    s=     ))



+CXXc1FvAB
A6r   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                   R"                  U L d   eg )Nr   r   r   r   r"   r   rD   )rI   r   r   r  r   r   rS   r   ra   r   r   r   r  rT   r  aminrK   baser2  s     r   test_kdtree_attributesrD    s   IINN4YY^^C#FvAacc333&,,q/!!!acc333&,,q/!!!ajj#&&&&::qwwQ 78qvvrwwvA6766;;&   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  rI  F)r  r  r  rD   r   )rI   r   r}  r  r~  r  linalgr  rb   r  chainrJ   r   )rE  r  rh  ABwAwBkdAkdBnABr  r  prev_radiusrz  expects                  r   $test_kdtree_count_neighbors_weightedrU    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"   rd  ir  ii   r   imust be finiter   )	r  rI   r  r-  nanr   r	   r   r   )valsra   rK   s      r   test_kdtree_nanr\    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   rr   )r*  lowhighFr  r   rY  r   r"   r   T)rI   r   default_rngr,  r   rp  rZ  r   r	   r   rH   r	  )r  coordsr3  r#   	bad_coords        r   test_nonfinite_inputs_gh_18223rc    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>.ArrLikei2  c                 ^    [         R                  " U5      R                  U 5      nS Ul        U$ r   )rI   rY  r.  rL   )clsinput_arrayobjs      r   __new__&test_gh_18800.<locals>.ArrLike.__new__3  s)    **[)..s3C CGJr   c                 0    Uc  g [        USS 5      U l        g )NrL   )getattrrL   )r=   rk  s     r   __array_finalize__1test_gh_18800.<locals>.ArrLike.__array_finalize__:  s    {sE40DHr   )rL   N)r$   ry   rz   r{   rl  rp  r|   rx   r   r   ArrLikerg  2  s    		1r   rr  gGzP@gQE@@gQ6@gp=
c6@g(\?@g=
ףpMT@r   r"   r  )rI   r#  r   rH   r	  )rd  rr  rq  rE  arr_liker*   s         r   test_gh_18800rt  ,  ss    1"** 1 
		
F
 ((6
Cs|Hvr"DJJx(C(r   c                 H   [         R                  R                  S5      nSnSnUR                  X#5      nU " USS9nSSSSS S	.nUR	                  5        H3  u  px[
        R                  " [        S
S9   [        XWU5        S S S 5        M5     [         R                  " SS/[         R                  S9SSSSS.n	U	R	                  5        H5  u  px[
        R                  " [        SS9   U[        XW5      S S & S S S 5        M7     g ! , (       d  f       M  = f! , (       d  f       M[  = f)Nl   X r   rB   r"   rk  r   r   rV  )rS   ra   r*  r   r*   z(is not writable|has no setter)r   r   r  r  r   r  )rK   r  r4   r  r  zdestination is read-only)rI   r   r}  r  r  r   r	   AttributeErrorrv  r   r  r   ro  )
r   r  ra   r\   rq  r   object_attrsattrattr_valarray_attrss
             r   test_immutabler{  K  s   
))



+CA	AXXa^FFA&AL ',,.]]>1RSAX& TS / !Qrzz2K &++-]]:-GH"*GAQ IH . TS IHs   2D $D 
D	
D!	)yr  rw  numpy.testingr   r   r   r   r   r   r   r	   r  numpyrI   scipy._lib._testutilsr
   scipy.spatialr   r   r   r   scipy.spatial._ckdtreer   r   r   scipy.spatial.distancer   r   scipy.sparser   r   r   r   fixturer   r-   r7   r9   r~   r   r   r   r   r   r   r  r"  r6  r<  rD  rH  rQ  rU  r\  ri  markthread_unsafe	fail_slowru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r2  r6  r;  r=  r?  rF  rR  rZ  r^  rb  ri  rl  rp  rz  r  r  r  r  r  r  r  	fail_asanr  r  r  r  r  r  r  r  r  r  parametrizer  r  r4  r<  r>  r@  rD  rU  r\  rc  rt  r{  rx   r   r   <module>r     s    	, , +   9 E E . B 3 E E () *(H- H-V 	# 	 	 ,| , , &" & &: >+ > >+) +)Z-7 -7^> >4 
( 
 
 #
!1 #
 #
L )9  " 0   (9   -   %?   ,   .  ' ">?q-  @-& ">?qR  @R23 3* 2   &;  " !7   *I   "8   +J  3 3@HF
K
>F F$ F7 F FU) U)p #E  "P #!$/
B#
;5'$AD $D r 6&6J42 ( (T,8\ r+ +$,\&.,+21( 8 7

. - - -:( !8 "9:7 ;7!( &'):;! <!.A, &(9:) ;)<+r   