
    tKg                        d dl Z d dlmZmZmZmZmZmZ d dlm	Z
 d dlZd dlmZ d dlZd dlmZmZmZmZ d dlmZ d dlmZ d dlZ ej0                  eeg      d	        Zd
 Zd Z G d d      Ze G d de             Ze G d de             Ze G d de             Ze G d de             Z  G d d      Z! G d d      Z" G d d      Z#e G d de#             Z$e G d de#             Z%e G d  d!e#             Z&e G d" d#e$             Z'e G d$ d%e$             Z(e G d& d'e$             Z)e G d( d)e%             Z*e G d* d+e$             Z+e G d, d-e$             Z,d. Z-d/ Z. G d0 d1      Z/e G d2 d3e/             Z0e G d4 d5e/             Z1e G d6 d7e0             Z2e G d8 d9e1             Z3e G d: d;e0             Z4e G d< d=e1             Z5 G d> d?      Z6d@ Z7dA Z8dB Z9dC Z: G dD dE      Z;e G dF dGe;             Z< G dH dI      Z=e G dJ dKe=             Z>dL Z?dM Z@dN ZAdO ZBdP ZCdQ ZDdR ZEdS ZFdT ZGdU ZHdV ZIdW ZJdX ZKdY ZLdZ ZMd[ ZNej                  j                  d\      d]        ZQd^ ZRd_ ZSd` ZTda ZUej                  j                   e       dbk(  dcd      de        ZWdf ZXej                  j                  d\      dg        ZYdh ZZdi Z[dj Z\dk Z]dl Z^dm Z_dn Z`ej                  j                  dog dp      dq        Zbe G dr ds             Zcdt Zddu Zedv Zfej                  j                  dweeg      dx        Zgdy Zhdz Ziej                  j                  d{eeg      d|        Zjy)}    N)assert_equalassert_array_equalassert_assert_almost_equalassert_array_almost_equalassert_allclose)raises)python_implementation)KDTree	Rectangledistance_matrixcKDTree)cKDTreeNodeminkowski_distance)paramsc                     | j                   S N)param)requests    c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/spatial/tests/test_kdtree.pykdtree_typer      s    ==    c                     | j                   j                  d      st        d      t        t        fD ]X  }| j                   dd dz   |j                   z   }|t               v rt        d|z         t        || fd|i      }|t               |<   Z | S )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 SF]D,AB	(	) " Jr   c                 v    | |z
  }||d|z  kD  xx   |z  cc<   ||d|z  k  xx   |z  cc<   t        |d|      }|S )N      ?g      r   r   )abpboxsizediffds         r   distance_boxr0   +   sP    q5Dg	')w	7*4A&AHr   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	ConsistencyTestsc                     t        |||      S r   r   selfr*   r+   r,   s       r   distancezConsistencyTests.distance3       !!Q**r   c                    | j                   }| j                  j                  |d      \  }}t        |dz  t	        j
                  || j                  |   z
  dz               d}t        t	        j                  t	        j
                  | j                  |t        j                  d d f   z
  dz  d      |dz  |z
  kD               y )Nr      :0yE>axis)
xkdtreequeryr   npsumdatar   allnewaxis)r5   r=   r/   iepss        r   test_nearestzConsistencyTests.test_nearest6   s    FF{{  A&1AqD"&&!DIIaL.1)<"=>rvvtyy2::q=)99A=AFAcQRSr   c                    | j                   }| j                  }| j                  j                  ||      \  }}t	        j
                  |      }|t	        j                  |         }t        |dz  t	        j                  || j                  |   z
  dz               d}t        t	        j                  t	        j                  | j                  |t        j                  d d f   z
  dz  d      |dz  |z   k        |       y )Nr9   r:   r   r;   )r=   mr>   r?   r@   amaxargmaxr   rA   rB   r   rD   )r5   r=   rI   ddiir/   rE   rF   s           r   test_m_nearestzConsistencyTests.test_m_nearest=   s    FFFF""1a(BGGBKryy}AqD"&&!DIIaL.1)<"=>FF266499Qrzz1}%559BQT#XMN	
r   c           	      $   | j                   }| j                  }| j                  j                  || j                  j                  |      \  }}d}d}t        ||      D ]m  \  }}|t        j                  k(  r|dz  }t        |dz  t        j                  || j                  |   z
  dz               t        |||z   k  d|dd|d       o t        t        j                  | j                  | j                  |d      |dz  |z   k        |       y )	Nkdistance_upper_boundr:   r   r   r9   near_d=g should be less than )r=   r/   r>   r?   nzipr@   infr   rA   rB   r   r   r6   	r5   r=   r/   rL   rM   rF   hitsnear_dnear_is	            r   test_points_nearz!ConsistencyTests.test_points_nearJ   s    FFFF""1A"NB!"bkNFFAID	2661TYYv5F3F2J+KLFQsUNgfQZ7LQqE$RS * 	RVVDMM$))Q:QT#XEFMr   c           	      
   | j                   }| j                  }| j                  j                  || j                  j                  d|      \  }}d}d}t        ||      D ]b  \  }}|t        j                  k(  r|dz  }t        || j                  || j                  |   d             t        |||z   k  d|dd|d       d t        t        j                  | j                  | j                  |d      ||z   k        |       y )Nr   rQ   r,   rR   r:   r   rS   rT   rU   )r=   r/   r>   r?   rV   rW   r@   rX   r   r6   rB   r   r   rA   rY   s	            r   test_points_near_l1z$ConsistencyTests.test_points_near_l1X   s    FFFF""1QR"SB!"bkNFFAIDa69JA(NOFQsUNgfQZ7LQqE$RS * 	RVVDMM$))Q:QsUBCTJr   c           	      ^   | j                   }| j                  }| j                  j                  || j                  j                  t
        j                  |      \  }}d}d}t        ||      D ]p  \  }}|t
        j                  k(  r|dz  }t        || j                  || j                  |   t
        j                               t        |||z   k  d|dd|d       r t        t        j                  | j                  | j                  |t
        j                        ||z   k        |       y )Nr_   r:   r   r   rS   rT   rU   )r=   r/   r>   r?   rV   r@   rX   rW   r   r6   rB   r   r   rA   rY   s	            r   test_points_near_linfz&ConsistencyTests.test_points_near_linff   s    FFFF""1VW"XB!"bkNFFAIDa69JBFF(STFQsUNgfQZ7LQqE$RS * 	RVVDMM$))Q?!C%GH$Or   c                    | j                   }| j                  }d}| j                  j                  ||      \  }}| j                  j                  |||      \  }}t	        t        j                  ||d|z   z  k               y )N皙?)rF   r   )r=   rQ   r>   r?   r   r@   rC   )r5   r=   rQ   rF   d_reali_realr/   rE   s           r   test_approxzConsistencyTests.test_approxt   sp    FFFF**1a0{{  A3 /1qFAcEN*+,r   N)
r   
__module____qualname__r6   rG   rN   r]   r`   rb   rg    r   r   r2   r2   2   s)    +T
NKP-r   r2   c                       e Zd Zd Zy)_Test_randomc                    d| _         d| _        t        j                  j	                  d       t        j                  j                  | j                   | j                        | _        | j                  | j                  d      | _        t        j                  j                  | j                        | _	        d| _
        d| _        y )Nd        r9   leafsize皙?
   )rV   rI   r@   randomseedrandnrB   r   r>   r=   r/   rQ   r5   s    r   setup_methodz_Test_random.setup_method   s    
		tIIOODFFDFF3	&&tyy1&=(r   Nr   rh   ri   ry   rj   r   r   rl   rl   }   s    r   rl   c                        e Zd Z fdZ xZS )_Test_random_farc                     t         |           t        j                  j	                  | j
                        dz   | _        y )Nrt   )superry   r@   ru   rw   rI   r=   r5   	__class__s    r   ry   z_Test_random_far.setup_method   s+    (+r   r   rh   ri   ry   __classcell__r   s   @r   r|   r|      s    , ,r   r|   c                       e Zd Zd Zd Zd Zy)_Test_smallc                    t        j                  g dg dg dg dg dg dg dg dg      | _        | j                  | j                        | _        | j                  j
                  | _        | j                  j                  | _        t         j                  j                  d	       t         j                  j                  d
      | _
        d| _        d| _        y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp      r)   ro   )r@   arrayrB   r   r>   rV   rI   ru   rv   rw   r=   r/   rQ   rx   s    r   ry   z_Test_small.setup_method   s    HHi''''''') *	 &&tyy1
		t#r   c                 P    t        | j                  j                  dd      d       y )Nr   r   rd   r   )rd   r   r   r>   r?   rx   s    r   rG   z_Test_small.test_nearest   s!    !!+q1	r   c                 \    t        | j                  j                  dd      ddgddgf       y )Nr   r9   rd   g?r   r   r   rx   s    r   test_nearest_twoz_Test_small.test_nearest_two   s.    !!+q1saV$	&r   N)r   rh   ri   ry   rG   r   rj   r   r   r   r      s    "
&r   r   c                        e Zd Z fdZ xZS )_Test_small_nonleafc                 f    t         |           | j                  | j                  d      | _        y )Nr   rq   )r~   ry   r   rB   r>   r   s    r   ry   z _Test_small_nonleaf.setup_method   s)    &&tyy1&=r   r   r   s   @r   r   r      s    > >r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Test_vectorization_KDTreec                     t        j                  g dg dg dg dg dg dg dg dg      | _        t        | j                        | _        y 	Nr   r   r   r   r   r   r   r   )r@   r   rB   r   r>   rx   s    r   ry   z&Test_vectorization_KDTree.setup_method   s@    HHi''''''') *	 TYY'r   c                     | j                   j                  t        j                  g d            \  }}t	        t        |t                     t	        t        j                  |t        j                               y Nr   )	r>   r?   r@   r   r   
isinstancefloat
issubdtypesignedintegerr5   r/   rE   s      r   test_single_queryz+Test_vectorization_KDTree.test_single_query   sK    {{  )!451
1e$%a!1!123r   c                     | j                   j                  t        j                  d            \  }}t	        t        j
                  |      d       t	        t        j
                  |      d       y Nr9   ro   r   )r9   ro   r>   r?   r@   zerosr   shaper   s      r   test_vectorized_queryz/Test_vectorization_KDTree.test_vectorized_query   G    {{  )!451RXXa[&)RXXa[&)r   c           	         d}| j                   j                  |z   }| j                   j                  t        j                  g d      |      \  }}t        t        j                  |      |f       t        t        j                  |      |f       t        t        j                  t        j                  || d                      t        t        j                  || d  | j                   j                  k(               y N   r   rQ   )
r>   rV   r?   r@   r   r   r   r   rC   isfiniter5   skkr/   rE   s        r   $test_single_query_multiple_neighborsz>Test_vectorization_KDTree.test_single_query_multiple_neighbors   s    [[]]1_{{  )!4 ;1RXXa[2%(RXXa[2%(AqbcF++,-q!v./0r   c                 *   d}| j                   j                  |z   }| j                   j                  t        j                  d      |      \  }}t        t        j                  |      dd|f       t        t        j                  |      dd|f       t        t        j                  t        j                  |d d d d | d f                       t        t        j                  |d d d d | d f   | j                   j                  k(               y Nr   r   r   r9   ro   
r>   rV   r?   r@   r   r   r   r   rC   r   r   s        r   (test_vectorized_query_multiple_neighborszBTest_vectorization_KDTree.test_vectorized_query_multiple_neighbors       [[]]1_{{  )!4 ;1RXXa[1a*-RXXa[1a*-AaQBCiL1123qArs|t{{}}456r   c                     d}t        j                  t        d      5  | j                  j	                  |d        d d d        y # 1 sw Y   y xY w)N      ?zk must be an integer or*matchr   )pytestr	   
ValueErrorr>   r?   )r5   r=   s     r   test_query_raises_for_k_nonez6Test_vectorization_KDTree.test_query_raises_for_k_none   s:    ]]:-GHKKa4( IHHs   AAN)	r   rh   ri   ry   r   r   r   r   r   rj   r   r   r   r      s     	(4
*
17)r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Test_vectorization_cKDTreec                     t        j                  g dg dg dg dg dg dg dg dg      | _        t        | j                        | _        y r   )r@   r   rB   r   r>   rx   s    r   ry   z'Test_vectorization_cKDTree.setup_method   s@    HHi''''''') *	 dii(r   c                     | j                   j                  g d      \  }}t        t        |t                     t        t        |t
                     y r   )r>   r?   r   r   r   intr   s      r   r   z,Test_vectorization_cKDTree.test_single_query   s8    {{  +1
1e$%
1c"#r   c                     | j                   j                  t        j                  d            \  }}t	        t        j
                  |      d       t	        t        j
                  |      d       y r   r   r   s      r   r   z0Test_vectorization_cKDTree.test_vectorized_query   r   r   c                 L   t         j                  j                  d       t         j                  j                  dd      j                  }| j
                  j                  |      \  }}t        |||      D ]-  \  }}}t        | j
                  j                  |      ||f       / y )Nrp   r     )	r@   ru   rv   rw   Tr>   r?   rW   r   )r5   qsdsi_sqr/   rE   s          r   *test_vectorized_query_noncontiguous_valueszETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_values   sz    
		tYY__Q%''++##B'C2r3'GAq!**1-1v6 (r   c           	         d}| j                   j                  |z   }| j                   j                  g d|      \  }}t        t	        j
                  |      |f       t        t	        j
                  |      |f       t        t	        j                  t	        j                  || d                      t        t	        j                  || d  | j                   j                  k(               y r   )	r>   rV   r?   r   r@   r   r   rC   r   r   s        r   r   z?Test_vectorization_cKDTree.test_single_query_multiple_neighbors   s    [[]]1_{{  b 11RXXa[2%(RXXa[2%(AqbcF++,-q!v./0r   c                 *   d}| j                   j                  |z   }| j                   j                  t        j                  d      |      \  }}t        t        j                  |      dd|f       t        t        j                  |      dd|f       t        t        j                  t        j                  |d d d d | d f                       t        t        j                  |d d d d | d f   | j                   j                  k(               y r   r   r   s        r   r   zCTest_vectorization_cKDTree.test_vectorized_query_multiple_neighbors	  r   r   N)	r   rh   ri   ry   r   r   r   r   r   rj   r   r   r   r      s     	)$
*
717r   r   c                   "    e Zd ZdZd Zd Zd Zy)ball_consistency        c                 (    t        |dz  |dz  |      S Nr   r   r4   s       r   r6   zball_consistency.distance  s    !!c'1s7A66r   c                    t        j                  | j                        }t        j                  | j                  |j
                  d d       }| j                  j                  || j                  | j                  | j                        }t        |      D ]  \  }}| j                  | j                  |   ||   | j                        ||   d| j                  z   z  z
  }| j                  | j                  |   ||   | j                        ||   d| j                  z   z  z   }t        || j                  |z  k  d        y )Nr,   rF   r   T)r@   
atleast_2dr=   broadcast_tor/   r   r   query_ball_pointr,   rF   	enumerater6   rB   r   tol)r5   r=   r/   lrE   inddistnorms           r   test_in_ballzball_consistency.test_in_ball  s    MM$&&!OODFFAGGCRL1FF##AtvvTXX#FlFAs==31tvv>1r$(({ASSD==31tvv>1r$(({ASSDtdhho5t< #r   c                    t        j                  | j                        }t        j                  | j                  |j
                  d d       }| j                  j                  || j                  | j                  | j                        }t        |      D ]  \  }}t        j                  | j                  j                  t              }d||<   | j                  | j                  |   ||   | j                        ||   d| j                  z   z  z
  }| j                  | j                  |   ||   | j                        ||   d| j                  z   z  z   }t!        || j"                   |z  kD  d        y )Nr   r   dtypeFr   T)r@   r   r=   r   r/   r   r   r   r,   rF   r   onesrV   boolr6   rB   r   r   )	r5   r=   r/   r   rE   r   cr   r   s	            r   test_found_allzball_consistency.test_found_all!  s   MM$&&!OODFFAGGCRL1FF##AtvvTXX#FlFAs-AAcF==1qtTVV<qtR[?QQD==1qtTVV<qtR[?QQDttxxi$&66= #r   N)r   rh   ri   r   r6   r   r   rj   r   r   r   r     s    
C7=	>r   r   c                       e Zd Zd Zy)_Test_random_ballc                 J   d}d}t         j                  j                  d       t         j                  j                  ||      | _        | j                  | j                  d      | _        t         j                  j                  |      | _        d| _        d| _	        d| _
        y )	Nrn   ro   rp   r9   rq          @r   rs   )r@   ru   rv   rw   rB   r   r   r=   r,   rF   r/   r5   rV   rI   s      r   ry   z_Test_random_ball.setup_method.  sv    
		tIIOOAq)	!!$))a!8#r   Nrz   rj   r   r   r   r   ,  s    	r   r   c                   $    e Zd Zd Zd Zd Zd Zy)_Test_random_ball_periodicc                     t        |||d      S r   r0   r4   s       r   r6   z#_Test_random_ball_periodic.distance<      Aq!S))r   c                 >   d}d}t         j                  j                  d       t         j                  j                  ||f      | _        | j                  | j                  dd      | _        t        j                  |d      | _        d	| _	        d
| _
        d| _        y )Ni'  ro   rp   sizer9   r   rr   r-   rd   r   r   rs   )r@   ru   rv   uniformrB   r   r   fullr=   r,   rF   r/   r   s      r   ry   z'_Test_random_ball_periodic.setup_method?  s|    
		tII%%Aq6%2	!!$))a!CCr   c                    | j                   j                  | j                  dz   | j                  | j                  | j
                        }|D ]\  }t        | j                  | j                  |   | j                  | j                        | j                  d| j
                  z   z  k         ^ | j                   j                  | j                  dz
  | j                  | j                  | j
                        }|D ]\  }t        | j                  | j                  |   | j                  | j                        | j                  d| j
                  z   z  k         ^ y )Nr   r   )	r   r   r=   r/   r,   rF   r   r6   rB   )r5   r   rE   s      r   test_in_ball_outsidez/_Test_random_ball_periodic.test_in_ball_outsideJ  s    FF##DFFSL$&&DFF#QADMM$))A,?4662dhh;CWWX FF##DFFSL$&&DFF#QADMM$))A,?4662dhh;CWWX r   c                 6   t        j                  | j                  j                  t              }| j                  j                  | j                  dz   | j                  | j                  | j                        }d||<   t        j                  | j                  | j                  |   | j                  | j                        | j                  d| j                  z   z  k\        sJ | j                  j                  | j                  dz
  | j                  | j                  | j                        }d||<   t        j                  | j                  | j                  |   | j                  | j                        | j                  d| j                  z   z  k\        sJ y )Nr   r   r   F)r@   r   r   rV   r   r   r=   r/   r,   rF   rC   r6   rB   )r5   r   r   s      r   test_found_all_outsidez1_Test_random_ball_periodic.test_found_all_outsideR  s(   GGDFFHHD)FF##DFFSL$&&DFF#Q!vvMM$))A,74662dhh;;OO
 	
 
 FF##DFFSL$&&DFF#Q!vvMM$))A,74662dhh;;OO
 	
 
r   N)r   rh   ri   r6   ry   r   r   rj   r   r   r   r   :  s    *	Y
r   r   c                       e Zd ZdZd Zy)"_Test_random_ball_largep_issue9890gvIh%<=c                 (   d}d}t         j                  j                  d       t         j                  j                  dd||f      | _        | j                  | j                        | _        | j                  | _        d| _        d| _	        d| _
        y )Nr   r9   {   rn   r   r   rt   )r@   ru   rv   randintrB   r   r   r=   r,   rF   r/   r   s      r   ry   z/_Test_random_ball_largep_issue9890.setup_methodg  ss    
		sII%%c4q!f%=	!!$)),r   N)r   rh   ri   r   ry   rj   r   r   r   r   a  s     C	r   r   c                        e Zd Z fdZ xZS )_Test_random_ball_approxc                 0    t         |           d| _        y Nrd   r~   ry   rF   r   s    r   ry   z%_Test_random_ball_approx.setup_methodv      r   r   r   s   @r   r  r  s       r   r  c                        e Zd Z fdZ xZS )!_Test_random_ball_approx_periodicc                 0    t         |           d| _        y r  r  r   s    r   ry   z._Test_random_ball_approx_periodic.setup_method~  r	  r   r   r   s   @r   r  r  {  r
  r   r  c                        e Zd Z fdZ xZS )_Test_random_ball_farc                 0    t         |           d| _        y Nr   r~   ry   r/   r   s    r   ry   z"_Test_random_ball_far.setup_method      r   r   r   s   @r   r  r         r   r  c                        e Zd Z fdZ xZS )_Test_random_ball_far_periodicc                 0    t         |           d| _        y r  r  r   s    r   ry   z+_Test_random_ball_far_periodic.setup_method  r  r   r   r   s   @r   r  r    r  r   r  c                        e Zd Z fdZ xZS )_Test_random_ball_l1c                 0    t         |           d| _        y )Nr   )r~   ry   r,   r   s    r   ry   z!_Test_random_ball_l1.setup_method      r   r   r   s   @r   r  r         r   r  c                        e Zd Z fdZ xZS )_Test_random_ball_linfc                 L    t         |           t        j                  | _        y r   r~   ry   r@   rX   r,   r   s    r   ry   z#_Test_random_ball_linf.setup_method      r   r   r   s   @r   r  r         r   r  c                 \   d}d}t         j                  j                  d        | t         j                  j                  ||            }|j	                  t         j                  j                  dd|      d      }t        |j                  d       t        t        |d   t                     y )	N      rp   r9   r   r   r9   r   r   r   )
r@   ru   rv   rw   r   r   r   r   r   list)r   rV   rI   r   rs        r   test_random_ball_vectorizedr*    sy    
A	AIINN4BIIOOAq)*A	299??1a3Q7A&!Jqw%&r   c                    t         j                  j                  d       d}d}t         j                  j                  ||      } | |      }|j	                  |dd      }|j	                  |dd      }|j	                  |dd      }t        |      D ]  }||   s||   st        ||   ||          ! t        |      D ]  }||   s||   st        ||   ||          ! y )	Nr     r9   g~jth?r   workers@   r   )r@   ru   rv   rw   r   ranger   )	r   rV   rQ   pointsr   l1l2l3rE   s	            r   $test_query_ball_point_multithreadingr5    s    IINN1A	AYY__Q"FFA	
		FE1		5B	
		FE2		6B	
		FE2		6B1Xa5BqEr!ube,  1Xa5BqEr!ube, r   c                       e Zd Zd Zd Zd Zy)two_trees_consistencyc                     t        |||      S r   r   r4   s       r   r6   ztwo_trees_consistency.distance  r7   r   c                 r   | j                   j                  | j                  | j                  | j                  | j
                        }t        |      D ]b  \  }}|D ]X  }| j                  | j                  |   | j                  |   | j                        | j                  d| j
                  z   z  k  rXJ  d y )Nr   r   )
T1query_ball_treeT2r/   r,   rF   r   r6   data1data2)r5   r)  rE   r   js        r   test_all_in_ballz&two_trees_consistency.test_all_in_ball  s    GG##DGGTVVtvv488#LaLDAqdjjmTZZ]DFFK662dhh;/0 1 0  !r   c                    | j                   j                  | j                  | j                  | j                  | j
                        }t        |      D ]  \  }}t        j                  | j                  j                  t              }d||<   t        j                  | j                  | j                  |   | j                  |   | j                        | j                  d| j
                  z   z  k\        rJ  y )Nr   r   Fr   )r:  r;  r<  r/   r,   rF   r   r@   r   rV   r   rC   r6   r>  r=  )r5   r)  rE   r   r   s        r   r   z$two_trees_consistency.test_found_all  s    GG##DGGTVVtvv488#LaLDAq		.AAaD66$--

1tzz!}dffM!VVR[12 3 3 3 !r   N)r   rh   ri   r6   r@  r   rj   r   r   r7  r7    s    +13r   r7  c                       e Zd Zd Zy)_Test_two_random_treesc                    d}d}t         j                  j                  d       t         j                  j                  ||      | _        | j                  | j                  d      | _        t         j                  j                  ||      | _        | j                  | j                  d      | _        d| _	        d| _
        d| _        y )	N2   ro   rp   r9   rq   r   r   rs   )r@   ru   rv   rw   r=  r   r:  r>  r<  r,   rF   r/   r   s      r   ry   z#_Test_two_random_trees.setup_method  s    
		tYY__Q*
""4::":YY__Q*
""4::":r   Nrz   rj   r   r   rC  rC    s    
r   rC  c                       e Zd Zd Zd Zy)_Test_two_random_trees_periodicc                     t        |||d      S r   r   r4   s       r   r6   z(_Test_two_random_trees_periodic.distance  r   r   c                    d}d}t         j                  j                  d       t         j                  j                  ||f      | _        | j                  | j                  dd      | _        t         j                  j                  ||f      | _        | j                  | j                  dd      | _        d| _	        d	| _
        d
| _        y )NrE  ro   rp   r   r9   r   r   r   r   rs   )r@   ru   rv   r   r=  r   r:  r>  r<  r,   rF   r/   r   s      r   ry   z,_Test_two_random_trees_periodic.setup_method  s    
		tYY&&QF&3
""4::3"GYY&&QF&3
""4::3"Gr   N)r   rh   ri   r6   ry   rj   r   r   rG  rG    s    *
r   rG  c                        e Zd Z fdZ xZS )_Test_two_random_trees_farc                 0    t         |           d| _        y Nr9   r  r   s    r   ry   z'_Test_two_random_trees_far.setup_method  r  r   r   r   s   @r   rK  rK    r  r   rK  c                        e Zd Z fdZ xZS )#_Test_two_random_trees_far_periodicc                 0    t         |           d| _        y rM  r  r   s    r   ry   z0_Test_two_random_trees_far_periodic.setup_method  r  r   r   r   s   @r   rO  rO    r  r   rO  c                        e Zd Z fdZ xZS )_Test_two_random_trees_linfc                 L    t         |           t        j                  | _        y r   r   r   s    r   ry   z(_Test_two_random_trees_linf.setup_method
  r!  r   r   r   s   @r   rR  rR    r"  r   rR  c                        e Zd Z fdZ xZS )$_Test_two_random_trees_linf_periodicc                 L    t         |           t        j                  | _        y r   r   r   s    r   ry   z1_Test_two_random_trees_linf_periodic.setup_method  r!  r   r   r   s   @r   rU  rU    r"  r   rU  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
Test_rectanglec                 .    t        ddgddg      | _        y Nr   r   )r   rectrx   s    r   ry   zTest_rectangle.setup_method  s    q!fq!f-	r   c                 R    t        | j                  j                  ddg      d       y )Nr)   r   r   r[  min_distance_pointrx   s    r   test_min_insidezTest_rectangle.test_min_inside  s    DII88#sDaHr   c                 R    t        | j                  j                  ddg      d       y Nr)   g      ?r]  rx   s    r   test_min_one_sidez Test_rectangle.test_min_one_side  s    DII88#sDcJr   c                 x    t        | j                  j                  ddg      t        j                  d             y rM  )r   r[  r^  r@   sqrtrx   s    r   test_min_two_sidesz!Test_rectangle.test_min_two_sides"  s'    DII88!Q@"''!*Mr   c                 ~    t        | j                  j                  ddg      dt        j                  d      z         y )Nr)   r   r9   r   r[  max_distance_pointr@   rd  rx   s    r   test_max_insidezTest_rectangle.test_max_inside%  s,    DII88#sDaPQ
lSr   c                 z    t        | j                  j                  ddg      t        j                  dd             y ra  )r   r[  rh  r@   hypotrx   s    r   test_max_one_sidez Test_rectangle.test_max_one_side(  s-    DII88#sDHHS#.	0r   c                 ~    t        | j                  j                  ddg      dt        j                  d      z         y rM  rg  rx   s    r   test_max_two_sidesz!Test_rectangle.test_max_two_sides,  s+    DII88!Q@!BGGAJ,Or   c                    | j                   j                  dd      \  }}t        |j                  ddg       t        |j                  ddg       t        |j                  ddg       t        |j                  ddg       y )Nr   rd   r   )r[  splitr   maxesmins)r5   lessgreaters      r   
test_splitzTest_rectangle.test_split/  sb    		3/g4::Qx0499q!f-7==1a&17<<#q2r   N)r   rh   ri   ry   r_  rb  re  ri  rl  rn  ru  rj   r   r   rX  rX    s/    .IKNT0P3r   rX  c                  `    t        t        ddgddgd      t        j                  d             y Nr   r   r9   )r   r   r@   rd  rj   r   r   test_distance_l2rx  7  s&    *Aq6Aq61=rwwqzJr   c                  :    t        t        ddgddgd      d       y rw  )r   r   rj   r   r   test_distance_l1rz  ;  s    *Aq6Aq61=qAr   c                  V    t        t        ddgddgt        j                        d       y rZ  )r   r   r@   rX   rj   r   r   test_distance_linfr|  ?  s"    *Aq6Aq6266BAFr   c                     t         j                  j                  d       t         j                  j                  ddd      } t         j                  j                  ddd      }t	        t        | |      j                  d       y )Nrp   rt   r   r      )rt   r~  )r@   ru   rv   rw   r   r   r   )r=   ys     r   test_distance_vectorizationr  C  sV    IINN4
		Aq!A
		1a A#Aq)//9r   c                       e Zd Zd Zd Zd Zy)count_neighbors_consistencyc                    d}t        | j                  j                  | j                  |      t	        j
                  | j                  j                  | j                  |      D cg c]  }t        |       c}             y c c}w )Nrs   r   r:  count_neighborsr<  r@   rA   r;  lenr5   r)  r   s      r   test_one_radiusz+count_neighbors_consistency.test_one_radiusK  s`    TWW,,TWWa8(?(?(KL(K1A(KLM	OL   $Bc                    d}t        | j                  j                  | j                  |      t	        j
                  | j                  j                  | j                  |      D cg c]  }t        |       c}             y c c}w )Nr   r  r  s      r   test_large_radiusz-count_neighbors_consistency.test_large_radiusP  s`    TWW,,TWWa8(?(?(KL(K1A(KLM	OLr  c                    t        j                  t        j                  t        j                  d      t        j                  d      d            }| j                  j                  | j                  |      }t        t        j                  t        j                  |      dk\               t        ||      D ]5  \  }}t        | j                  j                  | j                  |      |       7 y )N{Gz?rt   r   r   )r@   explinspacelogr:  r  r<  r   rC   r.   rW   r   )r5   rsresultsr)  results        r   test_multiple_radiusz0count_neighbors_consistency.test_multiple_radiusU  s    VVBKKtbffRj!<=''))$''26rwww'1,-.R)IAv00!<fE *r   N)r   rh   ri   r  r  r  rj   r   r   r  r  J  s    O
O
Fr   r  c                       e Zd Zd Zy)_Test_count_neighborsc                 "   d}d}t         j                  j                  d       | j                  t         j                  j	                  ||      d      | _        | j                  t         j                  j	                  ||      d      | _        y )NrE  r9   rp   rq   )r@   ru   rv   r   rw   r:  r<  r   s      r   ry   z"_Test_count_neighbors.setup_method^  sh    
		t""299??1a#81"E""299??1a#81"Er   Nrz   rj   r   r   r  r  \  s    Fr   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)"sparse_distance_matrix_consistencyc                     t        |||      S r   r   r4   s       r   r6   z+sparse_distance_matrix_consistency.distanceh  r7   r   c           
         | j                   j                  | j                  | j                        }| j                   j	                  | j                  | j                        }t        |      D ]h  \  }}|D ]^  }t        |||f   | j                  | j                   j                  |   | j                  j                  |   | j                        d       ` j |j                         D ]  \  \  }}}t        |||   v         y )N   decimal)r:  sparse_distance_matrixr<  r)  r;  r   r   r6   rB   r,   itemsr   )r5   Mr)  rE   r   r?  r/   s          r   test_consistency_with_neighborszBsparse_distance_matrix_consistency.test_consistency_with_neighborsk  s    GG**477DFF;GG##DGGTVV4aLDAq#adGMM$'',,q/477<<?DFFK  ! 779KVaQA1I %r   c                 d    | j                   j                  | j                   | j                         y r   )r:  r  r)  rx   s    r   test_zero_distancez5sparse_distance_matrix_consistency.test_zero_distancex  s    &&tww7r   c                 (   | j                   j                  | j                  | j                        }t	        | j                   j
                  | j                  j
                        }d||| j                  kD  <   t        |j                         |d       y )Nr   r  r  )r:  r  r<  r)  r   rB   r   toarray)r5   M1expecteds      r   test_consistencyz3sparse_distance_matrix_consistency.test_consistency|  sa    WW++DGGTVV<"477<<>&'DFF"#!"**,"Er   c                 L   t         j                  j                  d       t        j                  t         j                  j	                  dd      t
              }| j                  |dd      }|j                  |d      j                         }t        ||j                  d	       y )
Nr      r9   r   Fbalanced_treecompact_nodesr   r  r  )r@   ru   rv   r   rw   r   r   r  r  r   r   )r5   too_manyr$   r/   s       r   #test_against_logic_error_regressionzFsparse_distance_matrix_consistency.test_against_logic_error_regression  sy    
		q88BIIOOB2#>E   @''a088:!!QSS"5r   c                 8   t        j                  | j                  | j                  f      }t        | j                        D ]^  }t        | j                        D ]D  }| j                  |d d f   | j
                  |d d f   z
  }t        j                  ||      |||f<   F ` t        j                  |      }d||| j                  kD  <   t        j                  | j                  | j                  f      }| j                  j                  | j                  | j                  d      }|j                         D ]  \  }}|||f   |||f<    t        ||d       t        j                  | j                  | j                  f      }| j                  j                  | j                  | j                  d      }t        |j                  d         D ]!  }|d   |   }|d	   |   }|d
   |   }||||f<   # t        ||d       | j                  j                  | j                  | j                  d      }t        ||j                         d       | j                  j                  | j                  | j                  d      }t        ||j                         d       y )Nr   dictoutput_typer  r  ndarrayr   rE   r?  v
dok_matrix
coo_matrix)r@   r   rV   r0  r=  r>  dotrd  r)  r:  r  r<  keysr   r   r  )r5   refrE   r?  r  r   r)  rQ   s           r   test_ckdtree_return_typesz<sparse_distance_matrix_consistency.test_ckdtree_return_types  s    hh'(tvvA466]JJq!t$tzz!Q$'77FF1aLAqD	 #  ggclC$&&Lxx()GG**477DFF*OFFHDAqAq6DAJ !#tR8xx()GG**477DFF! + #qwwqz"A#q	A#q	A#q	ADAJ	 #
 	"#tR8GG**477DFF$ + &!#qyy{B?GG**477DFF$ + &!#qyy{B?r   N)	r   rh   ri   r6   r  r  r  r  r  rj   r   r   r  r  f  s"    +8F6 @r   r  c                       e Zd Zd Zy)_Test_sparse_distance_matrixc                 ~   d}d}t         j                  j                  d       t         j                  j                  ||      }t         j                  j                  ||      }| j	                  |d      | _        | j	                  |d      | _        d| _        d| _        || _	        || _
        || _        || _        y )NrE  ro   rp   r9   rq   r)   )r@   ru   rv   rw   r   r:  r<  r)  r,   r=  r>  rV   rI   )r5   rV   rI   r=  r>  s        r   ry   z)_Test_sparse_distance_matrix.setup_method  s    
		t		1%		1%""51"5""51"5

r   Nrz   rj   r   r   r  r    s    r   r  c            	         d} d}d}t         j                  j                  d       t         j                  j                  | |      }t         j                  j                  ||      }t	        ||      }t        |j                  | |f       t        |       D ]3  }t        |      D ]#  }t        t        ||   ||         |||f          % 5 y )Nrt      ro   rp   )
r@   ru   rv   rw   r   r   r   r0  r   r   )rI   rV   rQ   xsysr   rE   r?  s           r   test_distance_matrixr    s    
A
A	AIINN4	A	B	A	B	R	 BAq6"1XqA 22a5"Q% @"QT(K  r   c                     d} d}d}t         j                  j                  d       t         j                  j                  | |      }t         j                  j                  ||      }t	        ||      }t	        ||d      }t        ||       y )Nrt   r  ro   rp   r   )	threshold)r@   ru   rv   rw   r   r   )rI   rV   rQ   r  r  r   dsls          r   test_distance_matrix_loopingr    sm    
A
A	AIINN4	A	B	A	B	R	 B
"bA
.CSr   c                     | j                  | |      }t               }t        |      D ]%  \  }}|D ]  }||k  s	|j                  ||f        ' t	        || j                  |      k(         y r   )r;  setr   addr   query_pairs)r   r/   r)  r   rE   r   r?  s          r   check_onetree_queryr    se    	!QAA!1A1uq!f  
 Aq!!"r   c                    t         j                  j                  d       d}d}t         j                  j                  ||      } | |      }t	        |d       t         j                  j                  d|z  |      }|d |xxx dz  ccc ||d|z  xxx dz  ccc  | |      }t	        |d       t	        |d       t	        |d       t	        |d	       y )
Nr   rE  ro   rd   r   gMbP?r9   gh㈵>gư>)r@   ru   rv   rw   r  )r   rV   rQ   r1  r   s        r   test_onetree_queryr    s    IINN1
A	AYY__Q"FFA3YY__QqS!$F
2AJ%J
1QqSMQMFA35!7#4 r   c                 `     | ddgg      }t        |j                  d      t                      y )Nr   r   r)   )r   r  r  )r   r$   s     r   test_query_pairs_single_noder    s)    Ax D!!#&.r   c           	      >   t         j                  j                  d       d}d}d}|dz  }t         j                  j                  ||      } | |      }t	               }t        |      D ]V  }t        |dz   |      D ]B  }	||d d f   ||	d d f   z
  }
t        j                  |
|
      |k  s0|j                  ||	f       D X t        |      }|j                  |      }t        |      }t        ||       |j                  |d      }t        |      }t        ||       t	               }|j                  |d      }t        |j                  d         D ]1  }|j                  t        ||df         t        ||df         f       3 t        |      }t        ||       y )	Nr   rE  r9   rd   r   r  r  r  )r@   ru   rv   rw   r  r0  r  r  sortedr  r   r   r   )r   rV   rQ   r)  r2r1  r   bruterE   r?  r  l0r   r2  arrr3  s                   r   test_kdtree_query_pairsr    sj   IINN1
A	AA	
ABYY__Q"FFAEE1XqsAAq!tvad|+Avva|r!		1a&!  
 
B	aA	Br2	aU+A	Br2A
--y-
1C399Q< 	s3q!t9~s3q!t9~./ !	Br2r   c                 N   t        j                  d      }t        j                  dd|z  d      }t        j                  dd|z  d      }|D cg c]  }|D ]  }||f  }}} | |      }|j                  |d      }|j                  |dz        }	t	        |	|       y c c}}w )	Nr9   r   r   ro   rd   )r)  rF   )\(?r)  )r@   rd  r  r  r   )
r   spacingx_rangey_rangexiyixy_arrayr$   	pairs_epspairss
             r   test_query_pairs_epsr    s    ggajGkk!Q[!,Gkk!Q[!,G#*=7RWrRW7H=x D  7 3Iw~.E	" >s   B!c           	         t         j                  ddddf   \  }}t        t        |j	                         |j	                                     } | |      }t        t        g d      t        |j                  dd                   t        j                  |t              } | |      }t        t        g d      t        |j                  dd                   y )Nr   ro   )ro      	      )r9   r   r   r   )
r@   mgridr(  rW   ravelr   r  r   asarrayr   )r   r=   r  r1  r$   s        r   test_ball_point_intsr  +  s    88AaC1HDAq#aggi+,FvD&--fa89;ZZe,FvD&--fa89;r   c            	          t        d      D  cg c]  } t        j                          }} t        t	        |      t	        |d d d                y c c} w )Nr   r   )r0  r   noder   r  )r   nodess     r   test_kdtree_comparisonsr  8  s@    $)!H-HqV[[]HE-uTrT{ 34 .s   Ac                    t         j                  j                  d       d}d}t         j                  j                  ||      } | |      j	                  |d      d   } | |d      j	                  |d      d   } | |d	      j	                  |d      d   } | |dd
      j	                  |d      d   }t        ||       t        ||       t        ||       y )Nr   r,  ro   r%  r   r   F)r  )r  )r  r  )r@   ru   rv   rw   r?   r   )r   rV   rQ   r1  r:  r<  T3T4s           r   test_kdtree_build_modesr  >  s    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r2r2r2r   c                 V   dd l }t        j                  j                  d       d}d}t        j                  j	                  ||      } | |      }|j                  |      }|j                  |      }|j                  |d      d   }|j                  |d      d   }t        ||       y )Nr   rE  ro   r%  r   r   )	pickler@   ru   rv   rw   dumpsloadsr?   r   r   r  rV   rQ   r1  r:  tmpr<  s           r   test_kdtree_pickler  M  s    IINN1
A	AYY__Q"F	V	B
,,r
C	c	B	&A	r	"B	&A	r	"Br2r   c                 ^   dd l }t        j                  j                  d       d}d}t        j                  j	                  ||f      } | |d      }|j                  |      }|j                  |      }|j                  |d      d	   }|j                  |d      d	   }t        ||       y )
Nr   rE  ro   r   r   )r-   r%  r   r   )	r  r@   ru   rv   r   r  r  r?   r   r  s           r   test_kdtree_pickle_boxsizer  [  s    IINN1
A	AYYQF+F	VS	)B
,,r
C	c	B	&A	r	"B	&A	r	"Br2r   c                 t   t         j                  j                  d       d}d}t         j                  j                  ||      } | |d      }|j	                         }|j                  |d      d   }t         j                  j                  ||      |d	<   |j                  |d      d   }t        ||       y )
Nr   r,  ro   T)	copy_datar%  r   r   .)r@   ru   rv   rw   copyr?   r   )r   rV   rQ   r1  r   r   r:  r<  s           r   test_kdtree_copy_datar  i  s     IINN1A	AYY__Q"FFd+AA	
a	B))//!Q'F3K	
a	Br2r   c                 
   t         j                  j                  d       d}d}t         j                  j                  ||      } | |      }|j	                  |dd      d   }|j	                  |dd      d   }|j	                  |d      d   }t        ||       t        ||       |j                  t        d	d
        t        j                  t        d      5  |j	                  |dd       d d d        y # 1 sw Y   y xY w)Nr   r,  ro   r%  r/  )rQ   r.  r   r   	cpu_countc                       y r   rj   rj   r   r   <lambda>z'test_ckdtree_parallel.<locals>.<lambda>  s    r   zCannot determine ther   r   r-  )r@   ru   rv   rw   r?   r   setattrosr   r	   NotImplementedError)	r   monkeypatchrV   rQ   r1  r   r:  r<  r  s	            r   test_ckdtree_parallelr
  x  s    IINN1A	AYY__Q"FFA	
1b	)"	-B	
1b	)"	-B	
1	b	!Br2r2K6	*2H	I	2& 
J	I	Is   C99Dc                     t         j                  j                  d       d} d}t         j                  j                  | |      }t	        |      fd j
                         j
                  } t        t        j                  | j                        t        d             t        j                  | j                  d d f   | j                         y )Nr   rn   ro   c                 J   t        t        | t                     | j                  dk(  r^t        | j                  d u        t        | j
                  d u        t        | j                  j                  d   j                  k         y  | j                          | j
                         | j                  j                  d d | j                  f   }| j
                  j                  d d | j                  f   }t        |j                         |j                         k         y )Nr   r   )r   r   r   	split_dimlesserrt  indicesr   rr   data_pointsmaxmin)rV   r=   r  r>   recurse_trees      r   r  z'test_ckdtree_view.<locals>.recurse_tree  s    
1k*+;;"AHH$%AII%&AIIOOA&&//9:"#$$Q^4A		%%an5AAEEGaeeg%&r   )r@   ru   rv   rw   r   r$   r   sortr  r0  rB   r  )rV   rQ   r1  r>   r  s      @@r   test_ckdtree_viewr    s     IINN1A	AYY__Q"FV_F' Arwwqyy)5:6v{{199a<0!--@r   c                 V   d}d}g d}d}t         j                  j                  d       t         j                  j                  ||f      } | |d      }|j	                  ||      \  }}|j	                  ||      \  }	}
t        ||	       t        ||
       t        j                  ddg      }d}|j	                  ||      \  }}|j	                  ||      \  }	}
t        |	|d	|dz
  f          t        |
|d	|dz
  f          |j	                  |d      \  }}|j	                  |dg      \  }	}
t        t        |j                        d       t        t        |	j                        d       t        |t        j                  |	             t        |t        j                  |
             y )
N   r9   )r   r9   r   r   rp   r   r   rq   .)
r@   ru   rv   r   r?   r   r   r  r   r  )r   rV   rI   klistkintrB   r>   rL   rM   dd1ii1s              r   test_kdtree_list_kr    sn   A	AEDIINN4991a&)D*F \\$&FB||D$'HCSS HHaVED\\$%FB||D%(HCbeai()beai() \\$"FB||D1#&HCRXX"SYY#RXXc]#RXXc]#r   r%  c                 :   d}d}d}t         j                  j                  d       t         j                  j                  ||f      } | |dd      } | |d      }dd	d
t         j                  fD ]  }|j                  |||      \  }}	|j                  |dz   ||      \  }
}t        ||
       t        |	|       |j                  |dz
  ||      \  }
}t        ||
       t        |	|       t        |||d|      \  }}t        ||       t        |	|        y )N  r   rp   r   r   r   r   rq   r9   g      @r,   )r-   r,   )	r@   ru   rv   r   rX   r?   r   r   simulate_periodic_box)r   rV   rI   rQ   rB   r>   kdtree2r,   rL   rM   r  r  dd2ii2s                 r   test_kdtree_boxr$    s    	A	A	AIINN4991a&)D37F $+GC dA+B<<s
A<3SB$R<<s
A<3SB$R($3!LSB$R !r   c                 x   d}d}d}t         j                  j                  d       t         j                  j                  ||f      } | |dd      } | |d	      }ddt         j                  fD ]H  }|j                  |||
      \  }}	|j                  |||
      \  }
}t        ||
       t        |	|       J y )Nr  r9   r   rp   r   r   r   r   rq   r  )r@   ru   rv   r   rX   r?   r   r   )r   rV   rI   rQ   rB   r>   r!  r,   rL   rM   r  r  s               r   test_kdtree_box_0boxsizer&    s    A	A	AIINN4991a&)D37F $+GBFF^dA+B==qA=.SB$R r   c                 n   t        j                  ddd      j                  dd      }|d d dfxx   dz  cc<   t        j                  t
              5   | |dd       d d d        t        j                  t
              5   | |dd       d d d         | |dd	       y # 1 sw Y   BxY w# 1 sw Y   !xY w)
Nr   r9   rt   r   r   r   r   )r   r   )r   r   )r@   r  reshaper   r	   r   r   rB   s     r   test_kdtree_box_upper_boundsr*    s    ;;q!R ((Q/DAJ"J	z	"D1c2 
#	z	"D1j9 
# q*5 
#	"	"	"s   B?B+B(+B4c                 Z    t        j                  ddd      }t        t        | |dd       y )Nr   r   rt   r   r   )r@   r  assert_raisesr   r)  s     r   test_kdtree_box_lower_boundsr-    s$    ;;r1b!D*k4!SIr   c                    g }g }t        j                  d|j                  d   z        }t        j                  t        j                  |dg|j                  d   z              j
                  }|dz
  }|D ]j  }	||	dz  |z  z   }
| j                  |
||      \  }}|j                  d|      }|j                  d|      }|j                  |       |j                  |       l t        j                  |d      }t        j                  |d      }t        j                  t        |      t        |      |z  gddg	      }||d
   d d  ||d   d d  |j                  d       |d   d d d |f   |d
   d d d |f   fS )Nr   r   r   r  r   r;   )rM   i8)rL   f8r   rM   rL   )order)r@   aranger   r   unravel_indexr   r?   r(  appendconcatenateemptyr  r  )r>   rB   rQ   r-   r,   rL   rM   r=   nnrV   imager"  r#  r  s                 r   r   r     sp   	B	B
		!tzz!}$%A	"""1qcDJJqM&9:	;	=	=B	cBq3w((<<qA<.Skk"a kk"a 
		#
		#  
	$B		$BXXs4y#b'A+.7 F F4LOF4LO
KKdK$<2A2tQU 333r   PyPyz Fails on PyPy CI runs. See #9507)reasonc                     	 dd l } d\  }}t        j                  t	        dd|z   |      t	        dd|z   |      f   \  }}t        j
                  |      dz  t        j                  d||z  z         t        j                  |      z  z   }t        j                  |      }||d d  d}t        j                  j                  d|j                  t        j                  j                  d      dz         }||j                  |<   t        j                  t        j                  ||k7              j                  }	t        j                  t        j                  ||k(              j                  }
| j                  | j                         j"                  }t%        d      D ]  }t'        |	      } d}t%        d      D ]y  }| j                  | j                         j"                  }t'        |	      }|j)                  |
d	d
      \  }}| j                  | j                         j"                  }||kD  su|dz  }{ t+        |dk         y # t        $ r Y y w xY w)Nr   )皙?r<  r   r%  rt   g     X@rE  rn   ro   r9   )rQ   r,   )resourceImportErrorr@   r  slicesincos
empty_likeru   r  r   flatvstacknonzeror   	getrusageRUSAGE_SELF	ru_maxrssr0  r   r?   r   )r=  dxdyr  r=   zz_copyFILLVALmaskigoodibadmem_userE   r$   	num_leaksr   iquerynew_mem_uses                     r   test_ckdtree_memuserU  $  s   
 FB88E!QVR(!QVR() *DAq
q	2rAaCx(266!944A]]1FF1IG99Q		(9(9"(=(ABDFKKIIbjjg./11E99RZZW-.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                    t        j                  ddd      j                  dd      } | |d      }t        j                  t	        |      d      }|j                  |      }t        |g d       t        t        |j
                  |d d        t        d	      D ]  }|j                  |t        j                  dd	|            }|j                  |t        j                  dd	|      ||f
      }|j                  |t        j                  dd	|      |d f
      }|j                  |t        j                  dd	|      d |f
      }	|j                  |t        j                  dd	|      |
       t        ||       t        ||       t        ||	        t        t	        |            D ]  }|j                         }
d|
|<   ||
dk7     } | |      }|j                  |t        j                  dd	d      |
|
f
      }|j                  |t        j                  dd	d            }t        ||       t        t        |j                  |t        j                  dd	d      |

        y )Nr   r   ro   r   rq   f4r   )ro   r9   r   r   r9   r   r   rt   )weightsrn   )r@   r  r(  r   r  _build_weightsr   r,  r   r0  r  r   )r   rB   tree1rX  nwrE   c1c2c3c4w1r>  tree2s                r   test_kdtree_weightsrb  O  s0   ;;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%: 	 	! 	2r"2r"2r"   3t9\\^1R1WE"""5"++aS*AR # " ""5"++aS*AB2r" 	j%"7"72;;q"c*B	8! r   c                 .   d}d}t         j                  j                  d       t         j                  j                  ||f      } | |d      }g d}t        j                  t        |            }|j                  ||      }|j                  ||d	      }t        ||j                                t        t        j                  |      t        j                  |            D ]/  \  }	}
|j                  ||
      }t        ||t        |	                1 y )
Nr  r9   rp   r   r   rq   )r   r  r  g{Gz?r<  F
cumulative)r@   ru   rv   normalr2  r  r  r   cumsumrW   	itertoolspermutationsr   r(  )r   rV   rI   rB   r>   r0i0n0nncrE   r)  s              r   &test_kdtree_count_neighbous_multiple_rrn  }  s    A	AIINN499!Q(D*F	$B	3r7	B				+B

 
 
 
>CSZZ\"I**2.**2.01 ""61-1bak*	0r   c                 @   t         j                  j                  d       t         j                  j                  dd      }t         j                  j                  dd      } | |      }|j	                  ddgd      \  }}|j                  ddgd|z        }t        |g        |j	                  |d      \  }}|j                         }|j                  |d|z        }t        j                  dt        	      }|j                  g        t        ||        | |      }	|j                  |	d|z        }t        dg gz  |       |j                  |	d|z        }t        |d
k(         |j                  |	d|z  d      }t        |t        j                  d      k(  d       |j                  |	d|z  d      }t        |t        j                  d      k(  d       |j                  |	d|z  d      }t!        |i        |j                  |	d|z  d      }dt         j"                  fdt         j"                  fdt         j$                  fg}
t        j&                  |
d      }t        j                  d|	      }t        ||       |j	                  |d      \  }}|d d df   j                         }|j)                  d|z  d      }t!        |t+                      |j)                  d|z  d      }t        j                  dt         j"                  	      }t        ||       y )Nrp   rt   r9   r)   r   r   rd   )rt   )r   r   r   r  r  )rt   rt   Tr  r  r  rE   r?  r  )align)r   r   r  )r   r9   )r@   ru   rv   randr?   r   r   r  r6  objectfillr;  r  r   r  r   r   intpfloat64r   r  r  )r   XYr$   r/   rE   rK  mindr  other_dtype	res_dtypes               r   test_len0_arraysr|    s    IINN4
		r1A
		r1Aq>D::r2h!:$DAqr2hA.Aq"::a1:DAq557DaT*A
vV,AFF2Jq!NEUCH-Ar2$w"UCH-AAFO##E3t8#NAqBHHX..5##E3t8#NAqBHHX..5##E3t8#HAB##E3t8#KABGGnsBGGnsBJJ.?@Ft,I
uI.Aq!::a1:DAqQU8<<>DTu5ACETy9A
vRWW-Aq!r   c           
      `   d}t        dd      D ]  }t        j                  ||f      }d||dz  d  t        j                  dd      D ]  \  }} | |||d      }|j
                  dk(  sJ | t        u r|j                  n|j                  j                  }t        t        j                  |j                  j                        t        j                  d	|dz               t        t        j                  |j                  j                        t        j                  |dz  |               y )
Ni   r   r  r9   FT)repeat)r  r  rr   r   r   )r0  r@   r   rh  productr   r   r$   _noder   r  r  r  r2  rt  )r   rV   rI   rB   balancedcompactr>   r$   s           r   test_kdtree_duplicated_inputsr    s    A1a[ww1vQTU!*!2!2=!KHg X/6DF;;!####.'#9FKKKK%%  ++,		!Q!V$& ,,-		!q&!$& "L	 r   c                 \     | dggd      }t        t        |j                  |ddgd       y )Nr   r   rq   rd   Frd  )r,  r   r  )r   r>   s     r   'test_kdtree_noncumulative_nondecreasingr    s1    
 1#+F*f44aU,r   c                 p   t        j                  g dg dg dg dg dg dgd      } | |      }|j                  |d	d
      \  }}t        |dt         j                  t         j                  t         j                  gddt         j                  t         j                  gddt         j                  t         j                  gddt         j                  t         j                  gddt         j                  t         j                  gdt         j                  t         j                  t         j                  gg       y )N)r   r   r   )r  r   r   )r   r   r   )r   r  r   )r   r   r   )r   r   r   ru  r   ro   rs   rP   r   r  )r@   r   r?   r   rX   )r   xyzckdtdeqieqs        r   test_short_knnr    s     (( C sDzz#z=HCc"&&"&&"&&)rvvrvv&rvvrvv&rvvrvv&rvvrvv&(*+r   c                    t         j                  j                  d       t         j                  j                  d      }t         j                  j                  d      } | |      }t         j                  j	                  ddt        |            }|j                  ||      }t        ||      D cg c]  \  }}|j                  ||       }}}t        ||      D ]#  \  }	}
t        t        |	      t        |
             % y c c}}w )Nrp   rn   r   r   r   333333?)
r@   ru   rv   rf  r   r  r   rW   r   r  )r   rB   r?   r$   r/   rvectorqidirscalarr*   r+   s              r   test_query_ball_point_vector_rr    s    IINN499*DII(+EtD
		!Ss5z2A##E1-G;>ua=I=Rt$$R,=GIGW%16!9fQi0 & Js   4Dc           	      J   t         j                  j                  d       t         j                  j                  d      }t         j                  j                  d      } | |      }d}|j	                  ||d      }|j	                  ||d      D cg c]  }t        |       }}|D cg c]  }t        |j	                  ||             }	}|D cg c]  }|j	                  ||d       }
}t        ||       t        ||	       t        ||
       y c c}w c c}w c c}w )Nrp   r  r   r  Treturn_lengthF)r@   ru   rv   rf  r   r  r   )r   rB   r?   r$   r/   lengthr   length2r  length3length4s              r   test_query_ball_point_lengthr    s	   IINN499*DII(+EtDA""5!4"@F#'#8#8QV#8#WX#WCs3x#WGX;@A5Rs4((Q/05GAJOP%Bt$$R$$?%GPvw'vw'vw' YAPs   D,"DD c                 2   t         j                  j                  d       t         j                  j                  d      }t        j                  d      dz  }t        j
                  t        j                  d      d d d   dz        d d d   }t         j                  j                  d      }t        j
                  |j                        j                  }|j                  d   |j                  d   k7  sJ |j                  d   |j                  d   k7  sJ  | |      }|j                  ||d      }|j                  ||d      }t        ||       |j                  |d	      \  }	}
|j                  |d	      \  }}t        |	|       t        |
|       y )
Nrp   r  r   rn   g{Gz?r   Tr  r   )r@   ru   rv   rf  r2  ascontiguousarrayr   stridesr   r   r?   )r   rB   d_contiguousd_discontiguousquery_contiguousquery_discontiguousr$   length1r  d1i1d2i2s                r   test_discontiguousr    s   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r2r2r   zbalanced_tree, compact_nodes))TF)TT)FFr~  c                 T   t         j                  j                  d       t        j                  d      }t        j                  d      }t        j                  d      } | |||      }|j                  |dd	      }|d
k(  sJ |j                  |d      \  }}	|	j                  dk(  sJ |j                  dk(  sJ t        j                  |      j                         sJ |j                  |d
dg      }
t        |
d
d
g       |j                  |d      }|j                  dk(  sJ y )Nrp   )r   r   )r   )r   r   r&  r  r  Tr  r   r9   )r9   r9   r   r'  )r@   ru   rv   r6  r   r   r?   r   isinfrC   r  r   r  )r   r  r  empty_v3query_v3query_v2r$   r  rL   rM   Nr  s               r   test_kdtree_empty_inputr  1  s    IINN4xxf%HwwV$HwwV$Hx}%24D""8S"EFQ;;ZZ!$FB88v88v88B<TAq6*Aq1a&!##D#.A77fr   c                       e Zd Zd Zd Zd Zy)_Test_sorted_query_ball_pointc                     t         j                  j                  d       t         j                  j                  dd      | _        | j                  | j                        | _        y )Nrp   rn   r   )r@   ru   rv   rw   r=   r   r  rx   s    r   ry   z*_Test_sorted_query_ball_point.setup_methodO  s>    
		ta($$TVV,	r   c                    | j                   j                  | j                  dd      }|D ]  }t        |t	        |              | j                  D ]5  }| j                   j                  |dd      }t        |t	        |             7 y )Nr   Treturn_sorted)r  r   r=   r   r  )r5   	idxs_listidxsr  s       r   test_return_sorted_Truez5_Test_sorted_query_ball_point.test_return_sorted_TrueT  sr    II..tvvr.N	DtVD\2  &&B99--b"D-IDtVD\2 r   c                    | j                   j                  | j                  d      }|D ]  }t        |t	        |              | j                  D cg c]  }| j                   j                  |d        }}| j                   j                  | j                  dd      }t        ||      D ]  \  }}t        ||        yc c}w )zPrevious behavior was to sort the returned indices if there were
        multiple points per query but not sort them if there was a single point
        per query.r   Fr  N)r  r   r=   r   r  rW   )r5   r  r  r  idxs_list_singleidxs_list_Falseidxs0idxs1s           r   test_return_sorted_Nonez5_Test_sorted_query_ball_point.test_return_sorted_None]  s     II..tvvr:	DtVD\2  JNP2DII66r2>P))44TVVRu4U1ABLE5ue, C Qs   #B?N)r   rh   ri   ry   r  r  rj   r   r   r  r  M  s    -
3-r   r  c                     t         j                  j                  dd      j                  t              } t        j                  t        d      5  t        |       }d d d        t        | j                        }t        j                  t        d      5  |j                  |        d d d        t        j                  t        d      5  |j                  | d       d d d        y # 1 sw Y   xY w# 1 sw Y   MxY w# 1 sw Y   y xY w)Nrt   r9   zcomplex datar   r   r  )r@   ru   rq  viewcomplexr   r	   	TypeErrorr   realr?   r   r1  ts     r   test_kdtree_complex_datar  k  s    YY^^B"''0F	y	76N 
8 	v{{A	y	7	 
8 
y	7	6Q' 
8	7 
8	7
 
8	7 
8	7s$   C%C1C=%C.1C:=Dc                  z   t         j                  j                  d       t         j                  j                  dd      } t	        |       }|j
                  }t        |t        j                        sJ |j                  | j                  d   k(  sJ |g}|r|j                  d      }t        |t        j                        rot        |j                  t              sJ |j                  t        |j                        k(  sJ t        | |j                     |j                   j"                         nt        |t        j                        sJ t        |j$                  t              sJ d|j$                  cxk  r|j&                  k  sJ  J t        |j(                  t*              sJ t        |j                  t              sJ |j                  |j,                  j                  |j.                  j                  z   k(  sJ |j1                  |j.                         |j1                  |j,                         |ry y )Nrp   rn   ro   r   r   )r@   ru   rv   rq  r   r$   r   	innernodechildrenr   popleafnoder   r  idxr   r  r  r  rI   rp  r   rs  rt  r4  )r1  r  rootr  rV   s        r   test_kdtree_tree_accessr  {  s   IINN4YY^^C#FvA66DdF,,---==FLLO+++ FE
IIbMa)ajj#...::QUU+++vaee}agg.A.ABa!1!1222akk3///)acc)))))aggu---ajj#...::1993E3E!EEEELL#LL  r   c                     t         j                  j                  d       t         j                  j                  dd      } t	        |       }t        |j                  t              sJ |j                  | j                  d   k(  sJ t        |j                  t              sJ |j                  | j                  d   k(  sJ t        |j                  t              sJ |j                  dk(  sJ t        |j                  t        j                  | d             t        |j                  t        j                  | d             |j                   | u sJ y )Nrp   rn   ro   r   r   rt   r;   )r@   ru   rv   rq  r   r   rI   r   rV   r   rr   r   rq  rJ   rr  aminrB   r  s     r   test_kdtree_attributesr    s    IINN4YY^^C#FvAacc333&,,q/!!!acc333&,,q/!!!ajj#&&&::qwwQ 78qvvrwwvA6766Vr   kdtree_classc           
      V   t         j                  j                  d       t        j                  ddd      }t         j                  j                  d      j	                  d      }t         j                  j                  d      j	                  d      }t         j                  j                  d      }t         j                  j                  d	      } | |      } | |      }|j                  ||d
||f      }|d d d f   |d d d f   z  }	t         j                  j                  |d d d d d f   |d d d d d f   z
  d      }
t        t        j                  dg|d d       |      D cg c]&  \  }}t        j                  |	||
k  |
|k  z           ( }}}t        ||       y c c}}w )Nrp   r<  r      )r~  r   -   )   r   r~  r  F)re  rX  r   r;   r   )r@   ru   rv   r2  r(  r  linalgr   rW   rh  chainrA   r   )r  r)  ABwAwBkdAkdBnABrX  r   prev_radiusradiusexpects                 r   $test_kdtree_count_neighbors_weightedr    sq   IINN4
		$4 A
		$$U+A
		$$V,A			!	B			"	B
q/C
q/C


c1B

HC qkBq$wK'G99>>!D!QJ-!AtQJ-7b>AD),Y__aS!CR&-I1)MO)M%+v ffWkD0TV^DEF)M  OC Os   *+F%c                     g d} t        |       }t        j                  | t        j                  |t        j                        g      d d d f   }t        j                  t        d      5  t        |       d d d        y # 1 sw Y   y xY w)N)
r   r%  ir~  ii   r   imust be finiter   )	r  r@   r5  r   nanr   r	   r   r   )valsrV   rB   s      r   test_kdtree_nanr    s]    1DD	A>>4BFF!345ag>D	z)9	:t 
;	:	:s   +B  B	c                     t         j                  j                  d      } | j                  ddd      }t	        |dd      }t        d      D cg c]  }t         j                   }}t        j                  t        d	
      5  |j                  |       d d d        t        j                  t        d	
      5  |j                  |d       d d d        t         j                  |dd d f<   t        j                  t        d	
      5  t	        |dd       d d d        t        j                  t        d	
      5  t	        |dd       d d d        t        j                  t        d	
      5  t	        |dd       d d d        t        j                  t        d	
      5  t	        |dd       d d d        y c c}w # 1 sw Y   %xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   y xY w)Ni90  r  r   rd   )r   lowhighFr  r   r  r   r   r   T)r@   ru   default_rngr   r   r0  r  r   r	   r   r?   r   )rngcoordsr  r   	bad_coords        r   test_nonfinite_inputs_gh_18223r    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   F3F88GG7G)G)G58GGGG&)G25G>incantationc                      G d dt         j                        }ddgddgddgg}t        j                  |      } ||      } | |d	      }|j                  |d
       |j	                  |d       y )Nc                       e Zd Zd Zd Zy)test_gh_18800.<locals>.ArrLikec                 \    t        j                  |      j                  |       }d |_        |S r   )r@   r  r  rC   )clsinput_arrayobjs      r   __new__z&test_gh_18800.<locals>.ArrLike.__new__  s)    **[)..s3C CGJr   c                 .    |y t        |dd       | _        y )NrC   )getattrrC   )r5   r  s     r   __array_finalize__z1test_gh_18800.<locals>.ArrLike.__array_finalize__  s    {sE40DHr   N)r   rh   ri   r  r  rj   r   r   ArrLiker    s    		1r   r   gGzP@gQE@@gQ6@gp=
c6@g(\?@g=
ףpMT@rt   r   r  )r@   r  r   r?   r   )r  r   r1  r  arr_liker$   s         r   test_gh_18800r    ss    1"** 1 
		
F
 ((6
Cs|Hvr"DJJx(C(r   )kr  numpy.testingr   r   r   r   r   r   r   r	   r,  platformr
   numpyr@   scipy.spatialr   r   r   r   scipy.spatial._ckdtreer   r   rh  fixturer   r'   r0   r2   rl   r|   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r*  r5  r7  rC  rG  rK  rO  rR  rU  rX  rx  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  mark	fail_slowr$  r&  r*  r-  r   skipifrU  rb  rn  r|  r  r  r  r  r  r  parametrizer  r  r  r  r  r  r  r  r  rj   r   r   <module>r     s   
, , +  *  E E . , () *(H- H-V 	# 	 	 ,| , , &" & &: >+ > >+) +)Z-7 -7^> >4 
( 
 
 #
!1 #
 #
L )9  " 0   (9   -   %?   ,   .  '-&3 3* 2   &;  " !7   *I   "8   +J  3 3@KBG:F F$ F7 F FF@ F@R #E  "L	#!$/
B#
;5'$AD $D q 6&6J42 )+v5=  ?'?'R,8\ q+ +$,\&.,+21( 8 7

. - - -:( !<( &'):;! <!.A, &(9:) ;)r   