HOME


sh-3ll 1.0
DIR:/usr/local/lib64/python3.6/site-packages/pandas/core/indexes/__pycache__/
Upload File :
Current File : //usr/local/lib64/python3.6/site-packages/pandas/core/indexes/__pycache__/period.cpython-36.pyc
3

���hNg�@s�ddlmZmZddlmZddlZddlmZddl	m
Z
ddlmZm
Z
mZmZddlmZmZddlmZmZdd	lmZdd
lmZmZmZddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ddl&m'Z'dd
l(m)Z)m*Z*m+Z+m,Z,ddl-j.j/Z0ddl1j.j2j3Z4ddl1m5Z5m6Z6m7Z7ddl8m9Z9ddl:m;Z;m<Z<ddl=m>Z>ddl?m@Z@ddlAmBZBeCe4jD�ZDeDjEeCdd��dd�ZFe>ddddge)jGe)dd�e>ddge)�Gd d!�d!e9e@���ZHeHjI�eHjJ�d%eHd"�d#d$�ZKdS)&�)�datetime�	timedelta)�AnyN)�index)�
no_default)�
BaseOffset�Period�
Resolution�Tick)�DateParseError�parse_time_string)�DtypeObj�Label)�InvalidIndexError)�Appender�cache_readonly�doc)	�ensure_platform_int�
is_bool_dtype�is_datetime64_any_dtype�is_dtype_equal�is_float�
is_integer�is_object_dtype�	is_scalar�pandas_dtype)�PeriodDtype)�PeriodArray�period_array�raise_on_incompatible�validate_dtype_freq)�_index_shared_docs�ensure_index�maybe_extract_name)�DatetimeIndexOpsMixin)�
DatetimeIndex�Index)�
inherit_names)�
Int64Index)�get_op_result_namezPeriodIndex or list of Periods)Ztarget_klasscKsJ|jd�}|jdkr:|jdd�}t||d�}|j|f|�S||f|�SdS)N�data�int64�freq)r,)�pop�dtyper�_simple_new)�cls�d�valuesr,�r3�</tmp/pip-build-5_djhm0z/pandas/pandas/core/indexes/period.py�_new_PeriodIndex4s

r5�strftime�to_timestamp�
start_time�end_timeT)�wrapZis_leap_yearZ_format_native_typescs*eZdZUdZdZddgZdZee	
ejZ
dZeej�dYedd	�d
d��ZdZdd
�Zed[eed�dd��Zedd��Zedd��Zdefed�dd�Zdd�Zeed�dd�Zdd�Zedd ��Z ee!j"�e#ed!�d"d#��Z"e$e%d$�d%d&��Z&d\d'd(�Z'e(j)e(j)d)�d*d+�Z*ee!j+�d]�fd-d.�	�Z+eed$�d/d0��Z,eed$�d1d2��Z-e.e/d3e0�d^d4d5��Z1e.e/d6e0�d7d8��Z2d_d9d:�Z3eed;�d<d=�Z4e5e6d>�d?d@�Z7e5dA�dBdC�Z8d`eeedD�dEdF�Z9dGdH�Z:dadJdK�Z;�fdLdM�Z<edN�dOdP�Z=dbdQdR�Z>dcdSdT�Z?�fdUdV�Z@dd�fdWdX�	ZA�ZBS)e�PeriodIndexa�
    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.
    copy : bool
        Make a copy of input ndarray.
    freq : str or period object, optional
        One of pandas period strings or corresponding objects.
    year : int, array, or Series, default None
    month : int, array, or Series, default None
    quarter : int, array, or Series, default None
    day : int, array, or Series, default None
    hour : int, array, or Series, default None
    minute : int, array, or Series, default None
    second : int, array, or Series, default None
    tz : object, default None
        Timezone for converting datetime64 data to Periods.
    dtype : str or PeriodDtype, default None

    Attributes
    ----------
    day
    dayofweek
    dayofyear
    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

    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(year=[2000, 2002], quarter=[1, 3])
    >>> idx
    PeriodIndex(['2000Q1', '2002Q3'], dtype='period[Q-DEC]', freq='Q-DEC')
    Zperiodindex�namer,FTN�E)�how�returncCs"|jj||�}t|�j||jd�S)N)r<)�_data�asfreq�typer/r<)�selfr,r>�arrr3r3r4rA�szPeriodIndex.asfreqcKsdddddddh}	t|�j|	�sBtt|�|	�d}
td	|
����t|||�}|dkr�|dkr�tjddd||�\}}|}t||d
�}ndt||�}|r�t||�r�|j	|kr�|j
|�}|dkr�|dk	r�tj|tj
d�}t||�}nt||d�}|r�|j�}|j||d
�S)N�year�month�dayZquarter�hour�minute�secondrz-__new__() got an unexpected keyword argument )r,)r.)r*r,)r<)�set�issubset�list�	TypeErrorr#r�_generate_ranger �
isinstancer,rA�np�asarrayr+r�copyr/)r0r*�ordinalr,�tzr.rSr<�fieldsZvalid_field_setZargumentZfreq2r3r3r4�__new__�s2


zPeriodIndex.__new__)r2r<cCsFt|t�stt|���tj|�}||_|j|_||_i|_	|j
�|S)z�
        Create a new PeriodIndex.

        Parameters
        ----------
        values : PeriodArray
            Values that can be converted to a PeriodArray without inference
            or coercion.
        )rPr�AssertionErrorrB�objectrWr@Z_index_datar<�_cacheZ_reset_identity)r0r2r<�resultr3r3r4r/�s
zPeriodIndex._simple_newcCs
tj|�S)N)rQrR)rCr3r3r4r2�szPeriodIndex.valuescCsdS)NTr3)rCr3r3r4�_has_complex_internals�sz"PeriodIndex._has_complex_internals)r<cCsN|tk	r|n|j}|dkr$|jj�ni}|dkr6|j}|j||d�}||_|S)N)r<)rr<rZrSr@r/)rCr2r<�cacher[r3r3r4�
_shallow_copyszPeriodIndex._shallow_copycCsxt|ttjttjf�r4t|jt�rj|jj|�}|Sn6t|t	�r^|j
|jj
krR|jSt||��nt
|�rj|St|d��dS)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)rPrrQZtimedelta64r
�ndarrayr,r@Z _check_timedeltalike_freq_compatr�base�nrr)rC�other�deltar3r3r4�_maybe_convert_timedelta
s
z$PeriodIndex._maybe_convert_timedelta)r.r?cCst|t�sdS|j|jkS)zF
        Can we compare values of the given dtype to our own?
        F)rPrr,)rCr.r3r3r4�_is_comparable_dtype.s
z PeriodIndex._is_comparable_dtypecCs|jt�jS)N)�astyperY�_values)rCr3r3r4�	_mpl_repr9szPeriodIndex._mpl_reprcCs|jjdd�S)NF)Zboxed)�arrayZ
_formatter)rCr3r3r4�_formatter_func=szPeriodIndex._formatter_func)�keyr?cCsXt|t�r(|j|jkrdS|j|jkSn,t|�y|j|�dStk
rRdSXdS)NFT)rPrr,rTZ_engine�hash�get_loc�KeyError)rCrkr3r3r4�__contains__Ds

zPeriodIndex.__contains__)r?cCstj|j|jd�S)N)r<)r(r/�asi8r<)rCr3r3r4�_int64indexSszPeriodIndex._int64indexcCs�t|t�r�t|�dkr�|d}|tjkr*n�|tjkr�|j}|dd}|dd}t|t�r�t|t�r�|j|jkrx|jnd}t||d�St|t	�s�t|t	�r�t||d�Sn,t|tj
�r�d|jkr�d|j�d�}t
|��t|�r�|St|�||j|jd�S)	z�
        Gets called after a ufunc. Needs additional handling as
        PeriodIndex stores internal data as int dtype

        Replace this to __numpy_ufunc__ in future version
        r�N)r<zM->Mzufunc 'z#' not supported for the PeriodIndex)r,r<)rP�tuple�lenrQ�add�subtractr<r;r&rZufunc�types�__name__�
ValueErrorrrBr,)rCr[�context�funcr<�left�right�msgr3r3r4�__array_wrap__Zs(


zPeriodIndex.__array_wrap__)�maskr?cCs�|}t|t�r t|j|jd�}n*t|t�s4td��n|j|jkrJt||��|j|j|jdd�}t	j
|dk|dd�}t	jt|��|j
|�}|j�}d||dk|j|j|k@<|S)zc
        where : array of timestamps
        mask : array of booleans where data is not NA
        )r,z6asof_locs `where` must be DatetimeIndex or PeriodIndexr})�siderrr���)rPr%r;rgr,rNrrpZsearchsortedrQ�whereZarangertZtakeZargmax)rCr�r�Z	where_idxZlocsr[�firstr3r3r4�	asof_locs{s



zPeriodIndex.asof_locs�startcs>t|�}t|�r.t|dd�}|j|d�j|�St�j||d�S)NrU)r>)rS)rr�getattrr7Ztz_localize�superrf)rCr.rSr>rU)�	__class__r3r4rf�s
zPeriodIndex.astypecCsDt|�dkrdS|jstd��|j}|dd�|dd�dkj�S)z�
        Returns True if this PeriodIndex is range-like in that all Periods
        between start and end are present, in order.
        rTzIndex is not monotonicrrN�r�)rtZis_monotonicryrp�all)rCr2r3r3r4�is_full�szPeriodIndex.is_fullcCsdS)NZperiodr3)rCr3r3r4�
inferred_type�szPeriodIndex.inferred_type�get_indexercCs�t|�}t|t�rF|j|jkr8dtj|jtjd�}|S|j}|j	}n|}|dk	rp|j
||�}||k	rp|j|�}tj
|||||�S)Nrr)r.r�)r"rPr;r,rQ�ones�shape�intprprqZ_convert_tolerancerdr&r�)rC�target�method�limit�	tolerance�
no_matchesZ
self_indexr3r3r4r��s

zPeriodIndex.get_indexer�get_indexer_non_uniquecCsTt|�}|j|j�s2dtj|jtjd�}||fS|j}|jj	|�\}}t
|�|fS)Nrr)r.r�)r"rer.rQr�r�r�rprqr�r)rCr�r�Zindexer�missingr3r3r4r��sz"PeriodIndex.get_indexer_non_uniquec4Cs�|}t|�st|��t|t��ry|j|�}|Sttfk
rFYnXyt||j�\}}Wn4t	k
r�}zt
d|�d��|�WYdd}~XnXtj|�}|j
}	|jj
}
|	|
ks�t�|	|
ks�|tjko�|jjjdk�r�t||jd�}|j|||d�}|S|dk�rt
|��n|}nt|��r&t
|��yt||jd�}Wn.tk
�rf}zt
|�|�WYdd}~XnXytj||||�St
k
�r�}zt
|�|�WYdd}~XnXdS)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.
        zCannot interpret 'z' as periodN�B)r,)r�r�)rrrP�str�_get_string_slicerNryrr,rrnr	�
from_attrname�
freq_groupr.rXZRESO_DAYr<rrmrr&)rCrkr�r�Zorig_key�locZasdt�reso�err�grp�freqnr3r3r4rm�sF
$



zPeriodIndex.get_loc)r��kindcCs�|d	kst�t|t�r$t||jd�St|t�r�y:t||j�\}}tj|�}|j	||�}||dkrddndSt
k
r�}zt|�|�WYdd}~Xq�Xnt|�s�t
|�r�|jd|�|S)
a�
        If label is a string or a datetime, cast it to Period.ordinal according
        to resolution.

        Parameters
        ----------
        label : object
        side : {'left', 'right'}
        kind : {'loc', 'getitem'}

        Returns
        -------
        bound : Period or object

        Notes
        -----
        Value of `side` parameter should be validated in caller.

        r��getitem)r,r|rrrN�slice)r�r�)rXrPrrr,r�rr	r��_parsed_string_to_boundsryrnrrZ_invalid_indexer)rC�labelr�r��parsedr�Zboundsr�r3r3r4�_maybe_cast_slice_bounds


z#PeriodIndex._maybe_cast_slice_bound)r�r�cCs2|j}t||d�}|j|jdd�|j|jdd�fS)N)r,r�)r>�end)r�rrAr,)rCr�r�r�Zivr3r3r4r�Fsz$PeriodIndex._parsed_string_to_bounds)r�cCs8t|t�stt|�|f��|j}|jj}||ks4t�dS)N)rPr	rXrBr�r.ry)rCr�r�r�r3r3r4�_validate_partial_date_sliceKs
z(PeriodIndex._validate_partial_date_slice)rk�use_lhs�use_rhscCs\t||j�\}}tj|�}y|j||||�Stk
rV}zt|�|�WYdd}~XnXdS)N)rr,r	r�Z_partial_date_slicern)rCrkr�r�r�r�r�r3r3r4r�Vs
zPeriodIndex._get_string_slicecCs�t|t�s|j|jkr*|jt�j||�Stj|d|�jtj	|j
g�||d�jf�}t|j�j
||jd�}t|�j
||jd�S)N)r.)r<)rPrr,rfrY�insertrQZconcatenaterprirTrBr@r/r.r<)rCr��item�i8resultrDr3r3r4r�_s*zPeriodIndex.insertr|cCsH|j|�t|t�s.|jt�j|||||d�Stj||||||d�}|S)z 
        See Index.join
        )r>�level�return_indexers�sort)�_assert_can_do_setoprPr;rfrY�joinr()rCrbr>r�r�r�r[r3r3r4r�is


zPeriodIndex.joincs0t�j|�t|t�r,|j|jkr,t||��dS)N)r�r�rPr;r,r)rCrb)r�r3r4r��sz PeriodIndex._assert_can_do_setop)�opnamec
Cs�|j|�|j|�t||�}t|�}tj|j�}tj|j�}t||�||d�}t|j	�t
j|t
jd�|j
d�}t|�j||d�}	|	S)zZ
        Perform a set operation by dispatching to the Int64Index implementation.
        )r�)r.)r<)�_validate_sort_keywordr�r)r"r(r/rpr�rBr@rQrRr+r.)
rCrbr�r�Zres_nameZi8selfZi8otherr�Zparrr[r3r3r4�_setop�s


 zPeriodIndex._setopcCs�|j|�|j|�t|�}|j|�r0|j|�St|j�rN|jd�j||d�St	|j|j�s�|dd�jd�}|dd�jd�}|j||d�S|j
||dd�S)N�O)r�r�intersection)r�)r�r�r"�equalsZ_get_reconciled_name_objectrr.rfr�rr�)rCrbr��thisr3r3r4r��s




zPeriodIndex.intersectioncCs�|j|�|j|�t|�}|j|�rDt|�j|jdd�|jd�St|�rd|j	t
�j|�j	|j�St
|j|j�sv|S|j||dd�S)Nr)r<�
difference)r�)r�r�r"r�rBr/r@r<rrfrYr�r.rr�)rCrbr�r3r3r4r��s


zPeriodIndex.differencecs�t|�s|j|�st|�r.t�j||d�St|t|��s@t�t|j|j�sp|j	d�}|j	d�}|j||d�S|j
||dd�S)N)r�r��_union)r�)rtr�r�r�rPrBrXrr.rfr�)rCrbr�r�)r�r3r4r��s

zPeriodIndex._unioncs8t�j|d�}t|d�r4d|jkr4||jj|d�7}|S)N)�deeprZrq)r��memory_usage�hasattrrZrq)rCr�r[)r�r3r4r��szPeriodIndex.memory_usage)Nr=)NNNNNFN)N)N)Tr�)NNN)NN)TT)r|NFF)F)N)F)Crx�
__module__�__qualname__�__doc__Z_typ�_attributesZ_is_numeric_dtyperr@rr,�libindexZPeriodEngineZ_engine_typeZ!_supports_partial_string_indexingrrAr�rW�classmethodrr/�propertyr2r\rr^rdr
�boolrerhrjr&rorrr(rqrrQr_r�rfr�r�rr!�_index_doc_kwargsr�r�rmr�r	rr�r�r�r�r�r�r�r�r�r�r��
__classcell__r3r3)r�r4r;?sl
J	
4
$
!
J'	



r;)r?cCsntj|||�dkrtd��|dkr>t|t�r>t|t�r>d}tj||||id�\}}t||d�}t||d�S)a�
    Return a fixed frequency PeriodIndex.

    The day (calendar) is the default frequency.

    Parameters
    ----------
    start : str or period-like, default None
        Left bound for generating periods.
    end : str 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

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

    To learn more about the frequency strings, please see `this link
    <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#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]', freq='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]', freq='M')
    r�zOOf the three parameters: start, end, and periods, exactly two must be specifiedN�D)rV)r,)r<)�comZcount_not_noneryrPrrrOr;)r�r�Zperiodsr,r<r*r3r3r4�period_range�s4 r�)NNNNN)LrrZtypingrZnumpyrQZpandas._libsrr�Zpandas._libs.librZpandas._libs.tslibsrrr	r
Zpandas._libs.tslibs.parsingrrZpandas._typingr
rZ
pandas.errorsrZpandas.util._decoratorsrrrZpandas.core.dtypes.commonrrrrrrrrrZpandas.core.dtypes.dtypesrZpandas.core.arrays.periodrrrr Zpandas.core.common�core�commonr�Zpandas.core.indexes.base�indexesr`Zibaser!r"r#Z pandas.core.indexes.datetimeliker$Zpandas.core.indexes.datetimesr%r&Zpandas.core.indexes.extensionr'Zpandas.core.indexes.numericr(Zpandas.core.opsr)�dictr��updater5Z
_field_opsr;Z_add_numeric_methods_disabledZ_add_logical_methods_disabledr�r3r3r3r4�<module>sL,