+
    xȇi              	         R t ^ RIHt ^ RIHtHt ^ RIHtHtH	t	H
t
 ^ RIt^ RIHt ^ RIHtHtHt ^ RIHtHtHtHtHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RI H!t!H"t"H#t#H$t$H%t%H&t& ^ RI'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1 ^ RI2H3t3H4t4 ^ RI5H6t6 ^ RI7H8t8 ^ RI9H:t: ^ RI;H<t< ^ RI=H>u H?t@ ^ RIAHBtB ^ RICHDtDHEtEHFtF ^ RIGHHtHHItI ^ RIJHKtKHLtL ^ RIMHNtN ^ RIOHPtPHQtQ ]'       d   ^ RIRHStS ^ RITHUtUHVtVHWtWHXtX R tYR tZR t[]L! RR.]<RR 7      ]L! . R-O]<4      ]L! R!R".]<RR#7      ]! R$4       ! R% R&]K4      4       4       4       4       t\R' R( lt]R) R* lt^]! R$4      R.R+ R, ll4       t_R# )/zdefine the IntervalIndex)annotations)lelt)TYPE_CHECKINGAnyLiteralSelfN)lib)IntervalIntervalMixinIntervalTree)
BaseOffsetPeriod	Timedelta	Timestamp	to_offset)InvalidIndexError)cache_readonly
set_module)rewrite_exception)find_common_typeinfer_dtype_from_scalarmaybe_box_datetimelikemaybe_downcast_numericmaybe_unbox_numpy_scalarmaybe_upcast_numeric_to_64bit)
ensure_platform_intis_float_dtype
is_integeris_integer_dtypeis_list_like	is_numberis_object_dtype	is_scalaris_string_dtypepandas_dtype)DatetimeTZDtypeIntervalDtype)is_valid_na_for_dtypeunique)validate_periods)IntervalArray)is_valid_positional_slice)Indexensure_indexmaybe_extract_name)DatetimeIndex
date_range)ExtensionIndexinherit_names)
MultiIndex)TimedeltaIndextimedelta_range)Hashable)DtypeDtypeObjIntervalClosedTypenptc                   \        V R \        V 4      4      p\        V \        \        34      '       d   Rp\        V4      p\        P                  ! VR4      '       g   \        V\        4      '       d   V \        P                  ! ^R4      ,           # \        V4      '       d
   V ^,           # \        V4      '       d&   \        P                  ! V \        P                  4      # \        R\        V 4      : 24      hdtypezdatetime64[ns]mMnsz%cannot determine next label for type getattrtype
isinstancer   r   r%   r	   is_np_dtyper&   nptimedelta64r   r   	nextafterinf	TypeErrorlabelr?   s   & l/Users/max/.openclaw/workspace/postharvest/venv/lib/python3.14/site-packages/pandas/core/indexes/interval.py_get_next_labelrO   e   s    E7DK0E%)Y/00 E
ud##z%'I'Ir~~a...	%	 	 qy			||E266**?UOPP    c                   \        V R \        V 4      4      p\        V \        \        34      '       d   Rp\        V4      p\        P                  ! VR4      '       g   \        V\        4      '       d   V \        P                  ! ^R4      ,
          # \        V4      '       d
   V ^,
          # \        V4      '       d'   \        P                  ! V \        P                  ) 4      # \        R\        V 4      : 24      hr>   rB   rL   s   & rN   _get_prev_labelrR   v   s    E7DK0E%)Y/00 E
ud##z%'I'Ir~~a...	%	 	 qy			||EBFF7++?UOPPrP   c                &    V P                   ! R/ VB # )zj
This is called upon unpickling, rather than the default which doesn't have
arguments and breaks __new__.
 )from_arrays)clsds   &&rN   _new_IntervalIndexrX      s    
 ??QrP   
set_closed	to_tuplesT)wrapis_non_overlapping_monotonicclosed)cachepandasc                    a  ] tR t^t$ RtRtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   Rt]t	RVR R llt
]RWR R ll4       t]RWR R ll4       t]RWR R ll4       t]R R l4       tR R ltR R lt]R R l4       tR t]R  R! l4       tRXR" R# llt]R$ R% l4       t]R& R' l4       t]R( R) l4       tR* R+ ltR, tRYR- R. lltR/ R0 ltRZR1 R2 lltR3 R4 lt R5 R6 lt!R7 R8 lt"]R9 R: l4       t#R;t$R< V 3R= llt%]R> R? l4       t&R@ RA lt'RB RC lt(]RD RE l4       t)]RF RG l4       t*]RH RI l4       t+]RJ RK l4       t,RXRL RM llt-RN RO lt.RP RQ lt/RR RS lt0RT t1RUt2V ;t3# )[IntervalIndexa  
Immutable index of intervals that are closed on the same side.

Parameters
----------
data : array-like (1-dimensional)
    Array-like (ndarray, :class:`DateTimeArray`, :class:`TimeDeltaArray`) containing
    Interval objects from which to build the IntervalIndex.
closed : {'left', 'right', 'both', 'neither'}, default 'right'
    Whether the intervals are closed on the left-side, right-side, both or
    neither.
dtype : dtype or None, default None
    If None, dtype will be inferred.
copy : bool, default None
    Whether to copy input data, only relevant for array, Series, and Index
    inputs (for other input, e.g. a list, a new array is created anyway).
    Defaults to True for array input and False for Index/Series.
    Set to False to avoid copying array input at your own risk (if you
    know the input data won't be modified elsewhere).
    Set to True to force copying Series/Index input up front.
name : object, optional
     Name to be stored in the index.
verify_integrity : bool, default True
    Verify that the IntervalIndex is valid.

Attributes
----------
left
right
closed
mid
length
is_empty
is_non_overlapping_monotonic
is_overlapping
values

Methods
-------
from_arrays
from_tuples
from_breaks
contains
overlaps
set_closed
to_tuples

See Also
--------
Index : The base pandas Index type.
Interval : A bounded slice-like interval; the elements of an IntervalIndex.
interval_range : Function to create a fixed frequency IntervalIndex.
cut : Bin values into discrete Intervals.
qcut : Bin values into equal-sized Intervals based on rank or sample quantiles.

Notes
-----
See the `user guide
<https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html#intervalindex>`__
for more.

Examples
--------
A new ``IntervalIndex`` is typically constructed using
:func:`interval_range`:

>>> pd.interval_range(start=0, end=5)
IntervalIndex([(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]],
              dtype='interval[int64, right]')

It may also be constructed using one of the constructor
methods: :meth:`IntervalIndex.from_arrays`,
:meth:`IntervalIndex.from_breaks`, and :meth:`IntervalIndex.from_tuples`.

See further examples in the doc strings of ``interval_range`` and the
mentioned constructor methods.
intervalindexr;   r]   boolr\   closed_leftclosed_right	open_left
open_rightr,   _data_valuesFc               0    V ^8  d   QhRRRRRRRRR	R
RR/# )   r]   IntervalClosedType | Noner?   Dtype | Nonecopyzbool | NonenameHashable | Noneverify_integrityrc   returnr   rT   )formats   "rN   __annotate__IntervalIndex.__annotate__   sH     , , *, 	,
 , , , 
,rP   c           
     	    \        WQV 4      pV P                  WV4      w  r\        R V P                  4      ;_uu_ 4        \	        VVVVVR7      pRRR4       V P                  XV4      #   + '       g   i     L"; i)r,   )r]   rn   r?   rq   N)r0   _maybe_copy_array_inputr   __name__r,   _simple_new)rV   datar]   r?   rn   ro   rq   arrays   &&&&&&& rN   __new__IntervalIndex.__new__   sq     "$c2 00UC
==!!1E > ud++ >=s   A**A:	c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rk   r]   rl   ro   rp   rn   rc   r?   rm   rr   ra   rT   )rs   s   "rN   rt   ru     s>     -1 -1 *-1 	-1
 -1 -1 
-1rP   c           	         \        RV P                  4      ;_uu_ 4        \        P                  ! WWER7      pRRR4       V P	                  XVR7      #   + '       g   i     L#; i)a|  
Construct an IntervalIndex from an array of splits.

Parameters
----------
breaks : array-like (1-dimensional)
    Left and right bounds for each interval.
closed : {'left', 'right', 'both', 'neither'}, default 'right'
    Whether the intervals are closed on the left-side, right-side, both
    or neither.
name : str, optional
    Name of the resulting IntervalIndex.
copy : bool, default False
    Copy the data.
dtype : dtype or None, default None
    If None, dtype will be inferred.

Returns
-------
IntervalIndex

See Also
--------
interval_range : Function to create a fixed frequency IntervalIndex.
IntervalIndex.from_arrays : Construct from a left and right array.
IntervalIndex.from_tuples : Construct from a sequence of tuples.

Examples
--------
>>> pd.IntervalIndex.from_breaks([0, 1, 2, 3])
IntervalIndex([(0, 1], (1, 2], (2, 3]],
              dtype='interval[int64, right]')
r,   r]   rn   r?   Nro   )r   rx   r,   from_breaksry   )rV   breaksr]   ro   rn   r?   r{   s   &&&&&& rN   r   IntervalIndex.from_breaks  sN    T ==!--DE > u400	 >=   AA#	c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# rk   r]   r;   ro   rp   rn   rc   r?   rm   rr   ra   rT   )rs   s   "rN   rt   ru   J  sE     A1 A1 #	A1
 A1 A1 A1 
A1rP   c           
         \        RV P                  4      ;_uu_ 4        \        P                  ! WW5VR7      pRRR4       V P	                  XVR7      #   + '       g   i     L#; i)a  
Construct from two arrays defining the left and right bounds.

Parameters
----------
left : array-like (1-dimensional)
    Left bounds for each interval.
right : array-like (1-dimensional)
    Right bounds for each interval.
closed : {'left', 'right', 'both', 'neither'}, default 'right'
    Whether the intervals are closed on the left-side, right-side, both
    or neither.
name : str, optional
    Name of the resulting IntervalIndex.
copy : bool, default False
    Copy the data.
dtype : dtype, optional
    If None, dtype will be inferred.

Returns
-------
IntervalIndex

Raises
------
ValueError
    When a value is missing in only one of `left` or `right`.
    When a value in `left` is greater than the corresponding value
    in `right`.

See Also
--------
interval_range : Function to create a fixed frequency IntervalIndex.
IntervalIndex.from_breaks : Construct an IntervalIndex from an array of
    splits.
IntervalIndex.from_tuples : Construct an IntervalIndex from an
    array-like of tuples.

Notes
-----
Each element of `left` must be less than or equal to the `right`
element at the same position. If an element is missing, it must be
missing in both `left` and `right`. A TypeError is raised when
using an unsupported type for `left` or `right`. At the moment,
'category', 'object', and 'string' subtypes are not supported.

Examples
--------
>>> pd.IntervalIndex.from_arrays([0, 1, 2], [1, 2, 3])
IntervalIndex([(0, 1], (1, 2], (2, 3]],
              dtype='interval[int64, right]')
r,   )rn   r?   Nr   )r   rx   r,   rU   ry   )rV   leftrightr]   ro   rn   r?   r{   s   &&&&&&& rN   rU   IntervalIndex.from_arraysI  sP    | ==!--VeE > u400	 >=s   AA$	c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# r   rT   )rs   s   "rN   rt   ru     s>     -/ -/ #-/ 	-/
 -/ -/ 
-/rP   c           	         \        RV P                  4      ;_uu_ 4        \        P                  ! WWER7      pRRR4       V P	                  XVR7      #   + '       g   i     L#; i)a  
Construct an IntervalIndex from an array-like of tuples.

Parameters
----------
data : array-like (1-dimensional)
    Array of tuples.
closed : {'left', 'right', 'both', 'neither'}, default 'right'
    Whether the intervals are closed on the left-side, right-side, both
    or neither.
name : str, optional
    Name of the resulting IntervalIndex.
copy : bool, default False
    By-default copy the data, this is compat only and ignored.
dtype : dtype or None, default None
    If None, dtype will be inferred.

Returns
-------
IntervalIndex

See Also
--------
interval_range : Function to create a fixed frequency IntervalIndex.
IntervalIndex.from_arrays : Construct an IntervalIndex from a left and
                            right array.
IntervalIndex.from_breaks : Construct an IntervalIndex from an array of
                            splits.

Examples
--------
>>> pd.IntervalIndex.from_tuples([(0, 1), (1, 2)])
IntervalIndex([(0, 1], (1, 2]],
               dtype='interval[int64, right]')
r,   r   Nr   )r   rx   r,   from_tuplesry   )rV   rz   r]   ro   rn   r?   arrs   &&&&&& rN   r   IntervalIndex.from_tuples  sI    X ==++DdXC >s.. >=r   c                   V ^8  d   QhRR/# )rk   rr   r   rT   )rs   s   "rN   rt   ru     s     = = =rP   c                	    V P                  V P                  4      p\        V4      pV P                  V P                  4      p\        V4      p\	        WV P
                  R 7      # )r]   )_maybe_convert_i8r   r   r   r   r]   )selfr   r   s   &  rN   _engineIntervalIndex._engine  sQ     %%dii0,T2&&tzz2-e4D<<rP   c                    V ^8  d   QhRRRR/# )rk   keyr   rr   rc   rT   )rs   s   "rN   rt   ru     s        rP   c                    \        V4       \        V\        4      '       g*   \        WP                  4      '       d   V P
                  # R#  V P                  V4       R#   \         d     R# i ; i)z
return a boolean if this key is IN the index
We *only* accept an Interval

Parameters
----------
key : Interval

Returns
-------
bool
FT)hashrE   r
   r(   r?   hasnansget_locKeyError)r   r   s   &&rN   __contains__IntervalIndex.__contains__  sZ     	S	#x(($S**55||#	LL 		s   A A.-A.c                    V ^8  d   QhRRRR/# )rk   slobjslicerr   ra   rT   )rs   s   "rN   rt   ru     s     < <E <m <rP   c                r    V P                   V,          p\        V 4      P                  W P                  R7      # )z8
Fastpath for __getitem__ when we know we have a slice.
r   )rh   rD   ry   _name)r   r   ress   && rN   _getitem_sliceIntervalIndex._getitem_slice  s.     jjDz%%c

%;;rP   c                   V ^8  d   QhRR/# )rk   rr   r5   rT   )rs   s   "rN   rt   ru     s     X XZ XrP   c                	b    \         P                  ! V P                  V P                  .R R.R7      # )r   r   )names)r5   rU   r   r   r   s   &rN   _multiindexIntervalIndex._multiindex  s'    %%tyy$**&=fgEVWWrP   c                	    R V P                   RV P                  RV P                  RV P                  /p\        \        V 4      V3R3# )r   r   r]   ro   N)r   r   r]   ro   rX   rD   )r   rW   s   & rN   
__reduce__IntervalIndex.__reduce__  sD    DIITZZdkkDII	
 "DJ?D88rP   c                   V ^8  d   QhRR/# )rk   rr   strrT   )rs   s   "rN   rt   ru     s      s rP   c                    R# )z4Return a string of the type inferred from the valuesintervalrT   r   s   &rN   inferred_typeIntervalIndex.inferred_type  s     rP   c                    V ^8  d   QhRRRR/# )rk   deeprc   rr   intrT   )rs   s   "rN   rt   ru     s     !V !V !V# !VrP   c                |    V P                   P                  VR7      V P                  P                  VR7      ,           # )aG  
Memory usage of the values.

Parameters
----------
deep : bool, default False
    Introspect the data deeply, interrogate
    `object` dtypes for system-level memory consumption.

Returns
-------
bytes used
    Returns memory usage of the values in the Index in bytes.

See Also
--------
numpy.ndarray.nbytes : Total bytes consumed by the elements of the
    array.

Notes
-----
Memory usage does not include memory consumed by elements that
are not components of the array if deep=False or if used on PyPy

Examples
--------
>>> idx = pd.Index([1, 2, 3])
>>> idx.memory_usage()
24
)r   )r   memory_usager   )r   r   s   &&rN   r   IntervalIndex.memory_usage  s5    B yy%%4%04::3J3JPT3J3UUUrP   c                   V ^8  d   QhRR/# rk   rr   rc   rT   )rs   s   "rN   rt   ru   !  s     2 2 2rP   c                .    V RRR1,          P                   # )zh
Return True if the IntervalIndex is monotonic decreasing (only equal or
decreasing values), else False
N)is_monotonic_increasingr   s   &rN   is_monotonic_decreasing%IntervalIndex.is_monotonic_decreasing   s     DbDz111rP   c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   ru   )  s      4 rP   c                   V P                   pV P                  pV P                  4       P                  4       ^8  d   R# VP                  '       g   VP                  '       d   R# \        4       p\        P                  ! VP                  RR7      4      ^ ,          pV F-  pW,          W%,          3pWc9   d    R# VP                  V4       K/  	  R# )zH
Return True if the IntervalIndex contains unique elements, else False.
FT)keep)
r   r   isnasum	is_uniquesetrG   where
duplicatedadd)r   r   r   
seen_pairs	check_idxidxpairs   &      rN   r   IntervalIndex.is_unique(  s    
 yy

99;??q >>>U___U
HHT__%_89!<	CIuz*D!NN4 	  rP   c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   ru   A  s     /+ /+ /+rP   c                .    V P                   P                  # )ap  
Return True if the IntervalIndex has overlapping intervals, else False.

Two intervals overlap if they share a common point, including closed
endpoints. Intervals that only have an open endpoint in common do not
overlap.

Returns
-------
bool
    Boolean indicating if the IntervalIndex has overlapping intervals.

See Also
--------
Interval.overlaps : Check whether two Interval objects overlap.
IntervalIndex.overlaps : Check an IntervalIndex elementwise for
    overlaps.

Examples
--------
>>> index = pd.IntervalIndex.from_tuples([(0, 2), (1, 3), (4, 5)])
>>> index
IntervalIndex([(0, 2], (1, 3], (4, 5]],
      dtype='interval[int64, right]')
>>> index.is_overlapping
True

Intervals that share closed endpoints overlap:

>>> index = pd.interval_range(0, 3, closed="both")
>>> index
IntervalIndex([[0, 1], [1, 2], [2, 3]],
      dtype='interval[int64, both]')
>>> index.is_overlapping
True

Intervals that only have an open endpoint in common do not overlap:

>>> index = pd.interval_range(0, 3, closed="left")
>>> index
IntervalIndex([[0, 1), [1, 2), [2, 3)],
      dtype='interval[int64, left]')
>>> index.is_overlapping
False
)r   is_overlappingr   s   &rN   r   IntervalIndex.is_overlapping@  s    ` ||***rP   c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   ru   r  s     ) )4 )rP   c                    \        VRR4      p\        V\        4      '       g   \        V\        4      '       d   V P	                  VP
                  4      # \        \        \        \        3p\        W4      # )a  
Check if a given key needs i8 conversion. Conversion is necessary for
Timestamp, Timedelta, DatetimeIndex, and TimedeltaIndex keys. An
Interval-like requires conversion if its endpoints are one of the
aforementioned types.

Assumes that any list-like data has already been cast to an Index.

Parameters
----------
key : scalar or Index-like
    The key that should be checked for i8 conversion

Returns
-------
bool
r?   N)
rC   rE   r'   r
   _needs_i8_conversionr   r   r   r1   r6   )r   r   	key_dtypei8_typess   &&  rN   r   "IntervalIndex._needs_i8_conversionr  sY    $ C$/	i//:c83L3L,,SXX66y-H#((rP   c                   \        V4      '       d   \        V4      p\        V4      pV P                  V4      '       g   V# \	        V4      p\        VRR4      p\        V\        4      '       g   \        V\        4      '       di   V P                  VP                  4      pV P                  VP                  4      pV'       d   \        M\        P                  pV! WEV P                  R7      # V'       d   \        V4      w  r7\        V\         4      '       d   VP"                  pM\        V\$        4      '       d   VP&                  pM\        V\(        P*                  \(        P,                  34      '       d   VP/                  R4      pMPVP0                  \3        VP4                  RR7      rsVP6                  '       d   VP9                  VP:                  ( 4      pV P0                  P<                  pW8w  d   \?        RV RV 24      hV# )	a  
Maybe convert a given key to its equivalent i8 value(s). Used as a
preprocessing step prior to IntervalTree queries (self._engine), which
expects numeric data.

Parameters
----------
key : scalar or list-like
    The key that should maybe be converted to i8.

Returns
-------
scalar or list-like
    The original key if no conversion occurred, int if converted scalar,
    Index with an int64 dtype if converted list-like.
r?   Nr   i8Frn   z)Cannot index an IntervalIndex of subtype z with values of dtype ) r    r/   r   r   r#   rC   rE   r'   r
   r   r   r   ra   rU   r]   r   r   ordinalr   _valuerG   
datetime64rH   viewr?   r.   asi8r   r   _isnansubtype
ValueError)	r   r   scalarr   r   r   constructorkey_i8r   s	   &&       rN   r   IntervalIndex._maybe_convert_i8  s   " s#C/4C((--J3C$/	i//:c83L3L))#((3D**3995E&,(-2K2KKt4;;?? 7 <I#v&&FI..FR]]BNN$CDDT* !$		5+Fv{{{  szzk2
 **$$;G9 E##,+/ 
 rP   c                   V ^8  d   QhRR/# )rk   sidezLiteral['left', 'right']rT   )rs   s   "rN   rt   ru     s     < <3K <rP   c                	   V P                   '       g   \        R 4      h\        V\        \        34      '       d   \        R4      hVR8X  d   V P                  P                  '       g$   VR8X  dG   V P                  P                  '       g+   V P                  pV P                  '       d   \        V4      pM)V P                  pV P                  '       d   \        V4      pVP                  W4      # )zrcan only get slices from an IntervalIndex if bounds are non-overlapping and all monotonic increasing or decreasingz,Interval objects are not currently supportedr   r   )r\   r   rE   r   ra   NotImplementedErrorr   r   r   rg   rO   rf   rR   _searchsorted_monotonic)r   rM   r   sub_idxs   &&& rN   r   %IntervalIndex._searchsorted_monotonic  s    000M 
 em];<<%&TUU
 FNtyy@@@GODII$E$E$EjjG'.iiG~~~'...u;;rP   c                   V ^8  d   QhRR/# )rk   rr   zint | slice | np.ndarrayrT   )rs   s   "rN   rt   ru     s     O O6 OrP   c                   V P                  V4       \        V\        4      '       d_   V P                  VP                  8w  d   \	        V4      hV P
                  VP
                  8H  V P                  VP                  8H  ,          pM\        WP                  4      '       d   V P                  4       pMgV P                  '       d   \        M\        pV P                  '       d   \        M\        p V! V P
                  V4      V! WP                  4      ,          pVP                  4       pV^ 8X  d   \	        V4      hV^8X  d   \!        VP#                  4       4      # \$        P&                  ! VP)                  R4      4      p\        V\*        4      '       d9   VP,                  f+   \+        VP.                  \1        V 4      VP2                  4      pV#   \         d   p\	        T4      ThRp?ii ; i)a  
Get integer location, slice or boolean mask for requested label.

The `get_loc` method is used to retrieve the integer index, a slice for
slicing objects, or a boolean mask indicating the presence of the label
in the `IntervalIndex`.

Parameters
----------
key : label
    The value or range to find in the IntervalIndex.

Returns
-------
int if unique index, slice if monotonic index, else mask
    The position or positions found. This could be a single
    number, a range, or an array of true/false values
    indicating the position(s) of the label.

See Also
--------
IntervalIndex.get_indexer_non_unique : Compute indexer and
    mask for new index given the current index.
Index.get_loc : Similar method in the base Index class.

Examples
--------
>>> i1, i2 = pd.Interval(0, 1), pd.Interval(1, 2)
>>> index = pd.IntervalIndex([i1, i2])
>>> index.get_loc(1)
0

You can also supply a point inside an interval.

>>> index.get_loc(1.5)
1

If a label is in several intervals, you get the locations of all the
relevant intervals.

>>> i3 = pd.Interval(0, 2)
>>> overlapping_index = pd.IntervalIndex([i1, i2, i3])
>>> overlapping_index.get_loc(0.5)
array([ True, False,  True])

Only exact matches will be returned if an interval is provided.

>>> index.get_loc(pd.Interval(0, 1))
0
Nu1)_check_indexing_errorrE   r
   r]   r   r   r   r(   r?   r   rd   r   r   re   rK   r   r   argmaxr	   maybe_booleans_to_slicer   r   stopstartlenstep)r   r   maskop_leftop_righterrmatchesr   s   &&      rN   r   IntervalIndex.get_loc  sb   f 	""3'c8$${{cjj(sm#II)djjCII.EFD"3

3399;D !,,,b"G!...rBH-tyy#.#zz1JJ
 ((*a<3-a<+DKKM::))$))D/:c5!!chh&6		3t9chh7C
  -sm,-s   /*G G,G''G,c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )rk   targetr.   methodz
str | Nonelimitz
int | None	tolerancez
Any | Nonerr   npt.NDArray[np.intp]rT   )rs   s   "rN   rt   ru   8  s<     , ,, , 	,
 , 
,rP   c                	   \        V\        4      '       dd   V P                  P                  '       d/   V P                  P                  '       d   V P                  V4      pMV P                  V4      ^ ,          pM\        VP                  4      '       gS   \        VP                  4      '       g8   V P                  V4      pV P                  P                  VP                  4      pMV P                  V4      ^ ,          # \        V4      # )    )rE   ra   r   r   r   _get_indexer_unique_sides_get_indexer_pointwiser"   r?   r$   r   r   get_indexervaluesr   )r   r  r  r  r  indexers   &&&&& rN   _get_indexerIntervalIndex._get_indexer8  s     fm,,
 yy"""tzz';';';88@55f=a@!&,,//?6<<3P3P ++F3Fll..v}}=G ..v6q99"7++rP   c                    V ^8  d   QhRRRR/# rk   r  r.   rr   z1tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]]rT   )rs   s   "rN   rt   ru   U  s$     PJ PJPJ	:PJrP   c                   \        V4      pV P                  V4      '       g,   V P                  V4      '       g   V P                  VRRR7      # \	        V\
        4      '       dv   V P                  P                  '       dI   V P                  P                  '       d-   V P                  V4      pVR8H  P                  4       ^ ,          pMV P                  V4      # \        VP                  4      '       g   V P                  V4      '       g   V P                  V4      # V P                  V4      pV P                  P!                  VP"                  4      w  r#\%        V4      \%        V4      3# )a)  
Compute indexer and mask for new index given the current index.

The indexer should be then used as an input to ndarray.take to align the
current data to the new index.

Parameters
----------
target : IntervalIndex or list of Intervals
    An iterable containing the values to be used for computing indexer.

Returns
-------
indexer : np.ndarray[np.intp]
    Integers from 0 to n - 1 indicating that the index at these
    positions matches the corresponding target values. Missing values
    in the target are marked by -1.
missing : np.ndarray[np.intp]
    An indexer into the target of the values not found.
    These correspond to the -1 in the indexer array.

See Also
--------
Index.get_indexer : Computes indexer and mask for new index given
    the current index.
Index.get_indexer_for : Returns an indexer even when non-unique.

Examples
--------
>>> index = pd.Index(["c", "b", "a", "b", "b"])
>>> index.get_indexer_non_unique(["b", "b"])
(array([1, 3, 4, 1, 3, 4]), array([], dtype=int64))

In the example below there are no matched values.

>>> index = pd.Index(["c", "b", "a", "b", "b"])
>>> index.get_indexer_non_unique(["q", "r", "t"])
(array([-1, -1, -1]), array([0, 1, 2]))

For this reason, the returned ``indexer`` contains only integers equal to -1.
It demonstrates that there's no match between the index and the ``target``
values at these positions. The mask [0, 1, 2] in the return value shows that
the first, second, and third elements are missing.

Notice that the return value is a tuple contains two items. In the example
below the first item is an array of locations in ``index``. The second
item is a mask shows that the first and third elements are missing.

>>> index = pd.Index(["c", "b", "a", "b", "b"])
>>> index.get_indexer_non_unique(["f", "b", "s"])
(array([-1,  1,  3,  4, -1]), array([0, 2]))
NFr)   r   )r/   _should_compare_should_partial_index_get_indexer_non_comparablerE   ra   r   r   r   r  nonzeror  r"   r?   r   r   get_indexer_non_uniquer  r   )r   r  r  missings   &&  rN   r  $IntervalIndex.get_indexer_non_uniqueU  s!   n f%##F++D4N4Nv4V4V 33FD3OO..yy"""tzz';';';88@"b=113A6226::V\\**$2L2LV2T2T..v66
 ++F3F#||BB6==QG"7+-@-IIIrP   c                    V ^8  d   QhRRRR/# )rk   r  ra   rr   r	  rT   )rs   s   "rN   rt   ru     s     
 
 
BV 
rP   c                    V P                   P                  VP                   4      pV P                  P                  VP                  4      p\        P                  ! W#8H  VR4      pV# )zJ
_get_indexer specialized to the case where both of our sides are unique.
r   )r   r  r   rG   r   )r   r  left_indexerright_indexerr  s   &&   rN   r  'IntervalIndex._get_indexer_unique_sides  sN     yy,,V[[9

..v||<((<8,KrP   c                    V ^8  d   QhRRRR/# r  rT   )rs   s   "rN   rt   ru     s      J JJ	:JrP   c                   . . r2\        V4       F  w  rE V P                  V4      p\        V\        4      '       d:   \        P
                  ! VP                  VP                  VP                  RR7      pMS\        P                  ! V4      '       d   \        P                  ! V^R7      pM\        P                  ! V4      ^ ,          p VP                  V4       K  	  \        P                   ! V4      p\#        V4      \#        V4      3#   \         d,    TP                  T4       \        P                  ! R.4      p Lv\         d,    TP                  T4       \        P                  ! R.4      p Li ; i)zF
pointwise implementation for get_indexer and get_indexer_non_unique.
intpr?   )ndminr   )	enumerater   rE   r   rG   aranger   r   r   r	   r   r{   r   r   appendr   concatenater   )r   r  r  r  ir   locss   &&     rN   r  $IntervalIndex._get_indexer_pointwise  s    r'FA&||C(dE**99TZZDIIVTD^^D))88D2D 88D>!,D NN4 ) (, ..)"7+-@-III  &q!xx~$ & q!xx~	&s0   AD	5D	D	*D		3E3>E3)E32E3c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   ru     s     F F$ FrP   c                	f    V P                   '       * ;'       d    V P                  P                  ^8  # )rk   )r   r   	_na_countr   s   &rN   _index_as_uniqueIntervalIndex._index_as_unique  s(    &&&EE4<<+A+AA+EErP   zKcannot handle overlapping indices; use IntervalIndex.get_indexer_non_uniquec                    V ^8  d   QhRRRR/# )rk   r   r   kindzLiteral['loc', 'getitem']rT   )rs   s   "rN   rt   ru     s     9 9% 97P 9rP   c                	   < VP                   eI   VP                   ^8X  g8   RpVR8X  d   \        V4      hVR8X  d   \        V4      '       g   \        V4      h\        SV `  W4      # )NzClabel-based slicing with step!=1 is not supported for IntervalIndexlocgetitem)r   r   r-   super_convert_slice_indexer)r   r   r4  msg	__class__s   &&& rN   r9  $IntervalIndex._convert_slice_indexer  s]     CHHM XCu} o%y 055$S/)w-c88rP   c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   ru     s     / / /rP   c                	H    V P                   P                  P                  R 9   # )r@   )r?   r   r4  r   s   &rN   _should_fallback_to_positional,IntervalIndex._should_fallback_to_positional  s     zz!!&&$..rP   c                   V ^8  d   QhRR/# )rk   r   r   rT   )rs   s   "rN   rt   ru     s     H H3 HrP   c                	6    \        W4      P                  W4      # N)rC   _maybe_cast_slice_bound)r   rM   r   s   &&&rN   rD  %IntervalIndex._maybe_cast_slice_bound  s    t"::5GGrP   c                    V ^8  d   QhRRRR/# )rk   r?   r:   rr   rc   rT   )rs   s   "rN   rt   ru     s     3 3( 3t 3rP   c                	    \        V\        4      '       g   R # \        V P                  V.4      p\	        V4      '       * # F)rE   r'   r   r?   r"   )r   r?   common_subtypes   && rN   _is_comparable_dtype"IntervalIndex._is_comparable_dtype  s3    %//)4::u*=>">222rP   c                   V ^8  d   QhRR/# rk   rr   r.   rT   )rs   s   "rN   rt   ru     s     "2 "2e "2rP   c                D    \        V P                  P                  RR7      # )au  
Return left bounds of the intervals in the IntervalIndex.

The left bounds of each interval in the IntervalIndex are
returned as an Index. The datatype of the left bounds is the
same as the datatype of the endpoints of the intervals.

Returns
-------
Index
    An Index containing the left bounds of the intervals.

See Also
--------
IntervalIndex.right : Return the right bounds of the intervals
    in the IntervalIndex.
IntervalIndex.mid : Return the mid-point of the intervals in
    the IntervalIndex.
IntervalIndex.length : Return the length of the intervals in
    the IntervalIndex.

Examples
--------
>>> iv_idx = pd.IntervalIndex.from_arrays([1, 2, 3], [4, 5, 6], closed="right")
>>> iv_idx.left
Index([1, 2, 3], dtype='int64')

>>> iv_idx = pd.IntervalIndex.from_tuples(
...     [(1, 4), (2, 5), (3, 6)], closed="left"
... )
>>> iv_idx.left
Index([1, 2, 3], dtype='int64')
Fr   )r.   rh   r   r   s   &rN   r   IntervalIndex.left  s    F TZZ__511rP   c                   V ^8  d   QhRR/# rM  rT   )rs   s   "rN   rt   ru   "  s     "3 "3u "3rP   c                D    \        V P                  P                  RR7      # )ay  
Return right bounds of the intervals in the IntervalIndex.

The right bounds of each interval in the IntervalIndex are
returned as an Index. The datatype of the right bounds is the
same as the datatype of the endpoints of the intervals.

Returns
-------
Index
    An Index containing the right bounds of the intervals.

See Also
--------
IntervalIndex.left : Return the left bounds of the intervals
    in the IntervalIndex.
IntervalIndex.mid : Return the mid-point of the intervals in
    the IntervalIndex.
IntervalIndex.length : Return the length of the intervals in
    the IntervalIndex.

Examples
--------
>>> iv_idx = pd.IntervalIndex.from_arrays([1, 2, 3], [4, 5, 6], closed="right")
>>> iv_idx.right
Index([4, 5, 6], dtype='int64')

>>> iv_idx = pd.IntervalIndex.from_tuples(
...     [(1, 4), (2, 5), (3, 6)], closed="left"
... )
>>> iv_idx.right
Index([4, 5, 6], dtype='int64')
Fr   )r.   rh   r   r   s   &rN   r   IntervalIndex.right!  s    F TZZ%%E22rP   c                   V ^8  d   QhRR/# rM  rT   )rs   s   "rN   rt   ru   G  s     &1 &1U &1rP   c                D    \        V P                  P                  RR7      # )au  
Return the midpoint of each interval in the IntervalIndex as an Index.

Each midpoint is calculated as the average of the left and right bounds
of each interval. The midpoints are returned as a pandas Index object.

Returns
-------
pandas.Index
    An Index containing the midpoints of each interval.

See Also
--------
IntervalIndex.left : Return the left bounds of the intervals
    in the IntervalIndex.
IntervalIndex.right : Return the right bounds of the intervals
    in the IntervalIndex.
IntervalIndex.length : Return the length of the intervals in
    the IntervalIndex.

Notes
-----
The midpoint is the average of the interval bounds, potentially resulting
in a floating-point number even if bounds are integers. The returned Index
will have a dtype that accurately holds the midpoints. This computation is
the same regardless of whether intervals are open or closed.

Examples
--------
>>> iv_idx = pd.IntervalIndex.from_arrays([1, 2, 3], [4, 5, 6])
>>> iv_idx.mid
Index([2.5, 3.5, 4.5], dtype='float64')

>>> iv_idx = pd.IntervalIndex.from_tuples([(1, 4), (2, 5), (3, 6)])
>>> iv_idx.mid
Index([2.5, 3.5, 4.5], dtype='float64')
Fr   )r.   rh   midr   s   &rN   rU  IntervalIndex.midF  s    N TZZ^^%00rP   c                   V ^8  d   QhRR/# rM  rT   )rs   s   "rN   rt   ru   p  s     4 4 4rP   c                D    \        V P                  P                  RR7      # )a  
Calculate the length of each interval in the IntervalIndex.

This method returns a new Index containing the lengths of each interval
in the IntervalIndex. The length of an interval is defined as the difference
between its end and its start.

Returns
-------
Index
    An Index containing the lengths of each interval.

See Also
--------
Interval.length : Return the length of the Interval.

Examples
--------
>>> intervals = pd.IntervalIndex.from_arrays(
...     [1, 2, 3], [4, 5, 6], closed="right"
... )
>>> intervals.length
Index([3, 3, 3], dtype='int64')

>>> intervals = pd.IntervalIndex.from_tuples([(1, 5), (6, 10), (11, 15)])
>>> intervals.length
Index([4, 4, 4], dtype='int64')
Fr   )r.   rh   lengthr   s   &rN   rY  IntervalIndex.lengtho  s    < TZZ&&U33rP   c                   V ^8  d   QhRR/# )rk   sortrc   rT   )rs   s   "rN   rt   ru     s       rP   c                   V P                   P                  '       d/   V P                  P                  '       d   V P                  V4      pM~VP                   P                  '       dR   VP                  P                  '       d6   V P	                  4       P                  4       ^8:  d   VP                  V 4      pMV P                  V4      pV'       d   VP                  4       pV# )z<
intersection specialized to the case with matching dtypes.
)r   r   r   _intersection_uniquer   r   _intersection_non_uniquesort_values)r   otherr\  takens   &&& rN   _intersectionIntervalIndex._intersection  s    
 994::#7#7#7--e4EZZ!!!ekk&;&;&;		@QUV@V ..t4E 11%8E%%'ErP   c                    V ^8  d   QhRRRR/# rk   ra  ra   rr   rT   )rs   s   "rN   rt   ru     s     " "- "M "rP   c                6   V P                   P                  VP                   4      pV P                  P                  VP                  4      pW#8H  VR8g  ,          pVP                  VP	                  4       ^ ,          4      p\        V4      pV P                  V4      # )z
Used when the IntervalIndex does not have any common endpoint,
no matter left or right.
Return the intersection with another IntervalIndex.
Parameters
----------
other : IntervalIndex
Returns
-------
IntervalIndex
r   )r   r  r   taker  r*   )r   ra  lindexerrindexermatchr  s   &&    rN   r^  "IntervalIndex._intersection_unique  sv     99((4::))%++6%(b.9-- 23/yy!!rP   c                    V ^8  d   QhRRRR/# rf  rT   )rs   s   "rN   rt   ru     s      m  rP   c                   \         P                  ! \        V 4      \        R7      pV P                  '       dR   VP                  '       d@   \         P
                  ! \        V 4      4      V P                  4       ,          ^ ,          pRW#&   \        \        VP                  VP                  RR7      4      p\        \        V P                  V P                  RR7      4       F  w  rVWd9   g   K  RW%&   K  	  W,          # )z
Used when the IntervalIndex does have some common endpoints,
on either sides.
Return the intersection with another IntervalIndex.

Parameters
----------
other : IntervalIndex

Returns
-------
IntervalIndex
r%  T)strict)rG   zerosr   rc   r   r(  r   r   zipr   r   r'  )r   ra  r   first_nan_loc
other_tupsr+  tups   &&     rN   r_  &IntervalIndex._intersection_non_unique  s      xxD	.<<<EMMMIIc$i0=a@M"&DUZZTBC
DIItzz$ GHFA  I zrP   c                   V ^8  d   QhRR/# )rk   rr   z
np.ndarrayrT   )rs   s   "rN   rt   ru     s     
 
J 
rP   c                	    \        R 4      h)zRIntervalIndex does not use libjoin fastpaths or pass values to IndexEngine objectsr   r   s   &rN   _get_engine_target IntervalIndex._get_engine_target  s     ""
 	
rP   c                	    \        R 4      h)z,IntervalIndex does not use libjoin fastpathsrx  )r   results   &&rN   _from_join_targetIntervalIndex._from_join_target  s    !"PQQrP   rT   )NNNNT)r   NFNrH  )r   )NNN)4rx   
__module____qualname____firstlineno____doc___typ__annotations___can_hold_stringsr,   	_data_clsr|   classmethodr   rU   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r  r  r  r  r1  _requires_unique_msgr9  r?  rD  rJ  r   r   rU  rY  rc  r^  r_  ry  r}  __static_attributes____classcell__)r;  s   @rN   ra   ra      s   "L\ D "&&OI
,2 -1 -1^ A1 A1F -/ -/d = =2< X X9  !VJ 2 2  . /+ /+b)2=~<:Ob,:PJd
J@ F F 	V 9 9 / /H3 "2 "2H "3 "3H &1 &1P 4 4D(",>
R RrP   ra   c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   rt     s      D rP   c                n    \        \        V 4      \        V \        4      \        V \        4      V RJ .4      # )zB
Helper for interval_range to check if start/end are valid types.
N)anyr!   rE   r   r   )endpoints   &rN   _is_valid_endpointr    s:     hx+x+		
 rP   c                   V ^8  d   QhRR/# r   rT   )rs   s   "rN   rt   rt     s       rP   c                   R pR p\        V 4      ;'       d    \        V4      ;'       gW    V! V 4      ;'       d    V! V4      ;'       g7    V! V 4      ;'       d    V! V4      ;'       g    \        P                  ! W4      # )zC
Helper for interval_range to check type compat of start/end/freq.
c                .    \        V \        \        34      # rC  )rE   r   r   xs   &rN   <lambda>%_is_type_compatible.<locals>.<lambda>      ZIz+BCrP   c                .    \        V \        \        34      # rC  )rE   r   r   r  s   &rN   r  r    r  rP   )r!   comany_none)abis_ts_compatis_td_compats   &&  rN   _is_type_compatibler    sy     DLCL	1	&	&)A, 	 	O//Q	 	O//Q	 	 <<	rP   c               $    V ^8  d   QhRRRRRR/# )rk   ro   rp   r]   r;   rr   ra   rT   )rs   s   "rN   rt   rt     s/     w w
 w w wrP   c           
     *   \        V 4      p \        V4      pV e   T MTpVf3   \        P                  ! W V4      '       d   \        V4      '       d   ^MRp\        P                  ! WW#4      ^8w  d   \        R4      h\        V 4      '       g   \        RV  24      h\        V4      '       g   \        RV 24      h\        V4      pVe   \        V4      '       g    \        V4      p\        \        W4      \        W4      \        W4      .4      '       g   \        R4      hVe
   V^,          p\        V4      '       EdV   \        P                  ! R4      p\        P                  ! WV4      '       EdB   \        V \        P                   \        P"                  34      '       dY   \        V\        P                   \        P"                  34      '       d)   V P                  VP                  8X  d   V P                  pM\        V \$        \        P"                  34      '       gM   \        V\$        \        P"                  34      '       g'   \        V\$        \        P"                  34      '       d   \        P                  ! R	4      p\        P&                  ! WVR
,          ,           V4      p	\)        W4      p	MpVf!   \+        W,
          V,          4      ^,           pM5V f   W^,
          V,          ,
          p MVf   W^,
          V,          ,           p\        P,                  ! WV4      p	\        ;QJ d1    R \        P.                  ! WV4       4       F  '       d   K   RM&	  RM"! R \        P.                  ! WV4       4       4      '       d   \)        W4      p	M1\        V\0        4      '       d   \3        WW#R7      p	M\5        WW#R7      p	\6        P9                  V	VV\;        V	P                  VR7      R7      #   \
         d   p\        RT 24      ThRp?ii ; i)a  
Return a fixed frequency IntervalIndex.

Parameters
----------
start : numeric or datetime-like, default None
    Left bound for generating intervals.
end : numeric or datetime-like, default None
    Right bound for generating intervals.
periods : int, default None
    Number of periods to generate.
freq : numeric, str, Timedelta, datetime.timedelta, or DateOffset, default None
    The length of each interval. Must be consistent with the type of start
    and end, e.g. 2 for numeric, or '5H' for datetime-like.  Default is 1
    for numeric and 'D' for datetime-like.
name : str, default None
    Name of the resulting IntervalIndex.
closed : {'left', 'right', 'both', 'neither'}, default 'right'
    Whether the intervals are closed on the left-side, right-side, both
    or neither.

Returns
-------
IntervalIndex
    Object with a fixed frequency.

See Also
--------
IntervalIndex : An Index of intervals that are all closed on the same side.

Notes
-----
Of the four parameters ``start``, ``end``, ``periods``, and ``freq``,
exactly three must be specified. If ``freq`` is omitted, the resulting
``IntervalIndex`` will have ``periods`` linearly spaced elements between
``start`` and ``end``, inclusively.

To learn more about datetime-like frequency strings, please see
:ref:`this link<timeseries.offset_aliases>`.

Examples
--------
Numeric ``start`` and  ``end`` is supported.

>>> pd.interval_range(start=0, end=5)
IntervalIndex([(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]],
              dtype='interval[int64, right]')

Additionally, datetime-like input is also supported.

>>> pd.interval_range(
...     start=pd.Timestamp("2017-01-01"), end=pd.Timestamp("2017-01-04")
... )
IntervalIndex([(2017-01-01 00:00:00, 2017-01-02 00:00:00],
               (2017-01-02 00:00:00, 2017-01-03 00:00:00],
               (2017-01-03 00:00:00, 2017-01-04 00:00:00]],
              dtype='interval[datetime64[us], right]')

The ``freq`` parameter specifies the frequency between the left and right.
endpoints of the individual intervals within the ``IntervalIndex``.  For
numeric ``start`` and ``end``, the frequency must also be numeric.

>>> pd.interval_range(start=0, periods=4, freq=1.5)
IntervalIndex([(0.0, 1.5], (1.5, 3.0], (3.0, 4.5], (4.5, 6.0]],
              dtype='interval[float64, right]')

Similarly, for datetime-like ``start`` and ``end``, the frequency must be
convertible to a DateOffset.

>>> pd.interval_range(start=pd.Timestamp("2017-01-01"), periods=3, freq="MS")
IntervalIndex([(2017-01-01 00:00:00, 2017-02-01 00:00:00],
               (2017-02-01 00:00:00, 2017-03-01 00:00:00],
               (2017-03-01 00:00:00, 2017-04-01 00:00:00]],
              dtype='interval[datetime64[us], right]')

Specify ``start``, ``end``, and ``periods``; the frequency is generated
automatically (linearly spaced).

>>> pd.interval_range(start=0, end=6, periods=4)
IntervalIndex([(0.0, 1.5], (1.5, 3.0], (3.0, 4.5], (4.5, 6.0]],
          dtype='interval[float64, right]')

The ``closed`` parameter specifies which endpoints of the individual
intervals within the ``IntervalIndex`` are closed.

>>> pd.interval_range(end=5, periods=4, closed="both")
IntervalIndex([[1, 2], [2, 3], [3, 4], [4, 5]],
              dtype='interval[int64, both]')
NDzVOf the four parameters: start, end, periods, and freq, exactly three must be specifiedz,start must be numeric or datetime-like, got z*end must be numeric or datetime-like, got z7freq must be numeric or convertible to DateOffset, got z+start, end, freq need to be type compatibleint64float64g?c              3  8   "   T F  p\        V4      x  K  	  R # 5irC  )r   ).0r  s   & rN   	<genexpr>!interval_range.<locals>.<genexpr>  s     E&Dz!}}&Ds   FT)r   endperiodsfreq)r   r]   )ro   r]   r?   )r   r  r  r!   count_not_noner   r  r+   r   allr  rK   rG   r?   all_not_nonerE   integerfloatingfloatr(  r   r   linspacenot_noner   r2   r7   ra   r   r'   )
r   r  r  r  ro   r]   r  r  r?   r   s
   &&&&&&    rN   interval_ranger    s+   D #5)E
 
%C)usH|WS99h''qS
%g494
 	

 e$$GwOPPc""EcUKLLw'G	$	T?D +,*	
  EFF 1 ((7+E--52::r{{";<<sRZZ$=>>KK399,55"++"677cE2;;#788dUBKK$899+YYuTCZ&8$?F+F:F s{t34q8{d22{d22[[W5F3Ecll5t&DE333Ecll5t&DEEE+F:F	Hi	(	(%'M uwR$$FLL@	 %  u  	I$P	s   O3 3P>PP)	__array__overlapscontainsrd   re   rf   rg   is_empty)NNNNNr   )`r  
__future__r   operatorr   r   typingr   r   r   r   numpyrG   pandas._libsr	   pandas._libs.intervalr
   r   r   pandas._libs.tslibsr   r   r   r   r   pandas.errorsr   pandas.util._decoratorsr   r   pandas.util._exceptionsr   pandas.core.dtypes.castr   r   r   r   r   r   pandas.core.dtypes.commonr   r   r   r   r    r!   r"   r#   r$   r%   pandas.core.dtypes.dtypesr&   r'   pandas.core.dtypes.missingr(   pandas.core.algorithmsr*   pandas.core.arrays.datetimeliker+   pandas.core.arrays.intervalr,   pandas.core.commoncorecommonr  pandas.core.indexersr-   pandas.core.indexes.baser.   r/   r0   pandas.core.indexes.datetimesr1   r2   pandas.core.indexes.extensionr3   r4   pandas.core.indexes.multir5   pandas.core.indexes.timedeltasr6   r7   collections.abcr8   pandas._typingr9   r:   r;   r<   rO   rR   rX   ra   r  r  r  rT   rP   rN   <module>r     sT    "    
  , 6    = ) < !   : 
 1
 ( Q"Q"  k*ME	  .9=PTUHFRN FR  V F FRV" Hw wrP   