
    i                        d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ 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)IS64WASMc                 |    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     m/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/indexes/interval/test_interval_tree.pyskipif_32bitr      s1    
 KK4x0VWE<<U++          
   )paramsc                     | j                   S )zd
    Fixture to specify IntervalTree leaf_size parameter; to be used with the
    tree fixture.
    )r   )requests    r   	leaf_sizer      s     ==r      int64dtypeuint64float64      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	ej
                  j                  dg d	      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
                  j1                  ed()      ej
                  j                  dej4                   d+gd+d,gd-fej4                   d.gd.d/gd.fd.d/gd/ej4                  gd-fd+d,gd,ej4                  gd,fg      d0               Zy1)2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_indexer/   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*   )r/   r0   r   r.   r1   r2   )	r5   r   target_valuetarget_dtyper"   rightr#   r6   r7   s	            r   test_get_indexer_overflowz*TestIntervalTree.test_get_indexer_overflow9   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_uniquer/   r0   r1   r2   sort)r5   r#   indexermissingr6   r7   s         r   test_get_indexer_non_uniquez,TestIntervalTree.test_get_indexer_non_uniqueE   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*   )r/   r0   r   r@   r1   r2   )r5   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_overflowX   s    
 hh1vU3RXXq!fE5ReD%(<.=)-)D)DV)L&88RD7
##N4DE88QCv6
##N4DEr   r   )r   r   r   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*   )r/   r0   r   r   r3   r4   r.   r@   rA   r1   r2   )r5   r   r"   r#   rB   rC   r6   r7   s           r   test_duplicatesz TestIntervalTree.test_duplicatesh   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)   rM   )closedr   g      ?        )
r/   arangeastypeonesr   r1   r2   r.   closed_leftclosed_right)r5   rR   r   xfound	not_foundr#   r7   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   TrN   )r   r    r   r   r   r    )r   r   r    )r   r   r   Fr   r   orderc              #   2   K   | ]  }t        |        y wNlist.0rY   s     r   	<genexpr>zTestIntervalTree.<genexpr>        &O1tAw&O   c                 P    t        ||   ||   |      }|j                  }||u sJ y )NrR   r   is_overlapping)r5   rR   r]   r"   r<   r7   r#   r6   s           r   test_is_overlappingz$TestIntervalTree.test_is_overlapping   s3     DKufE$$!!!r   c              #   2   K   | ]  }t        |        y wr_   r`   rb   s     r   rd   zTestIntervalTree.<genexpr>   re   rf   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    rh   bothN)r/   rT   r   rj   )r5   rR   r]   r"   r<   r#   r6   r7   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 )Nrh   Fri   )r5   rR   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   )r/   rT   iinfor   maxr   rootpivot)r5   r"   r<   r#   r6   r7   s         r   test_construction_overflowz+TestIntervalTree.test_construction_overflow   s     ii73bhhrxx6H6L6L5MPS5SeD%( "((+///14!!!r   r'   r?   rS   g       g      c                 b    t        |dz  |dz        }|j                  j                  }||k(  sJ y )Nrs   )r   rw   rx   )r5   r"   r<   r7   r#   r6   s         r   !test_inf_bound_infinite_recursionz2TestIntervalTree.test_inf_bound_infinite_recursion   s3     D3J4!!!r   N)__name__
__module____qualname__r8   r   r   parametrizer=   rD   rK   rO   r   r\   r/   r0   nanr   rangerk   ro   rq   r   r   ry   xfailr   infr{    r   r   r%   r%   .   s   . [[+	')@A6	66& [[+	')@A
F	
F [[W&DE6 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" [[tJ/[[vvgs^c3Z-vvgt_tTlD1D\D"&&>3/3Z#rvv,		
" 0"r   r%   )	itertoolsr   numpyr/   r   pandas._libs.intervalr   pandas.compatr   r   pandas._testing_testingr1   r   fixturer   rT   r0   r   r#   r%   r   r   r   <module>r      s    "   .
 , Qa"=> ? 		!7#		!8$		!9%!Q1a(	:	==
b" b"r   