B
    Z0d                 @   s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z dd Zejddd	d
gddd Zejededdgddd Zejejdddejdd
dejdd	dejd ddddejgd	dgddd ZG dd dZdS )    )permutationsN)IntervalTree)IS64c             C   s    t jjt dd}t j| |dS )z
    Skip parameters in a parametrize on 32bit systems. Specifically used
    here to skip leaf_size parameters related to GH 23440.
    z$GH 23440: int type mismatch on 32bit)reason)marks)pytestmarkskipifr   param)r
   r    r   b/var/www/html/venv/lib/python3.7/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bit   s    r   classint64float64uint64)scopeparamsc             C   s   | j S )N)r
   )requestr   r   r   dtype   s    r         
   )r   c             C   s   | j S )zd
    Fixture to specify IntervalTree leaf_size parameter; to be used with the
    tree fixture.
    )r
   )r   r   r   r   	leaf_size   s    r      )r         c             C   s   | j }t||d |dS )Nr   )r   )r
   r   )r   r   leftr   r   r   tree#   s    	r   c               @   s8  e Zd Zdd Zejdddgdd Zdd	 Zejdddgd
d Z	dd Z
ejdedededdgdd Zejdejdddgddedddgdfejdddgddedddgdfeddejgeddejgdfejdddgddedddgdfeddejgeddejgdfgejdd d! eedD d"d# Zejdd$d! eedD d%d& Zejd'ejg ddejg ddfejdgddejdgddfeejgeejgfeejgd eejgd fgd(d) Zejje d*d+d,d- Zd.S )/TestIntervalTreec          	   C   sf   | tdddg}tjdddgdd}t|| tjtd	d
 | tdg W d Q R X d S )Ng      ?g      @g      @r   r   intp)r   z6'indexer does not intersect a unique set of intervals')matchg      @)get_indexernparraytmassert_numpy_array_equalr   raisesKeyError)selfr   resultexpectedr   r   r   test_get_indexer1   s    z!TestIntervalTree.test_get_indexerz!dtype, target_value, target_dtype)r   l           r   )r   r    r   c       	      C   sf   t jddg|dt jddg|d }}t||}|t j|g|d}t jdgdd}t|| d S )Nr   r   )r   r   r    r!   )r$   r%   r   r#   r&   r'   )	r*   r   target_valuetarget_dtyper   rightr   r+   r,   r   r   r   test_get_indexer_overflow;   s
    &
z*TestIntervalTree.test_get_indexer_overflowc             C   s   | tdddg\}}|d d }tjdgdd}t|| t|dd }tjddgdd}t|| t|dd  }tjd	gdd}t|| |}tjd
gdd}t|| d S )Ng      ?g       @g      @r   r   r!   )r   r   r    r   )get_indexer_non_uniquer$   r%   r&   r'   sort)r*   r   indexermissingr+   r,   r   r   r   test_get_indexer_non_uniqueG   s    z,TestIntervalTree.test_get_indexer_non_uniquec             C   s   t jddg|dt jddg|d }}t||}t j|g|d}||\}}	t jdgdd}
t||
 t jdgdd}t|	| d S )Nr   r   )r   r   r   r    r!   )r$   r%   r   r2   r&   r'   )r*   r   r.   r/   r   r0   r   targetZresult_indexerZresult_missingZexpected_indexerZexpected_missingr   r   r   $test_get_indexer_non_unique_overflowZ   s    &
z5TestIntervalTree.test_get_indexer_non_unique_overflowc          	   C   s   t jdddg|d}t||d }tjtdd |t dg W d Q R X |t dg\}}t |}t jdddgdd}t	
|| |}t jg dd}t	
|| d S )	Nr   )r   r   z6'indexer does not intersect a unique set of intervals')r"   g      ?r   r!   )r$   r%   r   r   r(   r)   r#   r2   r3   r&   r'   )r*   r   r   r   r4   r5   r+   r,   r   r   r   test_duplicatesj   s    
z TestIntervalTree.test_duplicatesr   r   r   d   i'  c             C   s   t jddd}|d}dt d d}t||d ||d}t|||d  |jr`|n|}t|||d	  |j	r|n|}t|||d  d S )
Ni  r   )r   r!   r    g      ?)closedr   g      ?g        )
r$   arangeZastypeZonesr   r&   r'   r#   Zclosed_leftZclosed_right)r*   r;   r   xfound	not_foundr   r,   r   r   r   test_get_indexer_closed|   s    
z(TestIntervalTree.test_get_indexer_closedzleft, right, expectedr   r   r   )r   r   r   r   TForderc             c   s   | ]}t |V  qd S )N)list).0r=   r   r   r   	<genexpr>   s    zTestIntervalTree.<genexpr>c             C   s,   t || || |d}|j}||ks(td S )N)r;   )r   is_overlappingAssertionError)r*   r;   rA   r   r0   r,   r   r+   r   r   r   test_is_overlapping   s    z$TestIntervalTree.test_is_overlappingc             c   s   | ]}t |V  qd S )N)rB   )rC   r=   r   r   r   rD      s    c             C   sP   t jdddt dd }}t|| || |d}|j}|dk}||ksLtdS )	z*shared endpoints are marked as overlappingr   r   )r   r   r   )r;   ZbothN)r$   r<   r   rE   rF   )r*   r;   rA   r   r0   r   r+   r,   r   r   r   test_is_overlapping_endpoints   s
    z.TestIntervalTree.test_is_overlapping_endpointszleft, rightc             C   s    t |||d}|jdkstd S )N)r;   F)r   rE   rF   )r*   r;   r   r0   r   r   r   r   test_is_overlapping_trivial   s    z,TestIntervalTree.test_is_overlapping_trivialzGH 23440)r   c             C   s\   t jdddt t jjgd  }}t||}|jj}dt t jj d }||ksXtd S )Ne   r   )r   2   r   )	r$   r<   Ziinfor   maxr   rootZpivotrF   )r*   r   r0   r   r+   r,   r   r   r   test_construction_overflow   s
    $
z+TestIntervalTree.test_construction_overflowN)__name__
__module____qualname__r-   r   r   Zparametrizer1   r6   r8   r9   r   r@   r$   r%   nanr   rangerG   rH   rI   r	   r   rN   r   r   r   r   r   0   s6   

$$$$$(*(
0r   )	itertoolsr   numpyr$   r   Zpandas._libs.intervalr   Zpandas.compatr   Zpandas._testingZ_testingr&   r   Zfixturer   r   r<   r%   rR   r   r   r   r   r   r   <module>   s   	"	*