B @`4B@sddlmZddlZddlZddlmZddlmZm Z ddl m Z m Z m Z mZmZddlmZmZddlmZmZmZmZddlmZdd lmZdd lmZmZmZdd l m!Z!dd l"m#Z#d Z$e$d Z%e%d Z&de&Z'de'Z(de(Z)ddddddddddddddddddddddddddddZ*ddd d!d"d#d$d%d&g Z+x8e+D]0Z,x(eD] Z-e,d'e-Z.e*e,e*e.<qNWqDWx4d(D],Z,x$eD]Z-e,d'e-Z/e/e*e/<qWq~Wx"e D]Z0d)e0e*d)e0<qWe1ee1d*d+d,Z2e1ed-d.d/Z3dQe4ee1d1d2d3Z5Gd4d5d5Z6Gd6d7d7e6Z7e8e4d8d9d:Z9e1e:e1d;dd?d@ZdAdBZ=e1d>dCdDZ>e1e1e4dEdFdGZ?e1e4dHdIdJZ@e1e4dHdKdLZAe1e4dHdMdNZBe1e4dHdOdPZCdS)R)OptionalN) unique_deltas) Timestamp tzconversion)DAYS MONTH_ALIASES MONTH_NUMBERSMONTHSint_to_weekday)build_field_sarraymonth_position_check) DateOffsetDay _get_offset to_offset)get_rule_month)cache_readonly)is_datetime64_dtypeis_period_dtypeis_timedelta64_dtype) ABCSeries)uniquei<DMQACBTSLUNHW)ZWEEKDAYZEOMBMBQSQSBQBAASBASMSrrrr r!r"r#r$r%rrr&rYBYYSBYSr)r*r(r1r,r0r+r2r--)rrzW-) offset_strreturncCs t|dS)z4 Alias to closest period strings BQ->Q etc. N)_offset_to_period_mapget)r4r8>/tmp/pip-unpacked-wheel-q9tj5l6a/pandas/tseries/frequencies.pyget_period_aliasZsr:)namer5cCstjdtddt|S)z Return DateOffset object associated with rule name. .. deprecated:: 1.0.0 Examples -------- get_offset('EOM') --> BMonthEnd(1) zWget_offset is deprecated and will be removed in a future version, use to_offset instead) stacklevel)warningswarn FutureWarningr)r;r8r8r9 get_offsetas rAT)r?r5cCsddl}t|trF|j}t|sBt|sB|jtksBtd|j|}t |dsRn2t |jrftdnt|jrt ||d}| St||j rt||jst||j|jfrtdt||j}t||js||}t||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 : bool, default True Returns ------- str or None None if no discernible frequency. Raises ------ TypeError If the index is not datetime-like. ValueError If there are fewer than three values. rNz>cannot infer freq from a non-convertible dtype on a Series of dtypezJPeriodIndex given. Check the `freq` attribute instead of using infer_freq.)r?z4cannot infer freq from a non-convertible index type )Zpandas isinstancerZ_valuesrrrBobject TypeErrorhasattrr_TimedeltaFrequencyInfererget_freqZIndexZ DatetimeIndexZ Int64IndexZ Float64Indextype_FrequencyInferer)indexr?pdvaluesZinfererr8r8r9 infer_freqxs4         rNc@s8eZdZdZd.edddZeddZedd Zeed d d Z eed d dZ e e d ddZ eddZeddZeddZeddZddZeddZeddZe e d dd Ze e d d!d"Ze e d d#d$Ze e d d%d&Ze e d d'd(Zed d)d*Ze e d d+d,Zd-S)/rJz8 Not sure if I can avoid the state machine here T)r?cCsd||_|j|_t|dr4|jdk r4t|j|j|_||_t|dkrNt d|jj p\|jj |_ dS)Ntzz(Need at least 3 dates to infer frequency) rKasi8i8valuesrFrOrZtz_convert_from_utcr?len ValueErrorZ_is_monotonic_increasingZ_is_monotonic_decreasing is_monotonic)selfrKr?r8r8r9__init__s   z_FrequencyInferer.__init__cCs t|jS)N)rrR)rVr8r8r9deltassz_FrequencyInferer.deltascCs t|jjS)N)rrKrQ)rVr8r8r9 deltas_asi8sz_FrequencyInferer.deltas_asi8)r5cCst|jdkS)N)rSrX)rVr8r8r9 is_uniquesz_FrequencyInferer.is_uniquecCst|jdkS)NrZ)rSrY)rVr8r8r9is_unique_asi8sz _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.i8values Returns ------- str or None NrrZAZBHr%r r!r"r#r$)rUrKZ _is_uniquerX _is_multiple_ONE_DAY_infer_daily_rule hour_deltasr\rY _ONE_HOUR_maybe_add_count _ONE_MINUTE _ONE_SECOND _ONE_MILLI _ONE_MICRO)rVdeltar8r8r9rHs*         z_FrequencyInferer.get_freqcCsdd|jDS)NcSsg|] }|tqSr8)r`).0xr8r8r9 sz0_FrequencyInferer.day_deltas..)rX)rVr8r8r9 day_deltassz_FrequencyInferer.day_deltascCsdd|jDS)NcSsg|] }|tqSr8)rc)rjrkr8r8r9rlsz1_FrequencyInferer.hour_deltas..)rX)rVr8r8r9rbsz_FrequencyInferer.hour_deltascCs t|jS)N)r rR)rVr8r8r9fieldssz_FrequencyInferer.fieldscCst|jdS)Nr)rrR)rVr8r8r9 rep_stampsz_FrequencyInferer.rep_stampcCst|j|jjS)N)r rnrKZ dayofweek)rVr8r8r9r #sz&_FrequencyInferer.month_position_checkcCs&|jdd|jd}t|dS)Nr/ ri8)rnrastype)rVZnmonthsr8r8r9mdiffs&sz_FrequencyInferer.mdiffscCst|jddS)Nr/rq)rrnrr)rVr8r8r9ydiffs+sz_FrequencyInferer.ydiffsc Cs|}|r:|jd}t|jj}|d|}t||S|}|r|jdd}dddd}t||jjd}|d|}t||S|}|rt||jdS|j r| S| rdS| } | r| SdS) Nrr3rPrp )rr<rZr) _get_annual_rulertrromonthrd_get_quarterly_rulers_get_monthly_ruler[_get_daily_rule_is_business_daily _get_wom_rule) rVZ annual_ruleZnyearsrxaliasZquarterly_ruleZ nquartersmod_dictZ monthly_ruleZwom_ruler8r8r9ra/s0     z#_FrequencyInferer._infer_daily_rulecCsN|jdt}|ddkr@t|j}d|}t||dStd|SdS)NrzW-r)rXr`r roweekdayrd)rVdayswdr~r8r8r9r{Os   z!_FrequencyInferer._get_daily_rulecCsHt|jdkrdStt|jddkr,dS|}ddddd|S)NrZrr,r-rr+)csbscebe)rSrtrrnr r7)rV pos_checkr8r8r9rwYs z"_FrequencyInferer._get_annual_rulecCsDt|jdkrdS|jdddks(dS|}ddddd|S) NrZrrPr)r(rr*)rrrr)rSrsr r7)rVrr8r8r9rycs z%_FrequencyInferer._get_quarterly_rulecCs.t|jdkrdS|}ddddd|S)NrZr.ZBMSrr')rrrr)rSrsr r7)rVrr8r8r9rzmsz#_FrequencyInferer._get_monthly_rulecCs~|jddgkrdS|jd}t|jj}t|t}t|t |d}t |dk|dk@|dk|dk@|dk@BS)NrZrPFrr) rmrKrnpZdiffrQZ floor_divider`modZcumsumall)rVZ first_weekdayZshiftsweekdaysr8r8r9r|ss z$_FrequencyInferer._is_business_dailycCs~t|jj}t|dkrdSt|jjdd}||dk}t|dksTt|dkrXdS|dd}t|d}d||S)NrZrrrzWOM-)rrKrrSdayr )rVrZweek_of_monthsweekrr8r8r9r}s     z_FrequencyInferer._get_wom_ruleN)T)__name__ __module__ __qualname____doc__boolrWrrXrYr[r\rstrrHrmrbrnror rsrtrar{rwryrzr|r}r8r8r8r9rJs.  -          rJc@seZdZddZdS)rGcCs|jr|SdS)N)r[r{)rVr8r8r9rasz,_TimedeltaFrequencyInferer._infer_daily_ruleN)rrrrar8r8r8r9rGsrG)multr5cCs ||dkS)Nrr8)usrr8r8r9r_sr_)basecountr5cCs4|dkr,|t|kstt|}||S|SdS)NrZ)intAssertionError)rrr8r8r9rds  rd)r5c Cs2|dks|dkrdSt|}t|}t|rNt|rFtt|t|S|dkSt|r^|dkSt|rn|dkSt|r||ddddd d d d d h kS|dkr|dkS|dkr|dkS|dkr|dkS|dkr|dkS|d kr|dkS|d kr|dkS|d kr|dkS|d kr|dkS|d kr*|dkSdSdS)a Returns True if downsampling is possible between source and target frequencies Parameters ---------- source : str or DateOffset Frequency converting from target : str or DateOffset Frequency converting to Returns ------- bool NF> rrr!rr r$r"r#r%r> rrr!rr r$r"r#r%rrrr%r r!r"r#r$>rr!r r$r"r#r%>rr!r r$r"r#r%>r!rr r$r"r#r%>r!r r$r"r#r%>r!r$r r"r#>r$r"r#r!>r$r"r#>r$r#>r$)_maybe_coerce_freq _is_annual _is_quarterly_quarter_months_conformr _is_monthly _is_weekly)sourcetargetr8r8r9 is_subperiodsD    rc CsV|dks|dkrdSt|}t|}t|rnt|rDt|t|kSt|rft|}t|}t||S|dkSt|r~|dkSt|r|dkSt|r||ddddd d d d d h kS|dkr|dkS|dkr|dkS|dkr|dkS|dkr|dkS|d kr|dkS|d kr|dkS|d kr*|dkS|d kr<|dkS|d krN|dkSdSdS)a Returns True if upsampling is possible between source and target frequencies Parameters ---------- source : str or DateOffset Frequency converting from target : str or DateOffset Frequency converting to Returns ------- bool NF> rrr!rr r$r"r#r%r> rrr!rr r$r"r#r%rrrr%r r!r"r#r$>r!r r$r"r#r%>r!r$r r"r#>r$r"r#r!>r$r"r#>r$r#>r$)rrrrrrr)rrZsmonthZtmonthr8r8r9is_superperiodsJ       rcCs$|dk s tt|tr|j}|S)zwe might need to coerce a code to a rule_code and uppercase it Parameters ---------- source : string or DateOffset Frequency converting from Returns ------- str N)rrCr Z rule_codeupper)coder8r8r9r#s  r)rrr5cCs t|}t|}|d|dkS)NrP)r)rrZsnumZtnumr8r8r9r6sr)ruler5cCs|}|dkp|dS)NrzA-)r startswith)rr8r8r9r<srcCs$|}|dkp"|dp"|dS)NrzQ-r*)rr)rr8r8r9rAsrcCs|}|dkp|dkS)Nrr')r)rr8r8r9rFsrcCs|}|dkp|dS)Nr&zW-)rr)rr8r8r9rKsr)T)Dtypingrr>ZnumpyrZpandas._libs.algosrZpandas._libs.tslibsrrZpandas._libs.tslibs.ccalendarrrrr r Zpandas._libs.tslibs.fieldsr r Zpandas._libs.tslibs.offsetsr rrrZpandas._libs.tslibs.parsingrZpandas.util._decoratorsrZpandas.core.dtypes.commonrrrZpandas.core.dtypes.genericrZpandas.core.algorithmsrrhrgrfrercr`r6Z _need_suffix_prefix_mkey_aliasZ_drr:rArrNrJrGrr_floatrdrrrrrrrrr8r8r8r9s           Ba 8: