o
    �¨Êhˆ  ã                   @   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   úb/var/www/html/env/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 )Née   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(    	

üÿ
