Ë
    *�£j¨K  ã                  óZ  — d dl mZ d dlmZmZ d dlmZmZ d dlZd dl	m
Z d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'c m(Z) d dl*m'c m+c m,Z- d dl*m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 erd dl6m7Z7 d dl8m9Z9m:Z:m;Z;  e<e-jz                  «      Z=e=j}                  ddi«       ddiZ?d„ Z@ e5dddge"j‚                  ¢e"d¬«       e5dge"«       ed«       G d „ d!e0«      «       «       «       ZB ed«      	 	 	 	 	 d#	 	 	 	 	 d$d"„«       ZCy)%é    )Úannotations)ÚdatetimeÚ	timedelta)ÚTYPE_CHECKINGÚSelfN)Úindex)Ú
BaseOffsetÚDayÚNaTÚPeriodÚ
ResolutionÚTick)ÚOFFSET_TO_PERIOD_FREQSTR)Úcache_readonlyÚdocÚ
set_module)Ú
is_integer)ÚPeriodDtype)Ú	ABCSeries)Úis_valid_na_for_dtype)ÚPeriodArrayÚperiod_arrayÚraise_on_incompatibleÚvalidate_dtype_freq)Úmaybe_extract_name)ÚDatetimeIndexOpsMixin)ÚDatetimeIndexÚIndex)Úinherit_names)ÚHashable)ÚDtypeÚDtypeObjÚnptÚtarget_klasszPeriodIndex or list of PeriodsÚklassr   c                óÎ   — |j                  d«      }|j                  dk(  r=|j                  dd «      }t        |«      }t        ||¬«      } | j                  |fi |¤ŽS  | |fi |¤ŽS )NÚdataÚint64Úfreq©Údtype)Úpopr+   r   r   Ú_simple_new)ÚclsÚdÚvaluesr)   r+   s        ú<C:\FundamentalWorkbench\vendor\pandas\core\indexes\period.pyÚ_new_PeriodIndexr2   F   sg   € à�U‰U�6‹]€FØ‡|�|�wÒØ�u‰u�V˜TÓ"ˆÜ˜DÓ!ˆÜ˜V¨5Ô1ˆØˆs�‰˜vÑ+¨Ñ+Ð+á�6Ñ˜QÑÐó    ÚstrftimeÚ
start_timeÚend_timeT)ÚwrapÚis_leap_yearÚpandasc            
      ó  ‡ — e Zd ZU dZdZded<   ded<   ded<   eZd	Ze	d&d
„«       Z
ed'd„«       Z eej                  fdddœe¤Žd(d)d„«       Z eej                   «      d*d+d„«       Ze	 eej"                  j$                  «      d,d„«       «       Ze	 eej&                  j$                  «      d,d„«       «       Ze	 eej(                  j$                  «      d,d„«       «       Z	 	 	 	 	 d-	 	 	 	 	 	 	 d.d„Zedddddddddœ	 d/d„«       Zeddœd/d„«       Ze	d0d„«       Zd1d„Zd2d„Zd3ˆ fd„Ze	d4d„«       Ze	d5d„«       Zˆ fd„Zd „ Z d6d!„Z!d7d"„Z" ee#jH                  «      d8ˆ fd#„«       Z$d9d$„Z% ee#jL                  «      d:d;d%„«       Z&ˆ xZ'S )<ÚPeriodIndexa9  
    Immutable ndarray holding ordinal values indicating regular periods in time.

    Index keys are boxed to Period objects which carries the metadata (eg,
    frequency information).

    Parameters
    ----------
    data : array-like (1d int np.ndarray or PeriodArray), optional
        Optional period-like data to construct index with.
    freq : str or period object, optional
        One of pandas period strings or corresponding objects.
    dtype : str or PeriodDtype, default None
        A dtype from which to extract a freq.
    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 : str, default None
        Name of the resulting PeriodIndex.

    Attributes
    ----------
    day
    dayofweek
    day_of_week
    dayofyear
    day_of_year
    days_in_month
    daysinmonth
    end_time
    freq
    freqstr
    hour
    is_leap_year
    minute
    month
    quarter
    qyear
    second
    start_time
    week
    weekday
    weekofyear
    year

    Methods
    -------
    asfreq
    strftime
    to_timestamp
    from_fields
    from_ordinals

    Raises
    ------
    ValueError
        Passing the parameter data as a list without specifying either freq or
        dtype will raise a ValueError: "freq not specified and cannot be inferred"

    See Also
    --------
    Index : The base pandas Index type.
    Period : Represents a period of time.
    DatetimeIndex : Index with datetime64 data.
    TimedeltaIndex : Index of timedelta64 data.
    period_range : Create a fixed-frequency PeriodIndex.

    Examples
    --------
    >>> idx = pd.PeriodIndex(data=["2000Q1", "2002Q3"], freq="Q")
    >>> idx
    PeriodIndex(['2000Q1', '2002Q3'], dtype='period[Q-DEC]')
    Úperiodindexr   Ú_datar	   r)   r   r+   Tc                ó"   — t         j                  S ©N)ÚlibindexÚPeriodEngine©Úselfs    r1   Ú_engine_typezPeriodIndex._engine_type±   s   € ä×$Ñ$Ð$r3   c                ó.   — | j                   j                  S r?   )r+   Ú_resolution_objrB   s    r1   rF   zPeriodIndex._resolution_objµ   s   € ð �z‰z×)Ñ)Ð)r3   zarrays.PeriodArray)ÚotherÚ
other_nameNc                ó†   — | j                   j                  ||«      }t        | «      j                  || j                  ¬«      S ©N©Úname)r=   ÚasfreqÚtyper-   rL   ©rC   r)   ÚhowÚarrs       r1   rM   zPeriodIndex.asfreq¾   s8   € ð �j‰j×Ñ  cÓ*ˆÜ�D‹z×%Ñ% c°·	±	Ð%Ó:Ð:r3   c                ó|   — | j                   j                  ||«      }t        j                  || j                  ¬«      S rJ   )r=   Úto_timestampr   r-   rL   rO   s       r1   rS   zPeriodIndex.to_timestampÈ   s/   € à�j‰j×%Ñ% d¨CÓ0ˆÜ×(Ñ(¨°4·9±9Ô=Ð=r3   c                óZ   — t        | j                  j                  | j                  d¬«      S ©NF©rL   Úcopy)r   r=   ÚhourrL   rB   s    r1   rX   zPeriodIndex.hourÍ   s   € ô �T—Z‘Z—_‘_¨4¯9©9¸5ÔAÐAr3   c                óZ   — t        | j                  j                  | j                  d¬«      S rU   )r   r=   ÚminuterL   rB   s    r1   rZ   zPeriodIndex.minuteÒ   ó!   € ô �T—Z‘Z×&Ñ&¨T¯Y©Y¸UÔCÐCr3   c                óZ   — t        | j                  j                  | j                  d¬«      S rU   )r   r=   ÚsecondrL   rB   s    r1   r]   zPeriodIndex.second×   r[   r3   c                ón  — d }|s"t        |t        t        f«      r|j                  }t	        ||| «      }t        ||«      }| j                  |||«      \  }}|r,t        || «      r |j                  |k7  r|j                  |«      }t        ||¬«      }|r|j                  «       }| j                  |||¬«      S )N)r'   r)   )rL   Úrefs)Ú
isinstancer   r   Ú_referencesr   r   Ú_maybe_copy_array_inputr)   rM   r   rW   r-   )r.   r'   r)   r+   rW   rL   r_   s          r1   Ú__new__zPeriodIndex.__new__ß   s³   € ð ˆÙœ
 4¬%´Ð);Ô<Ø×#Ñ#ˆDä! $¨¨cÓ2ˆä" 5¨$Ó/ˆð ×0Ñ0°°t¸UÓC‰
ˆˆdñ
 ”J˜t SÔ)¨d¯i©i¸4Ò.?ð —;‘;˜tÓ$ˆDô  ¨DÔ1ˆáØ—9‘9“;ˆDà�‰˜t¨$°TˆÓ:Ð:r3   )ÚyearÚquarterÚmonthÚdayrX   rZ   r]   r)   c               ó¾   — |||||||dœ}	|	j                  «       D �
�ci c]  \  }
}|€Œ	|
|“Œ }	}
}t        j                  |	|¬«      }| j                  |«      S c c}}
w )a  
        Construct a PeriodIndex from fields (year, month, day, etc.).

        Parameters
        ----------
        year : int, array, or Series, default None
            Year for the PeriodIndex.
        quarter : int, array, or Series, default None
            Quarter for the PeriodIndex.
        month : int, array, or Series, default None
            Month for the PeriodIndex.
        day : int, array, or Series, default None
            Day for the PeriodIndex.
        hour : int, array, or Series, default None
            Hour for the PeriodIndex.
        minute : int, array, or Series, default None
            Minute for the PeriodIndex.
        second : int, array, or Series, default None
            Second for the PeriodIndex.
        freq : str or period object, optional
            One of pandas period strings or corresponding objects.

        Returns
        -------
        PeriodIndex

        See Also
        --------
        PeriodIndex.from_ordinals : Construct a PeriodIndex from ordinals.
        PeriodIndex.to_timestamp : Cast to DatetimeArray/Index.

        Examples
        --------
        >>> idx = pd.PeriodIndex.from_fields(year=[2000, 2002], quarter=[1, 3])
        >>> idx
        PeriodIndex(['2000Q1', '2002Q3'], dtype='period[Q-DEC]')
        )rd   re   rf   rg   rX   rZ   r]   )Úfieldsr)   )Úitemsr   Ú_from_fieldsr-   )r.   rd   re   rf   rg   rX   rZ   r]   r)   ri   ÚkeyÚvaluerQ   s                r1   Úfrom_fieldszPeriodIndex.from_fields  sq   € ðf ØØØØØØñ
ˆð 06¯|©|¬~ÔS©~¡  eÀÑAR�#�u‘*¨~ˆÑSÜ×&Ñ&¨f¸4Ô@ˆØ�‰˜sÓ#Ð#ùó Ts
   ž
A©ArK   c               ó¶   — t        j                  |t         j                  ¬«      }t        |«      }t	        j
                  ||¬«      }| j                  ||¬«      S )aE  
        Construct a PeriodIndex from ordinals.

        Parameters
        ----------
        ordinals : array-like of int
            The period offsets from the proleptic Gregorian epoch.
        freq : str or period object
            One of pandas period strings or corresponding objects.
        name : str, default None
            Name of the resulting PeriodIndex.

        Returns
        -------
        PeriodIndex

        See Also
        --------
        PeriodIndex.from_fields : Construct a PeriodIndex from fields
            (year, month, day, etc.).
        PeriodIndex.to_timestamp : Cast to DatetimeArray/Index.

        Examples
        --------
        >>> idx = pd.PeriodIndex.from_ordinals([-1, 0, 1], freq="Q")
        >>> idx
        PeriodIndex(['1969Q4', '1970Q1', '1970Q2'], dtype='period[Q-DEC]')
        r*   rK   )ÚnpÚasarrayr(   r   r   r-   )r.   Úordinalsr)   rL   r+   r'   s         r1   Úfrom_ordinalszPeriodIndex.from_ordinalsA  sG   € ô< —:‘:˜h¬b¯h©hÔ7ˆÜ˜DÓ!ˆÜ×&Ñ& x°uÔ=ˆØ�‰˜t¨$ˆÓ/Ð/r3   c                ó8   — t        j                  | t        ¬«      S )Nr*   )rp   rq   ÚobjectrB   s    r1   r0   zPeriodIndex.valuesg  s   € ä�z‰z˜$¤fÔ-Ð-r3   c                óÐ  — t        |t        t        j                  t        t        j
                  f«      r=t        | j                  t        t        f«      r‡| j                  j                  |«      }|S t        |t        «      r;|j                  | j                  j                  k(  r|j                  S t        | |«      ‚t        |«      rt        |t        «      sJ ‚|S t        | d«      ‚)aÅ  
        Convert timedelta-like input to an integer multiple of self.freq

        Parameters
        ----------
        other : timedelta, np.timedelta64, DateOffset, int, np.ndarray

        Returns
        -------
        converted : int, np.ndarray[int64]

        Raises
        ------
        IncompatibleFrequency : if the input cannot be written as a multiple
            of self.freq.  Note IncompatibleFrequency subclasses ValueError.
        N)r`   r   rp   Útimedelta64r   Úndarrayr)   r
   r=   Ú _check_timedeltalike_freq_compatr	   ÚbaseÚnr   r   Úint)rC   rG   Údeltas      r1   Ú_maybe_convert_timedeltaz$PeriodIndex._maybe_convert_timedeltak  sª   € ô" �eœi¬¯©¼¼r¿z¹zÐJÔKÜ˜$Ÿ)™)¤d¬C [Ô1àŸ
™
×CÑCÀEÓJ�Ø�Ü˜œzÔ*Ø�z‰z˜TŸY™YŸ^™^Ò+Ø—w‘w�ä'¨¨eÓ4Ð4Ü˜ÔÜ˜e¤SÔ)Ð)Ð)ØˆLô $ D¨$Ó/Ð/r3   c                ó    — | j                   |k(  S )zF
        Can we compare values of the given dtype to our own?
        r*   )rC   r+   s     r1   Ú_is_comparable_dtypez PeriodIndex._is_comparable_dtype�  s   € ð �z‰z˜UÑ"Ð"r3   c                óÀ   •— t        |t        «      r#t        |j                  | j                  d¬«      }nt        |t        «      st        d«      ‚t        ‰| �  ||«      S )z�
        where : array of timestamps
        mask : np.ndarray[bool]
            Array of booleans where data is not NA.
        F)r)   rW   z6asof_locs `where` must be DatetimeIndex or PeriodIndex)r`   r   r;   Ú_valuesr)   Ú	TypeErrorÚsuperÚ	asof_locs)rC   ÚwhereÚmaskÚ	__class__s      €r1   r…   zPeriodIndex.asof_locs–  sM   ø€ ô �eœ]Ô+Ü §¡°D·I±IÀEÔJ‰EÜ˜E¤;Ô/ÜÐTÓUÐUä‰wÑ  ¨Ó-Ð-r3   c                ó°   — t        | «      dk(  ry| j                  st        d«      ‚| j                  }t	        |dd |dd z
  dk  j                  «       «      S )z‰
        Returns True if this PeriodIndex is range-like in that all Periods
        between start and end are present, in order.
        r   TzIndex is not monotonicé   Néÿÿÿÿé   )ÚlenÚis_monotonic_increasingÚ
ValueErrorÚasi8ÚboolÚall)rC   r0   s     r1   Úis_fullzPeriodIndex.is_full£  sZ   € ô ˆt‹9˜Š>ØØ×+Ò+ÜÐ5Ó6Ð6Ø—‘ˆÜ�f˜Q˜R�j 6¨#¨2 ;Ñ.°!Ñ3×8Ñ8Ó:Ó;Ð;r3   c                 ó   — y)NÚperiod© rB   s    r1   Úinferred_typezPeriodIndex.inferred_type°  s   € ð r3   c                ó|   •— t         ‰| �  ||«      }| j                  |j                  k(  r| j                  |«      }|S r?   )r„   Ú_convert_tolerancer+   r~   )rC   Ú	toleranceÚtargetrˆ   s      €r1   r™   zPeriodIndex._convert_tolerance¹  s<   ø€ ô
 ‘GÑ.¨y¸&ÓAˆ	à�:‰:˜Ÿ™Ò%à×5Ñ5°iÓ@ˆIàÐr3   c                óÎ  — |}| j                  |«       t        || j                  «      rt        }nÄt	        |t
        «      re	 | j                  |«      \  }}| j                  |«      r	 | j                  ||«      S || j                  k(  r| j                  |«      }nZt        |«      ‚t	        |t        «      r| j                  |«       n-t	        |t        «      r| j                  |«      }nt        |«      ‚	 t!        j"                  | |«      S # t        $ r}t        d|› d�«      |‚d}~ww xY w# t        $ r}t        |«      |‚d}~ww xY w# t        $ r}t        |«      |‚d}~ww xY w)a»  
        Get integer location for requested label.

        Parameters
        ----------
        key : Period, NaT, str, or datetime
            String or datetime key must be parsable as Period.

        Returns
        -------
        loc : int or ndarray[int64]

        Raises
        ------
        KeyError
            Key is not present in the index.
        TypeError
            If key is listlike or otherwise not hashable.
        zCannot interpret 'z' as periodN)Ú_check_indexing_errorr   r+   r   r`   ÚstrÚ_parse_with_resor�   ÚKeyErrorÚ_can_partial_date_sliceÚ_partial_date_slicerF   Ú_cast_partial_indexing_scalarr   Ú_disallow_mismatched_indexingr   r   Úget_loc)rC   rl   Úorig_keyÚparsedÚresoÚerrs         r1   r¥   zPeriodIndex.get_locÆ  s\  € ð( ˆà×"Ñ" 3Ô'ä   d§j¡jÔ1Ü‰Cä˜œSÔ!ðOØ#×4Ñ4°SÓ9‘�˜ð
 ×+Ñ+¨DÔ1ð1Ø×3Ñ3°D¸&ÓAÐAð �t×+Ñ+Ò+ð ×8Ñ8¸Ó@‘ä˜s“mÐ#ä˜œVÔ$Ø×.Ñ.¨sÕ3ä˜œXÔ&Ø×4Ñ4°SÓ9‰Cô ˜3“-Ðð	.Ü—=‘=  sÓ+Ð+øô9 ò OäÐ!3°C°5¸ÐDÓEÈ3ÐNûðOûô  ò 1Ü" 3›-¨SÐ0ûð1ûô, ò 	.Ü˜8Ó$¨#Ð-ûð	.úsH   ÁD Á(D- Ã6E
 Ä	D*ÄD%Ä%D*Ä-	EÄ6EÅEÅ
	E$ÅEÅE$c                óL   — |j                   | j                  k7  rt        |«      ‚y r?   )Ú_dtyper+   r    )rC   rl   s     r1   r¤   z)PeriodIndex._disallow_mismatched_indexing  s!   € Ø�:‰:˜Ÿ™Ò#Ü˜3“-Ðð $r3   c                óp   — 	 t        || j                  ¬«      }|S # t        $ r}t        |«      |‚d }~ww xY w)N©r)   )r   r)   r�   r    )rC   Úlabelr•   r©   s       r1   r£   z)PeriodIndex._cast_partial_indexing_scalar  s<   € ð	+Ü˜E¨¯	©	Ô2ˆFð ˆøô ò 	+ä˜5“/ sÐ*ûð	+ús   ‚ ›	5¤0°5c                óf   •— t        |t        «      r| j                  |«      }t        ‰| �  ||«      S r?   )r`   r   r£   r„   Ú_maybe_cast_slice_bound)rC   r®   Úsiderˆ   s      €r1   r°   z#PeriodIndex._maybe_cast_slice_bound  s/   ø€ ä�eœXÔ&Ø×6Ñ6°uÓ=ˆEä‰wÑ.¨u°dÓ;Ð;r3   c                óä   — t        j                  |j                  |j                  «      }t        ||¬«      }|j	                  | j
                  d¬«      |j	                  | j
                  d¬«      fS )Nr­   Ústart)rP   Úend)r   ÚgetÚattr_abbrevr   rM   r)   )rC   r¨   r§   r)   Úivs        r1   Ú_parsed_string_to_boundsz$PeriodIndex._parsed_string_to_bounds  sY   € Ü'×+Ñ+¨D×,<Ñ,<¸d×>NÑ>NÓOˆÜ�F Ô&ˆØ—	‘	˜$Ÿ)™)¨�	Ó1°2·9±9¸T¿Y¹YÈE°9Ó3RÐSÐSr3   c                óT   — |�"t        dt        | «      j                  › d�«      ‚| |z   S )Nz%`freq` argument is not supported for z.shift)rƒ   rN   Ú__name__)rC   Úperiodsr)   s      r1   ÚshiftzPeriodIndex.shift  s8   € àÐÜØ7¼¸T»
×8KÑ8KÐ7LÈFÐSóð ð �g‰~Ðr3   )Úreturnztype[libindex.PeriodEngine])r½   r   )NÚE)rP   rž   r½   r   )Nr³   )rP   rž   r½   r   )r½   r   ©NNNNN)r+   zDtype | NonerW   zbool | NonerL   úHashable | Noner½   r   )r½   r   )r½   znpt.NDArray[np.object_])r½   zint | npt.NDArray[np.int64])r+   r"   r½   r‘   )r†   r   r‡   znpt.NDArray[np.bool_]r½   z
np.ndarray)r½   r‘   )r½   rž   )rl   r   r½   ÚNone)r®   r   r½   r   )r±   rž   )r¨   r   r§   r   )rŠ   N)r»   r|   r½   r   )(rº   Ú
__module__Ú__qualname__Ú__doc__Ú_typÚ__annotations__r   Ú	_data_clsÚ!_supports_partial_string_indexingÚpropertyrD   r   rF   r   rM   Ú_shared_doc_kwargsrS   rX   ÚfgetrZ   r]   rc   Úclassmethodrn   rs   r0   r~   r€   r…   r“   r—   r™   r¥   r¤   r£   r   r°   r¸   r¼   Ú__classcell__)rˆ   s   @r1   r;   r;   R   sn  ø… ñLð\ €DàÓØ
ÓØÓà€IØ(,Ð%àò%ó ð%ð ò*ó ð*ñ 	Ø×Ñðà"Ø ñð ñ	ó;óð;ñ 	ˆ×	!Ñ	!Ó"ó>ó #ð>ð Ùˆ×	Ñ	×	Ñ	ÓòBó  ó ðBð Ùˆ×	Ñ	×	 Ñ	 Ó!òDó "ó ðDð Ùˆ×	Ñ	×	 Ñ	 Ó!òDó "ó ðDð ØØ"Ø Ø $ð!;ð ð	!;ð
 ð!;ð ð!;ð 
ó!;ðF ð ØØØØØØØñ<$ð 
ò<$ó ð<$ð| Ø37ô  0ó ð 0ðJ ò.ó ð.ó 0óD#õ.ð ò
<ó ð
<ð òó ðôò<.ó| óñ 	Ð	×	6Ñ	6Ó7ô<ó 8ð<óTñ
 	Ð	×	$Ñ	$Ó%óó &ôr3   r;   c                ó  — t        j                  | ||«      dk7  rt        d«      ‚|€"t        | t        «      st        |t        «      sd}t        j                  | |||«      \  }}t        |«      }t        ||¬«      }t        ||d¬«      S )aõ  
    Return a fixed frequency PeriodIndex.

    The day (calendar) is the default frequency.

    Parameters
    ----------
    start : str, datetime, date, pandas.Timestamp, or period-like, default None
        Left bound for generating periods.
    end : str, datetime, date, pandas.Timestamp, or period-like, default None
        Right bound for generating periods.
    periods : int, default None
        Number of periods to generate.
    freq : str or DateOffset, optional
        Frequency alias. By default the freq is taken from `start` or `end`
        if those are Period objects. Otherwise, the default is ``"D"`` for
        daily frequency.
    name : str, default None
        Name of the resulting PeriodIndex.

    Returns
    -------
    PeriodIndex
        A PeriodIndex of fixed frequency periods.

    See Also
    --------
    date_range : Returns a fixed frequency DatetimeIndex.
    Period : Represents a period of time.
    PeriodIndex : Immutable ndarray holding ordinal values indicating regular periods
        in time.

    Notes
    -----
    Of the three parameters: ``start``, ``end``, and ``periods``, exactly two
    must be specified.

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

    Examples
    --------
    >>> pd.period_range(start="2017-01-01", end="2018-01-01", freq="M")
    PeriodIndex(['2017-01', '2017-02', '2017-03', '2017-04', '2017-05', '2017-06',
             '2017-07', '2017-08', '2017-09', '2017-10', '2017-11', '2017-12',
             '2018-01'],
            dtype='period[M]')

    If ``start`` or ``end`` are ``Period`` objects, they will be used as anchor
    endpoints for a ``PeriodIndex`` with frequency matching that of the
    ``period_range`` constructor.

    >>> pd.period_range(
    ...     start=pd.Period("2017Q1", freq="Q"),
    ...     end=pd.Period("2017Q2", freq="Q"),
    ...     freq="M",
    ... )
    PeriodIndex(['2017-03', '2017-04', '2017-05', '2017-06'],
                dtype='period[M]')
    rŒ   zOOf the three parameters: start, end, and periods, exactly two must be specifiedÚDr*   FrV   )	ÚcomÚcount_not_noner�   r`   r   r   Ú_generate_ranger   r;   )r³   r´   r»   r)   rL   r'   r+   s          r1   Úperiod_rangerÓ   %  s‹   € ôH ×Ñ˜%  gÓ.°!Ò3Üð,ó
ð 	
ð €|œZ¨¬vÔ6¼zÈ#ÌvÔ?VØˆä×,Ñ,¨U°C¸À$ÓG�J€Dˆ$Ü˜Ó€EÜ�t 5Ô)€DÜ�t $¨UÔ3Ð3r3   r¿   )r»   z
int | NonerL   rÀ   r½   r;   )DÚ
__future__r   r   r   Útypingr   r   Únumpyrp   Úpandas._libsr   r@   Úpandas._libs.tslibsr	   r
   r   r   r   r   Úpandas._libs.tslibs.dtypesr   Úpandas.util._decoratorsr   r   r   Úpandas.core.dtypes.commonr   Úpandas.core.dtypes.dtypesr   Úpandas.core.dtypes.genericr   Úpandas.core.dtypes.missingr   Úpandas.core.arrays.periodr   r   r   r   Úpandas.core.commonÚcoreÚcommonrÐ   Úpandas.core.indexes.baseÚindexesrz   Úibaser   Ú pandas.core.indexes.datetimeliker   Úpandas.core.indexes.datetimesr   r   Úpandas.core.indexes.extensionr   Úcollections.abcr    Úpandas._typingr!   r"   r#   ÚdictÚ_index_doc_kwargsÚupdaterÊ   r2   Ú
_field_opsr;   rÓ   r–   r3   r1   Ú<module>rï      s_  ðÝ "÷÷ó
 å *÷÷ õ @÷ñ õ 1Ý 1Ý 0Ý <÷ó ÷ !Ð  ß (Ó (Ý 7Ý B÷õ 8áÝ(÷ñ ñ ˜×0Ñ0Ó1Ð Ø × Ñ ˜.Ð*JÐKÔ Làˆ]ðÐ ò	 ñ Ø�˜zÐC¨K×,BÑ,BÐCØØ	ôñ
 �Ð Ó-ÙˆHÓôIÐ'ó Ió ó .óðIñX ˆHÓà
ØØØ	Ø ðN4ð ðN4ð
 ðN4ð òN4ó ñN4r3   