
     h                     R   d dl Z d dlmZmZmZmZmZmZ d dlm	Z
 d dlZd dlmZ d dlZd dlmZmZmZmZ d dlmZ d dlmZ d dlZ ej        eeg          d	             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[ ZNd\ ZOd] ZPd^ ZQd_ ZRd` ZSejT        U                     e            dak    dbc          dd             ZVde ZWdf ZXdg ZYdh ZZdi Z[dj Z\dk Z]dl Z^dm Z_ejT        `                    dng do          dp             Zae G dq dr                      Zbds Zcdt Zddu ZeejT        `                    dveeg          dw             Zfdx ZgdS )y    N)assert_equalassert_array_equalassert_assert_almost_equalassert_array_almost_equalassert_allclose)raises)python_implementation)KDTree	Rectangledistance_matrixcKDTree)cKDTreeNodeminkowski_distance)paramsc                     | j         S N)param)requests    [/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/spatial/tests/test_kdtree.pykdtree_typer      s
    =    c                 <   | j                             d          st          d          t          t          fD ]c}| j         dd         dz   |j         z   }|t                      v rt          d|z             t          || fd|i          }|t                      |<   d| 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++ HFGGG! ) )L$s*T]:			!!7)CDDD SF]D,ABB	(		)Jr   c                     | |z
  }||d|z  k    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   +   sk    q5Dg	')w	7*4A&&AHr   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	ConsistencyTestsc                 $    t          |||          S r   r   selfr*   r+   r,   s       r   distancezConsistencyTests.distance3       !!Q***r   c                 |   | 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
  k                         d S )Nr      :0yE>axis)
xkdtreequeryr   npsumdatar   allnewaxis)r5   r=   r/   iepss        r   test_nearestzConsistencyTests.test_nearest6   s    F{  A&&1AqD"&!DIaL.1)<"="=>>>rvty2:qqq=)99A=AFFFAcQRRSSSSSr   c                    | 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               |           d S )Nr9   r:   r   r;   )r=   mr>   r?   r@   amaxargmaxr   rA   rB   r   rD   )r5   r=   rI   ddiir/   rE   rF   s           r   test_m_nearestzConsistencyTests.test_m_nearest=   s    FF""1a((BGBKKry}}AqD"&!DIaL.1)<"="=>>>RVBFDIa
AAA.>$>#BKKKaQRdSVhVWWYZ[[[[[r   c           	         | 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||fz             nt          t          j	        |                     | j
        |d          |dz  |z   k               |           d S )Nkdistance_upper_boundr:   r   r   r9    near_d=%g should be less than %g)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_nearG   s   FF""1A"NNB!"bkk 	V 	VNFFAID	261TYv5F3F2J+K+KLLLFQsUN$F&RS$TUUUURVDMM$)Q::QT#XEFFMMMMMr   c           	         | j         }| j        }| j                            || j        j        d|          \  }}d}d}t          ||          D ]g\  }}|t          j        k    r|dz  }t          || 	                    || j
        |         d                     t          |||z   k     d||fz             ht          t          j        | 	                    | j
        |d          ||z   k               |           d S )Nr   rQ   r,   rR   r:   r   rS   )r=   r/   r>   r?   rT   rU   r@   rV   r   r6   rB   r   r   rA   rW   s	            r   test_points_near_l1z$ConsistencyTests.test_points_near_l1U   s    FF""1QR"SSB!"bkk 	V 	VNFFAIDa69JA(N(NOOOFQsUN$F&RS$TUUUURVDMM$)Q::QsUBCCTJJJJJr   c           	      2   | j         }| j        }| j                            || j        j        t
          j        |          \  }}d}d}t          ||          D ]q\  }}|t
          j        k    r|dz  }t          || 	                    || j
        |         t
          j                             t          |||z   k     d||fz             rt          t          j        | 	                    | j
        |t
          j                  ||z   k               |           d S )Nr]   r:   r   r   rS   )r=   r/   r>   r?   rT   r@   rV   rU   r   r6   rB   r   r   rA   rW   s	            r   test_points_near_linfz&ConsistencyTests.test_points_near_linfc   s   FF""1VW"XXB!"bkk 	V 	VNFFAIDa69JBF(S(STTTFQsUN$F&RS$TUUUURVDMM$)Q??!C%GHH$OOOOOr   c                     | j         }| j        }d}| j                            ||          \  }}| j                            |||          \  }}t	          t          j        ||d|z   z  k                         d S )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_approxq   s{    FF**1a00{  A3 //1qFAcEN*++,,,,,r   N)
r   
__module____qualname__r6   rG   rN   r[   r^   r`   re    r   r   r2   r2   2   s        + + +T T T\ \ \N N NK K KP P P- - - - -r   r2   c                       e Zd Zd ZdS )_Test_randomc                 n   d| _         d| _        t          j                            d           t          j                            | j         | j                  | _        |                     | j        d          | _        t          j                            | j                  | _	        d| _
        d| _        d S )Nd        r9   leafsize皙?
   )rT   rI   r@   randomseedrandnrB   r   r>   r=   r/   rQ   r5   s    r   setup_methodz_Test_random.setup_method|   s    
	tIOODFDF33	&&ty1&==((r   Nr   rf   rg   rw   rh   r   r   rj   rj   z   s#            r   rj   c                        e Zd Z fdZ xZS )_Test_random_farc                     t                                                       t          j                            | j                  dz   | _        d S )Nrr   )superrw   r@   rs   ru   rI   r=   r5   	__class__s    r   rw   z_Test_random_far.setup_method   s9    ((+r   r   rf   rg   rw   __classcell__r~   s   @r   rz   rz      s8        , , , , , , , , ,r   rz   c                        e Zd Zd Zd Zd ZdS )_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        | _        t           j                            d	           t           j        	                    d
          | _
        d| _        d| _        d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rn      r)   rm   )r@   arrayrB   r   r>   rT   rI   rs   rt   ru   r=   r/   rQ   rv   s    r   rw   z_Test_small.setup_method   s    Hiii'ii'ii'ii'ii'ii'ii'ii) * *	 &&ty11
	t##r   c                 X    t          | j                            dd          d           d S )Nr   r   rb   r   )rb   r   r   r>   r?   rv   s    r   rG   z_Test_small.test_nearest   s6    !!+q11	 	 	 	 	r   c                 d    t          | j                            dd          ddgddgf           d S )Nr   r9   rb   g?r   r   r   rv   s    r   test_nearest_twoz_Test_small.test_nearest_two   sC    !!+q11saV$	& 	& 	& 	& 	&r   N)r   rf   rg   rw   rG   r   rh   r   r   r   r      sA          "  
& & & & &r   r   c                        e Zd Z fdZ xZS )_Test_small_nonleafc                     t                                                       |                     | j        d          | _        d S )Nr   ro   )r|   rw   r   rB   r>   r}   s    r   rw   z _Test_small_nonleaf.setup_method   s9    &&ty1&==r   r   r   s   @r   r   r      s8        > > > > > > > > >r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_vectorization_KDTreec                     t          j        g dg dg dg dg dg dg dg dg          | _        t          | j                  | _        d S 	Nr   r   r   r   r   r   r   r   )r@   r   rB   r   r>   rv   s    r   rw   z&Test_vectorization_KDTree.setup_method   sh    Hiii'ii'ii'ii'ii'ii'ii'ii) * *	 TY''r   c                    | j                             t          j        g d                    \  }}t	          t          |t                               t	          t          j        |t          j                             d S Nr   )	r>   r?   r@   r   r   
isinstancefloat
issubdtypesignedintegerr5   r/   rE   s      r   test_single_queryz+Test_vectorization_KDTree.test_single_query   sd    {  )))!4!4551
1e$$%%%a!12233333r   c                     | j                             t          j        d                    \  }}t	          t          j        |          d           t	          t          j        |          d           d S Nr9   rm   r   )r9   rm   r>   r?   r@   zerosr   shaper   s      r   test_vectorized_queryz/Test_vectorization_KDTree.test_vectorized_query   [    {  )!4!4551RXa[[&)))RXa[[&)))))r   c           	         d}| j         j        |z   }| 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                         d S N   r   rQ   )
r>   rT   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!4 ;;1RXa[[2%(((RXa[[2%(((AqbccF+++,,---q!v.//00000r   c                 $   d}| j         j        |z   }| 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                         d S Nr   r   r   r9   rm   
r>   rT   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!4 ;;1RXa[[1a*---RXa[[1a*---AaaaQBCCiL11122333qAAArss|t{}45566666r   c                     d}t          j        t          d          5  | j                            |d            d d d            d S # 1 swxY w Y   d S )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HH 	) 	)Ka4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AAAN)	r   rf   rg   rw   r   r   r   r   r   rh   r   r   r   r      sn        	( 	( 	(4 4 4
* * *
1 1 17 7 7) ) ) ) )r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_vectorization_cKDTreec                     t          j        g dg dg dg dg dg dg dg dg          | _        t          | j                  | _        d S r   )r@   r   rB   r   r>   rv   s    r   rw   z'Test_vectorization_cKDTree.setup_method   sh    Hiii'ii'ii'ii'ii'ii'ii'ii) * *	 di((r   c                     | j                             g d          \  }}t          t          |t                               t          t          |t
                               d S r   )r>   r?   r   r   r   intr   s      r   r   z,Test_vectorization_cKDTree.test_single_query   sU    {  ++1
1e$$%%%
1c""#####r   c                     | j                             t          j        d                    \  }}t	          t          j        |          d           t	          t          j        |          d           d S r   r   r   s      r   r   z0Test_vectorization_cKDTree.test_vectorized_query   r   r   c                 L   t           j                            d           t           j                            dd          j        }| j                            |          \  }}t          |||          D ]0\  }}}t          | j                            |          ||f           1d S )Nrn   r     )	r@   rs   rt   ru   Tr>   r?   rU   r   )r5   qsdsi_sqr/   rE   s          r   *test_vectorized_query_noncontiguous_valueszETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_values   s    
	tY__Q%%'+##B''C2r3'' 	7 	7GAq!**1--1v6666	7 	7r   c           	         d}| j         j        |z   }| j                             g d|          \  }}t          t	          j        |          |f           t          t	          j        |          |f           t          t	          j        t	          j        || d                                          t          t	          j        || d          | j         j        k                         d S r   )	r>   rT   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1RXa[[2%(((RXa[[2%(((AqbccF+++,,---q!v.//00000r   c                 $   d}| j         j        |z   }| 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                         d S r   r   r   s        r   r   zCTest_vectorization_cKDTree.test_vectorized_query_multiple_neighbors  r   r   N)	r   rf   rg   rw   r   r   r   r   r   rh   r   r   r   r      sn        	) 	) 	)$ $ $
* * *
7 7 71 1 17 7 7 7 7r   r   c                   $    e Zd ZdZd Zd Zd ZdS )ball_consistency        c                 0    t          |dz  |dz  |          S Nr   r   r4   s       r   r6   zball_consistency.distance  s    !!c'1s7A666r   c                 F   t          j        | j                  }t          j        | j        |j        d d                   }| j                            || j        | j        | j	                  }t          |          D ]\  }}|                     | j        |         ||         | j                  ||         d| j	        z   z  z
  }|                     | j        |         ||         | j                  ||         d| j	        z   z  z   }t          || j        |z  k     d           d S )Nr,   rF   r   T)r@   
atleast_2dr=   broadcast_tor/   r   r   query_ball_pointr,   rF   	enumerater6   rB   r   tol)r5   r=   r/   lrE   inddistnorms           r   test_in_ballzball_consistency.test_in_ball  s    M$&!!ODFAGCRCL11F##AtvTX#FFll 	= 	=FAs==31tv>>1r$({ASSD==31tv>>1r$({ASSDtdho5t<<<<	= 	=r   c                    t          j        | j                  }t          j        | j        |j        d d                   }| j                            || j        | j        | j	                  }t          |          D ]\  }}t          j        | j        j        t                    }d||<   |                     | j        |         ||         | j                  ||         d| j	        z   z  z
  }|                     | j        |         ||         | j                  ||         d| j	        z   z  z   }t!          || j         |z  k    d           d S )Nr   r   dtypeFr   T)r@   r   r=   r   r/   r   r   r   r,   rF   r   onesrT   boolr6   rB   r   r   )	r5   r=   r/   r   rE   r   cr   r   s	            r   test_found_allzball_consistency.test_found_all  s#   M$&!!ODFAGCRCL11F##AtvTX#FFll 	> 	>FAs---AAcF==1qtTV<<qtR[?QQD==1qtTV<<qtR[?QQDttxi$&66====	> 	>r   N)r   rf   rg   r   r6   r   r   rh   r   r   r   r     sF        
C7 7 7= = =	> 	> 	> 	> 	>r   r   c                       e Zd Zd ZdS )_Test_random_ballc                 J   d}d}t           j                            d           t           j                            ||          | _        |                     | j        d          | _        t           j                            |          | _        d| _        d| _	        d| _
        d S )	Nrl   rm   rn   r9   ro          @r   rq   )r@   rs   rt   ru   rB   r   r   r=   r,   rF   r/   r5   rT   rI   s      r   rw   z_Test_random_ball.setup_method+  s    
	tIOOAq))	!!$)a!88##r   Nrx   rh   r   r   r   r   )  s#        	 	 	 	 	r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )_Test_random_ball_periodicc                 &    t          |||d          S r   r0   r4   s       r   r6   z#_Test_random_ball_periodic.distance9      Aq!S)))r   c                 <   d}d}t           j                            d           t           j                            ||f          | _        |                     | j        dd          | _        t          j        |d          | _        d	| _	        d
| _
        d| _        d S )Ni'  rm   rn   sizer9   r   rp   r-   rb   r   r   rq   )r@   rs   rt   uniformrB   r   r   fullr=   r,   rF   r/   r   s      r   rw   z'_Test_random_ball_periodic.setup_method<  s    
	tI%%Aq6%22	!!$)a!CCCr   c                 "   | j                             | j        dz   | j        | j        | j                  }|D ]O}t          |                     | j        |         | j        | j                  | j        d| j        z   z  k               P| j                             | j        dz
  | j        | j        | j                  }|D ]O}t          |                     | j        |         | j        | j                  | j        d| j        z   z  k               Pd S )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_outsideG  s    F##DFSL$&DF#QQ 	Y 	YADMM$)A,??462dh;CWWXXXXF##DFSL$&DF#QQ 	Y 	YADMM$)A,??462dh;CWWXXXX	Y 	Yr   c           	         t          j        | j        j        t                    }| j                            | j        dz   | j        | j        | j	                  }d||<   t          t          j        |                     | j        |         | j        | j                  | j        d| j	        z   z  k                         | j                            | j        dz
  | j        | j        | j	                  }d||<   t          t          j        |                     | j        |         | j        | j                  | j        d| j	        z   z  k                         d S )Nr   r   r   F)r@   r   r   rT   r   r   r=   r/   r,   rF   r   rC   r6   rB   )r5   r   r   s      r   test_found_all_outsidez1_Test_random_ball_periodic.test_found_all_outsideO  s   GDFHD)))F##DFSL$&DF#QQ!t}}TYq\4646BBdfbQUQYkFZZ[[\\\F##DFSL$&DF#QQ!t}}TYq\4646BBdfbQUQYkFZZ[[\\\\\r   N)r   rf   rg   r6   rw   r   r   rh   r   r   r   r   7  sX        * * *	 	 	Y Y Y] ] ] ] ]r   r   c                       e Zd ZdZd ZdS )"_Test_random_ball_largep_issue9890gvIh%<=c                    d}d}t           j                            d           t           j                            dd||f          | _        |                     | j                  | _        | j        | _        d| _        d| _	        d| _
        d S )Nr   r9   {   rl   r   r   rr   )r@   rs   rt   randintrB   r   r   r=   r,   rF   r/   r   s      r   rw   z/_Test_random_ball_largep_issue9890.setup_method`  s{    
	sI%%c4q!f%==	!!$),,r   N)r   rf   rg   r   rw   rh   r   r   r   r   Z  s*         C	 	 	 	 	r   r   c                        e Zd Z fdZ xZS )_Test_random_ball_approxc                 V    t                                                       d| _        d S Nrb   r|   rw   rF   r}   s    r   rw   z%_Test_random_ball_approx.setup_methodo  $    r   r   r   s   @r   r  r  l  8                r   r  c                        e Zd Z fdZ xZS )!_Test_random_ball_approx_periodicc                 V    t                                                       d| _        d S r  r  r}   s    r   rw   z._Test_random_ball_approx_periodic.setup_methodw  r  r   r   r   s   @r   r
  r
  t  r  r   r
  c                        e Zd Z fdZ xZS )_Test_random_ball_farc                 V    t                                                       d| _        d S Nr   r|   rw   r/   r}   s    r   rw   z"_Test_random_ball_far.setup_method  $    r   r   r   s   @r   r  r  |  8                r   r  c                        e Zd Z fdZ xZS )_Test_random_ball_far_periodicc                 V    t                                                       d| _        d S r  r  r}   s    r   rw   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                 V    t                                                       d| _        d S )Nr   )r|   rw   r,   r}   s    r   rw   z!_Test_random_ball_l1.setup_method  $    r   r   r   s   @r   r  r    8                r   r  c                        e Zd Z fdZ xZS )_Test_random_ball_linfc                 j    t                                                       t          j        | _        d S r   r|   rw   r@   rV   r,   r}   s    r   rw   z#_Test_random_ball_linf.setup_method  &    r   r   r   s   @r   r  r    8                r   r  c                    d}d}t           j                            d            | t           j                            ||                    }|                    t           j                            dd|          d          }t          |j        d           t          t          |d         t                               d S )	N      rn   r9   r   r   r9   r   r   r   )
r@   rs   rt   ru   r   r   r   r   r   list)r   rT   rI   r   rs        r   test_random_ball_vectorizedr(    s    
A	AINN4BIOOAq))**A	29??1a33Q77A&!!!Jqw%%&&&&&r   c                 *   t           j                            d           d}d}t           j                            ||          } | |          }|                    |dd          }|                    |dd          }|                    |dd          }t          |          D ].}||         s||         rt          ||         ||                    /t          |          D ].}||         s||         rt          ||         ||                    /d S )	Nr     r9   g~jth?r   workers@   r   )r@   rs   rt   ru   r   ranger   )	r   rT   rQ   pointsr   l1l2l3rE   s	            r   $test_query_ball_point_multithreadingr3    s&   INN1A	AY__Q""FFA	
		FE1		5	5B	
		FE2		6	6B	
		FE2		6	6B1XX - -a5 	-BqE 	-r!ube,,,1XX - -a5 	-BqE 	-r!ube,,,- -r   c                        e Zd Zd Zd Zd ZdS )two_trees_consistencyc                 $    t          |||          S r   r   r4   s       r   r6   ztwo_trees_consistency.distance  r7   r   c           	      D   | j                             | j        | j        | j        | j                  }t          |          D ]]\  }}|D ]U}t          |                     | j	        |         | j
        |         | j                  | j        d| j        z   z  k               V^d S )Nr   r   )T1query_ball_treeT2r/   r,   rF   r   r   r6   data1data2)r5   r'  rE   r   js        r   test_all_in_ballz&two_trees_consistency.test_all_in_ball  s    G##DGTVtv48#LLaLL 	e 	eDAq e edjmTZ]DFKKtvWYZ^ZbWbOccdddde	e 	er   c           
         | j                             | j        | j        | j        | j                  }t          |          D ]\  }}t          j        | j        j	        t                    }d||<   t          t          j        |                     | j        |         | j        |         | j                  | j        d| j        z   z  k                         d S )Nr   r   Fr   )r8  r9  r:  r/   r,   rF   r   r@   r   rT   r   r   rC   r6   r<  r;  )r5   r'  rE   r   r   s        r   r   z$two_trees_consistency.test_found_all  s    G##DGTVtv48#LLaLL 	i 	iDAq	...AAaDBF4==A
1tvNNRVRXZ\]a]eZeRffgghhhh	i 	ir   N)r   rf   rg   r6   r>  r   rh   r   r   r5  r5    sI        + + +e e ei i i i ir   r5  c                       e Zd Zd ZdS )_Test_two_random_treesc                    d}d}t           j                            d           t           j                            ||          | _        |                     | j        d          | _        t           j                            ||          | _        |                     | j        d          | _        d| _	        d| _
        d| _        d S )	N2   rm   rn   r9   ro   r   r   rq   )r@   rs   rt   ru   r;  r   r8  r<  r:  r,   rF   r/   r   s      r   rw   z#_Test_two_random_trees.setup_method  s    
	tY__Q**
""4:"::Y__Q**
""4:"::r   Nrx   rh   r   r   rA  rA    s#        
 
 
 
 
r   rA  c                       e Zd Zd Zd ZdS )_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                            d           t           j                            ||f          | _        |                     | j        dd          | _        t           j                            ||f          | _        |                     | j        dd          | _        d| _	        d	| _
        d
| _        d S )NrC  rm   rn   r   r9   r   r   r   r   rq   )r@   rs   rt   r   r;  r   r8  r<  r:  r,   rF   r/   r   s      r   rw   z,_Test_two_random_trees_periodic.setup_method  s    
	tY&&QF&33
""4:3"GGY&&QF&33
""4:3"GGr   N)r   rf   rg   r6   rw   rh   r   r   rE  rE    s2        * * *
 
 
 
 
r   rE  c                        e Zd Z fdZ xZS )_Test_two_random_trees_farc                 V    t                                                       d| _        d S Nr9   r  r}   s    r   rw   z'_Test_two_random_trees_far.setup_method  r  r   r   r   s   @r   rI  rI    r  r   rI  c                        e Zd Z fdZ xZS )#_Test_two_random_trees_far_periodicc                 V    t                                                       d| _        d S rK  r  r}   s    r   rw   z0_Test_two_random_trees_far_periodic.setup_method  r  r   r   r   s   @r   rM  rM    r  r   rM  c                        e Zd Z fdZ xZS )_Test_two_random_trees_linfc                 j    t                                                       t          j        | _        d S r   r  r}   s    r   rw   z(_Test_two_random_trees_linf.setup_method  r  r   r   r   s   @r   rP  rP    r   r   rP  c                        e Zd Z fdZ xZS )$_Test_two_random_trees_linf_periodicc                 j    t                                                       t          j        | _        d S r   r  r}   s    r   rw   z1_Test_two_random_trees_linf_periodic.setup_method	  r  r   r   r   s   @r   rS  rS    r   r   rS  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
Test_rectanglec                 8    t          ddgddg          | _        d S Nr   r   )r   rectrv   s    r   rw   zTest_rectangle.setup_method  s    q!fq!f--			r   c                 Z    t          | j                            ddg          d           d S )Nr)   r   r   rY  min_distance_pointrv   s    r   test_min_insidezTest_rectangle.test_min_inside  s,    DI88#sDDaHHHHHr   c                 Z    t          | j                            ddg          d           d S Nr)   g      ?r[  rv   s    r   test_min_one_sidez Test_rectangle.test_min_one_side  s,    DI88#sDDcJJJJJr   c                 ~    t          | j                            ddg          t          j        d                     d S rK  )r   rY  r\  r@   sqrtrv   s    r   test_min_two_sidesz!Test_rectangle.test_min_two_sides  s4    DI88!Q@@"'!**MMMMMr   c                     t          | j                            ddg          dt          j        d          z             d S )Nr)   r   r9   r   rY  max_distance_pointr@   rb  rv   s    r   test_max_insidezTest_rectangle.test_max_inside  s9    DI88#sDDaPQ

lSSSSSr   c                     t          | j                            ddg          t          j        dd                     d S r_  )r   rY  rf  r@   hypotrv   s    r   test_max_one_sidez Test_rectangle.test_max_one_side  s9    DI88#sDDbhsTWFXFXYYYYYr   c                     t          | j                            ddg          dt          j        d          z             d S rK  re  rv   s    r   test_max_two_sidesz!Test_rectangle.test_max_two_sides"  s8    DI88!Q@@!BGAJJ,OOOOOr   c                     | j                             dd          \  }}t          |j        ddg           t          |j        ddg           t          |j        ddg           t          |j        ddg           d S )Nr   rb   r   )rY  splitr   maxesmins)r5   lessgreaters      r   
test_splitzTest_rectangle.test_split%  sy    	3//g4:Qx00049q!f---7=1a&1117<#q22222r   N)r   rf   rg   rw   r]  r`  rc  rg  rj  rl  rs  rh   r   r   rV  rV    s        . . .I I IK K KN N NT T TZ Z ZP P P3 3 3 3 3r   rV  c                  p    t          t          ddgddgd          t          j        d                     d S Nr   r   r9   )r   r   r@   rb  rh   r   r   test_distance_l2rv  -  s5    *Aq6Aq61==rwqzzJJJJJr   c                  L    t          t          ddgddgd          d           d S ru  )r   r   rh   r   r   test_distance_l1rx  1  s-    *Aq6Aq61==qAAAAAr   c                  `    t          t          ddgddgt          j                  d           d S rX  )r   r   r@   rV   rh   r   r   test_distance_linfrz  5  s/    *Aq6Aq626BBAFFFFFr   c                     t           j                            d           t           j                            ddd          } t           j                            ddd          }t	          t          | |          j        d           d S )Nrn   rr   r   r      )rr   r|  )r@   rs   rt   ru   r   r   r   )r=   ys     r   test_distance_vectorizationr~  9  sh    INN4
	Aq!!A
	1a  A#Aq))/99999r   c                        e Zd Zd Zd Zd ZdS )count_neighbors_consistencyc           
          d}t          | j                            | j        |          t	          j        d | j                            | j        |          D                                  d S )Nrq   c                 ,    g | ]}t          |          S rh   len.0r   s     r   
<listcomp>z?count_neighbors_consistency.test_one_radius.<locals>.<listcomp>D      LLL1ALLLr   r   r8  count_neighborsr:  r@   rA   r9  r5   r'  s     r   test_one_radiusz+count_neighbors_consistency.test_one_radiusA  sn    TW,,TWa88LL(?(?(K(KLLLMM	O 	O 	O 	O 	Or   c           
          d}t          | j                            | j        |          t	          j        d | j                            | j        |          D                                  d S )Nr   c                 ,    g | ]}t          |          S rh   r  r  s     r   r  zAcount_neighbors_consistency.test_large_radius.<locals>.<listcomp>I  r  r   r  r  s     r   test_large_radiusz-count_neighbors_consistency.test_large_radiusF  sn    TW,,TWa88LL(?(?(K(KLLLMM	O 	O 	O 	O 	Or   c                    t          j        t          j        t          j        d          t          j        d          d                    }| j                            | j        |          }t          t          j        t          j	        |          dk                         t          ||          D ]3\  }}t          | j                            | j        |          |           4d S )N{Gz?rr   r   r   )r@   explinspacelogr8  r  r:  r   rC   r.   rU   r   )r5   rsresultsr'  results        r   test_multiple_radiusz0count_neighbors_consistency.test_multiple_radiusK  s    VBKtbfRjj!<<=='))$'266rww''1,--...R)) 	F 	FIAv00!<<fEEEE	F 	Fr   N)r   rf   rg   r  r  r  rh   r   r   r  r  @  sL        O O O
O O O
F F F F Fr   r  c                       e Zd Zd ZdS )_Test_count_neighborsc                 4   d}d}t           j                            d           |                     t           j                            ||          d          | _        |                     t           j                            ||          d          | _        d S )NrC  r9   rn   ro   )r@   rs   rt   r   ru   r8  r:  r   s      r   rw   z"_Test_count_neighbors.setup_methodT  sx    
	t""29??1a#8#81"EE""29??1a#8#81"EEr   Nrx   rh   r   r   r  r  R  s(        F F F F Fr   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )"sparse_distance_matrix_consistencyc                 $    t          |||          S r   r   r4   s       r   r6   z+sparse_distance_matrix_consistency.distance^  r7   r   c           
         | j                             | j        | j                  }| j                             | j        | j                  }t          |          D ]^\  }}|D ]V}t          |||f         |                     | j         j        |         | j        j        |         | j	                  d           W_|
                                D ]\  \  }}}t          |||         v             d S )N   decimal)r8  sparse_distance_matrixr:  r'  r9  r   r   r6   rB   r,   itemsr   )r5   Mr'  rE   r   r=  r/   s          r   test_consistency_with_neighborszBsparse_distance_matrix_consistency.test_consistency_with_neighborsa  s    G**47DF;;G##DGTV44aLL 	0 	0DAq 0 0#AadG$(MM$',q/47<PQ?TXTZ$[$[,.0 0 0 0 00 7799 	 	KVaQA1I	 	r   c                 P    | j                             | j         | j                   d S r   )r8  r  r'  rv   s    r   test_zero_distancez5sparse_distance_matrix_consistency.test_zero_distancel  s$    &&tw77777r   c                     | j                             | j        | j                  }t	          | j         j        | j        j                  }d||| j        k    <   t          |                                |d           d S )Nr   r  r  )r8  r  r:  r'  r   rB   r   toarray)r5   M1expecteds      r   test_consistencyz3sparse_distance_matrix_consistency.test_consistencyp  sh    W++DGTV<<"47<>>&'DF"#!"**,,"EEEEEEr   c                 d   t           j                            d           t          j        t           j                            dd          t
                    }|                     |dd          }|                    |d                                          }t          ||j
        d	           d S )
Nr      r9   r   Fbalanced_treecompact_nodesr   r  r  )r@   rs   rt   r   ru   r   r   r  r  r   r   )r5   too_manyr$   r/   s       r   #test_against_logic_error_regressionzFsparse_distance_matrix_consistency.test_against_logic_error_regressionw  s    
	q8BIOOB22#>>>E   @ @''a0088::!!QS"555555r   c                    t          j        | j        | j        f          }t          | j                  D ]V}t          | j                  D ]?}| j        |d d f         | j        |d d f         z
  }t          j        ||          |||f<   @Wt          j        |          }d||| j        k    <   t          j        | j        | j        f          }| j	        
                    | j        | j        d          }|                                D ]\  }}|||f         |||f<   t          ||d           t          j        | j        | j        f          }| j	        
                    | j        | j        d          }t          |j        d                   D ]3}|d         |         }|d	         |         }|d
         |         }||||f<   4t          ||d           | j	        
                    | j        | j        d          }t          ||                                d           | j	        
                    | j        | j        d          }t          ||                                d           d S )Nr   dictoutput_typer  r  ndarrayr   rE   r=  v
dok_matrix
coo_matrix)r@   r   rT   r.  r;  r<  dotrb  r'  r8  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  sa   h'((tv 	) 	)A46]] ) )Jq!!!t$tz!QQQ$'77F1aLLAqD		) gcllC$&Lx())G**47DF*OOFFHH 	# 	#DAqAq6DAJJ!#tR8888x())G**47DF! + # #qwqz"" 	 	A#q	A#q	A#q	ADAJJ!#tR8888G**47DF$ + & &!#qyy{{B????G**47DF$ + & &!#qyy{{B??????r   N)	r   rf   rg   r6   r  r  r  r  r  rh   r   r   r  r  \  sv        + + +	 	 	8 8 8F F F6 6 6 @  @  @  @  @r   r  c                       e Zd Zd ZdS )_Test_sparse_distance_matrixc                    d}d}t           j                            d           t           j                            ||          }t           j                            ||          }|                     |d          | _        |                     |d          | _        d| _        d| _        || _	        || _
        || _        || _        d S )NrC  rm   rn   r9   ro   r)   )r@   rs   rt   ru   r   r8  r:  r'  r,   r;  r<  rT   rI   )r5   rT   rI   r;  r<  s        r   rw   z)_Test_sparse_distance_matrix.setup_method  s    
	t	1%%	1%%""51"55""51"55

r   Nrx   rh   r   r   r  r    s#            r   r  c            	         d} d}d}t           j                            d           t           j                            | |          }t           j                            ||          }t	          ||          }t          |j        | |f           t          |           D ]F}t          |          D ]4}t          t          ||         ||                   |||f                    5Gd S )Nrr      rm   rn   )
r@   rs   rt   ru   r   r   r   r.  r   r   )rI   rT   rQ   xsysr   rE   r=  s           r   test_distance_matrixr    s    
A
A	AINN4	A		B	A		B	R	 	 BAq6"""1XX L Lq 	L 	LA 22a5"Q% @ @"QT(KKKK	LL Lr   c                  4   d} d}d}t           j                            d           t           j                            | |          }t           j                            ||          }t	          ||          }t	          ||d          }t          ||           d S )Nrr   r  rm   rn   r   )	threshold)r@   rs   rt   ru   r   r   )rI   rT   rQ   r  r  r   dsls          r   test_distance_matrix_loopingr    s    
A
A	AINN4	A		B	A		B	R	 	 B
"bA
.
.
.CSr   c                    |                      | |          }t                      }t          |          D ]'\  }}|D ]}||k     r|                    ||f            (t	          ||                     |          k               d S r   )r9  setr   addr   query_pairs)r   r/   r'  r   rE   r   r=  s          r   check_onetree_queryr    s    	!QAA!  1 	 	A1uuq!f	 Aq!!!"""""r   c                    t           j                            d           d}d}t           j                            ||          } | |          }t	          |d           t           j                            d|z  |          }|d |xx         dz  cc<   ||d|z  xx         dz  cc<    | |          }t	          |d           t	          |d           t	          |d           t	          |d	           d S )
Nr   rC  rm   rb   r   gMbP?r9   gh㈵>gư>)r@   rs   rt   ru   r  )r   rT   rQ   r/  r   s        r   test_onetree_queryr    s    INN1
A	AY__Q""FFA3Y__QqS!$$F
2A2JJJ%JJJ
1QqS5MMMQMMMFA35!!!7###4     r   c                      | ddgg          }t          |                    d          t                                 d S )Nr   r   r)   )r   r  r  )r   r$   s     r   test_query_pairs_single_noder    s?    ;Ax  D!!#&&.....r   c           	         t           j                            d           d}d}d}|dz  }t           j                            ||          } | |          }t	                      }t          |          D ]a}t          |dz   |          D ]K}	||d d f         ||	d d f         z
  }
t          j        |
|
          |k    r|                    ||	f           Lbt          |          }|	                    |          }t          |          }t          ||           |	                    |d          }t          |          }t          ||           t	                      }|	                    |d          }t          |j        d                   D ]C}|                    t          ||df                   t          ||df                   f           Dt          |          }t          ||           d S )	Nr   rC  r9   rb   r   r  r  r  )r@   rs   rt   ru   r  r.  r  r  sortedr  r   r   r   )r   rT   rQ   r'  r2r/  r   bruterE   r=  r  l0r   r0  arrr1  s                   r   test_kdtree_query_pairsr    s   INN1
A	AA	
ABY__Q""FFAEEE1XX " "qsA 	" 	"Aq!!!tvad|+Ava||r!!		1a&!!!	" 
B	aA	Br2	aU++A	Br2A
--y-
1
1C39Q<   0 0	s3q!t9~~s3q!t9~~.////	Br2r   c                 F   t          j        d          }t          j        dd|z  d          }t          j        dd|z  d          fd|D             } | |          }|                    |d          }|                    |dz  	          }t	          ||           d S )
Nr9   r   r   rm   c                 "    g | ]}D ]}||fS rh   rh   )r  xiyiy_ranges      r   r  z(test_query_pairs_eps.<locals>.<listcomp>  s*    ===RW==rR====r   rb   )r'  rF   )\(?r'  )r@   rb  r  r  r   )r   spacingx_rangexy_arrayr$   	pairs_epspairsr  s          @r   test_query_pairs_epsr    s    gajjGk!Q[!,,Gk!Q[!,,G====7===H;x  D  7 33Iw~..E	"""""r   c           	          t           j        ddddf         \  }}t          t          |                                |                                                    } | |          }t          t          g d          t          |                    dd                               t          j        |t                    } | |          }t          t          g d          t          |                    dd                               d S )Nr   rm   )rm      	      )r9   r   r   r   )
r@   mgridr&  rU   ravelr   r  r   asarrayr   )r   r=   r}  r/  r$   s        r   test_ball_point_intsr    s    8AaC1HDAq#aggii++,,F;vD&&--fa8899; ; ;Ze,,,F;vD&&--fa8899; ; ; ; ;r   c            	          d t          d          D             } t          t          |           t          | d d d                              d S )Nc                 4    g | ]}t          j                    S rh   )r   node)r  r   s     r   r  z+test_kdtree_comparisons.<locals>.<listcomp>.  s    ---qV[]]---r   r   r   )r.  r   r  )nodess    r   test_kdtree_comparisonsr  ,  sI    --E!HH---EuTTrT{ 3 344444r   c                 *   t           j                            d           d}d}t           j                            ||          } | |                              |d          d         } | |d                              |d          d         } | |d	                              |d          d         } | |dd
                              |d          d         }t          ||           t          ||           t          ||           d S )Nr   r*  rm   r#  r   r   F)r  )r  )r  r  )r@   rs   rt   ru   r?   r   )r   rT   rQ   r/  r8  r:  T3T4s           r   test_kdtree_build_modesr  2  s    INN1A	AY__Q""F	V			"	"6Q	"	/	/	3B	V5	1	1	1	7	7!	7	D	DR	HB	V5	1	1	1	7	7!	7	D	DR	HB	V5#(
* 
* 
**/%!%*<*<R
ABr2r2r2r   c                    dd l }t          j                            d           d}d}t          j                            ||          } | |          }|                    |          }|                    |          }|                    |d          d         }|                    |d          d         }t          ||           d S )Nr   rC  rm   r#  r   r   )	pickler@   rs   rt   ru   dumpsloadsr?   r   r   r  rT   rQ   r/  r8  tmpr:  s           r   test_kdtree_pickler  A  s    MMMINN1
A	AY__Q""F	V		B
,,r

C	c		B	&A		r	"B	&A		r	"Br2r   c                    dd l }t          j                            d           d}d}t          j                            ||f          } | |d          }|                    |          }|                    |          }|                    |d          d	         }|                    |d          d	         }t          ||           d S )
Nr   rC  rm   r   r   )r-   r#  r   r   )	r  r@   rs   rt   r   r  r  r?   r   r  s           r   test_kdtree_pickle_boxsizer  O  s    MMMINN1
A	AYQF++F	VS	)	)	)B
,,r

C	c		B	&A		r	"B	&A		r	"Br2r   c                    t           j                            d           d}d}t           j                            ||          } | |d          }|                                }|                    |d          d         }t           j                            ||          |d	<   |                    |d          d         }t          ||           d S )
Nr   r*  rm   T)	copy_datar#  r   r   .)r@   rs   rt   ru   copyr?   r   )r   rT   rQ   r/  r   r   r8  r:  s           r   test_kdtree_copy_datar  ]  s     INN1A	AY__Q""FFd+++AA	
a	B)//!Q''F3K	
a	Br2r   c                 f   t           j                            d           d}d}t           j                            ||          } | |          }|                    |dd          d         }|                    |dd          d         }|                    |d          d         }t          ||           t          ||           |                    t          d	d
            t          j	        t          d          5  |                    |dd           d d d            d S # 1 swxY w Y   d S )Nr   r*  rm   r#  r-  )rQ   r,  r   r   	cpu_countc                      d S r   rh   rh   r   r   <lambda>z'test_ckdtree_parallel.<locals>.<lambda>y  s     r   zCannot determine ther   r   r+  )r@   rs   rt   ru   r?   r   setattrosr   r	   NotImplementedError)	r   monkeypatchrT   rQ   r/  r   r8  r:  r  s	            r   test_ckdtree_parallelr  l  sc   INN1A	AY__Q""FFA	
1b	)	)"	-B	
1b	)	)"	-B	
1		b	!Br2r2K666	*2H	I	I	I ' '	2&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's    D&&D*-D*c                     t           j                            d           d} d}t           j                            | |          }t	          |          fd j                   j        } t          t          j        | j                  t          d                     t          j
        | j        d d f         | j                   d S )Nr   rl   rm   c                 (   t          t          | t                               | j        dk    rVt          | j        d u            t          | j        d u            t          | j        j        d         j        k               d S  | j                    | j                   | j        j	        d d | j        f         }| j        j	        d d | j        f         }t          |
                                |                                k                d S )Nr   r   )r   r   r   	split_dimlesserrr  indicesr   rp   data_pointsmaxmin)rT   r=   r}  r>   recurse_trees      r   r  z'test_ckdtree_view.<locals>.recurse_tree  s    
1k**+++;"AH$%%%AI%&&&AIOA&&/9:::::L"""L###$QQQ^4A	%aaan5AAEEGGaeegg%&&&&&r   )r@   rs   rt   ru   r   r$   r   sortr  r.  rB   r  )rT   rQ   r/  r>   r  s      @@r   test_ckdtree_viewr  ~  s     INN1A	AY__Q""FV__F' ' ' ' ' ' LArwqy))5::666v{19aaa<0!-@@@@@r   c                    d}d}g d}d}t           j                            d           t           j                            ||f          } | |d          }|                    ||          \  }}|                    ||          \  }	}
t          ||	           t          ||
           t          j        ddg          }d}|                    ||          \  }}|                    ||          \  }	}
t          |	|d	|dz
  f                    t          |
|d	|dz
  f                    |                    |d          \  }}|                    |dg          \  }	}
t          t          |j                  d           t          t          |	j                  d           t          |t          j	        |	                     t          |t          j	        |
                     d S )
N   r9   )r   r9   r   r   rn   r   r   ro   .)
r@   rs   rt   r   r?   r   r   r  r   r  )r   rT   rI   klistkintrB   r>   rL   rM   dd1ii1s              r   test_kdtree_list_kr"    s   A	AIIEDINN491a&))D[***F \\$&&FB||D$''HCSS HaVED\\$%%FB||D%((HCbeai()))beai())) \\$""FB||D1#&&HCRX"""SY###RXc]]###RXc]]#####r   c                    d}d}d}t           j                            d           t           j                            ||f          } | |dd          } | |d          }dd	d
t           j        fD ]}|                    |||          \  }}	|                    |dz   ||          \  }
}t          ||
           t          |	|           |                    |dz
  ||          \  }
}t          ||
           t          |	|           t          |||d|          \  }}t          ||           t          |	|           d S )N  r   rn   r   r   r   r   ro   r9   g      @r,   )r-   r,   )	r@   rs   rt   r   rV   r?   r   r   simulate_periodic_box)r   rT   rI   rQ   rB   r>   kdtree2r,   rL   rM   r   r!  dd2ii2s                 r   test_kdtree_boxr*    si   A	A	AINN491a&))D[3777F k$+++GC   dA++B<<s
A<33SB$$$R<<s
A<33SB$$$R($3!LLLSB$$$R r   c                    d}d}d}t           j                            d           t           j                            ||f          } | |dd          } | |d	          }ddt           j        fD ]X}|                    |||
          \  }}	|                    |||
          \  }
}t          ||
           t          |	|           Yd S )Nr$  r9   r   rn   r   r   r   r   ro   r%  )r@   rs   rt   r   rV   r?   r   r   )r   rT   rI   rQ   rB   r>   r'  r,   rL   rM   r   r!  s               r   test_kdtree_box_0boxsizer,    s    A	A	AINN491a&))D[3777F k$+++GBF^  dA++B==qA=..SB$$$R r   c                    t          j        ddd                              dd          }|d d dfxx         dz  cc<   t          j        t
                    5   | |dd           d d d            n# 1 swxY w Y   t          j        t
                    5   | |dd           d d d            n# 1 swxY w Y    | |dd	           d S )
Nr   r9   rr   r   r   r   r   )r   r   )r   r   )r@   r  reshaper   r	   r   r   rB   s     r   test_kdtree_box_upper_boundsr0    sZ   ;q!R  ((Q//DAJJJ"JJJ	z	"	" 3 3D1c22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	z	"	" : :D1j9999: : : : : : : : : : : : : : : Kq*555555s$   A33A7:A7B22B69B6c                 d    t          j        ddd          }t          t          | |dd           d S )Nr   r   rr   r   r   )r@   r  assert_raisesr   r/  s     r   test_kdtree_box_lower_boundsr3    s4    ;r1b!!D*k4!SIIIIIIr   c                 F   g }g }t          j        d|j        d         z            }t          j        t          j        |dg|j        d         z                      j        }|dz
  }|D ]~}	||	dz  |z  z   }
|                     |
||          \  }}|                    d|          }|                    d|          }|                    |           |                    |           t          j	        |d          }t          j	        |d          }t          j
        t          |          t          |          |z  gddg	          }||d
         d d <   ||d         d d <   |                    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=   nnrT   imager(  r)  r  s                 r   r&  r&    s   	B	B
	!tz!}$%%A	""1qcDJqM&9::	;	;	=B	cB  q3w((<<qA<..Skk"a  kk"a  
		#
		#		$	$	$B		$	$	$BXs4yy#b''A+.7   F F4LOF4LO
KKdK$<2A2tQQQU 333r   PyPyz Fails on PyPy CI runs. See #9507)reasonc                     	 dd l } n# t          $ r Y d S w xY w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        	                    d|j
        t          j        	                    d          dz             }||j        |<   t          j        t          j        ||k                        j        }	t          j        t          j        ||k                        j        }
|                     | j                  j        }t%          d          D ]}t'          |	          }d}t%          d          D ]u}|                     | j                  j        }t'          |	          }|                    |
d	d
          \  }}|                     | j                  j        }||k    r|dz  }vt+          |dk                d S )Nr   )皙?rB  r   r#  rr   g     X@rC  rl   rm   r9   )rQ   r,   )resourceImportErrorr@   r  slicesincos
empty_likers   r  r   flatvstacknonzeror   	getrusageRUSAGE_SELF	ru_maxrssr.  r   r?   r   )rC  dxdyr}  r=   zz_copyFILLVALmaskigoodibadmem_userE   r$   	num_leaksr   iquerynew_mem_uses                     r   test_ckdtree_memuser[    s'       FB8E!QVR((!QVR(() *DAq
q		2rAaCx((26!9944A]1FF111IG9Q	(9(9"(=(=(ABBDFKIbjg..//1E9RZW--..0D  !566@G2YY  u~~I3ZZ  $$X%9::Du~~zz$!qz11f(()=>>H  NI INs    
c                 h   t          j        ddd                              dd          } | |d          }t          j        t	          |          d          }|                    |          }t          |g d           t          t          |j        |d d                    t          d	          D ]}|
                    |t          j        dd	|                    }|
                    |t          j        dd	|          ||f
          }|
                    |t          j        dd	|          |d f
          }|
                    |t          j        dd	|          d |f
          }	|
                    |t          j        dd	|          |
           t          ||           t          ||           t          ||	           t          t	          |                    D ]}|                                }
d|
|<   ||
dk             } | |          }|
                    |t          j        dd	d          |
|
f
          }|
                    |t          j        dd	d                    }t          ||           t          t          |j
        |t          j        dd	d          |

           d S )Nr   r   rm   r   ro   f4r   )rm   r9   r   r   r9   r   r   rr   )weightsrl   )r@   r  r.  r   r  _build_weightsr   r2  r   r.  r  r  )r   rB   tree1r^  nwrE   c1c2c3c4w1r<  tree2s                r   test_kdtree_weightsrh  B  s   ;q!Q''A..DKq)))Egc$iit,,,G			g	&	&Br000111*e2GCRCLAAA2YY # #""5"+aQ*?*?@@""5"+aQ*?*? '* # , ,""5"+aQ*?*? $ # ) )""5"+aQ*?*?w # ) )eR[B%:%: 	 	! 	! 	! 	2r"""2r"""2r""""3t99 8 8\\^^1R1WE""""5"+aS*A*AR # " " ""5"+aS*A*ABB2r""" 	j%"72;q"c**B	8 	8 	8 	8 	8!8 8r   c                 z   d}d}t           j                            d           t           j                            ||f          } | |d          }g d}t          j        t          |                    }|                    ||          }|                    ||d	          }t          ||                                           t          t          j        |          t          j        |                    D ]>\  }	}
|                    ||
          }t          ||t          |	                              ?d S )
Nr$  r9   rn   r   r   ro   )r   r  r  g{Gz?rB  F
cumulative)r@   rs   rt   normalr8  r  r  r   cumsumrU   	itertoolspermutationsr   r&  )r   rT   rI   rB   r>   r0i0n0nncrE   r'  s              r   &test_kdtree_count_neighbous_multiple_rrt  p  s-   A	AINN49!Q((D[***F	$	$	$B	3r77		B				+	+B

 
 
 
>
>CSZZ\\"""I*2..*2..0 0 + +1 ""61--1bak****	+ +r   c                    t           j                            d           t           j                            dd          }t           j                            dd          } | |          }|                    ddgd          \  }}|                    ddgd|z            }t          |g            |                    |d          \  }}|                                }|                    |d|z            }t          j        dt          	          }|
                    g            t          ||            | |          }	|                    |	d|z            }t          dg gz  |           |                    |	d|z            }t          |d
k               |                    |	d|z  d          }t          |t          j        d          k    d           |                    |	d|z  d          }t          |t          j        d          k    d           |                    |	d|z  d          }t!          |i            |                    |	d|z  d          }dt           j        fdt           j        fdt           j        fg}
t          j        |
d          }t          j        d|	          }t          ||           |                    |d          \  }}|d d df                                         }|                    d|z  d          }t!          |t+                                 |                    d|z  d          }t          j        dt           j        	          }t          ||           d S )Nrn   rr   r9   r)   r   r   rb   )rr   )r   r   r   r  r  )rr   rr   Tr  r  r  rE   r=  r  )align)r   r   r  )r   r9   )r@   rs   rt   randr?   r   r   r  r<  objectfillr9  r  r   r  r   r   intpfloat64r   r  r  )r   XYr$   r/   rE   rQ  mindr}  other_dtype	res_dtypes               r   test_len0_arraysr    s6    INN4
	r1A
	r1A;q>>D::r2h!:$$DAqr2hA..Aq"::a1:DAq5577DaT**A
vV,,,AFF2JJJq!KNNEUCH--Ar2$w"""UCH--AAFOOO##E3t8#NNAqBHX...555##E3t8#NNAqBHX...555##E3t8#HHAB##E3t8#KKABGnsBGnsBJ.?@Ft,,,I
uI...Aq!::a1:DAqQQQU8<<>>DTu55ACEETy99A
vRW---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  |                     d S )
Ni   r   r  r9   FT)repeat)r  r  rp   r   r   )r.  r@   r   rn  productr   r   r$   _noder   r  r  r  r8  rr  )r   rT   rI   rB   balancedcompactr>   r$   s           r   test_kdtree_duplicated_inputsr    s=   A1a[[ & &w1vQTUU!*!2=!K!K!K 	& 	&Hg [X/6D D DF;!#####.'#9#9FKKK%  +,,	!Q!V$$& & & ,--	!q&!$$& & & &	&	& &r   c                 d     | dggd          }t          t          |j        |ddgd           d S )Nr   r   ro   rb   Frj  )r2  r   r  )r   r>   s     r   'test_kdtree_noncumulative_nondecreasingr    sO    
 [1#+++F*f4aU, , , , , ,r   c                    t          j        g dg dg dg dg dg dgd          } | |          }|                    |d	d
          \  }}t          |dt           j        t           j        t           j        gddt           j        t           j        gddt           j        t           j        gddt           j        t           j        gddt           j        t           j        gdt           j        t           j        t           j        gg           d S )N)r   r   r   )r  r   r   )r   r   r   )r   r  r   )r   r   r   )r   r   r   r{  r   rm   rq   rP   r   r  )r@   r   r?   r   rV   )r   xyzckdtdeqieqs        r   test_short_knnr    s    (   C ;sDzz#z==HCc"&"&"&)rvrv&rvrv&rvrv&rvrv&(*+ + + + +r   c                    t           j                            d           t           j                            d          }t           j                            d          } | |          t           j                            ddt          |                    }                    ||          }fdt          ||          D             }t          ||          D ]/\  }}t          t          |          t          |                     0d S )Nrn   rl   r   r   r   333333?c                 B    g | ]\  }}                     ||          S rh   r   )r  qidir$   s      r   r  z2test_query_ball_point_vector_r.<locals>.<listcomp>  s-    IIIRt$$R,,IIIr   )
r@   rs   rt   rl  r   r  r   rU   r   r  )	r   rB   r?   r/   rvectorrscalarr*   r+   r$   s	           @r   test_query_ball_point_vector_rr    s    INN49**DI(++E;tD
	!Ss5zz22A##E1--GIIII3ua==IIIGGW%% 1 116!99fQii00001 1r   c                    t           j                            d           t           j                            d          }t           j                            d          } | |          d                    |d          }d                     |d          D             }fd	|D             }fd
|D             }t          ||           t          ||           t          ||           d S )Nrn   r  r   r  Treturn_lengthc                 ,    g | ]}t          |          S rh   r  )r  r   s     r   r  z0test_query_ball_point_length.<locals>.<listcomp>   s    XXXCs3xxXXXr   Fc                 V    g | ]%}t                              |                    &S rh   )r  r   r  r  r/   r$   s     r   r  z0test_query_ball_point_length.<locals>.<listcomp>  s1    AAARs4((Q//00AAAr   c                 @    g | ]}                     |d           S )Tr  r  r  s     r   r  z0test_query_ball_point_length.<locals>.<listcomp>  s.    PPPBt$$R$$??PPPr   )r@   rs   rt   rl  r   r   )	r   rB   r?   lengthlength2length3length4r/   r$   s	          @@r   test_query_ball_point_lengthr    s   INN49**DI(++E;tDA""5!4"@@FXX4#8#8QV#8#W#WXXXGAAAAA5AAAGPPPPP%PPPGvw'''vw'''vw'''''r   c                 V   t           j                            d           t           j                            d          }t          j        d          dz  }t          j        t          j        d          d d d         dz            d d d         }t           j                            d          }t          j        |j                  j        }|j        d         |j        d         k    sJ |j        d         |j        d         k    sJ  | |          }|                    ||d          }|                    ||d          }t          ||           |
                    |d	          \  }	}
|
                    |d	          \  }}t          |	|           t          |
|           d S )
Nrn   r  r   rl   g{Gz?r   Tr  r   )r@   rs   rt   rl  r8  ascontiguousarrayr   stridesr   r   r?   )r   rB   d_contiguousd_discontiguousquery_contiguousquery_discontiguousr$   length1r  d1i1d2i2s                r   test_discontiguousr    s   INN49**D9S>>D(L*)C..2.57 77;tt=Oy''X'66./?/ABBD&r*.>.Fr.JJJJJ"2&,*>r*BBBBB;tD##$4$0 $ F FG##$7$34 $ I IG w(((ZZ(!,,FBZZ+Q//FBr2r2r   zbalanced_tree, compact_nodes))TF)TT)FFr  c                 n   t           j                            d           t          j        d          }t          j        d          }t          j        d          } | |||          }|                    |dd	          }|d
k    sJ |                    |d          \  }}	|	j        dk    sJ |j        dk    sJ t          j        |          	                                sJ |
                    |d
dg          }
t          |
d
d
g           |                    |d          }|j        dk    sJ d S )Nrn   )r   r   )r   )r   r   r$  r  r  Tr  r   r9   )r9   r9   r   r%  )r@   rs   rt   r<  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  #  sJ    INN4xf%%%HwV$$$HwV$$$H;x}%24 4 4D""8S"EEFQ;;;;ZZ!$$FB8v8v8B<<TAq6**Aq1a&!!!##D#..A7fr   c                        e Zd Zd Zd Zd ZdS )_Test_sorted_query_ball_pointc                     t           j                            d           t           j                            dd          | _        |                     | j                  | _        d S )Nrn   rl   r   )r@   rs   rt   ru   r=   r   r  rv   s    r   rw   z*_Test_sorted_query_ball_point.setup_methodA  sH    
	ta(($$TV,,			r   c                    | j                             | j        dd          }|D ]}t          |t	          |                      | j        D ]<}| j                             |dd          }t          |t	          |                     =d S )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_TrueF  s    I..tvr.NN	 	3 	3DtVD\\2222& 	3 	3B9--b"D-IIDtVD\\2222	3 	3r   c                 B     j                              j        d          }|D ]}t          |t	          |                       fd j        D             } j                              j        dd          }t          ||          D ]\  }}t          ||           dS )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   c                 F    g | ]}j                             |d           S )r   )r  r   )r  r  r5   s     r   r  zI_Test_sorted_query_ball_point.test_return_sorted_None.<locals>.<listcomp>W  s+    PPP2DI66r2>>PPPr   Fr  N)r  r   r=   r   r  rU   )r5   r  r  idxs_list_singleidxs_list_Falseidxs0idxs1s   `      r   test_return_sorted_Nonez5_Test_sorted_query_ball_point.test_return_sorted_NoneO  s     I..tvr::	 	3 	3DtVD\\2222PPPPPPP)44TVRu4UU1ABB 	- 	-LE5ue,,,,	- 	-r   N)r   rf   rg   rw   r  r  rh   r   r   r  r  ?  sA        - - -
3 3 3- - - - -r   r  c                  H   t           j                            dd                              t                    } t          j        t          d          5  t          |           }d d d            n# 1 swxY w Y   t          | j	                  }t          j        t          d          5  |
                    |            d d d            n# 1 swxY w Y   t          j        t          d          5  |                    | d           d d d            d S # 1 swxY w Y   d S )Nrr   r9   zcomplex datar   r   r  )r@   rs   rw  viewcomplexr   r	   	TypeErrorr   realr?   r   r/  ts     r   test_kdtree_complex_datar  ]  s   Y^^B""''00F	y	7	7	7  6NN               	v{A	y	7	7	7  	               
y	7	7	7 ( (	6Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s6   A00A47A4*CCC2DDDc                     t           j                            d           t           j                            dd          } t	          |           }|j        }t          |t          j                  sJ |j        | j	        d         k    sJ |g}|rx|
                    d          }t          |t          j                  rat          |j        t                    sJ |j        t          |j                  k    sJ t          | |j                 |j        j                   nt          |t          j                  sJ t          |j        t                    sJ d|j        cxk    r|j        k     sn J t          |j        t*                    sJ t          |j        t                    sJ |j        |j        j        |j        j        z   k    sJ |                    |j                   |                    |j                   |vd S d S )Nrn   rl   rm   r   r   )r@   rs   rt   rw  r   r$   r   	innernodechildrenr   popleafnoder   r  idxr   r  r  r  rI   rn  r   rq  rr  r:  )r/  r  rootr  rT   s        r   test_kdtree_tree_accessr  m  s   INN4Y^^C##FvA6DdF,-----=FLO++++ FE
 !IIbMMa)) 	!aj#.....:QU++++vae}ag.ABBBBa!122222ak3/////))))ac))))))agu-----aj#.....:193E!EEEEELL###LL     ! ! ! ! !r   c                  ~   t           j                            d           t           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 d S )Nrn   rl   rm   r   r   rr   r;   )r@   rs   rt   rw  r   r   rI   r   rT   r   rp   r   ro  rJ   rp  aminrB   r  s     r   test_kdtree_attributesr    s   INN4Y^^C##FvAac33&,q/!!!!ac33&,q/!!!!aj#&&&&&:qwQ 7 7 7888qvrwvA6667776Vr   kdtree_classc           	      Z  
 t           j                            d           t          j        ddd          }t           j                            d                              d          }t           j                            d                              d          }t           j                            d          }t           j                            d	          } | |          } | |          }|                    ||d
||f          }|d d d f         |d d d f         z  t           j                            |d d d d d f         |d d d d d f         z
  d          

fdt          t          j
        dg|d d                   |          D             }	t          ||	           d S )Nrn   rB  r      )r|  r   -   )   r   r|  r  F)rk  r^  r   r;   c                 `    g | ]*\  }}t          j        |k     |k    z                     +S rh   )r@   rA   )r  prev_radiusradiusr   r^  s      r   r  z8test_kdtree_count_neighbors_weighted.<locals>.<listcomp>  sP     O O O%+v fWkD0TV^DEFF O O Or   r   )r@   rs   rt   r8  r.  r  linalgr   rU   rn  chainr   )r  r'  ABwAwBkdAkdBnABexpectr   r^  s             @@r   $test_kdtree_count_neighbors_weightedr    s   INN4
	$4  A
	$$U++A
	$$V,,A			!		B			"		B
,q//C
,q//C


c1B

H
HC qqqkBqqq$wK'G9>>!D!!!QQQJ-!AAAtQQQJ-7b>AADO O O O O),Y_aS!CRC&-I-I1)M)MO O OFC     r   c                  N   g d} t          |           }t          j        | t          j        |t          j                  g          d d d f         }t          |                              d          }t          |d |                                       d          }||k    sJ d S )N)
r   r#  ir|  ii   r   ir9   )r  r@   r;  r   nanr   r  )valsrT   rB   query_with_nansquery_without_nanss        r   test_kdtree_nanr    s    111DD		A>4BF!3!3455aaag>DTll..q11ORaR))55a880000000r   )hr  numpy.testingr   r   r   r   r   r   r   r	   r2  platformr
   numpyr@   scipy.spatialr   r   r   r   scipy.spatial._ckdtreer   r   rn  fixturer   r'   r0   r2   rj   rz   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r(  r3  r5  rA  rE  rI  rM  rP  rS  rV  rv  rx  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r*  r,  r0  r3  r&  markskipifr[  rh  rt  r  r  r  r  r  r  r  parametrizer  r  r  r  r  r  r  rh   r   r   <module>r     s
   
			, , , , , , , , , , , , , , , , + * * * * *  * * * * * *     E E E E E E E E E E E E . . . . . . , , , , , ,    ()))  *)  (  E- E- E- E- E- E- E- E-P 	 	 	 	 	# 	 	 	 , , , , ,| , , , & & & & &" & & &: > > > > >+ > > >+) +) +) +) +) +) +) +)Z-7 -7 -7 -7 -7 -7 -7 -7^> > > > > > > >4 
 
 
 
 
( 
 
 
 ] ] ] ] ]!1 ] ] ]D     )9   "     0        (9        -        %?        ,        .   ' ' '- - -&i i i i i i i i&     2        &;   "     !7        *I        "8        +J   3 3 3 3 3 3 3 3>K K KB B BG G G: : :F F F F F F F F$ F F F F F7 F F FD@ D@ D@ D@ D@ D@ D@ D@N     #E   "L L L	 	 	# # #! ! !$/ / /
  B# # #
; 
; 
;5 5 5        ' ' '$A A AD $  $  $D  6  &6 6 6J J J4 4 42 ))++v5=  ? ?' '? ?'R,8 ,8 ,8\+ + +$, , ,\& & &., , ,+ + +21 1 1( ( (   8 7   
  
. - - - - - - - -:( ( ( ! ! !<  ( &'):;;! ! <;!.1 1 1 1 1r   