§
    Ð! h.•  ã                  óž  — d Z ddlmZ ddlmZmZ ddlZddlmZm	Z	m
Z
 ddlZddlmZ ddlmZmZmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=c m>Z? ddl@mAZA ddlBm=c mCc mDZE ddlBmFZFmGZGmHZHmIZI ddlJmKZKmLZL ddlMmNZNmOZO ddlPmQZQ ddlRmSZSmTZT erddlUmVZV ddlWmXZXmYZYmZZZm[Z[m\Z\  e]eEj^        ¦  «        Z^e^ _                    ddd ej`        d¦  «        dœ¦  «         d„ Zad „ Zbd!„ Zc ee;d"         dd#e^d$         d%d& ej`        d'¦  «        d(œz  ¦  «         eOd)d*ge:d+¬,¦  «         eOg d-¢e:¦  «         eOd.d/ge:d+¬0¦  «         G d1„ deN¦  «        ¦   «         ¦   «         ¦   «         ¦   «         Zdd:d4„Zed:d5„Zf	 	 	 	 	 	 d;d<d9„ZgdS )=z define the IntervalIndex é    )Úannotations)ÚleÚltN)ÚTYPE_CHECKINGÚAnyÚLiteral)Úlib)ÚIntervalÚIntervalMixinÚIntervalTree)Ú
BaseOffsetÚPeriodÚ	TimedeltaÚ	TimestampÚ	to_offset)ÚInvalidIndexError)ÚAppenderÚcache_readonly)Úrewrite_exception)Úfind_common_typeÚinfer_dtype_from_scalarÚmaybe_box_datetimelikeÚmaybe_downcast_numericÚ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Úpandas_dtype)ÚDatetimeTZDtypeÚIntervalDtype)Úis_valid_na_for_dtype©Úunique)Úvalidate_periods)ÚIntervalArrayÚ_interval_shared_docs)Úis_valid_positional_slice)ÚIndexÚ_index_shared_docsÚensure_indexÚmaybe_extract_name)ÚDatetimeIndexÚ
date_range)ÚExtensionIndexÚinherit_names)Ú
MultiIndex)ÚTimedeltaIndexÚtimedelta_range)ÚHashable)ÚDtypeÚDtypeObjÚIntervalClosedTypeÚSelfÚnptÚIntervalIndexz"IntervalIndex or list of IntervalszX         name : object, optional
              Name to be stored in the index.
         )ÚklassÚqualnameÚtarget_klassÚnamec                óø  — t          | dt          | ¦  «        ¦  «        }t          | t          t          f¦  «        rd}t          |¦  «        }t          j        |d¦  «        st          |t          ¦  «        r| t          j
        dd¦  «        z   S t          |¦  «        r| dz   S t          |¦  «        rt          j        | t          j        ¦  «        S t          dt!          t          | ¦  «        ¦  «        › �¦  «        ‚©NÚ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Úrepr©ÚlabelrE   s     úVc:\xampp_lite_8_4\www\timesheet\venv\Lib\site-packages\pandas/core/indexes/interval.pyÚ_get_next_labelrW   u   så   € å�E˜7¥D¨¡K¤KÑ0Ô0€EÝ�%�)¥YÐ/Ñ0Ô0ð !Ø ˆÝ˜ÑÔ€Eå
„�u˜dÑ#Ô#ð U¥z°%½Ñ'IÔ'Ið UØ•r”~ a¨Ñ.Ô.Ñ.Ð.Ý	˜%Ñ	 Ô	 ð UØ�q‰yÐÝ	˜Ñ	Ô	ð UÝŒ|˜E¥2¤6Ñ*Ô*Ð*åÐSÅÅTÈ%Á[Ä[Ñ@QÔ@QÐSÐSÑTÔTÐTó    c                óú  — t          | dt          | ¦  «        ¦  «        }t          | t          t          f¦  «        rd}t          |¦  «        }t          j        |d¦  «        st          |t          ¦  «        r| t          j
        dd¦  «        z
  S t          |¦  «        r| dz
  S t          |¦  «        r t          j        | t          j         ¦  «        S t          dt!          t          | ¦  «        ¦  «        › �¦  «        ‚rD   rI   rT   s     rV   Ú_get_prev_labelrZ   †   sç   € å�E˜7¥D¨¡K¤KÑ0Ô0€EÝ�%�)¥YÐ/Ñ0Ô0ð !Ø ˆÝ˜ÑÔ€Eå
„�u˜dÑ#Ô#ð U¥z°%½Ñ'IÔ'Ið UØ•r”~ a¨Ñ.Ô.Ñ.Ð.Ý	˜%Ñ	 Ô	 ð UØ�q‰yÐÝ	˜Ñ	Ô	ð UÝŒ|˜E¥B¤F 7Ñ+Ô+Ð+åÐSÅÅTÈ%Á[Ä[Ñ@QÔ@QÐSÐSÑTÔTÐTrX   c                ó   —  | j         di |¤ŽS )zv
    This is called upon unpickling, rather than the default which doesn't have
    arguments and breaks __new__.
    © )Úfrom_arrays)ÚclsÚds     rV   Ú_new_IntervalIndexr`   —   s   € ð
 ˆ3Œ?ÐÐ˜QÐÐÐrX   Úclassz>Immutable index of intervals that are closed on the same side.rB   zis_overlapping
values
Ú a7      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.
    )r?   ÚsummaryrB   Úextra_attributesÚextra_methodsÚexamplesÚ
set_closedÚ	to_tuplesT)Úwrap)Ú	__array__ÚoverlapsÚcontainsÚclosed_leftÚclosed_rightÚ	open_leftÚ
open_rightÚis_emptyÚis_non_overlapping_monotonicÚclosed)Úcachec            	      ó~  ‡ — e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   dZeZ	 	 	 	 	 ddded„Ze	 e
ed         d  ej        d¦  «         ej        d¦  «        dœz  ¦  «        	 	 	 	 dfdgd„¦   «         ¦   «         Ze	 e
ed          d  ej        d¦  «         ej        d!¦  «        dœz  ¦  «        	 	 	 	 dfdhd"„¦   «         ¦   «         Ze	 e
ed#         d  ej        d¦  «         ej        d$¦  «        dœz  ¦  «        	 	 	 	 dfdhd%„¦   «         ¦   «         Zedid'„¦   «         Zdjd*„Zdkd-„Zedld/„¦   «         Zd0„ Zedmd2„¦   «         Z e
ej        j        ¦  «        dndod5„¦   «         Zedpd6„¦   «         Zedpd7„¦   «         Zedpd8„¦   «         Zdpd9„Zd:„ Z dqdrd>„Z!dsd@„Z"	 	 	 dtdudJ„Z# e
e$dK         e%z  ¦  «        dvdM„¦   «         Z&dwdN„Z'dvdO„Z(edpdP„¦   «         Z)dQZ*dxˆ fdT„Z+edpdU„¦   «         Z,dydV„Z-dzdX„Z.ed{dY„¦   «         Z/ed{dZ„¦   «         Z0ed{d[„¦   «         Z1ed{d\„¦   «         Z2d]„ Z3d|d_„Z4d|d`„Z5d}db„Z6dc„ Z7ˆ xZ8S )~r>   Úintervalindexr;   rs   Úboolrr   rm   rn   ro   rp   r*   Ú_dataÚ_valuesFNTúIntervalClosedType | NonerE   úDtype | NoneÚcopyrB   úHashable | NoneÚverify_integrityÚreturnr<   c                óÒ   — t          ||| ¦  «        }t          d| j        ¦  «        5  t          |||||¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «        S )Nr*   )rs   r|   rE   r~   )r0   r   Ú__name__r*   Ú_simple_new)r^   Údatars   rE   r|   rB   r~   Úarrays           rV   Ú__new__zIntervalIndex.__new__Þ   sµ   € õ " $¨¨cÑ2Ô2ˆå˜°´Ñ=Ô=ð 	ð 	Ý!ØØØØØ!1ðñ ô ˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð �Š˜u dÑ+Ô+Ð+s   §AÁAÁAÚfrom_breakszY
             name : str, optional
                  Name of the resulting IntervalIndex.zÇ        Examples
        --------
        >>> pd.IntervalIndex.from_breaks([0, 1, 2, 3])
        IntervalIndex([(0, 1], (1, 2], (2, 3]],
                      dtype='interval[int64, right]')
        )r?   rB   rf   Úrightc                óº   — t          d| j        ¦  «        5  t          j        ||||¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¬¦  «        S ©Nr*   )rs   r|   rE   ©rB   )r   r�   r*   r†   r‚   )r^   Úbreaksrs   rB   r|   rE   r„   s          rV   r†   zIntervalIndex.from_breaksô   s£   € õ: ˜°´Ñ=Ô=ð 	ð 	Ý!Ô-Ø˜v¨D¸ðñ ô ˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð �Š˜u¨4ˆÑ0Ô0Ð0ó   –;»?Á?r]   zÏ        Examples
        --------
        >>> pd.IntervalIndex.from_arrays([0, 1, 2], [1, 2, 3])
        IntervalIndex([(0, 1], (1, 2], (2, 3]],
                      dtype='interval[int64, right]')
        c                ó¼   — t          d| j        ¦  «        5  t          j        |||||¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¬¦  «        S )Nr*   )r|   rE   rŠ   )r   r�   r*   r]   r‚   )r^   Úleftr‡   rs   rB   r|   rE   r„   s           rV   r]   zIntervalIndex.from_arrays  s¥   € õ< ˜°´Ñ=Ô=ð 	ð 	Ý!Ô-Ø�e˜V¨$°eðñ ô ˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð �Š˜u¨4ˆÑ0Ô0Ð0s   –<¼A ÁA Úfrom_tupleszÄ        Examples
        --------
        >>> pd.IntervalIndex.from_tuples([(0, 1), (1, 2)])
        IntervalIndex([(0, 1], (1, 2]],
                       dtype='interval[int64, right]')
        c                óº   — t          d| j        ¦  «        5  t          j        ||||¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      ||¬¦  «        S r‰   )r   r�   r*   r�   r‚   )r^   rƒ   rs   rB   r|   rE   Úarrs          rV   r�   zIntervalIndex.from_tuples;  s¬   € õ: ˜°´Ñ=Ô=ð 	Yð 	YÝÔ+¨D¸ÀdÐRWÐXÑXÔXˆCð	Yð 	Yð 	Yñ 	Yô 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yøøøð 	Yð 	Yð 	Yð 	Yà�Š˜s¨ˆÑ.Ô.Ð.rŒ   r   c                óÔ   — |                       | j        ¦  «        }t          |¦  «        }|                       | j        ¦  «        }t          |¦  «        }t	          ||| j        ¬¦  «        S )N©rs   )Ú_maybe_convert_i8rŽ   r   r‡   r   rs   )ÚselfrŽ   r‡   s      rV   Ú_enginezIntervalIndex._engine_  s_   € ð ×%Ò% d¤iÑ0Ô0ˆÝ,¨TÑ2Ô2ˆØ×&Ò& t¤zÑ2Ô2ˆÝ-¨eÑ4Ô4ˆÝ˜D %°´Ð<Ñ<Ô<Ð<rX   Úkeyr   c                óØ   — t          |¦  «         t          |t          ¦  «        st          || j        ¦  «        r| j        S dS 	 |                      |¦  «         dS # t          $ r Y dS w xY w)zÏ
        return a boolean if this key is IN the index
        We *only* accept an Interval

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

        Returns
        -------
        bool
        FT)ÚhashrL   r
   r&   rE   ÚhasnansÚget_locÚKeyError)r•   r—   s     rV   Ú__contains__zIntervalIndex.__contains__h  s€   € õ 	ˆS‰	Œ	ˆ	Ý˜#�xÑ(Ô(ð 	Ý$ S¨$¬*Ñ5Ô5ð $Ø”|Ð#Ø�5ð	Ø�LŠL˜ÑÔÐØ�4øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ÁA Á
A)Á(A)ÚslobjÚslicec                ón   — | j         |         }t          | ¦  «                             || j        ¬¦  «        S )zH
        Fastpath for __getitem__ when we know we have a slice.
        rŠ   )rx   rK   r‚   Ú_name)r•   rž   Úress      rV   Ú_getitem_slicezIntervalIndex._getitem_slice�  s1   € ð Œj˜ÔˆÝ�D‰zŒz×%Ò% c°´
Ð%Ñ;Ô;Ð;rX   r5   c                óJ   — t          j        | j        | j        gddg¬¦  «        S )NrŽ   r‡   )Únames)r5   r]   rŽ   r‡   ©r•   s    rV   Ú_multiindexzIntervalIndex._multiindexˆ  s&   € åÔ% t¤y°$´*Ð&=ÀfÈgÐEVÐWÑWÔWÐWrX   c                ój   — | j         | j        | j        | j        dœ}t          t          | ¦  «        |fd fS )N)rŽ   r‡   rs   rB   )rŽ   r‡   rs   rB   r`   rK   )r•   r_   s     rV   Ú
__reduce__zIntervalIndex.__reduce__Œ  s;   € à”IØ”ZØ”kØ”Ið	
ð 
ˆõ "¥D¨¡J¤J° ?°DÐ8Ð8rX   Ústrc                ó   — dS )z4Return a string of the type inferred from the valuesÚintervalr\   r¦   s    rV   Úinferred_typezIntervalIndex.inferred_type•  s	   € ð ˆzrX   ÚdeepÚintc                óp   — | j                              |¬¦  «        | j                             |¬¦  «        z   S )N)r®   )rŽ   Úmemory_usager‡   )r•   r®   s     rV   r±   zIntervalIndex.memory_usage›  s6   € ð Œy×%Ò%¨4Ð%Ñ0Ô0°4´:×3JÒ3JÐPTÐ3JÑ3UÔ3UÑUÐUrX   c                ó"   — | ddd…         j         S )z€
        Return True if the IntervalIndex is monotonic decreasing (only equal or
        decreasing values), else False
        Néÿÿÿÿ)Úis_monotonic_increasingr¦   s    rV   Úis_monotonic_decreasingz%IntervalIndex.is_monotonic_decreasing£  s   € ð �D�D�b�DŒzÔ1Ð1rX   c                ót  — | j         }| j        }|                      ¦   «                              ¦   «         dk    rdS |j        s|j        rdS t          ¦   «         }t          j        |                     d¬¦  «        ¦  «        d         }|D ].}||         ||         f}||v r dS | 	                    |¦  «         Œ/dS )zX
        Return True if the IntervalIndex contains unique elements, else False.
        rG   FT)Úkeepr   )
rŽ   r‡   ÚisnaÚsumÚ	is_uniqueÚsetrN   ÚwhereÚ
duplicatedÚadd)r•   rŽ   r‡   Ú
seen_pairsÚ	check_idxÚidxÚpairs          rV   rº   zIntervalIndex.is_unique«  sÄ   € ð
 ŒyˆØ”
ˆà�9Š9‰;Œ;�?Š?ÑÔ˜qÒ Ð Ø�5àŒ>ð 	˜Uœ_ð 	Ø�4å‘U”Uˆ
Ý”H˜TŸ_š_°%˜_Ñ8Ô8Ñ9Ô9¸!Ô<ˆ	Øð 	!ð 	!ˆCØ˜”I˜u SœzÐ*ˆDØ�zÐ!Ð!Ø�u�uØ�NŠN˜4Ñ Ô Ð Ð àˆtrX   c                ó   — | j         j        S )a�  
        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    rV   rÄ   zIntervalIndex.is_overlappingÃ  s   € ð` Œ|Ô*Ð*rX   c                ó   — t          |dd¦  «        }t          |t          ¦  «        st          |t          ¦  «        r|                      |j        ¦  «        S t          t          t          t          f}t          ||¦  «        S )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
        rE   N)
rJ   rL   r%   r
   Ú_needs_i8_conversionrŽ   r   r   r1   r6   )r•   r—   Ú	key_dtypeÚi8_typess       rV   rÆ   z"IntervalIndex._needs_i8_conversionõ  sl   € õ$ ˜C ¨$Ñ/Ô/ˆ	Ý�i¥Ñ/Ô/ð 	7µ:¸cÅ8Ñ3LÔ3Lð 	7Ø×,Ò,¨S¬XÑ6Ô6Ð6å�y­-½ÐHˆÝ˜#˜xÑ(Ô(Ð(rX   c                ó¶  — t          |¦  «        rt          |¦  «        }t          |¦  «        }|                      |¦  «        s|S t	          |¦  «        }t          |dd¦  «        }t          |t          ¦  «        st          |t          ¦  «        r\|  	                    |j
        ¦  «        }|  	                    |j        ¦  «        }|rt          nt          j        } |||| j        ¬¦  «        S |rˆt          |¦  «        \  }}t          |t           ¦  «        r|j        }n–t          |t$          ¦  «        r|j        }nyt          |t(          j        t(          j        f¦  «        r|                     d¦  «        }n=|j        t3          |j        ¦  «        }}|j        r|                     |j         ¦  «        }| j        j        }||k    rt?          d|› d|› �¦  «        ‚|S )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.
        rE   Nr“   Úi8z)Cannot index an IntervalIndex of subtype z with values of dtype ) r   r/   r   rÆ   r"   rJ   rL   r%   r
   r”   rŽ   r‡   r>   r]   rs   r   r   Úordinalr   Ú_valuerN   Ú
datetime64rO   ÚviewrE   r-   Úasi8rš   r¼   Ú_isnanÚsubtypeÚ
ValueError)	r•   r—   ÚscalarrÇ   rŽ   r‡   ÚconstructorÚkey_i8rÑ   s	            rV   r”   zIntervalIndex._maybe_convert_i8  sè  € õ" ˜ÑÔð 	5Ý˜sÑ#Ô#ˆCÝ/°Ñ4Ô4ˆCà×(Ò(¨Ñ-Ô-ð 	ØˆJå˜3‘”ˆÝ˜C ¨$Ñ/Ô/ˆ	Ý�i¥Ñ/Ô/ð 	µ:¸cÅ8Ñ3LÔ3Lð 	à×)Ò)¨#¬(Ñ3Ô3ˆDØ×*Ò*¨3¬9Ñ5Ô5ˆEØ&,ÐK�(˜(µ-Ô2KˆKà�;Ø�e D¤Kðñ ô ð ð ð 	3å 7¸Ñ <Ô <ÑˆI�vÝ˜#�vÑ&Ô&ð +Øœ��Ý˜F¥IÑ.Ô.ð +Øœ��Ý˜F¥R¤]µB´NÐ$CÑDÔDð +ØŸš TÑ*Ô*�øð !$¤	­5°´©?¬?�vˆIØŒ{ð 3ð  Ÿš s¤z kÑ2Ô2�ð
 ”*Ô$ˆà�iÒÐÝð/¸Gð /ð /Ø#,ð/ð /ñô ð ð
 ˆrX   rŽ   ÚsideúLiteral['left', 'right']c                ón  — | j         st          d¦  «        ‚t          |t          t          f¦  «        rt          d¦  «        ‚|dk    r| j        j        s|dk    r*| j        j        s| j        }| j	        rt          |¦  «        }n| j        }| j        rt          |¦  «        }|                     ||¦  «        S )Nzrcan only get slices from an IntervalIndex if bounds are non-overlapping and all monotonic increasing or decreasingz,Interval objects are not currently supportedrŽ   r‡   )rr   rœ   rL   r   r>   ÚNotImplementedErrorrŽ   r´   r‡   rp   rW   ro   rZ   Ú_searchsorted_monotonic)r•   rU   rÖ   Úsub_idxs       rV   rÚ   z%IntervalIndex._searchsorted_monotonicP  sÇ   € ØÔ0ð 	ÝðMñô ð õ
 �e�m­]Ð;Ñ<Ô<ð 	VÝ%Ð&TÑUÔUÐUð
 �FŠNˆN˜tœyÔ@ˆNØ�GŠOˆO D¤IÔ$EˆOà”jˆGØŒð /Ý'¨Ñ.Ô.�øà”iˆGØŒ~ð /Ý'¨Ñ.Ô.�à×.Ò.¨u°dÑ;Ô;Ð;rX   úint | slice | np.ndarrayc                ón  — |                       |¦  «         t          |t          ¦  «        rA| j        |j        k    rt	          |¦  «        ‚| j        |j        k    | j        |j        k    z  }n›t          || j        ¦  «        r|  	                    ¦   «         }nq| j
        rt          nt          }| j        rt          nt          }	  || j        |¦  «         ||| j        ¦  «        z  }n"# t          $ r}t	          |¦  «        |‚d}~ww xY w|                     ¦   «         }|dk    rt	          |¦  «        ‚|dk    r|                     ¦   «         S t#          j        |                     d¦  «        ¦  «        }t          |t(          ¦  «        r/|j        €(t)          |j        t/          | ¦  «        |j        ¦  «        }|S )a£  
        Get integer location, slice or boolean mask for requested label.

        Parameters
        ----------
        key : label

        Returns
        -------
        int if unique index, slice if monotonic index, else mask

        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
        Nr   rG   Úu1)Ú_check_indexing_errorrL   r
   rs   rœ   rŽ   r‡   r&   rE   r¸   rm   r   r   rn   rR   r¹   Úargmaxr	   Úmaybe_booleans_to_slicerÎ   rŸ   ÚstopÚstartÚlenÚstep)r•   r—   ÚmaskÚop_leftÚop_rightÚerrÚmatchesr¢   s           rV   r›   zIntervalIndex.get_locm  s“  € ðJ 	×"Ò" 3Ñ'Ô'Ð'å�c�8Ñ$Ô$ð 	-ØŒ{˜cœjÒ(Ð(Ý˜s‘m”mÐ#Ø”I ¤Ò)¨d¬j¸C¼IÒ.EÑFˆDˆDÝ" 3¨¬
Ñ3Ô3ð 
	-Ø—9’9‘;”;ˆDˆDð !Ô,Ð4•b�bµ"ˆGØ!Ô.Ð6•r�rµBˆHð-Ø�w˜tœy¨#Ñ.Ô.°°¸#¸t¼zÑ1JÔ1JÑJ��øÝð -ð -ð -å˜s‘m”m¨Ð,øøøøð-øøøð —(’(‘*”*ˆØ�aŠ<ˆ<Ý˜3‘-”-ÐØ�aŠ<ˆ<Ø—;’;‘=”=Ð åÔ)¨$¯)ª)°D©/¬/Ñ:Ô:ˆÝ�c�5Ñ!Ô!ð 	8 c¤hÐ&6å˜œ	¥3 t¡9¤9¨c¬hÑ7Ô7ˆCØˆ
s   Ã#C% Ã%
DÃ/C?Ã?DÚtargetr-   Úmethodú
str | NoneÚlimitú
int | NoneÚ	toleranceú
Any | Noneúnpt.NDArray[np.intp]c                ó>  — t          |t          ¦  «        r|                      |¦  «        }ndt          |j        ¦  «        s5|                      |¦  «        }| j                             |j        ¦  «        }n|  	                    |¦  «        d         S t          |¦  «        S )Nr   )rL   r>   Ú_get_indexer_unique_sidesr!   rE   r”   r–   Úget_indexerÚvaluesÚ_get_indexer_pointwiser   )r•   rë   rì   rî   rð   Úindexers         rV   Ú_get_indexerzIntervalIndex._get_indexer°  s–   € õ �f�mÑ,Ô,ð 	:ð
 ×4Ò4°VÑ<Ô<ˆGˆGå  ¤Ñ.Ô.ð 	:ð ×+Ò+¨FÑ3Ô3ˆFØ”l×.Ò.¨v¬}Ñ=Ô=ˆGˆGð ×.Ò.¨vÑ6Ô6°qÔ9Ð9å" 7Ñ+Ô+Ð+rX   Úget_indexer_non_uniqueú1tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]]c                ó¶  — t          |¦  «        }|                      |¦  «        s-|                      |¦  «        s|                      |d d¬¦  «        S t	          |t
          ¦  «        ra| j        j        r@| j        j        r4|  	                    |¦  «        }|dk     
                    ¦   «         d         }nŠ|                      |¦  «        S t          |j        ¦  «        s|                      |¦  «        s|                      |¦  «        S |                      |¦  «        }| j                             |j        ¦  «        \  }}t%          |¦  «        t%          |¦  «        fS )NFr'   r³   r   )r/   Ú_should_compareÚ_should_partial_indexÚ_get_indexer_non_comparablerL   r>   rŽ   rº   r‡   rô   Únonzeror÷   r!   rE   r”   r–   rú   rö   r   )r•   rë   rø   Úmissings       rV   rú   z$IntervalIndex.get_indexer_non_uniqueÊ  sT  € õ ˜fÑ%Ô%ˆà×#Ò# FÑ+Ô+ð 	R°D×4NÒ4NÈvÑ4VÔ4Vð 	Rð ×3Ò3°F¸DÈÐ3ÑOÔOÐOå˜¥Ñ.Ô.ð 	RØŒyÔ"ð ; t¤zÔ';ð ;à×8Ò8¸Ñ@Ô@�Ø" bš=×1Ò1Ñ3Ô3°AÔ6��à×2Ò2°6Ñ:Ô:Ð:å˜Vœ\Ñ*Ô*ð 	R°$×2LÒ2LÈVÑ2TÔ2Tð 	Rà×.Ò.¨vÑ6Ô6Ð6ð
 ×+Ò+¨FÑ3Ô3ˆFØ#œ|×BÒBÀ6Ä=ÑQÔQÑˆG�Wå" 7Ñ+Ô+Õ-@ÀÑ-IÔ-IÐIÐIrX   c                ó¶   — | j                              |j         ¦  «        }| j                             |j        ¦  «        }t          j        ||k    |d¦  «        }|S )zZ
        _get_indexer specialized to the case where both of our sides are unique.
        r³   )rŽ   rõ   r‡   rN   r¼   )r•   rë   Úleft_indexerÚright_indexerrø   s        rV   rô   z'IntervalIndex._get_indexer_unique_sidesé  sO   € ð ”y×,Ò,¨V¬[Ñ9Ô9ˆØœ
×.Ò.¨v¬|Ñ<Ô<ˆÝ”(˜<¨=Ò8¸,ÈÑKÔKˆØˆrX   c                óÖ  — g g }}t          |¦  «        D �]#\  }}	 |                      |¦  «        }t          |t          ¦  «        r(t	          j        |j        |j        |j        d¬¦  «        }nEt          j
        |¦  «        rt	          j        |d¬¦  «        }nt	          j        |¦  «        d         }no# t          $ r- |                     |¦  «         t	          j        dg¦  «        }Y n9t          $ r- |                     |¦  «         t	          j        dg¦  «        }Y nw xY w|                     |¦  «         �Œ%t	          j        |¦  «        }t#          |¦  «        t#          |¦  «        fS )zV
        pointwise implementation for get_indexer and get_indexer_non_unique.
        Úintp©rE   rG   )Úndminr   r³   )Ú	enumerater›   rL   rŸ   rN   Úarangerã   râ   rå   r	   r   r„   r¼   rœ   Úappendr   Úconcatenater   )r•   rë   rø   r  Úir—   Úlocss          rV   r÷   z$IntervalIndex._get_indexer_pointwiseõ  sh  € ð ˜r�ˆÝ Ñ'Ô'ð 	!ñ 	!‰FˆAˆsð&Ø—|’| CÑ(Ô(�Ý˜d¥EÑ*Ô*ð -åœ9 T¤Z°´¸D¼IÈVÐTÑTÔT�D�DÝ”^ DÑ)Ô)ð -Ýœ8 D°Ð2Ñ2Ô2�D�Dõ œ8 D™>œ>¨!Ô,�DøøÝð &ð &ð &Ø—’˜qÑ!Ô!Ð!Ý”x  ‘~”~���Ý$ð &ð &ð &ð —’˜qÑ!Ô!Ð!Ý”x  ‘~”~���ð	&øøøð �NŠN˜4Ñ Ô Ð Ñ å”. Ñ)Ô)ˆÝ" 7Ñ+Ô+Õ-@ÀÑ-IÔ-IÐIÐIs   ›BB3Â34DÃ)3DÄDc                ó2   — | j          o| j        j        dk     S )Né   )rÄ   r–   Ú	_na_countr¦   s    rV   Ú_index_as_uniquezIntervalIndex._index_as_unique  s   € àÔ&Ð&ÐE¨4¬<Ô+AÀAÒ+EÐErX   zKcannot handle overlapping indices; use IntervalIndex.get_indexer_non_uniqueÚkindúLiteral['loc', 'getitem']c                óâ   •— |j         �F|j         dk    s;d}|dk    rt          |¦  «        ‚|dk    rt          |¦  «        st          |¦  «        ‚t          ¦   «                              ||¦  «        S )NrG   zClabel-based slicing with step!=1 is not supported for IntervalIndexÚlocÚgetitem)rå   rÒ   r,   ÚsuperÚ_convert_slice_indexer)r•   r—   r  ÚmsgÚ	__class__s       €rV   r  z$IntervalIndex._convert_slice_indexer  ss   ø€ Ø”Ð  C¤H°¢M Mð XˆCØ�uŠ}ˆ}Ý  ‘o”oÐ%Ø�yÒ Ð Ý0°Ñ5Ô5ð *å$ S™/œ/Ð)å‰wŒw×-Ò-¨c°4Ñ8Ô8Ð8rX   c                ó(   — | j         j        j        dv S )NrF   )rE   rÑ   r  r¦   s    rV   Ú_should_fallback_to_positionalz,IntervalIndex._should_fallback_to_positional+  s   € ð ŒzÔ!Ô&¨$Ð.Ð.rX   c                óJ   — t          | |¦  «                             ||¦  «        S ©N)rJ   Ú_maybe_cast_slice_bound)r•   rU   rÖ   s      rV   r   z%IntervalIndex._maybe_cast_slice_bound3  s"   € Ý�t˜TÑ"Ô"×:Ò:¸5À$ÑGÔGÐGrX   r:   c                ó|   — t          |t          ¦  «        sdS t          | j        |g¦  «        }t	          |¦  «         S )NF)rL   r%   r   rE   r!   )r•   rE   Úcommon_subtypes      rV   Ú_is_comparable_dtypez"IntervalIndex._is_comparable_dtype6  s>   € Ý˜%¥Ñ/Ô/ð 	Ø�5Ý)¨4¬:°uÐ*=Ñ>Ô>ˆÝ" >Ñ2Ô2Ð2Ð2rX   c                ó8   — t          | j        j        d¬¦  «        S ©NF)r|   )r-   rx   rŽ   r¦   s    rV   rŽ   zIntervalIndex.left>  s   € å�T”Z”_¨5Ð1Ñ1Ô1Ð1rX   c                ó8   — t          | j        j        d¬¦  «        S r%  )r-   rx   r‡   r¦   s    rV   r‡   zIntervalIndex.rightB  s   € å�T”ZÔ%¨EÐ2Ñ2Ô2Ð2rX   c                ó8   — t          | j        j        d¬¦  «        S r%  )r-   rx   Úmidr¦   s    rV   r(  zIntervalIndex.midF  s   € å�T”Z”^¨%Ð0Ñ0Ô0Ð0rX   c                ó8   — t          | j        j        d¬¦  «        S r%  )r-   rx   Úlengthr¦   s    rV   r*  zIntervalIndex.lengthJ  s   € å�T”ZÔ&¨UÐ3Ñ3Ô3Ð3rX   c                óh  — | j         j        r"| j        j        r|                      |¦  «        }nm|j         j        rL|j        j        r@|                      ¦   «                              ¦   «         dk    r|                     | ¦  «        }n|                      |¦  «        }|€|                     ¦   «         }|S )zL
        intersection specialized to the case with matching dtypes.
        rG   )rŽ   rº   r‡   Ú_intersection_uniquer¸   r¹   Ú_intersection_non_uniqueÚsort_values)r•   ÚotherÚsortÚtakens       rV   Ú_intersectionzIntervalIndex._intersectionQ  s¯   € ð
 Œ9Ôð 	9 4¤:Ô#7ð 	9Ø×-Ò-¨eÑ4Ô4ˆEˆEØŒZÔ!ð 	9 e¤kÔ&;ð 	9ÀÇ	Â	ÁÄÇÂÑ@QÔ@QÐUVÒ@VÐ@Vð ×.Ò.¨tÑ4Ô4ˆEˆEð ×1Ò1°%Ñ8Ô8ˆEàˆ<Ø×%Ò%Ñ'Ô'ˆEàˆrX   r/  c                ó:  — | j                              |j         ¦  «        }| j                             |j        ¦  «        }||k    |dk    z  }|                     |                     ¦   «         d         ¦  «        }t          |¦  «        }|                      |¦  «        S )a'  
        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õ   r‡   Útaker   r(   )r•   r/  ÚlindexerÚrindexerÚmatchrø   s         rV   r,  z"IntervalIndex._intersection_uniquee  s€   € ð ”9×(Ò(¨¬Ñ4Ô4ˆØ”:×)Ò)¨%¬+Ñ6Ô6ˆà˜XÒ%¨(°bª.Ñ9ˆØ—-’- §¢¡¤°Ô 2Ñ3Ô3ˆÝ˜‘/”/ˆà�yŠy˜Ñ!Ô!Ð!rX   c                óÀ  — t          j        t          | ¦  «        t          ¬¦  «        }| j        rK|j        rDt          j        t          | ¦  «        ¦  «        |                      ¦   «                  d         }d||<   t          t          |j	        |j
        ¦  «        ¦  «        }t          t          | j	        | j
        ¦  «        ¦  «        D ]\  }}||v rd||<   Œ| |         S )a  
        Used when the IntervalIndex does have some common endpoints,
        on either sides.
        Return the intersection with another IntervalIndex.

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

        Returns
        -------
        IntervalIndex
        r  r   T)rN   Úzerosrä   rw   rš   r
  r¸   r»   ÚziprŽ   r‡   r	  )r•   r/  ræ   Úfirst_nan_locÚ
other_tupsr  Útups          rV   r-  z&IntervalIndex._intersection_non_unique{  sÅ   € õ  Œx�˜D™	œ	­Ð.Ñ.Ô.ˆàŒ<ð 	'˜EœMð 	'ÝœI¥c¨$¡i¤iÑ0Ô0°·²±´Ô=¸aÔ@ˆMØ"&ˆD�Ñå�˜UœZ¨¬Ñ5Ô5Ñ6Ô6ˆ
Ý¥ D¤I¨t¬zÑ :Ô :Ñ;Ô;ð 	ð 	‰FˆAˆsØ�jÐ Ð Ø��Q‘øà�DŒzÐrX   ú
np.ndarrayc                ó    — t          d¦  «        ‚)NzRIntervalIndex does not use libjoin fastpaths or pass values to IndexEngine objects©rÙ   r¦   s    rV   Ú_get_engine_targetz IntervalIndex._get_engine_targetš  s   € õ "ð"ñ
ô 
ð 	
rX   c                ó    — t          d¦  «        ‚)Nz,IntervalIndex does not use libjoin fastpathsr@  )r•   Úresults     rV   Ú_from_join_targetzIntervalIndex._from_join_target£  s   € Ý!Ð"PÑQÔQÐQrX   )NNFNT)rs   rz   rE   r{   r|   rw   rB   r}   r~   rw   r   r<   )r‡   NFN)
rs   rz   rB   r}   r|   rw   rE   r{   r   r>   )
rs   r;   rB   r}   r|   rw   rE   r{   r   r>   )r   r   )r—   r   r   rw   )rž   rŸ   r   r>   )r   r5   )r   rª   )F)r®   rw   r   r¯   ©r   rw   )rŽ   )rÖ   r×   )r   rÜ   )NNN)
rë   r-   rì   rí   rî   rï   rð   rñ   r   rò   )rë   r-   r   rû   )rë   r>   r   rò   )r—   rŸ   r  r  )rÖ   rª   )rE   r:   r   rw   )r   r-   )r/  r>   r   r>   )r   r>  )9r�   Ú
__module__Ú__qualname__Ú_typÚ__annotations__Ú_can_hold_stringsr*   Ú	_data_clsr…   Úclassmethodr   r+   ÚtextwrapÚdedentr†   r]   r�   r   r–   r�   r£   r§   r©   Úpropertyr­   r-   r±   Ú__doc__rµ   rº   rÄ   rÆ   r”   rÚ   r›   rù   r.   Ú_index_doc_kwargsrú   rô   r÷   r  Ú_requires_unique_msgr  r  r   r#  rŽ   r‡   r(  r*  r2  r,  r-  rA  rD  Ú__classcell__)r  s   @rV   r>   r>   Ÿ   s  ø€ € € € € € ðZ €Dð ÐÐÑØ&Ð&Ð&Ñ&ØÐÐÑØÐÐÑØ€O€O�OØÐÐÑàÐÐÑØÐÐÑØÐØ€Ið -1Ø"ØØ $Ø!%ð,ð ,ð ,ð ,ð ,ð, Ø€XØ˜mÔ,à$Ø#�H”Oð:ñô ð
 (˜œðñô ð
ð 
ñ	
ñô ð. -4Ø $ØØ"ð1ð 1ð 1ð 1ñ)ô ñ „[ð*1ð Ø€XØ˜mÔ,à$Ø#�H”Oð:ñô ð
 (˜œðñô ð
ð 
ñ	
ñô ð0 &-Ø $ØØ"ð1ð 1ð 1ð 1ñ)ô ñ „[ð*1ð Ø€XØ˜mÔ,à$Ø#�H”Oð:ñô ð
 (˜œðñô ð
ð 
ñ	
ñô ð. &-Ø $ØØ"ð
/ð 
/ð 
/ð 
/ñ)ô ñ „[ð*
/ð ð=ð =ð =ñ „^ð=ðð ð ð ð2<ð <ð <ð <ð ðXð Xð Xñ „^ðXð9ð 9ð 9ð ðð ð ñ „Xðð
 €XˆeÔ Ô(Ñ)Ô)ðVð Vð Vð Vñ *Ô)ðVð ð2ð 2ð 2ñ „^ð2ð ðð ð ñ „^ðð. ð/+ð /+ð /+ñ „Xð/+ðb)ð )ð )ð )ð2@ð @ð @ðD<ð <ð <ð <ð <ð:Að Að Að AðL "Ø Ø $ð,ð ,ð ,ð ,ð ,ð4 €XÐ Ð!9Ô:Ð=NÑNÑOÔOðJð Jð Jñ PÔOðJð<
ð 
ð 
ð 
ðJð Jð Jð Jð@ ðFð Fð Fñ „^ðFð 	Vð ð9ð 9ð 9ð 9ð 9ð 9ð ð/ð /ð /ñ „^ð/ðHð Hð Hð Hð3ð 3ð 3ð 3ð ð2ð 2ð 2ñ „^ð2ð ð3ð 3ð 3ñ „^ð3ð ð1ð 1ð 1ñ „^ð1ð ð4ð 4ð 4ñ „Xð4ðð ð ð("ð "ð "ð "ð,ð ð ð ð>
ð 
ð 
ð 
ðRð Rð Rð Rð Rð Rð RrX   r   rw   c                ó’   — t          t          | ¦  «        t          | t          ¦  «        t          | t          ¦  «        | du g¦  «        S )zJ
    Helper for interval_range to check if start/end are valid types.
    N)Úanyr    rL   r   r   )Úendpoints    rV   Ú_is_valid_endpointrW  ©  sH   € õ å�hÑÔÝ�x¥Ñ+Ô+Ý�x¥Ñ+Ô+Ø˜Ðð		
ñô ð rX   c                óÌ   — d„ }d„ }t          | ¦  «        rt          |¦  «        p@ || ¦  «        o
 ||¦  «        p* || ¦  «        o
 ||¦  «        pt          j        | |¦  «        S )zK
    Helper for interval_range to check type compat of start/end/freq.
    c                ó:   — t          | t          t          f¦  «        S r  )rL   r   r   ©Úxs    rV   ú<lambda>z%_is_type_compatible.<locals>.<lambda>»  ó   € �Z¨­IµzÐ+BÑCÔC€ rX   c                ó:   — t          | t          t          f¦  «        S r  )rL   r   r   rZ  s    rV   r\  z%_is_type_compatible.<locals>.<lambda>¼  r]  rX   )r    ÚcomÚany_none)ÚaÚbÚis_ts_compatÚis_td_compats       rV   Ú_is_type_compatiblere  ·  s~   € ð DÐC€LØCÐC€Lå	�1‰ŒÐ	&�) A™,œ,ð 	ØˆL˜‰OŒOÐ/  ¨Q¡¤ð	àˆL˜‰OŒOÐ/  ¨Q¡¤ð	õ Œ<˜˜1ÑÔð	rX   r‡   r}   r;   c                ó6  — t          | ¦  «        } t          |¦  «        }| �| n|}|€)t          j        || |¦  «        rt          |¦  «        rdnd}t          j        | |||¦  «        dk    rt          d¦  «        ‚t          | ¦  «        st          d| › �¦  «        ‚t          |¦  «        st          d|› �¦  «        ‚t          |¦  «        }|�Et          |¦  «        s6	 t          |¦  «        }n%# t
          $ r}t          d|› �¦  «        |‚d}~ww xY wt          t          | |¦  «        t          | |¦  «        t          ||¦  «        g¦  «        st          d	¦  «        ‚|�|dz  }t          |¦  «        rÏt          j        | ||¦  «        rt          j        | ||d
z  z   |¦  «        }nL|€t          || z
  |z  ¦  «        dz   }n| €||dz
  |z  z
  } n|€| |dz
  |z  z   }t          j        | ||¦  «        }t          d„ t          j        | ||¦  «        D ¦   «         ¦  «        r"t%          |t          j        d¦  «        ¦  «        }n<t)          |t*          ¦  «        rt-          | |||¬¦  «        }nt/          | |||¬¦  «        }t0                               |||¬¦  «        S )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

    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 `this link
    <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#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[ns], 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[ns], 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]')
    NrG   ÚDé   zVOf 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 compatiblegš™™™™™¹?c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r  )r   )Ú.0r[  s     rV   ú	<genexpr>z!interval_range.<locals>.<genexpr>_  s(   è è € ÐEÐE �z˜!‰}Œ}ÐEÐEÐEÐEÐEÐErX   Úint64)rã   ÚendÚperiodsÚfreq)rB   rs   )r   r_  r`  r    Úcount_not_nonerÒ   rW  r)   r   Úallre  rR   Úall_not_nonerN   r
  r¯   ÚlinspaceÚnot_noner   rE   rL   r   r2   r7   r>   r†   )	rã   rm  rn  ro  rB   rs   rV  ré   r‹   s	            rV   Úinterval_rangeru  Å  s  € õ@ # 5Ñ)Ô)€EÝ
  Ñ
%Ô
%€CØÐ)ˆuˆu¨s€Hà€|�œ W¨e°SÑ9Ô9€|Ý˜hÑ'Ô'Ð0ˆqˆq¨Sˆå
Ô˜%  g¨tÑ4Ô4¸Ò9Ð9Ýð4ñ
ô 
ð 	
õ
 ˜eÑ$Ô$ð QÝÐOÈÐOÐOÑPÔPÐPÝ˜cÑ"Ô"ð MÝÐKÀcÐKÐKÑLÔLÐLå˜wÑ'Ô'€GàÐ¥	¨$¡¤Ðð	Ý˜T‘?”?ˆDˆDøÝð 	ð 	ð 	ÝØPÈ$ÐPÐPñô àðøøøøð	øøøõ å  sÑ+Ô+Ý  tÑ,Ô,Ý  TÑ*Ô*ð	
ñô ð Gõ ÐEÑFÔFÐFð ÐØ�1‰ˆõ �ÑÔð WÝÔ˜E 3¨Ñ-Ô-ð 	6å”Y˜u c¨T°C©ZÑ&8¸$Ñ?Ô?ˆFˆFð ˆÝ˜s U™{¨tÑ3Ñ4Ô4°qÑ8��Ø�Ø˜w¨™{¨dÑ2Ñ2��Ø�Ø˜w¨™{¨dÑ2Ñ2�å”[ ¨¨WÑ5Ô5ˆFÝÐEÐE¥c¤l°5¸#¸tÑ&DÔ&DÐEÑEÔEÑEÔEð 		õ ,ØÝ”˜Ñ!Ô!ñô ˆFøõ �h¥	Ñ*Ô*ð 	WÝ e°¸gÈDÐQÑQÔQˆFˆFå$¨5°cÀ7ÐQUÐVÑVÔVˆFå×$Ò$ V°$¸vÐ$ÑFÔFÐFs   ÃC- Ã-
DÃ7D
Ä
DrE  )NNNNNr‡   )rB   r}   rs   r;   r   r>   )hrP  Ú
__future__r   Úoperatorr   r   rM  Útypingr   r   r   ÚnumpyrN   Ú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   Úpandas.core.dtypes.commonr   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*   r+   Úpandas.core.commonÚcoreÚcommonr_  Úpandas.core.indexersr,   Úpandas.core.indexes.baseÚindexesÚbaseÚibaser-   r.   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<   r=   ÚdictrQ  ÚupdaterN  rW   rZ   r`   r>   rW  re  ru  r\   rX   rV   ú<module>r—     s(  ðØ  Ð  Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð €€€ðð ð ð ð ð ð ð ð ð ð Ð Ð Ð à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +ðð ð ð ð ð ð ð ð 6Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <à )Ð )Ð )Ð )Ð )Ð )Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð !Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø :Ð :Ð :Ð :Ð :Ð :Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð
 ð 	Ø(Ð(Ð(Ð(Ð(Ð(ðð ð ð ð ð ð ð ð ð ð ð ð ð ð �D˜Ô0Ñ1Ô1Ð à × Ò à Ø#Ø<Ø�”ðñ
ô 
ð	
ð 
ñô ð ðUð Uð Uð"Uð Uð Uð" ð  ð  ð 
€Ø˜'Ô"à ØSØ! &Ô)Ø6ØØ#�H”Oðñ
ô 
ðð ññô ð: €�˜kÐ*¨MÀÐEÑEÔEØ€ð	ð 	ð 	ð ñô ð €Ð.°Ð9¸=ÐPTÐUÑUÔUðYRð YRð YRð YRð YR�Nñ YRô YRñ VÔUñô ñ FÔEñ;ô ðXYRð|ð ð ð ðð ð ð ð ØØØ	Ø Ø!(ðkGð kGð kGð kGð kGð kGð kGrX   