U Dx`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+e+D],Z,eD] Z-e,d'e-Z.e*e,e*e.<qJqBd(D](Z,eD]Z-e,d'e-Z/e/e*e/<q|qte D]Z0d)e0e*d)e0<qe1ee1d*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--)rrW-) offset_strreturncCs t|dS)z4 Alias to closest period strings BQ->Q etc. N)_offset_to_period_mapget)r5r9A/tmp/pip-target-zr53vnty/lib/python/pandas/tseries/frequencies.pyget_period_aliasZsr;)namer6cCstjdtddt|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<r9r9r: get_offsetas rBT)r@r6cCsddl}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_valuesrrrCobject TypeErrorhasattrr_TimedeltaFrequencyInfererget_freqZIndexZ DatetimeIndexZ Int64IndexZ Float64Indextype_FrequencyInferer)indexr@pdvaluesZinfererr9r9r: infer_freqxs@          rPc@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)/rLz8 Not sure if I can avoid the state machine here TrDcCsd||_|j|_t|dr4|jdk r4t|j|j|_||_t|dkrNt d|jj p\|jj |_ dS)Ntzz(Need at least 3 dates to infer frequency) rMasi8i8valuesrHrQrZtz_convert_from_utcr@len ValueErrorZ_is_monotonic_increasingZ_is_monotonic_decreasing is_monotonic)selfrMr@r9r9r:__init__s   z_FrequencyInferer.__init__cCs t|jSN)rrTrXr9r9r:deltassz_FrequencyInferer.deltascCs t|jjSrZ)rrMrSr[r9r9r: deltas_asi8sz_FrequencyInferer.deltas_asi8r6cCst|jdkSN)rUr\r[r9r9r: is_uniquesz_FrequencyInferer.is_uniquecCst|jdkSr_)rUr]r[r9r9r:is_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 Nrr`AZBHr%r r!r"r#r$)rWrMZ _is_uniquer\ _is_multiple_ONE_DAY_infer_daily_rule hour_deltasrbr] _ONE_HOUR_maybe_add_count _ONE_MINUTE _ONE_SECOND _ONE_MILLI _ONE_MICRO)rXdeltar9r9r:rJs*         z_FrequencyInferer.get_freqcCsdd|jDS)NcSsg|] }|tqSr9)rf.0xr9r9r: sz0_FrequencyInferer.day_deltas..r\r[r9r9r: day_deltassz_FrequencyInferer.day_deltascCsdd|jDS)NcSsg|] }|tqSr9)rirpr9r9r:rssz1_FrequencyInferer.hour_deltas..rtr[r9r9r:rhsz_FrequencyInferer.hour_deltascCs t|jSrZ)r rTr[r9r9r:fieldssz_FrequencyInferer.fieldscCst|jdSNr)rrTr[r9r9r: rep_stampsz_FrequencyInferer.rep_stampcCst|j|jjSrZ)r rvrMZ dayofweekr[r9r9r:r #sz&_FrequencyInferer.month_position_checkcCs&|jdd|jd}t|dS)Nr/ ri8)rvrastype)rXZnmonthsr9r9r:mdiffs&sz_FrequencyInferer.mdiffscCst|jddS)Nr/rz)rrvr{r[r9r9r:ydiffs+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) Nrr3rRry )rr=r`r) _get_annual_ruler}rrxmonthrj_get_quarterly_ruler|_get_monthly_rulera_get_daily_rule_is_business_daily _get_wom_rule) rXZ annual_ruleZnyearsraliasZquarterly_ruleZ nquartersmod_dictZ monthly_ruleZwom_ruler9r9r:rg/s0     z#_FrequencyInferer._infer_daily_rulecCsN|jdt}|ddkr@t|j}d|}t||dStd|SdS)Nrr4r)r\rfr rxweekdayrj)rXdayswdrr9r9r:rOs   z!_FrequencyInferer._get_daily_rulecCsHt|jdkrdStt|jddkr,dS|}ddddd|S)Nr`rr,r-rr+csbsZcebe)rUr}rrvr r8rXZ pos_checkr9r9r:rYs z"_FrequencyInferer._get_annual_rulecCsDt|jdkrdS|jdddks(dS|}ddddd|S) Nr`rrRr)r(rr*rrUr|r r8rr9r9r:rcs z%_FrequencyInferer._get_quarterly_rulecCs.t|jdkrdS|}ddddd|S)Nr`r.ZBMSrr'rrrr9r9r:rmsz#_FrequencyInferer._get_monthly_rulecCs~|jddgkrdS|jd}t|jj}t|t}t|t |d}t |dk|dk@|dk|dk@|dk@BS)Nr`rRFrr) rurMrnpZdiffrSZ floor_dividerfmodZcumsumall)rXZ first_weekdayZshiftsweekdaysr9r9r:rss z$_FrequencyInferer._is_business_dailycCs~t|jj}t|dkrdSt|jjdd}||dk}t|dksTt|dkrXdS|dd}t|d}d||S)Nr`rrrzWOM-)rrMrrUdayr )rXrZweek_of_monthsweekrr9r9r:rs     z_FrequencyInferer._get_wom_ruleN)T)__name__ __module__ __qualname____doc__boolrYrr\r]rarbrstrrJrurhrvrxr r|r}rgrrrrrrr9r9r9r:rLs>  -          rLc@seZdZddZdS)rIcCs|jr|SdSrZ)rarr[r9r9r:rgsz,_TimedeltaFrequencyInferer._infer_daily_ruleN)rrrrgr9r9r9r:rIsrI)multr6cCs ||dkSrwr9)usrr9r9r:resre)basecountr6cCs4|dkr,|t|kstt|}||S|SdSr_)intAssertionError)rrr9r9r:rjs  rjr^c 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 r#rr!r%rr$r"rr r rr#r!r%r$r"rr rrrrr%r r!r"r#r$>r#r!r%r$r"r r>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$)_maybe_coerce_freq _is_annual _is_quarterly_quarter_months_conformr _is_monthly _is_weekly)sourcetargetr9r9r: is_subperiodsH    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 NFrrrrrr%r r!r"r#r$rrrrrr)rrrrrrr)rrZsmonthZtmonthr9r9r:is_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)rrEr Z rule_codeupper)coder9r9r:r#s  r)rrr6cCs t|}t|}|d|dkS)NrR)r)rrZsnumZtnumr9r9r:r6sr)ruler6cCs|}|dkp|dS)NrzA-r startswithrr9r9r:r<srcCs$|}|dkp"|dp"|dS)NrzQ-r*rrr9r9r:rAsrcCs|}|dkp|dkS)Nrr')rrr9r9r:rFsrcCs|}|dkp|dS)Nr&r4rrr9r9r:rKsr)T)Dtypingrr?numpyrZpandas._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.algorithmsrrnrmrlrkrirfr7Z _need_suffix_prefix_mkey_aliasZ_drr;rBrrPrLrIrrefloatrjrrrrrrrrr9r9r9r:s      Ba 8: