
    _Mh                     $   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[ ZNejO        P                    d\          d]             ZQd^ ZRd_ ZSd` ZTda ZUejO        V                     e            dbk    dcd          de             ZWdf ZXejO        P                    d\          dg             ZYdh ZZdi Z[dj Z\dk Z]dl Z^dm Z_dn Z`ejO        a                    dog dp          dq             Zbe G dr ds                      Zcdt Zddu Zedv ZfejO        a                    dweeg          dx             Zgdy Zhdz ZiejO        a                    d{eeg          d|             ZjdS )}    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/test/jupyter/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)<"="=>>>F2649Qrz111}%559BBBQT#XMNN	
 	
 	
 	
 	
r   c           	         | j         }| j        }| j                            || j        j        |          \  }}d}d}t          ||          D ]p\  }}|t          j        k    r|dz  }t          |dz  t          j	        || j
        |         z
  dz                       t          |||z   k     d|dd|d           qt          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 )r=   r/   r>   r?   nzipr@   infr   rA   rB   r   r   r6   	r5   r=   r/   rL   rM   rF   hitsnear_dnear_is	            r   test_points_nearz!ConsistencyTests.test_points_nearJ   s   FF""1A"NNB!"bkk 	T 	TNFFAID	261TYv5F3F2J+K+KLLLFQsUN$Rf$R$R$RQ$R$R$RSSSSRVDMM$)Q::QT#XEFFMMMMMr   c           	         | j         }| j        }| j                            || j        j        d|          \  }}d}d}t          ||          D ]j\  }}|t          j        k    r|dz  }t          || 	                    || j
        |         d                     t          |||z   k     d|dd|d           kt          t          j        | 	                    | j
        |d          ||z   k               |           d S )Nr   rQ   r,   rR   r:   r   rS   rT   rU   )r=   r/   r>   r?   rV   rW   r@   rX   r   r6   rB   r   r   rA   rY   s	            r   test_points_near_l1z$ConsistencyTests.test_points_near_l1X   s   FF""1QR"SSB!"bkk 	T 	TNFFAIDa69JA(N(NOOOFQsUN$Rf$R$R$RQ$R$R$RSSSSRVDMM$)Q::QsUBCCTJJJJJr   c           	      8   | j         }| j        }| j                            || j        j        t
          j        |          \  }}d}d}t          ||          D ]t\  }}|t
          j        k    r|dz  }t          || 	                    || j
        |         t
          j                             t          |||z   k     d|dd|d           ut          t          j        | 	                    | j
        |t
          j                  ||z   k               |           d S )Nr_   r:   r   r   rS   rT   rU   )r=   r/   r>   r?   rV   r@   rX   rW   r   r6   rB   r   r   rA   rY   s	            r   test_points_near_linfz&ConsistencyTests.test_points_near_linff   s   FF""1VW"XXB!"bkk 	T 	TNFFAIDa69JBF(S(STTTFQsUN$Rf$R$R$RQ$R$R$RSSSS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_approxt   s{    FF**1a00{  A3 //1qFAcEN*++,,,,,r   N)
r   
__module____qualname__r6   rG   rN   r]   r`   rb   rg    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皙?
   )rV   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   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                  dz   | _        d S )Nrt   )superry   r@   ru   rw   rI   r=   r5   	__class__s    r   ry   z_Test_random_far.setup_method   s9    ((+r   r   rh   ri   ry   __classcell__r   s   @r   r|   r|      s8        , , , , , , , , ,r   r|   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   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    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   rd   r   )rd   r   r   r>   r?   rx   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   rd   g?r   r   r   rx   s    r   test_nearest_twoz_Test_small.test_nearest_two   sC    !!+q11saV$	& 	& 	& 	& 	&r   N)r   rh   ri   ry   rG   r   rj   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   rq   )r~   ry   r   rB   r>   r   s    r   ry   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>   rx   s    r   ry   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   ro   r   )r9   ro   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>   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!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   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!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   rh   ri   ry   r   r   r   r   r   rj   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>   rx   s    r   ry   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 )Nrp   r     )	r@   ru   rv   rw   Tr>   r?   rW   r   )r5   qsdsi_sqr/   rE   s          r   *test_vectorized_query_noncontiguous_valueszETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_values   s    
	tY__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>   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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   rh   ri   ry   r   r   r   r   r   rj   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   onesrV   boolr6   rB   r   r   )	r5   r=   r/   r   rE   r   cr   r   s	            r   test_found_allzball_consistency.test_found_all!  s#   M$&!!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   rh   ri   r   r6   r   r   rj   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 )	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.  s    
	tIOOAq))	!!$)a!88##r   Nrz   rj   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.distance<      Aq!S)))r   c                 <   d}d}t           j                            d           t           j                            ||f          | _        |                     | j        dd          | _        t          j        |d          | _        d	| _	        d
| _
        d| _        d S )Ni'  ro   rp   sizer9   r   rr   r-   rd   r   r   rs   )r@   ru   rv   uniformrB   r   r   fullr=   r,   rF   r/   r   s      r   ry   z'_Test_random_ball_periodic.setup_method?  s    
	tI%%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_outsideJ  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          j
        |                     | j        |         | j        | j                  | j        d| j	        z   z  k              sJ | j                            | j        dz
  | j        | j        | j	                  }d||<   t          j
        |                     | j        |         | j        | j                  | j        d| j	        z   z  k              sJ d S )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&   GDFHD)))F##DFSL$&DF#QQ!vMM$)A,77462dh;;OO
 
 	
 	
 	
 F##DFSL$&DF#QQ!vMM$)A,77462dh;;OO
 
 	
 	
 	
 	
 	
r   N)r   rh   ri   r6   ry   r   r   rj   r   r   r   r   :  sS        * * *	 	 	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   {   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  s{    
	sI%%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                 V    t                                                       d| _        d S Nrd   r~   ry   rF   r   s    r   ry   z%_Test_random_ball_approx.setup_methodv  $    r   r   r   s   @r   r  r  s  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   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                 V    t                                                       d| _        d S Nr   r~   ry   r/   r   s    r   ry   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   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                 V    t                                                       d| _        d S )Nr   )r~   ry   r,   r   s    r   ry   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~   ry   r@   rX   r,   r   s    r   ry   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      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*    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@   ru   rv   rw   r   ranger   )	r   rV   rQ   pointsr   l1l2l3rE   s	            r   $test_query_ball_point_multithreadingr5    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                 .   | j                             | j        | j        | j        | j                  }t          |          D ]R\  }}|D ]J}|                     | j        |         | j	        |         | j                  | j        d| j        z   z  k    sJ KSd S )Nr   r   )
T1query_ball_treeT2r/   r,   rF   r   r6   data1data2)r5   r)  rE   r   js        r   test_all_in_ballz&two_trees_consistency.test_all_in_ball  s    G##DGTVtv48#LLaLL 	1 	1DAq 1 1djmTZ]DFKK62dh;/0 0 0 0 01	1 	1r   c                    | j                             | j        | j        | j        | j                  }t          |          D ]\  }}t          j        | j        j	        t                    }d||<   t          j        |                     | j        |         | j        |         | j                  | j        d| j        z   z  k              sJ d S )Nr   r   Fr   )r:  r;  r<  r/   r,   rF   r   r@   r   rV   r   rC   r6   r>  r=  )r5   r)  rE   r   r   s        r   r   z$two_trees_consistency.test_found_all  s    G##DGTVtv48#LLaLL 	3 	3DAq	...AAaD6$--
1tz!}dfMM!VR[12 3 3 3 3 3 3	3 	3r   N)r   rh   ri   r6   r@  r   rj   r   r   r7  r7    sA        + + +1 1 13 3 3 3 3r   r7  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   ro   rp   r9   rq   r   r   rs   )r@   ru   rv   rw   r=  r   r:  r>  r<  r,   rF   r/   r   s      r   ry   z#_Test_two_random_trees.setup_method  s    
	tY__Q**
""4:"::Y__Q**
""4:"::r   Nrz   rj   r   r   rC  rC    s#        
 
 
 
 
r   rC  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 )NrE  ro   rp   r   r9   r   r   r   r   rs   )r@   ru   rv   r   r=  r   r:  r>  r<  r,   rF   r/   r   s      r   ry   z,_Test_two_random_trees_periodic.setup_method  s    
	tY&&QF&33
""4:3"GGY&&QF&33
""4:3"GGr   N)r   rh   ri   r6   ry   rj   r   r   rG  rG    s2        * * *
 
 
 
 
r   rG  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   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                 V    t                                                       d| _        d S 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                 j    t                                                       t          j        | _        d S 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                 j    t                                                       t          j        | _        d S 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
d	S )
Test_rectanglec                 8    t          ddgddg          | _        d S Nr   r   )r   rectrx   s    r   ry   zTest_rectangle.setup_method  s    q!fq!f--			r   c                 Z    t          | j                            ddg          d           d S )Nr)   r   r   r[  min_distance_pointrx   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]  rx   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 rM  )r   r[  r^  r@   sqrtrx   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   r[  max_distance_pointr@   rd  rx   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 ra  )r   r[  rh  r@   hypotrx   s    r   test_max_one_sidez Test_rectangle.test_max_one_side(  sC    DI88#sDDHS#..	0 	0 	0 	0 	0r   c                     t          | j                            ddg          dt          j        d          z             d S rM  rg  rx   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   rd   r   )r[  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   rh   ri   ry   r_  rb  re  ri  rl  rn  ru  rj   r   r   rX  rX    s        . . .I I IK K KN N NT T T0 0 0P P P3 3 3 3 3r   rX  c                  p    t          t          ddgddgd          t          j        d                     d S Nr   r   r9   )r   r   r@   rd  rj   r   r   test_distance_l2rx  7  s5    *Aq6Aq61==rwqzzJJJJJr   c                  L    t          t          ddgddgd          d           d S rw  )r   r   rj   r   r   test_distance_l1rz  ;  s-    *Aq6Aq61==qAAAAAr   c                  `    t          t          ddgddgt          j                  d           d S rZ  )r   r   r@   rX   rj   r   r   test_distance_linfr|  ?  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 )Nrp   rt   r   r      )rt   r~  )r@   ru   rv   rw   r   r   r   )r=   ys     r   test_distance_vectorizationr  C  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 )Nrs   c                 ,    g | ]}t          |          S rj   len.0r   s     r   
<listcomp>z?count_neighbors_consistency.test_one_radius.<locals>.<listcomp>N      LLL1ALLLr   r   r:  count_neighborsr<  r@   rA   r;  r5   r)  s     r   test_one_radiusz+count_neighbors_consistency.test_one_radiusK  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 rj   r  r  s     r   r  zAcount_neighbors_consistency.test_large_radius.<locals>.<listcomp>S  r  r   r  r  s     r   test_large_radiusz-count_neighbors_consistency.test_large_radiusP  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?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    VBKtbfRjj!<<=='))$'266rww''1,--...R)) 	F 	FIAv00!<<fEEEE	F 	Fr   N)r   rh   ri   r  r  r  rj   r   r   r  r  J  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 )NrE  r9   rp   rq   )r@   ru   rv   r   rw   r:  r<  r   s      r   ry   z"_Test_count_neighbors.setup_method^  sx    
	t""29??1a#8#81"EE""29??1a#8#81"EEr   Nrz   rj   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.distanceh  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)r:  sparse_distance_matrixr<  r)  r;  r   r   r6   rB   r,   itemsr   )r5   Mr)  rE   r   r?  r/   s          r   test_consistency_with_neighborszBsparse_distance_matrix_consistency.test_consistency_with_neighborsk  s    G**47DF;;G##DGTV44aLL 	 	DAq  #adGMM$',q/47<?DFKK     7799 	 	KVaQA1I	 	r   c                 P    | j                             | j         | j                   d S r   )r:  r  r)  rx   s    r   test_zero_distancez5sparse_distance_matrix_consistency.test_zero_distancex  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  )r:  r  r<  r)  r   rB   r   toarray)r5   M1expecteds      r   test_consistencyz3sparse_distance_matrix_consistency.test_consistency|  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@   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  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   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  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   rh   ri   r6   r  r  r  r  r  rj   r   r   r  r  f  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 )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5""51"55

r   Nrz   rj   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 )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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 )Nrt   r  ro   rp   r   )	threshold)r@   ru   rv   rw   r   r   )rI   rV   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   )r;  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   rE  ro   rd   r   gMbP?r9   gh㈵>gư>)r@   ru   rv   rw   r  )r   rV   rQ   r1  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   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    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   ro   c                 "    g | ]}D ]}||fS rj   rj   )r  xiyiy_ranges      r   r  z(test_query_pairs_eps.<locals>.<listcomp>"  s*    ===RW==rR====r   rd   )r)  rF   )\(?r)  )r@   rd  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   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    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 rj   )r   noder  r   s     r   r  z+test_kdtree_comparisons.<locals>.<listcomp>:  s    ---qV[]]---r   r   r   )r0  r   r  )nodess    r   test_kdtree_comparisonsr  8  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,  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    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   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    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   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    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,  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     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,  ro   r%  r/  )rQ   r.  r   r   	cpu_countc                      d S 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  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   rn   ro   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lesserrt  indicesr   rr   data_pointsmaxmin)rV   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@   ru   rv   rw   r   r$   r   sortr  r0  rB   r  )rV   rQ   r1  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   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%    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   rt   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   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-    sk    	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   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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   rt   r   r   r   r   )r   r   )r   r   )r@   r  reshaper   r	   r   r   rB   s     r   test_kdtree_box_upper_boundsr3    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   rt   r   r   )r@   r  assert_raisesr   r2  s     r   test_kdtree_box_lower_boundsr6    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?   r1  appendconcatenateemptyr  r  )r>   rB   rQ   r-   r,   rL   rM   r=   nnrV   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   )皙?rE  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   )rF  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   ro   r   rq   f4r   )ro   r9   r   r   r9   r   r   rt   )weightsrn   )r@   r  r1  r   r  _build_weightsr   r5  r   r0  r  r	  )r   rB   tree1ra  nwrE   c1c2c3c4w1r>  tree2s                r   test_kdtree_weightsrk  O  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   rp   r   r   rq   )r   r  r  g{Gz?rE  F
cumulative)r@   ru   rv   normalr;  r  r  r   cumsumrW   	itertoolspermutationsr   r(  )r   rV   rI   rB   r>   r0i0n0nncrE   r)  s              r   &test_kdtree_count_neighbous_multiple_rrw  }  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          }|                    dd          }|                    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 )Nrp   rt   r9   r)   r   r   rd   )rt   )r   r   r   r  r  )rt   rt   Tr  r  r  rE   r?  r  )align)r   r   r  )r   r9   )r@   ru   RandomStaterandr?   r   r   r  r?  objectfillr;  r  r   r  r   r   intpfloat64r   r  r  )r   rngXYr$   r/   rE   rT  mindr  other_dtype	res_dtypes                r   test_len0_arraysr    s/    )


%
%CQAQ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  rr   r   r   )r0  r@   r   rq  productr   r   r$   _noder   r  r  r  r;  rt  )r   rV   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   rq   rd   Frm  )r5  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   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"&"&"&)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 )Nrp   rn   r   r   r   333333?c                 B    g | ]\  }}                     ||          S rj   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@   ru   rv   ro  r   r  r   rW   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 )Nrp   r  r   r  Treturn_lengthc                 ,    g | ]}t          |          S rj   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 rj   )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@   ru   rv   ro  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 )
Nrp   r  r   rn   g{Gz?r   Tr  r   )r@   ru   rv   ro  r;  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 )Nrp   )r   r   )r   )r   r   r&  r  r  Tr  r   r9   )r9   r9   r   r'  )r@   ru   rv   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  1  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 )Nrp   rn   r   )r@   ru   rv   rw   r=   r   r  rx   s    r   ry   z*_Test_sorted_query_ball_point.setup_methodO  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_TrueT  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>e  s+    PPP2DI66r2>>PPPr   Fr  N)r  r   r=   r   r  rW   )r5   r  r  idxs_list_singleidxs_list_Falseidxs0idxs1s   `      r   test_return_sorted_Nonez5_Test_sorted_query_ball_point.test_return_sorted_None]  s     I..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   rh   ri   ry   r  r  rj   r   r   r  r  M  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 )Nrt   r9   zcomplex datar   r   r  )r@   ru   r{  viewcomplexr   r	   	TypeErrorr   realr?   r   r1  ts     r   test_kdtree_complex_datar  k  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 )Nrp   rn   ro   r   r   )r@   ru   rv   r{  r   r$   r   	innernodechildrenr   popleafnoder   r  idxr   r  r  r  rI   rp  r   rs  rt  r=  )r1  r  rootr  rV   s        r   test_kdtree_tree_accessr  {  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 )Nrp   rn   ro   r   r   rt   r;   )r@   ru   rv   r{  r   r   rI   r   rV   r   rr   r   rq  rJ   rr  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           	      
   t           j                            d          }t          j        ddd          }|                    d                              d          }|                    d                              d          }|                    d          }|                    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 )Nrp   rE  r      )r~  r   -   )   r   r~  r  F)rn  ra  r   r;   c                 `    g | ]*\  }}t          j        |k     |k    z                     +S rj   )r@   rA   )r  prev_radiusradiusr   ra  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@   ru   rz  r;  r1  r  linalgr   rW   rq  chainr   )r  r  r)  ABwAwBkdAkdBnABexpectr   ra  s              @@r   $test_kdtree_count_neighbors_weightedr    s   
)


%
%C
	$4  A

2u%%A

2v&&A	AB	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                  ,   g d} t          |           }t          j        | t          j        |t          j                  g          d d d f         }t          j        t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )N)
r   r%  ir~  ii   r   imust be finiter   )	r  r@   r>  r   nanr   r	   r   r   )valsrV   rB   s      r   test_kdtree_nanr    s    111DD		A>4BF!3!3455aaag>D	z)9	:	:	:  t                 s   ,B		BBc                  <   t           j                            d          } |                     ddd          }t	          |dd          }d t          d	          D             }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            n# 1 swxY w Y   t           j        |dd d f<   t          j        t          d
          5  t	          |dd           d d d            n# 1 swxY w Y   t          j        t          d
          5  t	          |dd           d d d            n# 1 swxY w Y   t          j        t          d
          5  t	          |dd           d d d            n# 1 swxY w Y   t          j        t          d
          5  t	          |dd           d d d            d S # 1 swxY w Y   d S )Ni90  r  r   rd   )r   lowhighFr  c                 &    g | ]}t           j        S rj   )r@   r  r  s     r   r  z2test_nonfinite_inputs_gh_18223.<locals>.<listcomp>  s    ***A***r   r   r  r   r   r   T)r@   ru   default_rngr   r   r0  r   r	   r   r?   r   r  )r  coordsr  	bad_coords       r   test_nonfinite_inputs_gh_18223r    s   
)


&
&C[[hCc[::FvU%@@@A**q***I	z)9	:	:	:  		              	z)9	:	:	: ) )	9a((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 6F1aaa4L	z)9	:	:	: @ @vT????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	z)9	:	:	: @ @vU$????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	z)9	:	:	: ? ?vT>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	z)9	:	:	: A AvU%@@@@A A A A A A A A A A A A A A A A A Asl   >B  B$'B$C))C-0C-"EEE'FF
F
,GGG1HHHincantationc                      G d dt           j                  }ddgddgddgg}t          j        |          } ||          } | |d	          }|                    |d
           |                    |d           d S )Nc                       e Zd Zd Zd ZdS )test_gh_18800.<locals>.ArrLikec                 b    t          j        |                              |           }d |_        |S r   )r@   r  r  rC   )clsinput_arrayobjs      r   __new__z&test_gh_18800.<locals>.ArrLike.__new__  s-    *[))..s33C CGJr   c                 :    |d S t          |dd           | _        d S )NrC   )getattrrC   )r5   r  s     r   __array_finalize__z1test_gh_18800.<locals>.ArrLike.__array_finalize__  s#    {sE400DHHHr   N)r   rh   ri   r  r  rj   r   r   ArrLiker
    s2        	 	 		1 	1 	1 	1 	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    s    1 1 1 1 1"* 1 1 1 
		
F
 (6

Cws||H;vr""DJJx(C(((((r   )kr  numpy.testingr   r   r   r   r   r   r   r	   r5  platformr
   numpyr@   scipy.spatialr   r   r   r   scipy.spatial._ckdtreer   r   rq  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/  r3  r6  r)  skipifr^  rk  rw  r  r  r  r  r  r  r  parametrizer  r  r  r  r  r  r  r  r  rj   r   r   <module>r      s   
			, , , , , , , , , , , , , , , , + * * * * *  * * * * * *     E E E E E E E E E E E E . . . . . . , , , , , ,    ()))  *)  (  H- H- H- H- H- H- H- H-V 	 	 	 	 	# 	 	 	 , , , , ,| , , , & & & & &" & & &: > > > > >+ > > >+) +) +) +) +) +) +) +)Z-7 -7 -7 -7 -7 -7 -7 -7^> > > > > > > >4 
 
 
 
 
( 
 
 
 #
 #
 #
 #
 #
!1 #
 #
 #
L     )9   "     0        (9        -        %?        ,        .   ' ' '- - -&3 3 3 3 3 3 3 3*     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F@ F@ F@ F@ F@ F@ F@ F@R     #E   "L L L	 	 	# # #! ! !$/ / /
  B# # #
; 
; 
;5 5 5        ' ' '$A A AD $  $  $D r  6  &6 6 6J J J4 4 42 ))++v5=  ? ?' '? ?'R,8 ,8 ,8\ r+ + +$, , ,\& & &., , ,+ + +21 1 1( ( (   8 7   
  
. - - - - - - - -:( ( ( ! ! !<  ( &'):;;! ! <;!.  A A A, &(9::) ) ;:) ) )r   