U
    +if                     @   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   c/home/mars/bis/venv/lib/python3.8/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 5 Q R X d S )N      ?g      @      @r   r!   intpr   6'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/   r0   )	r3   r   target_valuetarget_dtyper"   rightr#   r4   r5   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 )Nr%   g       @r&   r   r   r(   r   r    r'   r   )get_indexer_non_uniquer-   r.   r/   r0   sort)r3   r#   indexermissingr4   r5   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   r;   r/   r0   )r3   r   r7   r8   r"   r9   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 5 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   r)   r*         ?r   r(   )r-   r.   r   r   r1   r2   r,   r;   r<   r/   r0   )r3   r   r"   r#   r=   r>   r4   r5   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'   rB   )closedr   g      ?g        )
r-   arangeZastypeZonesr   r/   r0   r,   Zclosed_leftZclosed_right)r3   rE   r   xfound	not_foundr#   r5   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 r   list.0rG   r   r   r   	<genexpr>   s     zTestIntervalTree.<genexpr>c                 C   s,   t || || |d}|j}||ks(td S )NrE   r   is_overlappingAssertionError)r3   rE   rK   r"   r9   r5   r#   r4   r   r   r   test_is_overlapping   s    z$TestIntervalTree.test_is_overlappingc                 c   s   | ]}t |V  qd S r   rL   rN   r   r   r   rP      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!   rQ   ZbothN)r-   rF   r   rS   rT   )r3   rE   rK   r"   r9   r#   r4   r5   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 )NrQ   FrR   )r3   rE   r"   r9   r#   r   r   r   test_is_overlapping_trivial   s    z,TestIntervalTree.test_is_overlapping_trivialzGH 23440r   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-   rF   Ziinfor   maxr   rootZpivotrT   )r3   r"   r9   r#   r4   r5   r   r   r   test_construction_overflow   s
    $
z+TestIntervalTree.test_construction_overflowN)__name__
__module____qualname__r6   r   r	   Zparametrizer:   r?   rA   rC   r   rJ   r-   r.   nanr   rangerU   rV   rW   r
   r   r\   r   r   r   r   r$   0   sT   


 
$$$$$

	"	
r$   )	itertoolsr   numpyr-   r   Zpandas._libs.intervalr   Zpandas.compatr   Zpandas._testingZ_testingr/   r   Zfixturer   r   rF   r.   r`   r#   r$   r   r   r   r   <module>   s&   	


