a
    Pf                     @   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   i/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bit   s    r   )int64float64uint64)paramsc                 C   s   | j S Nr   requestr   r   r   dtype   s    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   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   sv   | tg d}tjg ddd}t|| tjtdd" | tdg W d    n1 sh0    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.   )	r1   r   target_valuetarget_dtyper    rightr!   r2   r3   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)r1   r!   indexermissingr2   r3   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.   )r1   r   r5   r6   r    r7   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g d|d}t||d }tjtdd" |t dg W d    n1 sV0    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   r/   r0   r*   r:   r;   r-   r.   )r1   r   r    r!   r<   r=   r2   r3   r   r   r   test_duplicatesj   s    0
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%   rA   )closedr   g      ?        )
r+   arangeZastypeZonesr   r-   r.   r*   Zclosed_leftZclosed_right)r1   rE   r   xfound	not_foundr!   r3   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   TrB   )r   r   r   r   r   r   )r   r   r   )r   r   r   Fr   r   orderc                 c   s   | ]}t |V  qd S r   list.0rH   r   r   r   	<genexpr>       zTestIntervalTree.<genexpr>c                 C   s,   t || || |d}|j}||u s(J d S )NrE   r   is_overlapping)r1   rE   rL   r    r7   r3   r!   r2   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      rR   c                 C   sP   t jdddt dd }}t|| || |d}|j}|dk}||u sLJ dS )	z*shared endpoints are marked as overlappingr   r   r   r   r   rS   ZbothN)r+   rG   r   rU   )r1   rE   rL   r    r7   r!   r2   r3   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 )NrS   FrT   )r1   rE   r    r7   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sXJ d S )Ne   r   r   2   r   )r+   rG   Ziinfor   maxr   rootpivot)r1   r    r7   r!   r2   r3   r   r   r   test_construction_overflow   s
    $
z+TestIntervalTree.test_construction_overflowr#   r9   rF   g       g      c                 C   s*   t |d |d }|jj}||ks&J d S )NrY   )r   r\   r]   )r1   r    r7   r3   r!   r2   r   r   r   !test_inf_bound_infinite_recursion   s    z2TestIntervalTree.test_inf_bound_infinite_recursionN)__name__
__module____qualname__r4   r   r	   Zparametrizer8   r>   r@   rC   r   rK   r+   r,   nanr   rangerV   rW   rX   r
   r   r^   Zxfailinfr_   r   r   r   r   r"   0   sf   



  $ $

	"	


	r"   )	itertoolsr   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&   	


