
    Owg                        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y)    )permutationsN)IntervalTree)IS64c                 |    t         j                  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     g/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bitr      s1    
 KK4x0V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
                  j                  dddg      d        Zd Zej
                  j                  dddg      d        Z	d Z
ej
                  j                  d	 ed
       ed       ed      dg      d        Zej
                  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
                  j                  dd   e ed            D              d!               Zej
                  j                  dd"  e ed            D              d#        Zej
                  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
                  j+                  e d&'      d(        Zej
                  j                  dej0                   d)gd)d*gd+fej0                   d,gd,d-gd,fd,d-gd-ej0                  gd+fd)d*gd*ej0                  gd*fg      d.        Zy/)0TestIntervalTreec                 X   |j                  t        j                  g d            }t        j                  g dd      }t        j                  ||       t        j                  t        d      5  |j                  t        j                  dg             d d d        y # 1 sw Y   y xY w)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|    !!"((?";<88Jf5
##FH5]]T
 	. RXXse_-	. 	. 	.s   1&B  B)z!dtype, target_value, target_dtype)r   l           r   )r   r,   r   c                 *   t        j                  ddg|      t        j                  ddg|      }}t        ||      }|j                  t        j                  |g|            }t        j                  dgd      }t	        j
                  ||       y )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;   sv    
 hh1vU3RXXq!fE5ReD%(!!"((L>"NO88RD/
##FH5r   c                 6   |j                  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                  ||       y )	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6rxx7PQ!88QCv.
##FH51&88QF&1
##FH5%88RD/
##FH588QCv.
##FH5r   c                    t        j                  ddg|      t        j                  ddg|      }}t        ||      }t        j                  |g|      }|j                  |      \  }}	t        j                  dgd      }
t	        j
                  ||
       t        j                  dgd      }t	        j
                  |	|       y )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    
 hh1vU3RXXq!fE5ReD%(<.=)-)D)DV)L&88RD7
##N4DE88QCv6
##N4DEr   c                 4   t        j                  g d|      }t        ||dz         }t        j                  t
        d      5  |j                  t        j                  dg             d d d        |j                  t        j                  dg            \  }}t        j                  |      }t        j                  g dd      }t        j                  ||       |}t        j                  g d      }t        j                  ||       y # 1 sw Y   xY w)	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   s    xx	/D$(+]]T
 	. RXXse_-	.
  66rxxG!88IV4
##FH588Bf-
##FH5	. 	.s   &DDr   r   r   d   i'  c                    t        j                  dd      }|j                  d      }dt        j                  d      z  j                  d      }t	        ||dz   ||      }t        j                  ||j                  |dz                |j                  r|n|}t        j                  ||j                  |d	z                |j                  r|n|}t        j                  ||j                  |dz                y )
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     IId), "''$-'//7	Aq3wvK
##E4+;+;AH+EF ,,5)
##Hd.>.>q3w.GH --59
##Hd.>.>q3w.G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              #   2   K   | ]  }t        |        y wr   list.0r\   s     r   	<genexpr>zTestIntervalTree.<genexpr>        &O1tAw&O   c                 P    t        ||   ||   |      }|j                  }||u sJ y )NrU   r   is_overlapping)r8   rU   r`   r%   r?   r:   r&   r9   s           r   test_is_overlappingz$TestIntervalTree.test_is_overlapping   s3     DKufE$$!!!r   c              #   2   K   | ]  }t        |        y wr   rb   rd   s     r   rf   zTestIntervalTree.<genexpr>   rg   rh   c                     t        j                  dd      t        j                  dd      }}t        ||   ||   |      }|j                  }|dk(  }||u sJ y)	z*shared endpoints are marked as overlappingr"   r   r!   r   r#   rj   bothN)r2   rW   r   rl   )r8   rU   r`   r%   r?   r&   r9   r:   s           r   test_is_overlapping_endpointsz.TestIntervalTree.test_is_overlapping_endpoints   s[     ii1299Q?eDKufE$$V#!!!r   zleft, rightc                 @    t        |||      }|j                  du sJ y )Nrj   Frk   )r8   rU   r%   r?   r&   s        r   test_is_overlapping_trivialz,TestIntervalTree.test_is_overlapping_trivial   s&     D%7""e+++r   zGH 23440r   c                 L   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 y )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     ii73bhhrxx6H6L6L5MPS5SeD%( "((+///14!!!r   r*   rB   rV   g       g      c                 b    t        |dz  |dz        }|j                  j                  }||k(  sJ y )Nru   )r   ry   rz   )r8   r%   r?   r:   r&   r9   s         r   !test_inf_bound_infinite_recursionz2TestIntervalTree.test_inf_bound_infinite_recursion   s3     D3J4!!!r   N)__name__
__module____qualname__r;   r
   r   parametrizer@   rG   rN   rR   r   r_   r2   r3   nanr   rangerm   rq   rs   r   r   r{   infr}    r   r   r(   r(   0   s   . [[+	')@A6	66& [[+	')@A
F	
F6$ [[l1o|B'7c9JERII [[RXXiw/)1DdKRXXiw/)1DdKRXXq!RVVn%xrxxArvv'?FRXXiw/)1DeLRXXq!RVVn%xrxxArvv'?G	
	 [[W&OU1X8N&OP" Q	" [[W&OU1X8N&OP" Q" [[RXXb(("((2W*EFRXXqc)8288QCw+GHRXXrvvh266(!34RXXrvvhl#XRXXrvvhl%;<		
,,
 [[D4" 5" [[vvgs^c3Z-vvgt_tTlD1D\D"&&>3/3Z#rvv,		
""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6 7 Qa"=> ? 		!7#		!8$		!9%!Q1a(	:	==
`" `"r   