o
    i                     @   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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   k/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bit   s   r   class)int64float64uint64)scopeparamsc                 C      | j S Nr   requestr   r   r   dtype   s   r         
   )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je d0d1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-   r0   r1   )	r4   r   target_valuetarget_dtyper#   rightr$   r5   r6   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/   r0   r1   sort)r4   r$   indexermissingr5   r6   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=   r0   r1   )r4   r   r8   r9   r#   r:   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   r2   r3   r-   r=   r>   r0   r1   )r4   r   r#   r$   r?   r@   r5   r6   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(   rH   )closedr   g      ?        )
r.   arangeastypeonesr   r0   r1   r-   closed_leftclosed_right)r4   rL   r   xfound	not_foundr$   r6   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   TrI   )r   r"   r!   r   r   r"   )r   r   r"   )r   r!   r   Fr   r!   orderc                 c       | ]}t |V  qd S r   list.0rS   r   r   r   	<genexpr>       zTestIntervalTree.<genexpr>c                 C   s,   t || || |d}|j}||u sJ d S )NrL   r   is_overlapping)r4   rL   rW   r#   r:   r6   r$   r5   r   r   r   test_is_overlapping   s   z$TestIntervalTree.test_is_overlappingc                 c   rX   r   rY   r[   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.   rN   r   ra   )r4   rL   rW   r#   r:   r$   r5   r6   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`   )r4   rL   r#   r:   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.   rN   iinfor   maxr   rootpivot)r4   r#   r:   r$   r5   r6   r   r   r   test_construction_overflow   s
   $
z+TestIntervalTree.test_construction_overflowr&   r<   rM   g       g      c                 C   s*   t |d |d }|jj}||ksJ d S )Nrf   )r   rj   rk   )r4   r#   r:   r6   r$   r5   r   r   r   !test_inf_bound_infinite_recursion   s   z2TestIntervalTree.test_inf_bound_infinite_recursionN)__name__
__module____qualname__r7   r   r	   parametrizer;   rA   rG   rJ   r   rV   r.   r/   nanr   rangerb   rd   re   r
   r   rl   xfailinfrm   r   r   r   r   r%   0   sh    



  $ $

	"
	

	r%   )	itertoolsr   numpyr.   r   pandas._libs.intervalr   pandas.compatr   pandas._testing_testingr0   r   fixturer   r   rN   r/   rr   r$   r%   r   r   r   r   <module>   s(    	


