
    Eg                        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 Z ej        g d          d             Z ej         ed	           ed
          dg          d             Z ej         ej        dd           ej        dd           ej        dd           ej        d d	d
ddej        gd          g          d             Z G d d          ZdS )    )permutationsN)IntervalTree)IS64c                 |    t           j                            t           d          }t          j        | |          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	   s     e/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bitr      s6    
 K4x0VWWE<U++++    )int64float64uint64)paramsc                     | j         S Nr   requests    r   dtyper      s
    =r         
   c                     | j         S )zd
    Fixture to specify IntervalTree leaf_size parameter; to be used with the
    tree fixture.
    r   r   s    r   	leaf_sizer      s     =r      r   r   r   r         c                 :    | j         }t          ||dz   |          S )Nr   )r   )r   r   )r   r   lefts      r   treer&   #   s$     =DdQh)<<<<r   c                      e Zd Zd Zej                            dddg          d             Zd Zej                            dddg          d             Z	d Z
ej                            d	 ed
           ed           ed          dg          d             Zej                            d ej        g dd           ej        g d          df ej        g dd           ej        g d          df ej        dd
ej        g           ej        ddej        g          df ej        g dd           ej        g d          df ej        ddej        g           ej        d
dej        g          dfg          ej                            dd   e ed                    D                       d!                         Zej                            dd"  e ed                    D                       d#             Zej                            d$ ej        g d           ej        g d          f ej        dgd           ej        d
gd          f ej        ej        g           ej        ej        g          f ej        ej        gdz             ej        ej        gdz            fg          d%             Zej                            e d&'          d(             Zej                            e d&'          ej                            dej         d)gd)d*gd+fej         d,gd,d-gd,fd,d-gd-ej        gd+fd)d*gd*ej        gd*fg          d.                         Zd/S )0TestIntervalTreec                 j   |                     t          j        g d                    }t          j        g dd          }t          j        ||           t          j        t          d          5  |                     t          j        dg                     d d d            d S # 1 swxY w 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expecteds       r   test_get_indexerz!TestIntervalTree.test_get_indexer1   s    !!"(???";";<<8JJJf555
#FH555]T
 
 
 	. 	. RXse__---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   2)B((B,/B,z!dtype, target_value, target_dtype)r   l           r   )r   r,   r   c                 2   t          j        ddg|          t          j        ddg|          }}t          ||          }|                    t          j        |g|                    }t          j        dgd          }t	          j        ||           d S )Nr   r   r!   r   r,   r-   )r2   r3   r   r1   r4   r5   )	r8   r   target_valuetarget_dtyper%   rightr&   r9   r:   s	            r   test_get_indexer_overflowz*TestIntervalTree.test_get_indexer_overflow;   s    
 h1vU333RXq!fE5R5R5ReD%((!!"(L>"N"N"NOO8RD///
#FH55555r   c                 H   |                     t          j        g d                    \  }}|d d         }t          j        dgd          }t          j        ||           t          j        |dd                   }t          j        ddgd          }t          j        ||           t          j        |dd                    }t          j        dgd          }t          j        ||           |}t          j        dgd          }t          j        ||           d S )	N)r*          @r+   r   r   r-   r!   r"   r,   r   )get_indexer_non_uniquer2   r3   r4   r5   sort)r8   r&   indexermissingr9   r:   s         r   test_get_indexer_non_uniquez,TestIntervalTree.test_get_indexer_non_uniqueG   s   66rx7P7PQQ!8QCv...
#FH5551&&8QF&111
#FH555%%8RD///
#FH5558QCv...
#FH55555r   c                    t          j        ddg|          t          j        ddg|          }}t          ||          }t          j        |g|          }|                    |          \  }}	t          j        dgd          }
t	          j        ||
           t          j        dgd          }t	          j        |	|           d S )Nr   r   r!   r   r"   r,   r-   )r2   r3   r   rC   r4   r5   )r8   r   r=   r>   r%   r?   r&   targetresult_indexerresult_missingexpected_indexerexpected_missings               r   $test_get_indexer_non_unique_overflowz5TestIntervalTree.test_get_indexer_non_unique_overflowZ   s    
 h1vU333RXq!fE5R5R5ReD%((<.===)-)D)DV)L)L&8RD777
#N4DEEE8QCv666
#N4DEEEEEr   c                 D   t          j        g d|          }t          ||dz             }t          j        t
          d          5  |                    t          j        dg                     d d d            n# 1 swxY w Y   |                    t          j        dg                    \  }}t          j        |          }t          j        g dd          }t          j
        ||           |}t          j        g d          }t          j
        ||           d S )	N)r   r   r   r!   r   r.   r/         ?r   r   r   r-   )r2   r3   r   r
   r6   r7   r1   rC   rD   r4   r5   )r8   r   r%   r&   rE   rF   r9   r:   s           r   test_duplicatesz TestIntervalTree.test_duplicatesj   sO   x			///D$(++]T
 
 
 	. 	. RXse__---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
  66rxGG!!8IIIV444
#FH5558Bf---
#FH55555s   )A<<B B r   r   r   d   i'  c                 
   t          j        dd          }|                    d          }dt          j        d          z                      d          }t	          ||dz   ||          }t          j        ||                    |dz                        |j        r|n|}t          j        ||                    |d	z                        |j	        r|n|}t          j        ||                    |dz                        d S )
Ni  r   r!   r-   r,   rP   )closedr   g      ?        )
r2   arangeastypeonesr   r4   r5   r1   closed_leftclosed_right)r8   rU   r   xfound	not_foundr&   r:   s           r   test_get_indexer_closedz(TestIntervalTree.test_get_indexer_closed|   s     Id),,,  "'$--'//77	Aq3wvKKK
#E4+;+;AH+E+EFFF ,;55)
#Hd.>.>q3w.G.GHHH -<559
#Hd.>.>q3w.G.GHHHHHr   zleft, right, expected)r   r   r#   r   r!   )r   r"   r    TrQ   )r    r#   r"   r   r    r#   )r   r   r#   )r   r"   r    Fr   r"   orderc              #   4   K   | ]}t          |          V  d S r   list.0r\   s     r   	<genexpr>zTestIntervalTree.<genexpr>   (      &O&O1tAww&O&O&O&O&O&Or   c                 \    t          ||         ||         |          }|j        }||u sJ d S )NrU   r   is_overlapping)r8   rU   r`   r%   r?   r:   r&   r9   s           r   test_is_overlappingz$TestIntervalTree.test_is_overlapping   s?     DKufEEE$!!!!!!r   c              #   4   K   | ]}t          |          V  d S r   rb   rd   s     r   rf   zTestIntervalTree.<genexpr>   rg   r   c                     t          j        dd          t          j        dd          }}t          ||         ||         |          }|j        }|dk    }||u sJ dS )	z*shared endpoints are marked as overlappingr"   r   r!   r   r#   ri   bothN)r2   rW   r   rk   )r8   rU   r`   r%   r?   r&   r9   r:   s           r   test_is_overlapping_endpointsz.TestIntervalTree.test_is_overlapping_endpoints   sk     i11129Q??eDKufEEE$V#!!!!!!r   zleft, rightc                 @    t          |||          }|j        du sJ d S )Nri   Frj   )r8   rU   r%   r?   r&   s        r   test_is_overlapping_trivialz,TestIntervalTree.test_is_overlapping_trivial   s2     D%777"e++++++r   zGH 23440r   c                    t          j        dd          t          j        t           j                  j        gdz  }}t          ||          }|j        j        }dt          j        t           j                  j        z   dz  }||k    sJ d S )Ne   r   r!   2   r   )r2   rW   iinfor   maxr   rootpivot)r8   r%   r?   r&   r9   r:   s         r   test_construction_overflowz+TestIntervalTree.test_construction_overflow   s     i7333bhrx6H6H6L5MPS5SeD%(( "(++//14!!!!!!r   r*   rB   rV   g       g      c                 Z    t          |dz  |dz            }|j        j        }||k    sJ d S )Nrt   )r   rx   ry   )r8   r%   r?   r:   r&   r9   s         r   !test_inf_bound_infinite_recursionz2TestIntervalTree.test_inf_bound_infinite_recursion   s;     D3J44!!!!!!r   N)__name__
__module____qualname__r;   r
   r   parametrizer@   rG   rN   rR   r   r_   r2   r3   nanr   rangerl   rp   rr   r   r   rz   xfailinfr|    r   r   r(   r(   0   s       . . . [+	')@A 6 6	 66 6 6& [+	')@A 
F 
F	 
F6 6 6$ [ll1oo||B'7'7c9J9JER I I I [RXiiiw///)))1D1DdKRXiiiw///)))1D1DdKRXq!RVn%%xrxArv'?'?FRXiiiw///)))1D1DeLRXq!RVn%%xrxArv'?'?G	
	 	 [W&O&OUU1XX8N8N&O&O&OPP" " QP	 	" [W&O&OUU1XX8N8N&O&O&OPP" " QP" [RXb(((("(2W*E*E*EFRXqc)))828QCw+G+G+GHRXrvh26(!3!34RXrvhl##XRXrvhl%;%;<		
 , , ,
 [D44" " 54" [4x
33[vgs^c3Z-vgt_tTlD1D\D"&>3/3Z#rv,		
 " "  43" " "r   r(   )	itertoolsr   numpyr2   r
   pandas._libs.intervalr   pandas.compatr   pandas._testing_testingr4   r   fixturer   r   rW   r3   r   r&   r(   r   r   r   <module>r      s   " " " " " "      . . . . . .            , , , 555666  76 Qa"=>>>  ?> 	!7###	!8$$$	!9%%%!Q1a(	:::	  = = =
a" a" a" a" a" a" a" a" a" a"r   