U
    c                     @   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   T/tmp/pip-unpacked-wheel-g7fro6k3/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bit   s    r   classint64float64uint64)Z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                   @   s  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ejje d*d+ejdej d.gd.d/gd0fej d1gd1d2gd1fd1d2gd2ejgd0fd.d/gd/ejgd/fgd3d4 Zd5S )6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.   r/   )	r2   r   target_valuetarget_dtyper!   rightr"   r3   r4   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$          @r%   r   r   r'   r   r   r&   r   )get_indexer_non_uniquer,   r-   r.   r/   sort)r2   r"   indexermissingr3   r4   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.   r/   )r2   r   r6   r7   r!   r8   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   r0   r1   r+   r;   r<   r.   r/   )r2   r   r!   r"   r=   r>   r3   r4   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      ?        )
r,   arangeZastypeZonesr   r.   r/   r+   Zclosed_leftZclosed_right)r2   rE   r   xfound	not_foundr"   r4   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.0rH   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)r2   rE   rL   r!   r8   r4   r"   r3   r   r   r   test_is_overlapping   s    z$TestIntervalTree.test_is_overlappingc                 c   s   | ]}t |V  qd S r   rM   rO   r   r   r   rQ      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    rR   ZbothN)r,   rG   r   rT   rU   )r2   rE   rL   r!   r8   r"   r3   r4   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 )NrR   FrS   )r2   rE   r!   r8   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,   rG   Ziinfor   maxr   rootpivotrU   )r2   r!   r8   r"   r3   r4   r   r   r   test_construction_overflow   s
    $
z+TestIntervalTree.test_construction_overflowr$   r:   rF   g       g      c                 C   s*   t |d |d }|jj}||ks&td S )NrY   )r   r\   r]   rU   )r2   r!   r8   r4   r"   r3   r   r   r   !test_inf_bound_infinite_recursion   s    z2TestIntervalTree.test_inf_bound_infinite_recursionN)__name__
__module____qualname__r5   r   r	   Zparametrizer9   r?   rA   rC   r   rK   r,   r-   nanr   rangerV   rW   rX   r
   r   r^   Zxfailinfr_   r   r   r   r   r#   0   sh   


 
$$$$$

	"	


	r#   )	itertoolsr   Znumpyr,   r   Zpandas._libs.intervalr   Zpandas.compatr   Zpandas._testingZ_testingr.   r   Zfixturer   r   rG   r-   rc   r"   r#   r   r   r   r   <module>   s&   	


