B []<@sddlmZddlZddlmZddlZddlmZddl m Z ddl m Z m Z ddlmZmZddlmZddlmmmZdd lmZddlmmmZdd lmZdd lmZdd l m!Z!dd l"m#Z#ddl$m%Z%m&Z&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5dZ6e6dZ7e7dZ8de8Z9de9Z:de:Z;iZddZ?ddZ@d(ddZAGd d!d!ZBGd"d#d#eBZCd$d%ZDd&d'ZEdS))) timedeltaN)Dict)AmbiguousTimeError) unique_deltas) Timedelta Timestamp) MONTH_ALIASESint_to_weekday)build_field_sarray)_offset_to_period_map) Resolution)UTC) tz_convert)cache_readonly)is_datetime64_dtypeis_period_arraylikeis_timedelta64_dtype) ABCSeries)unique) DateOffsetDayHourMicroMilliMinuteNanoSecondprefix_mappingi<cCs t|dS)z* alias to closest period strings BQ->Q etcN)r get)Z offset_strr!>/tmp/pip-install-svzetoqp/pandas/pandas/tseries/frequencies.pyget_period_alias7sr#)dayshoursminutesseconds milliseconds microsecondsZ nanosecondsc Csp|dkr dSt|tr|St|trf|d}|d}t|trH||}}t|\}}t||}nt|trd}t|}yPxJ|j j D]>}t |}t |j |}|dkr||}|dkr|}q||}qWWn$t k rttj|YnXn\d}d}y*ttj|}|ddkr4|ds4tdxt|ddd|ddd|dddD]\}}}|dkr|std tj|p|} |dkr|d rdnd}|sd}| tjkrtt|| \}}t|}t|}|tt ||}|dkr|}n||}q`WWn&t k rPttj|YnX|dkrlttj||S) a Return DateOffset object from string or tuple representation or datetime.timedelta object Parameters ---------- freq : str, tuple, datetime.timedelta, DateOffset or None Returns ------- DateOffset None if freq is None. Raises ------ ValueError If freq is an invalid frequency See Also -------- DateOffset Examples -------- >>> to_offset('5min') <5 * Minutes> >>> to_offset('1D1H') <25 * Hours> >>> to_offset(('W', 2)) <2 * Weeks: weekday=6> >>> to_offset((2, 'B')) <2 * BusinessDays> >>> to_offset(datetime.timedelta(days=1)) >>> to_offset(Hour()) Nrr$zlast element must be blankzseparator must be spaces-)! isinstancertuplestrlibfreqsZ_base_and_stride get_offsetrr components_fields_name_to_offset_mapgetattr Exception ValueErrorINVALID_FREQ_ERR_MSGformatresplitZopatternisspacezip_lite_rule_aliasr startswithr Z_reso_str_bump_mapkeysZget_stride_from_decimalfloatintnpfabs) freqnameZstride_deltaoffsetZ stride_signZsplittedsepprefixr!r!r" to_offsetGsl+      2   rOc Cs|tjkr4|}tj||}tj||}ntj||}|tkry,|d}t|d}|j |dd}Wn*t t t fk rt tj |YnX|t|<t|S)z~ Return DateOffset object associated with rule name Examples -------- get_offset('EOM') --> BMonthEnd(1) r/rr$N)r3Z_dont_uppercaseupperrAr lower _offset_mapr>rZ _from_namer: TypeErrorKeyErrorr;r<)rIr>klassrLr!r!r"r4s   r4TcCs ddl}t|trH|j}t|sDt|sD|jtksDtdj |jd|}t |rZtdnt|rvt ||d}| St||j rt||jst||j|jfrtdj t|d|j}t||jsy||}Wn tk r||j}YnXt||d}| S) a Infer the most likely frequency given the input index. If the frequency is uncertain, a warning will be printed. Parameters ---------- index : DatetimeIndex or TimedeltaIndex if passed a Series will use the values of the series (NOT THE INDEX) warn : boolean, default True Returns ------- str or None None if no discernible frequency TypeError if the index is not datetime-like ValueError if there are less than three values. rNzEcannot infer freq from a non-convertible dtype on a Series of {dtype})dtypezJPeriodIndex given. Check the `freq` attribute instead of using infer_freq.)warnz:cannot infer freq from a non-convertible index type {type})type)Zpandasr0rZ_valuesrrrVobjectrSr<r_TimedeltaFrequencyInfererget_freqZIndexZ DatetimeIndexZ Int64IndexZ Float64IndexrXvaluesrasi8_FrequencyInferer)indexrWpdr\Zinfererr!r!r" infer_freqs:      rac@seZdZdZd*ddZeddZeddZed d Zed d Z d dZ eddZ eddZ eddZ eddZddZeddZeddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)+r^z8 Not sure if I can avoid the state machine here TcCsd||_|j|_t|dr4|jdk r4t|jt|j|_||_t|dkrNt d|jj p\|jj |_ dS)Ntzz(Need at least 3 dates to infer frequency) r_r]r\hasattrrbrr rWlenr:Z_is_monotonic_increasingZ_is_monotonic_decreasing is_monotonic)selfr_rWr!r!r"__init__s   z_FrequencyInferer.__init__cCs t|jS)N)rr\)rgr!r!r"deltas.sz_FrequencyInferer.deltascCs t|jjS)N)rr_r])rgr!r!r" deltas_asi82sz_FrequencyInferer.deltas_asi8cCst|jdkS)Nr$)reri)rgr!r!r" is_unique6sz_FrequencyInferer.is_uniquecCst|jdkS)Nr$)rerj)rgr!r!r"is_unique_asi8:sz _FrequencyInferer.is_unique_asi8cCs|jr|jjsdS|jd}t|tr.|S|jddgddgdddgfkrPdS|jsZdS|j d}t|t r|t d|t St|t rt d|t St|t rt d |t St|trt d |tSt|trt d |tSt d |SdS) z Find the appropriate frequency string to describe the inferred frequency of self.values Returns ------- str or None Nrr$AZBHHTSLUN)rfr_Z _is_uniqueri _is_multiple_ONE_DAY_infer_daily_rule hour_deltasrlrj _ONE_HOUR_maybe_add_count _ONE_MINUTE _ONE_SECOND _ONE_MILLI _ONE_MICRO)rgrKr!r!r"r[>s*         z_FrequencyInferer.get_freqcCsdd|jDS)NcSsg|] }|tqSr!)rv).0xr!r!r" msz0_FrequencyInferer.day_deltas..)ri)rgr!r!r" day_deltasksz_FrequencyInferer.day_deltascCsdd|jDS)NcSsg|] }|tqSr!)ry)rrr!r!r"rqsz1_FrequencyInferer.hour_deltas..)ri)rgr!r!r"rxosz_FrequencyInferer.hour_deltascCs t|jS)N)r r\)rgr!r!r"fieldsssz_FrequencyInferer.fieldscCst|jdS)Nr)rr\)rgr!r!r" rep_stampwsz_FrequencyInferer.rep_stampcCst|j|jjS)N) libresolutionmonth_position_checkrr_Z dayofweek)rgr!r!r"r{sz&_FrequencyInferer.month_position_checkcCs&|jdd|jd}t|dS)NY Mi8)rrastype)rgZnmonthsr!r!r"mdiffs~sz_FrequencyInferer.mdiffscCst|jddS)Nrr)rrr)rgr!r!r"ydiffssz_FrequencyInferer.ydiffsc Cs|}|r:|jd}t|jj}dj||d}t||S|}|r|jdd}dddd}t||jjd}dj||d}t||S| }|rt||jdS|j r|j dt } | d dkrt |j} td j| d | d Std | S|rd S|} | r| SdS)Nrz{prefix}-{month})rNmonthrcr )rr.r$zW-{day})dayDB)_get_annual_rulerrrrr<rz_get_quarterly_ruler_get_monthly_rulerkrirvr weekday_is_business_daily _get_wom_rule) rgZ annual_ruleZnyearsraliasZquarterly_ruleZ nquartersmod_dictZ monthly_ruler%rZwom_ruler!r!r"rws6        z#_FrequencyInferer._infer_daily_rulecCsHt|jdkrdStt|jddkr,dS|}ddddd|S)Nr$rZASZBASAZBA)csbscebe)rerrrrr )rg pos_checkr!r!r"rs z"_FrequencyInferer._get_annual_rulecCsDt|jdkrdS|jdddks(dS|}ddddd|S) Nr$rrcZQSZBQSQZBQ)rrrr)rerrr )rgrr!r!r"rs z%_FrequencyInferer._get_quarterly_rulecCs.t|jdkrdS|}ddddd|S)Nr$ZMSZBMSrZBM)rrrr)rerrr )rgrr!r!r"rsz#_FrequencyInferer._get_monthly_rulecCs~|jddgkrdS|jd}t|jj}t|t}t|t |d}t |dk|dk@|dk|dk@|dk@BS)Nr$rcFrrr-) rr_rrFdiffr]Z floor_dividervmodZcumsumall)rgZ first_weekdayZshiftsweekdaysr!r!r"rs z$_FrequencyInferer._is_business_dailycCs~t|jj}t|dkrdSt|jjdd}||dk}t|dksTt|dkrXdS|dd}t|d}dj||dS)Nr$rr-rzWOM-{week}{weekday})weekr)rr_rrerr r<)rgrZweek_of_monthsrwdr!r!r"rs     z_FrequencyInferer._get_wom_ruleN)T)__name__ __module__ __qualname____doc__rhrrirjrkrlr[rrxrrrrrrwrrrrrr!r!r!r"r^s(     -      $  r^c@seZdZddZdS)rZcCsV|jrR|jdt}|ddkrHt|j}dj|d}t||dStd|SdS)Nrrz W-{weekday})rr)rkrirvr rrr<rz)rgr%rrr!r!r"rws  z,_TimedeltaFrequencyInferer._infer_daily_ruleN)rrrrwr!r!r!r"rZsrZcCs ||dkS)Nrr!)usZmultr!r!r"rusrucCs6|dkr.|t|kstt|}dj||dS|SdS)Nr$z {count}{base})countbase)rEAssertionErrorr<)rrr!r!r"rzs rz)T)Fdatetimerr=typingrZnumpyrFZpytzrZpandas._libs.algosrZpandas._libs.tslibsrrZpandas._libs.tslibs.ccalendarrr Zpandas._libs.tslibs.fieldsr Zpandas._libs.tslibs.frequenciesZ_libsZtslibsZ frequenciesr3Zpandas._libs.tslibs.offsetsr Zpandas._libs.tslibs.resolution resolutionrr Zpandas._libs.tslibs.timezonesr Z pandas._libs.tslibs.tzconversionrZpandas.util._decoratorsrZpandas.core.dtypes.commonrrrZpandas.core.dtypes.genericrZpandas.core.algorithmsrZpandas.tseries.offsetsrrrrrrrrrr~r}r|r{ryrvrRr#r7rOr4rar^rZrurzr!r!r!r"sT            ,  o# =V