o
    ŀg                     @   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g d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   d/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bit   s   r   )int64float64uint64)paramsc                 C      | j S Nr   requestr   r   r   dtype   s   r         
   c                 C   r   )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   r   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g dddeg ddfejg dddeg ddfeddejgeddejgdfejg d ddeg d!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 d0d1d2d3 Zejdej d4gd4d5gd6fej d7gd7d8gd7fd7d8gd8ejgd6fd4d5gd5ejgd5fgd9d: Zd;S )<TestIntervalTreec                 C   sx   | tg d}tjg ddd}t|| tjtdd | tdg W d    d S 1 s5w   Y  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g d\}}|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 )	N)r$          @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"   targetresult_indexerresult_missingexpected_indexerexpected_missingr   r   r   $test_get_indexer_non_unique_overflowZ   s   &
z5TestIntervalTree.test_get_indexer_non_unique_overflowc                 C   s   t jg d|d}t||d }tjtdd |t dg W d    n1 s+w   Y  |t dg\}}t |}t jg ddd}t	
|| |}t jg dd}t	
|| d S )	N)r   r   r   r   r   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r0|n|}t|||d	  |j	rB|n|}t|||d  d S )
Ni  r   r   r'   r&   rF   )closedr   g      ?        )
r,   arangeastypeonesr   r.   r/   r+   closed_leftclosed_right)r2   rJ   r   xfound	not_foundr"   r4   r   r   r   test_get_indexer_closed|   s   
z(TestIntervalTree.test_get_indexer_closedzleft, right, expected)r   r   r    r   r   )r   r   r   TrG   )r   r    r   r   r   r    )r   r   r    )r   r   r   Fr   r   orderc                 c       | ]}t |V  qd S r   list.0rQ   r   r   r   	<genexpr>       zTestIntervalTree.<genexpr>c                 C   s,   t || || |d}|j}||u sJ d S )NrJ   r   is_overlapping)r2   rJ   rU   r!   r8   r4   r"   r3   r   r   r   test_is_overlapping   s   z$TestIntervalTree.test_is_overlappingc                 c   rV   r   rW   rY   r   r   r   r[      r\   c                 C   sP   t jdddt dd}}t|| || |d}|j}|dk}||u s&J dS )	z*shared endpoints are marked as overlappingr   r   r   r   r    r]   bothN)r,   rL   r   r_   )r2   rJ   rU   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u sJ d S )Nr]   Fr^   )r2   rJ   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s,J d S )Ne   r   r   2   r   )r,   rL   iinfor   maxr   rootpivot)r2   r!   r8   r"   r3   r4   r   r   r   test_construction_overflow   s
   $
z+TestIntervalTree.test_construction_overflowr$   r:   rK   g       g      c                 C   s*   t |d |d }|jj}||ksJ d S )Nrd   )r   rh   ri   )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	   parametrizer9   r?   rE   rH   r   rT   r,   r-   nanr   ranger`   rb   rc   r
   r   rj   infrk   r   r   r   r   r#   0   sf    



  $ $

	"
	

	r#   )	itertoolsr   numpyr,   r   pandas._libs.intervalr   pandas.compatr   pandas._testing_testingr.   r   fixturer   r   rL   r-   rp   r"   r#   r   r   r   r   <module>   s(    	


