o
    iU                     @   st  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d	d
 Zdd Zdd ZG dd dZeG dd deZeG dd deZeG dd deZeG dd deZ G dd dZ!G dd dZ"G dd dZ#eG dd  d e#Z$eG d!d" d"e#Z%eG d#d$ d$e#Z&eG d%d& d&e$Z'eG d'd( d(e$Z(eG d)d* d*e$Z)eG d+d, d,e%Z*eG d-d. d.e$Z+eG d/d0 d0e$Z,d1d2 Z-d3d4 Z.G d5d6 d6Z/eG d7d8 d8e/Z0eG d9d: d:e/Z1eG d;d< d<e0Z2eG d=d> d>e1Z3eG d?d@ d@e0Z4eG dAdB dBe1Z5G dCdD dDZ6dEdF Z7dGdH Z8dIdJ Z9dKdL Z:G dMdN dNZ;eG dOdP dPe;Z<G dQdR dRZ=eG dSdT dTe=Z>dUdV Z?dWdX Z@dYdZ ZAd[d\ ZBd]d^ ZCd_d` ZDdadb ZEdcdd ZFdedf ZGdgdh ZHdidj ZIdkdl ZJdmdn ZKdodp ZLdqdr ZMdsdt ZNdudv ZOdwdx ZPdydz ZQd{d| ZRd}d~ ZSejTjUe dkdddd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_ejT`dg ddd ZaeG dd dZbdd Zcdd Zddd ZeejT`deegdd Zfdd Zgdd Zhd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                 C   s   | j S N)param)request r   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/scipy/spatial/tests/test_kdtree.pykdtree_type   s   r   c                 C   sp   | j ds
tdttfD ]'}| j dd d |j  }|t v r'td| t|| fd|i}|t |< q| S )zClass decorator to create test cases for KDTree and cKDTree

    Tests use the class variable ``kdtree_type`` as the tree constructor.
    Z_Testz)Expected a class name starting with _Test   N_zDuplicated test name: r   )__name__
startswithRuntimeErrorr
   r   globalstype)ZklstreeZ	test_nameZ	test_caser   r   r   
KDTreeTest   s   
r    c                 C   sH   | | }||d| k  |8  < ||d| k   |7  < t |d|}|S )N      ?g      r   r   )abpboxsizediffdr   r   r   distance_box+   s
   r(   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )ConsistencyTestsc                 C      t |||S r   r   selfr"   r#   r$   r   r   r   distance3      zConsistencyTests.distancec              	   C   s~   | j }| j|d\}}t|d t|| j|  d  d}tttj| j|tj	d d f  d dd|d | k d S )Nr      :0yE>Zaxis)
xkdtreequeryr   npsumdatar   allnewaxis)r,   r2   r'   iepsr   r   r   test_nearest6   s
   "@zConsistencyTests.test_nearestc              	   C   s   | j }| j}| j||\}}t|}|t| }t|d t|| j	|  d  d}t
ttj| j	|tjd d f  d dd|d | k | d S )Nr/   r0   r   r1   )r2   mr3   r4   r5   amaxZargmaxr   r6   r7   r   r9   )r,   r2   r=   ddiir'   r:   r;   r   r   r   test_m_nearest=   s   
"BzConsistencyTests.test_m_nearestc           	      C   s   | j }| j}| jj|| jj|d\}}d}d}t||D ]0\}}|tjkr&q|d7 }t|d t	|| j
|  d  t||| k d|dd|d qtt	| | j
|d|d | k | d S )	Nkdistance_upper_boundr0   r   r   r/   near_d=g should be less than )r2   r'   r3   r4   nzipr5   infr   r6   r7   r   r   r-   	r,   r2   r'   r?   r@   r;   hitsZnear_dZnear_ir   r   r   test_points_nearG   s   
"$,z!ConsistencyTests.test_points_nearc           	      C   s   | j }| j}| jj|| jjd|d\}}d}d}t||D ],\}}|tjkr'q|d7 }t|| 	|| j
| d t||| k d|dd|d qtt| 	| j
|d|| k | d S )Nr   rC   r$   rD   r0   r   rE   rF   rG   )r2   r'   r3   r4   rH   rI   r5   rJ   r   r-   r7   r   r   r6   rK   r   r   r   test_points_near_l1U   s   
$(z$ConsistencyTests.test_points_near_l1c           	      C   s   | j }| j}| jj|| jjtj|d\}}d}d}t||D ]-\}}|tjkr(q|d7 }t|| 	|| j
| tj t||| k d|dd|d qtt| 	| j
|tj|| k | d S )NrN   r0   r   r   rE   rF   rG   )r2   r'   r3   r4   rH   r5   rJ   rI   r   r-   r7   r   r   r6   rK   r   r   r   test_points_near_linfc   s   
$*z&ConsistencyTests.test_points_near_linfc                 C   sV   | j }| j}d}| j||\}}| jj|||d\}}tt||d|  k d S )N皙?)r;   r   )r2   rC   r3   r4   r   r5   r8   )r,   r2   rC   r;   Zd_realZi_realr'   r:   r   r   r   test_approxq   s   zConsistencyTests.test_approxN)
r   
__module____qualname__r-   r<   rA   rM   rO   rP   rR   r   r   r   r   r)   2   s    
r)   c                   @      e Zd Zdd ZdS )_Test_randomc                 C   s^   d| _ d| _tjd tj| j | j| _| j| jdd| _tj| j| _	d| _
d| _d S )Nd        r/   leafsize皙?
   )rH   r=   r5   randomseedrandnr7   r   r3   r2   r'   rC   r,   r   r   r   setup_method|   s   
z_Test_random.setup_methodNr   rS   rT   rb   r   r   r   r   rV   z       rV   c                          e Zd Z fddZ  ZS )_Test_random_farc                    s"   t    tj| jd | _d S )Nr]   )superrb   r5   r^   r`   r=   r2   ra   	__class__r   r   rb      s   
z_Test_random_far.setup_methodr   rS   rT   rb   __classcell__r   r   rh   r   rf          rf   c                   @   $   e Zd Zdd Zdd Zdd ZdS )_Test_smallc                 C   s   t 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   rY      r!   rX   )r5   arrayr7   r   r3   rH   r=   r^   r_   r`   r2   r'   rC   ra   r   r   r   rb      s    



z_Test_small.setup_methodc                 C   s   t | jddd d S )Nr   r   rQ   r   )rQ   r   r   r3   r4   ra   r   r   r   r<      s   z_Test_small.test_nearestc                 C   s$   t | jddddgddgf d S )Nry   r/   rQ   g?r   r   rz   ra   r   r   r   test_nearest_two   s   z_Test_small.test_nearest_twoN)r   rS   rT   rb   r<   r{   r   r   r   r   rn      s    rn   c                       re   )_Test_small_nonleafc                    s    t    | j| jdd| _d S )Nr   rZ   )rg   rb   r   r7   r3   ra   rh   r   r   rb      s   
z _Test_small_nonleaf.setup_methodrj   r   r   rh   r   r|      rl   r|   c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Test_vectorization_KDTreec                 C   L   t g dg dg dg dg dg dg dg dg| _t| j| _d S 	Nro   rp   rq   rr   rs   rt   ru   rv   )r5   rx   r7   r
   r3   ra   r   r   r   rb         
z&Test_vectorization_KDTree.setup_methodc                 C   s>   | j tg d\}}tt|t tt|tj d S Nro   )	r3   r4   r5   rx   r   
isinstancefloatZ
issubdtypeZsignedintegerr,   r'   r:   r   r   r   test_single_query   s   z+Test_vectorization_KDTree.test_single_queryc                 C   :   | j td\}}tt|d tt|d d S Nr/   rX   rw   )r/   rX   r3   r4   r5   zerosr   shaper   r   r   r   test_vectorized_query      z/Test_vectorization_KDTree.test_vectorized_queryc                 C   s   d}| j j| }| j jtg d|d\}}tt||f tt||f ttt	|| d    tt|| d  | j jk d S N   ro   rC   )
r3   rH   r4   r5   rx   r   r   r   r8   isfiniter,   skkr'   r:   r   r   r   $test_single_query_multiple_neighbors   s    $z>Test_vectorization_KDTree.test_single_query_multiple_neighborsc              
   C      d}| j j| }| j jtd|d\}}tt|dd|f tt|dd|f ttt	|d d d d | d f   tt|d d d d | d f | j jk d S Nr   r   r   r/   rX   
r3   rH   r4   r5   r   r   r   r   r8   r   r   r   r   r   (test_vectorized_query_multiple_neighbors      .2zBTest_vectorization_KDTree.test_vectorized_query_multiple_neighborsc                 C   sH   d}t jtdd | jj|d d W d    d S 1 sw   Y  d S )N      ?zk must be an integer or*matchr   )pytestr   
ValueErrorr3   r4   )r,   r2   r   r   r   test_query_raises_for_k_none   s   "z6Test_vectorization_KDTree.test_query_raises_for_k_noneN)	r   rS   rT   rb   r   r   r   r   r   r   r   r   r   r~      s    		r~   c                   @   r}   )Test_vectorization_cKDTreec                 C   r   r   )r5   rx   r7   r   r3   ra   r   r   r   rb      r   z'Test_vectorization_cKDTree.setup_methodc                 C   s4   | j g d\}}tt|t tt|t d S r   )r3   r4   r   r   r   intr   r   r   r   r      s   z,Test_vectorization_cKDTree.test_single_queryc                 C   r   r   r   r   r   r   r   r      r   z0Test_vectorization_cKDTree.test_vectorized_queryc                 C   s^   t jd t jddj}| j|\}}t|||D ]\}}}t| j|||f qd S )NrY   rw     )	r5   r^   r_   r`   Tr3   r4   rI   r   )r,   qsdsZi_sqr'   r:   r   r   r   *test_vectorized_query_noncontiguous_values   s   zETest_vectorization_cKDTree.test_vectorized_query_noncontiguous_valuesc                 C   s   d}| j j| }| j jg d|d\}}tt||f tt||f ttt|| d    tt|| d  | j jk d S r   )	r3   rH   r4   r   r5   r   r   r8   r   r   r   r   r   r      s    $z?Test_vectorization_cKDTree.test_single_query_multiple_neighborsc              
   C   r   r   r   r   r   r   r   r     r   zCTest_vectorization_cKDTree.test_vectorized_query_multiple_neighborsN)	r   rS   rT   rb   r   r   r   r   r   r   r   r   r   r      s    	r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	ball_consistency        c                 C   s   t |d |d |S Nr   r   r+   r   r   r   r-     s   zball_consistency.distancec                 C   s   t | j}t | j|jd d }| jj|| j| j| j	d}t
|D ]:\}}| | j| || | j|| d| j	   }| | j| || | j|| d| j	   }t|| j| k d q#d S )Nr$   r;   r   T)r5   
atleast_2dr2   broadcast_tor'   r   r   query_ball_pointr$   r;   	enumerater-   r7   r   tol)r,   r2   r'   lr:   inddistnormr   r   r   test_in_ball  s   ,,zball_consistency.test_in_ballc           	      C   s   t | j}t | j|jd d }| jj|| j| j| j	d}t
|D ]H\}}t j| jjtd}d||< | | j| || | j|| d| j	   }| | j| || | j|| d| j	   }t|| j | kd q#d S )Nr   r   dtypeFr   T)r5   r   r2   r   r'   r   r   r   r$   r;   r   onesrH   boolr-   r7   r   r   )	r,   r2   r'   r   r:   r   cr   r   r   r   r   test_found_all  s   ,,zball_consistency.test_found_allN)r   rS   rT   r   r-   r   r   r   r   r   r   r     s
    	r   c                   @   rU   )_Test_random_ballc                 C   sZ   d}d}t jd t j||| _| j| jdd| _t j|| _d| _d| _	d| _
d S )	NrW   rX   rY   r/   rZ          @r   r\   )r5   r^   r_   r`   r7   r   r   r2   r$   r;   r'   r,   rH   r=   r   r   r   rb   +  s   
z_Test_random_ball.setup_methodNrc   r   r   r   r   r   )  rd   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_Test_random_ball_periodicc                 C      t |||dS r   r(   r+   r   r   r   r-   9     z#_Test_random_ball_periodic.distancec                 C   s`   d}d}t jd t jj||fd| _| j| jddd| _t |d| _d	| _	d
| _
d| _d S )Ni'  rX   rY   sizer/   r   r[   r%   rQ   r   r   r\   )r5   r^   r_   uniformr7   r   r   fullr2   r$   r;   r'   r   r   r   r   rb   <  s   
z'_Test_random_ball_periodic.setup_methodc                 C   s   | j j| jd | j| j| jd}|D ]}t| | j| | j| j| jd| j  k q| j j| jd | j| j| jd}|D ]}t| | j| | j| j| jd| j  k q=d S )Nr   r   )	r   r   r2   r'   r$   r;   r   r-   r7   )r,   r   r:   r   r   r   test_in_ball_outsideG  s    . .z/_Test_random_ball_periodic.test_in_ball_outsidec                 C   s   t j| jjtd}| jj| jd | j| j| j	d}d||< t
t | | j| | j| j| jd| j	  k | jj| jd | j| j| j	d}d||< t
t | | j| | j| j| jd| j	  k d S )Nr   r   r   F)r5   r   r   rH   r   r   r2   r'   r$   r;   r   r8   r-   r7   )r,   r   r   r   r   r   test_found_all_outsideO  s    2 6z1_Test_random_ball_periodic.test_found_all_outsideN)r   rS   rT   r-   rb   r   r   r   r   r   r   r   7  s
    r   c                   @   s   e Zd ZdZdd ZdS )"_Test_random_ball_largep_issue9890gvIh%<=c                 C   sX   d}d}t jd t jjdd||fd| _| | j| _| j| _d| _d| _	d| _
d S )Nr   r/   {   rW   r   r   r]   )r5   r^   r_   randintr7   r   r   r2   r$   r;   r'   r   r   r   r   rb   `  s   
z/_Test_random_ball_largep_issue9890.setup_methodN)r   rS   rT   r   rb   r   r   r   r   r   Z  s    r   c                       re   )_Test_random_ball_approxc                       t    d| _d S NrQ   rg   rb   r;   ra   rh   r   r   rb   o     

z%_Test_random_ball_approx.setup_methodrj   r   r   rh   r   r   l      r   c                       re   )!_Test_random_ball_approx_periodicc                    r   r   r   ra   rh   r   r   rb   w  r   z._Test_random_ball_approx_periodic.setup_methodrj   r   r   rh   r   r   t  r   r   c                       re   )_Test_random_ball_farc                    r   Nr   rg   rb   r'   ra   rh   r   r   rb     r   z"_Test_random_ball_far.setup_methodrj   r   r   rh   r   r   |  r   r   c                       re   )_Test_random_ball_far_periodicc                    r   r   r   ra   rh   r   r   rb     r   z+_Test_random_ball_far_periodic.setup_methodrj   r   r   rh   r   r     r   r   c                       re   )_Test_random_ball_l1c                    r   )Nr   )rg   rb   r$   ra   rh   r   r   rb     r   z!_Test_random_ball_l1.setup_methodrj   r   r   rh   r   r     r   r   c                       re   )_Test_random_ball_linfc                       t    tj| _d S r   rg   rb   r5   rJ   r$   ra   rh   r   r   rb        
z#_Test_random_ball_linf.setup_methodrj   r   r   rh   r   r     r   r   c                 C   s`   d}d}t jd | t j||}|t jdd|d}t|jd tt|d t	 d S )	N      rY   r/   rw   r   r/   rw   r   r   )
r5   r^   r_   r`   r   r   r   r   r   list)r   rH   r=   r   rr   r   r   test_random_ball_vectorized  s   r   c           	      C   s   t jd d}d}t j||}| |}|j|ddd}|j|ddd}|j|ddd}t|D ]}|| s;|| rDt|| ||  q1t|D ]}|| sS|| r\t|| ||  qId S )	Nr     r/   g~jth?r   workers@   r   )r5   r^   r_   r`   r   ranger   )	r   rH   rC   pointsr   l1l2l3r:   r   r   r   $test_query_ball_point_multithreading  s"   r   c                   @   rm   )two_trees_consistencyc                 C   r*   r   r   r+   r   r   r   r-     r.   ztwo_trees_consistency.distancec                 C   sl   | j j| j| j| j| jd}t|D ]!\}}|D ]}t| | j	| | j
| | j| jd| j  k qqd S )Nr   r   )T1query_ball_treeT2r'   r$   r;   r   r   r-   data1data2)r,   r   r:   r   jr   r   r   test_all_in_ball  s   2z&two_trees_consistency.test_all_in_ballc              	   C   s   | j j| j| j| j| jd}t|D ],\}}tj| jj	t
d}d||< tt| | j| | j| | j| jd| j  k qd S )Nr   r   Fr   )r   r   r   r'   r$   r;   r   r5   r   rH   r   r   r8   r-   r   r   )r,   r   r:   r   r   r   r   r   r     s   8z$two_trees_consistency.test_found_allN)r   rS   rT   r-   r   r   r   r   r   r   r     s    r   c                   @   rU   )_Test_two_random_treesc                 C   sn   d}d}t jd t j||| _| j| jdd| _t j||| _| j| jdd| _d| _	d| _
d| _d S )	N2   rX   rY   r/   rZ   r   r   r\   )r5   r^   r_   r`   r   r   r   r   r   r$   r;   r'   r   r   r   r   rb     s   
z#_Test_two_random_trees.setup_methodNrc   r   r   r   r   r     s    r   c                   @   s   e Zd Zdd Zdd ZdS )_Test_two_random_trees_periodicc                 C   r   r   r   r+   r   r   r   r-     r   z(_Test_two_random_trees_periodic.distancec                 C   sz   d}d}t jd t jj||fd| _| j| jddd| _t jj||fd| _| j| jddd| _d| _	d	| _
d
| _d S )Nr   rX   rY   r   r/   r   r   r   r   r\   )r5   r^   r_   r   r   r   r   r   r   r$   r;   r'   r   r   r   r   rb     s   
z,_Test_two_random_trees_periodic.setup_methodN)r   rS   rT   r-   rb   r   r   r   r   r     s    r   c                       re   )_Test_two_random_trees_farc                    r   Nr/   r   ra   rh   r   r   rb     r   z'_Test_two_random_trees_far.setup_methodrj   r   r   rh   r   r     r   r   c                       re   )#_Test_two_random_trees_far_periodicc                    r   r   r   ra   rh   r   r   rb     r   z0_Test_two_random_trees_far_periodic.setup_methodrj   r   r   rh   r   r     r   r   c                       re   )_Test_two_random_trees_linfc                    r   r   r   ra   rh   r   r   rb     r   z(_Test_two_random_trees_linf.setup_methodrj   r   r   rh   r   r     r   r   c                       re   )$_Test_two_random_trees_linf_periodicc                    r   r   r   ra   rh   r   r   rb   	  r   z1_Test_two_random_trees_linf_periodic.setup_methodrj   r   r   rh   r   r     r   r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )Test_rectanglec                 C   s   t ddgddg| _d S Nr   r   )r   rectra   r   r   r   rb     s   zTest_rectangle.setup_methodc                 C   s   t | jddgd d S )Nr!   r   r   r  min_distance_pointra   r   r   r   test_min_inside     zTest_rectangle.test_min_insidec                 C   s   t | jddgd d S Nr!   g      ?r  ra   r   r   r   test_min_one_side  r  z Test_rectangle.test_min_one_sidec                 C   s    t | jddgtd d S r   )r   r  r  r5   sqrtra   r   r   r   test_min_two_sides      z!Test_rectangle.test_min_two_sidesc                 C   s$   t | jddgdtd  d S )Nr!   r   r/   r   r  max_distance_pointr5   r
  ra   r   r   r   test_max_inside     $zTest_rectangle.test_max_insidec                 C   s"   t | jddgtdd d S r  )r   r  r  r5   hypotra   r   r   r   test_max_one_side  s   "z Test_rectangle.test_max_one_sidec                 C   s$   t | jddgdtd  d S r   r  ra   r   r   r   test_max_two_sides"  r  z!Test_rectangle.test_max_two_sidesc                 C   sV   | 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   rQ   r   )r  splitr   maxesmins)r,   lessgreaterr   r   r   
test_split%  s
   zTest_rectangle.test_splitN)r   rS   rT   rb   r  r	  r  r  r  r  r  r   r   r   r   r    s    r  c                   C   s$   t tddgddgdtd d S Nr   r   r/   )r   r   r5   r
  r   r   r   r   test_distance_l2-  r  r  c                   C   s   t tddgddgdd d S r  )r   r   r   r   r   r   test_distance_l11  s   r  c                   C   s    t tddgddgtjd d S r  )r   r   r5   rJ   r   r   r   r   test_distance_linf5  r  r  c                  C   sB   t jd t jddd} t jddd}tt| |jd d S )NrY   r]   r   rw      )r]   r  )r5   r^   r_   r`   r   r   r   )r2   yr   r   r   test_distance_vectorization9  s   r   c                   @   rm   )count_neighbors_consistencyc              	   C   :   d}t | j| j|tdd | j| j|D  d S )Nr\   c                 S      g | ]}t |qS r   len.0r   r   r   r   
<listcomp>D      z?count_neighbors_consistency.test_one_radius.<locals>.<listcomp>r   r   count_neighborsr   r5   r6   r   r,   r   r   r   r   test_one_radiusA     z+count_neighbors_consistency.test_one_radiusc              	   C   r"  )Nr   c                 S   r#  r   r$  r&  r   r   r   r(  I  r)  zAcount_neighbors_consistency.test_large_radius.<locals>.<listcomp>r*  r,  r   r   r   test_large_radiusF  r.  z-count_neighbors_consistency.test_large_radiusc                 C   sv   t t t dt dd}| j| j|}tt t 	|dk t
||D ]\}}t| j| j|| q)d S )N{Gz?r]   rw   r   )r5   explinspacelogr   r+  r   r   r8   r&   rI   r   )r,   rsresultsr   resultr   r   r   test_multiple_radiusK  s    z0count_neighbors_consistency.test_multiple_radiusN)r   rS   rT   r-  r/  r7  r   r   r   r   r!  @  s    r!  c                   @   rU   )_Test_count_neighborsc                 C   sL   d}d}t jd | jt j||dd| _| jt j||dd| _d S )Nr   r/   rY   rZ   )r5   r^   r_   r   r`   r   r   r   r   r   r   rb   T  s
   z"_Test_count_neighbors.setup_methodNrc   r   r   r   r   r8  R  rd   r8  c                   @   r}   )"sparse_distance_matrix_consistencyc                 C   r*   r   r   r+   r   r   r   r-   ^  r.   z+sparse_distance_matrix_consistency.distancec              	   C   s   | j | j| j}| j | j| j}t|D ]"\}}|D ]}t|||f | | j j| | jj| | j	dd qq|
 D ]\\}}}t||| v  q=d S )N   decimal)r   sparse_distance_matrixr   r   r   r   r   r-   r7   r$   itemsr   )r,   Mr   r:   r   r   r'   r   r   r   test_consistency_with_neighborsa  s   zBsparse_distance_matrix_consistency.test_consistency_with_neighborsc                 C   s   | j | j | j d S r   )r   r=  r   ra   r   r   r   test_zero_distancel  s   z5sparse_distance_matrix_consistency.test_zero_distancec                 C   sH   | j | j| j}t| j j| jj}d||| jk< t| |dd d S )Nr   r:  r;  )r   r=  r   r   r   r7   r   toarray)r,   ZM1expectedr   r   r   test_consistencyp  s   z3sparse_distance_matrix_consistency.test_consistencyc                 C   sX   t jd t jt jddtd}| j|ddd}||d }t	||j
dd	 d S )
Nr      r/   r   Fbalanced_treecompact_nodesrw   r:  r;  )r5   r^   r_   rx   r`   r   r   r=  rB  r   r   )r,   too_manyr   r'   r   r   r   #test_against_logic_error_regressionw  s   zFsparse_distance_matrix_consistency.test_against_logic_error_regressionc                 C   s  t | j| jf}t| jD ]&}t| jD ]}| j|d d f | j|d d f  }t |||||f< qqt |}d||| jk< t | j| jf}| j	j
| j| jdd}| D ]\}}|||f |||f< qYt||dd t | j| jf}| j	j
| j| jdd}t|jd D ]}|d | }|d	 | }|d
 | }||||f< qt||dd | j	j
| j| jdd}t|| dd | j	j
| j| jdd}t|| dd d S )Nr   dictoutput_typer:  r;  ndarrayr   r:   r   v
dok_matrix
coo_matrix)r5   r   rH   r   r   r   dotr
  r   r   r=  r   keysr   r   rB  )r,   refr:   r   rO  r   r   rC   r   r   r   test_ckdtree_return_types  s>   $
z<sparse_distance_matrix_consistency.test_ckdtree_return_typesN)	r   rS   rT   r-   r@  rA  rD  rJ  rU  r   r   r   r   r9  \  s    	r9  c                   @   rU   )_Test_sparse_distance_matrixc                 C   sx   d}d}t jd t j||}t j||}| j|dd| _| j|dd| _d| _d| _|| _	|| _
|| _|| _d S )Nr   rX   rY   r/   rZ   r!   )r5   r^   r_   r`   r   r   r   r   r$   r   r   rH   r=   )r,   rH   r=   r   r   r   r   r   rb     s   
z)_Test_sparse_distance_matrix.setup_methodNrc   r   r   r   r   rV    rd   rV  c                  C   s   d} d}d}t jd t j| |}t j||}t||}t|j| |f t| D ]}t|D ]}tt	|| || |||f  q1q+d S )Nr]      rX   rY   )
r5   r^   r_   r`   r   r   r   r   r   r   )r=   rH   rC   xsysr   r:   r   r   r   r   test_distance_matrix  s   
"rZ  c                  C   sZ   d} d}d}t jd t j| |}t j||}t||}t||dd}t|| d S )Nr]   rW  rX   rY   r   )	threshold)r5   r^   r_   r`   r   r   )r=   rH   rC   rX  rY  r   Zdslr   r   r   test_distance_matrix_looping  s   
r\  c                 C   sZ   |  | |}t }t|D ]\}}|D ]}||k r |||f qqt|| |k d S r   )r   setr   addr   query_pairs)r   r'   r   r   r:   r   r   r   r   r   check_onetree_query  s   r`  c                 C   s   t jd d}d}t j||}| |}t|d t jd| |}|d |  d9  < ||d|   d7  < | |}t|d t|d t|d t|d	 d S )
Nr   r   rX   rQ   rw   gMbP?r/   gh㈵>gư>)r5   r^   r_   r`   r`  )r   rH   rC   r   r   r   r   r   test_onetree_query  s   



ra  c                 C   s$   | ddgg}t |dt  d S )Nr   r   r!   )r   r_  r]  )r   r   r   r   r   test_query_pairs_single_node     rb  c                 C   sD  t jd d}d}d}|d }t j||}| |}t }t|D ]+}t|d |D ]!}	||d d f ||	d d f  }
t |
|
|krL|||	f q+q"t|}|	|}t|}t
|| |j	|dd}t|}t
|| t }|j	|dd}t|jd D ]}|t||df t||df f qt|}t
|| d S )	Nr   r   r/   rQ   r   r]  rL  rN  )r5   r^   r_   r`   r]  r   rR  r^  sortedr_  r   r   r   )r   rH   rC   r   r2r   r   Zbruter:   r   rO  Zl0r   r   Zarrr   r   r   r   test_kdtree_query_pairs  s8    


(rf  c                    st   t d}t dd| d}t dd| d  fdd|D }| |}|j|dd}|j|d	 d
}t|| d S )Nr/   r   rw   rX   c                    s   g | ]} D ]}||fqqS r   r   )r'  xiyiZy_ranger   r   r(    s    z(test_query_pairs_eps.<locals>.<listcomp>rQ   )r   r;   )\(?r   )r5   r
  r2  r_  r   )r   spacingZx_rangeZxy_arrayr   Z	pairs_epspairsr   ri  r   test_query_pairs_eps  s   
rn  c                 C   s   t jddddf \}}tt| | }| |}ttg dt|dd t j|t	d}| |}ttg dt|dd d S )Nr   rX   )rX      	      )r/   r   r   r   )
r5   mgridr   rI   ravelr   rd  r   Zasarrayr   )r   r2   r  r   r   r   r   r   test_ball_point_ints  s   rt  c                  C   s2   dd t dD } tt| t| d d d  d S )Nc                 S   s   g | ]}t  qS r   )r
   noder'  r   r   r   r   r(  .  r)  z+test_kdtree_comparisons.<locals>.<listcomp>rw   r   )r   r   rd  )nodesr   r   r   test_kdtree_comparisons,  s    rx  c                 C   s   t jd d}d}t j||}| |j|ddd }| |ddj|ddd }| |dd	j|ddd }| |ddd
j|ddd }t|| t|| t|| d S )Nr   r   rX   r   r   r   F)rH  )rG  )rH  rG  )r5   r^   r_   r`   r4   r   )r   rH   rC   r   r   r   T3ZT4r   r   r   test_kdtree_build_modes2  s"   

rz  c                 C   sx   dd l }tjd d}d}tj||}| |}||}||}|j|ddd }|j|ddd }t|| d S )Nr   r   rX   r   r   r   )	pickler5   r^   r_   r`   dumpsloadsr4   r   r   r{  rH   rC   r   r   tmpr   r   r   r   test_kdtree_pickleA  s   

r  c                 C   s   dd l }tjd d}d}tjj||fd}| |dd}||}||}|j|ddd	 }|j|ddd	 }t|| d S )
Nr   r   rX   r   r   )r%   r   r   r   )	r{  r5   r^   r_   r   r|  r}  r4   r   r~  r   r   r   test_kdtree_pickle_boxsizeO  s   

r  c                 C   sz   t jd d}d}t j||}| |dd}| }|j|ddd }t j|||d	< |j|ddd }t|| d S )
Nr   r   rX   T)Z	copy_datar   r   r   .)r5   r^   r_   r`   copyr4   r   )r   rH   rC   r   r   r   r   r   r   r   r   test_kdtree_copy_data]  s   r  c           	      C   s   t jd d}d}t j||}| |}|j|dddd }|j|dddd }|j|ddd }t|| t|| |td	d
d  tj	t
dd |j|ddd W d    d S 1 s`w   Y  d S )Nr   r   rX   r   r   )rC   r   r   r   	cpu_countc                   S   s   d S r   r   r   r   r   r   <lambda>y  s    z'test_ckdtree_parallel.<locals>.<lambda>zCannot determine ther   r   r   )r5   r^   r_   r`   r4   r   setattrosr   r   NotImplementedError)	r   ZmonkeypatchrH   rC   r   r   r   r   ry  r   r   r   test_ckdtree_parallell  s   

"r  c                     s~   t jd d} d}t j| |}t|  fdd j  j} tt | jt	d t j
| jd d f | j d S )Nr   rW   rX   c                    s   t t| t | jdkr't | 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lesserr  indicesr   r[   data_pointsmaxmin)rH   r2   r  r3   recurse_treer   r   r    s   


z'test_ckdtree_view.<locals>.recurse_tree)r5   r^   r_   r`   r   r   r   sortr  r   r7   r  )rH   rC   r   r   r  r   test_ckdtree_view~  s   
 r  c                 C   s6  d}d}g d}d}t jd t jj||fd}| |dd}|||\}}|||\}	}
t||	 t||
 t ddg}d}|||\}}|||\}	}
t|	|d	|d f  t|
|d	|d f  ||d\}}||dg\}	}
tt|jd tt|	jd t|t 	|	 t|t 	|
 d S )
N   r/   )r   r/   rw   rw   rY   r   r   rZ   .)
r5   r^   r_   r   r4   r   rx   r%  r   rs  )r   rH   r=   ZklistZkintr7   r3   r?   r@   dd1ii1r   r   r   test_kdtree_list_k  s.   

r  c                 C   s   d}d}d}t jd t jj||fd}| |ddd}| |dd}dd	d
t jfD ]M}|j|||d\}}	|j|d ||d\}
}t||
 t|	| |j|d ||d\}
}t||
 t|	| t|||d|d\}}t|| t|	| q)d S )N  rw   rY   r   r   r   r   rZ   r/   g      @r$   )r%   r$   )	r5   r^   r_   r   rJ   r4   r   r   simulate_periodic_box)r   rH   r=   rC   r7   r3   kdtree2r$   r?   r@   r  r  dd2ii2r   r   r   test_kdtree_box  s&   




r  c                 C   s   d}d}d}t jd t jj||fd}| |ddd}| |dd	}ddt jfD ] }|j|||d
\}}	|j|||d
\}
}t||
 t|	| q(d S )Nr  r/   rw   rY   r   r   r   r   rZ   r  )r5   r^   r_   r   rJ   r4   r   r   )r   rH   r=   rC   r7   r3   r  r$   r?   r@   r  r  r   r   r   test_kdtree_box_0boxsize  s   
r  c                 C   s   t ddddd}|d d df  d7  < tt | |ddd W d    n1 s.w   Y  tt | |ddd W d    n1 sJw   Y  | |dd	d d S )
Nr   r/   r]   r   r   r   r   )r   r   )r   r   )r5   r2  reshaper   r   r   r   r7   r   r   r   test_kdtree_box_upper_bounds  s   r  c                 C   s$   t ddd}tt| |ddd d S )Nr   r   r]   r   r   )r5   r2  assert_raisesr   r  r   r   r   test_kdtree_box_lower_bounds  rc  r  c                 C   s8  g }g }t d|jd  }t t |dg|jd  j}|d }|D ]*}	||	d |  }
| j|
||d\}}|d|}|d|}|| || q$t j	|dd}t j	|dd}t j
t|t|| gddgd	}||d
 d d < ||d d d < |jdd |d d d d |f |d
 d d d |f fS )Nrw   r   r   r  r   r1   )r@   i8)r?   Zf8r   r@   r?   )order)r5   aranger   rx   Zunravel_indexr   r4   r  appendconcatenateemptyr%  r  )r3   r7   rC   r%   r$   r?   r@   r2   nnrH   imager  r  r6  r   r   r   r    s,    
0r  PyPyz Fails on PyPy CI runs. See #9507)reasonc                  C   sz  zdd l } W n
 ty   Y d S w d\}}tjtdd| |tdd| |f \}}t|d td||  t|  }t|}||d d < d}tj	d|j
tj	dd }||j|< tt||kj}	tt||kj}
| | jj}tdD ]}t|	}qd}tdD ]&}| | jj}t|	}|j|
d	d
d\}}| | jj}||kr|d7 }qt|dk  d S )Nr   )皙?r  r   r   r]   g     X@r   rW   rX   r/   )rC   r$   )resourceImportErrorr5   rr  slicesincosZ
empty_liker^   r   r   ZflatZvstackZnonzeror   Z	getrusageZRUSAGE_SELFZ	ru_maxrssr   r   r4   r   )r  ZdxZdyr  r2   zZz_copyZFILLVALmaskZigoodZibadZmem_user:   r   Z	num_leaksr   ZiqueryZnew_mem_user   r   r   test_ckdtree_memuse  s<   
*


r  c              
   C   s  t ddddd}| |dd}t jt|dd}||}t|g d tt|j|d d  t	d	D ]V}|
|t dd	|}|j
|t dd	|||fd
}|j
|t dd	||d fd
}|j
|t dd	|d |fd
}	|j
|t dd	||d
 t|| t|| t||	 q5t	t|D ]B}| }
d|
|< ||
dk }| |}|j
|t dd	d|
|
fd
}|
|t dd	d}t|| tt|j
|t dd	d|
d
 qd S )Nr   r   rX   r   rZ   Zf4r   )rX   r/   r   r   r/   r   r   r]   )weightsrW   )r5   r2  r  r   r%  Z_build_weightsr   r  r   r   r+  r  )r   r7   Ztree1r  nwr:   c1c2c3Zc4Zw1r   Ztree2r   r   r   test_kdtree_weightsB  sJ   



r  c                 C   s   d}d}t jd t jj||fd}| |dd}g d}t t|}|||}|j||dd	}t||  t	t
|t
|D ]\}	}
|||
}t||t|	  qDd S )
Nr  r/   rY   r   r   rZ   )r   r0  r0  g{Gz?r  F
cumulative)r5   r^   r_   normalr  r%  r+  r   ZcumsumrI   	itertoolspermutationsr   r   )r   rH   r=   r7   r3   Zr0Zi0Zn0Znncr:   r   r   r   r   &test_kdtree_count_neighbous_multiple_rp  s    
r  c                 C   s,  t jd t jdd}t jdd}| |}|jddgdd\}}|ddgd| }t|g  |j|dd\}}| }||d| }t jdt	d	}|
g  t|| | |}	||	d| }tdg g | ||	d| }t|d
k |j|	d| dd}t|t dkd |j|	d| dd}t|t dkd |j|	d| dd}t|i  |j|	d| dd}dt jfdt jfdt jfg}
t j|
dd}t jd|d	}t|| |j|dd\}}|d d df  }|jd| dd}t|t  |jd| dd}t jdt jd	}t|| d S )NrY   r]   r/   r!   r   r   rQ   )r]   )r   r   r   rP  rL  )r]   r]   TrQ  rK  rN  r:   r   rO  )align)r   r   r]  )r   r/   )r5   r^   r_   randr4   r   r   r  r  objectfillr   r+  r   r=  r   r   Zintpfloat64r   r_  r]  )r   XYr   r'   r:   r  Zmindr  otherZ_dtypeZ	res_dtyper   r   r   test_len0_arrays  sH   




r  c              	   C   s   d}t ddD ]W}t||f}d||d d < tjdddD ]>\}}| |||dd}|jdks2J | tu r9|jn|jj}t	t
|jjtd	|d  t	t
|jjt|d | qqd S )
Ni   r   ro  r/   FT)repeat)rG  rH  r[   rw   r   )r   r5   r   r  productr   r   r   _noder   r  r  r  r  r  )r   rH   r=   r7   Zbalancedcompactr3   r   r   r   r   test_kdtree_duplicated_inputs  s,   r  c                 C   s,   | dggdd}t t|j|ddgdd d S )Nr   r   rZ   rQ   Fr  )r  r   r+  )r   r3   r   r   r   'test_kdtree_noncumulative_nondecreasing  s   

r  c                 C   s   t jg dg dg dg dg dg dgdd}| |}|j|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   )rj  r   r   )r   r   r   )r   rj  r   )r   r   r   )r   r   r   r  r   rX   r\   rB   r   r0  )r5   rx   r4   r   rJ   )r   ZxyzckdtZdeqZieqr   r   r   test_short_knn  s*   	r  c                    s   t jd t jjdd}t jjdd}| | t jjddt|d} ||} fddt||D }t||D ]\}}tt	|t	| q:d S )NrY   rW   rw   r   r   333333?c                    s   g | ]
\}}  ||qS r   r   )r'  qiZdir   r   r   r(        z2test_query_ball_point_vector_r.<locals>.<listcomp>)
r5   r^   r_   r  r   r%  r   rI   r   rd  )r   r7   r4   r'   ZrvectorZrscalarr"   r#   r   r  r   test_query_ball_point_vector_r  s   r  c                    s   t jd t jjdd}t jjdd}| |d j| dd}dd j| d	dD } fd
d|D } fdd|D }t|| t|| t|| d S )NrY   r  r   r  TZreturn_lengthc                 S   r#  r   r$  )r'  r   r   r   r   r(     r)  z0test_query_ball_point_length.<locals>.<listcomp>Fc                    s   g | ]
}t | qS r   )r%  r   r'  r  r'   r   r   r   r(    r  c                    s   g | ]
}j | d dqS )Tr  r  r  r  r   r   r(    r  )r5   r^   r_   r  r   r   )r   r7   r4   lengthlength2Zlength3Zlength4r   r  r   test_query_ball_point_length  s   

r  c                 C   s  t jd t jjdd}t dd }t t dd d d d d d d }t jjdd}t |jj}|jd |jd ksBJ |jd |jd ksNJ | |}|j||dd}|j||dd}t	|| |
|d	\}	}
|
|d	\}}t	|	| t	|
| d S )
NrY   r  r   rW   g{Gz?r   Tr  r   )r5   r^   r_   r  r  Zascontiguousarrayr   stridesr   r   r4   )r   r7   Zd_contiguousZd_discontiguousZquery_contiguousZquery_discontiguousr   Zlength1r  Zd1i1Zd2i2r   r   r   test_discontiguous  s0   

r  zbalanced_tree, compact_nodes))TF)TT)FFr  c                 C   s   t jd t jdd}t jdd}t jdd}| |||d}|j|ddd	}|d
ks-J ||d\}}	|	jdks<J |jdksCJ t |	 sLJ |
|d
dg}
t|
d
d
g ||d}|jdkshJ d S )NrY   )r   rw   )r   )r   rw   r   rF  r  Tr  r   r/   )r/   r/   r   r   )r5   r^   r_   r  r   r   r4   r   isinfr8   r+  r   r=  )r   rG  rH  Zempty_v3Zquery_v3Zquery_v2r   r  r?   r@   Nr?  r   r   r   test_kdtree_empty_input#  s"   r  c                   @   rm   )_Test_sorted_query_ball_pointc                 C   s.   t jd t jdd| _| | j| _d S )NrY   rW   r   )r5   r^   r_   r`   r2   r   r  ra   r   r   r   rb   A  s   z*_Test_sorted_query_ball_point.setup_methodc                 C   s\   | j j| jddd}|D ]	}t|t| q| jD ]}| j j|ddd}t|t| qd S )Nr   TZreturn_sorted)r  r   r2   r   rd  )r,   	idxs_listidxsrg  r   r   r   test_return_sorted_TrueF  s   
z5_Test_sorted_query_ball_point.test_return_sorted_Truec                    sr    j  jd}|D ]	}t|t| q
 fdd jD } j j jddd}t||D ]	\}}t|| q-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                    s   g | ]	} j |d qS )r   )r  r   )r'  rg  ra   r   r   r(  W  s    zI_Test_sorted_query_ball_point.test_return_sorted_None.<locals>.<listcomp>Fr  N)r  r   r2   r   rd  rI   )r,   r  r  Zidxs_list_singleZidxs_list_FalseZidxs0Zidxs1r   ra   r   test_return_sorted_NoneO  s   z5_Test_sorted_query_ball_point.test_return_sorted_NoneN)r   rS   rT   rb   r  r  r   r   r   r   r  ?  s    	r  c                  C   s   t jddt} tjtdd t| }W d    n1 s w   Y  t| j	}tjtdd |
|  W d    n1 sAw   Y  tjtdd |j| dd W d    d S 1 s`w   Y  d S )Nr]   r/   zcomplex datar   r   rk  )r5   r^   r  viewcomplexr   r   	TypeErrorr
   realr4   r   r   tr   r   r   test_kdtree_complex_data]  s   

"r  c                  C   sD  t jd t jdd} t| }|j}t|tjsJ |j| j	d ks&J |g}|r|
d}t|tjrSt|jts>J |jt|jksHJ t| |j |jj nIt|tjs[J t|jtscJ d|j  krp|jk ssJ  J t|jts{J t|jtsJ |j|jj|jj ksJ ||j ||j |s+d S d S )NrY   rW   rX   r   r   )r5   r^   r_   r  r
   r   r   Z	innernodechildrenr   popZleafnoder   r%  idxr   r  r  r  r=   r  r   r  r  r  )r   r  rootrw  rH   r   r   r   test_kdtree_tree_accessm  s,   
 r  c                  C   s   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s5J t|j
ts=J |j
dksDJ t|jt j| dd t|jt j| dd |j| u saJ d S )NrY   rW   rX   r   r   r]   r1   )r5   r^   r_   r  r
   r   r=   r   rH   r   r[   r   r  r>   r  Zaminr7   r  r   r   r   test_kdtree_attributes  s   r  kdtree_classc           
         s  t jd t ddd}t jdd}t jdd}t jd}t jd	}| |}| |}|j||d
||fd}|d d d f |d d d f  t jj|d d d d d f |d d d d d f  dd  fddtt	
dg|d d |D }	t||	 d S )NrY   r  r      )r  rw   -   )   rw   r  r   F)r  r  r   r1   c                    s*   g | ]\}}t | k  |k@  qS r   )r5   r6   )r'  Zprev_radiusZradiusr   r  r   r   r(    s    z8test_kdtree_count_neighbors_weighted.<locals>.<listcomp>r   )r5   r^   r_   r  r  r+  Zlinalgr   rI   r  chainr   )
r  r   ABZwAZwBZkdAZkdBZnABexpectr   r  r   $test_kdtree_count_neighbors_weighted  s    8r  c                  C   sp   g d} t | }t| t|tjgd d d f }tjtdd t| W d    d S 1 s1w   Y  d S )N)
r   r   ir  ii   rw   imust be finiter   )	r%  r5   r  r   nanr   r   r   r
   )valsrH   r7   r   r   r   test_kdtree_nan  s   $
"r  c                  C   s  t jd} | jdddd}t|ddd}dd	 td
D }tjtdd |	| W d    n1 s5w   Y  tjtdd |
|d W d    n1 sRw   Y  t j|dd d f< tjtdd t|ddd W d    n1 syw   Y  tjtdd t|ddd W d    n1 sw   Y  tjtdd t|ddd W d    n1 sw   Y  tjtdd t|ddd W d    d S 1 sw   Y  d S )Ni90  r  r   rQ   )r   lowhighFrF  c                 S   s   g | ]}t jqS r   )r5   r
  rv  r   r   r   r(    s    z2test_nonfinite_inputs_gh_18223.<locals>.<listcomp>rw   r	  r   r   r   T)r5   r^   Zdefault_rngr   r
   r   r   r   r   r4   r   r
  )rngZcoordsr  Z	bad_coordr   r   r   test_nonfinite_inputs_gh_18223  s.   "r  )ir  Znumpy.testingr   r   r   r   r   r   r   r   r  platformr	   numpyr5   Zscipy.spatialr
   r   r   r   Zscipy.spatial._ckdtreer   r   r  Zfixturer   r    r(   r)   rV   rf   rn   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r!  r8  r9  rV  rZ  r\  r`  ra  rb  rf  rn  rt  rx  rz  r  r  r  r  r  r  r  r  r  r  r  markZskipifr  r  r  r  r  r  r  r  r  r  Zparametrizer  r  r  r  r  r  r  r  r   r   r   r   <module>   s    
H-/"	G
!""

)..


