'VfiEPddlmZddlmZddlZddlmZddlm Z ddl m Z m Z m Z mZddlmZmZmZmZmZddlmZmZdd lmZmZdd lmZmZmZdd lm Z dd l!m"Z"dd l#m$Z$ddl%m&Z&m'Z'ddl(m)Z)m*Z*ddl+m,Z,erddl-m.Z.ddl/m0Z0m1Z1m2Z2ddl3m4Z4gdZ5e5D]Z6eD]Z7e6de7Z8ee6ee8<dD]Z6eD]Z7e6de7Z9e9ee9<eD] Z:de:ede:<d8dZ;d9dZ<Gd d!Z=Gd"d#e=Z>d:d'Z?d;d+Z@dd1ZDd?d3ZEd?d4ZFd?d5ZGd?d6ZHgd7ZIdS)@) annotations) TYPE_CHECKINGN)lib) unique_deltas) Timestampget_unit_from_dtypeperiods_per_daytz_convert_from_utc)DAYS MONTH_ALIASES MONTH_NUMBERSMONTHSint_to_weekday)OFFSET_TO_PERIOD_FREQSTRfreq_to_period_freqstr)build_field_sarraymonth_position_check) DateOffsetDay to_offset)get_rule_month)cache_readonly)is_numeric_dtype)DatetimeTZDtype PeriodDtype)ABCIndex ABCSeries)unique)npt) DatetimeIndexSeriesTimedeltaIndex)DatetimeLikeArrayMixin)QSBQEBQSYSBYEBYS-)YQW- offset_strstrreturn str | Nonec,tj|dS)z4 Alias to closest period strings BQ->Q etc. N)rget)r.s Ic:\PYTHON\DbComparer\venv\Lib\site-packages\pandas/tseries/frequencies.pyget_period_aliasr5Ns $ ' D 9 99index@DatetimeIndex | TimedeltaIndex | Series | DatetimeLikeArrayMixincddlm}t|trd|j}t j|jdsAt|jts'|jtkstd|j|}t|dsnt|jtrtdt j|jdr#t|}|St|jrtd|jt||s ||}t!|}|S) aW Infer the most likely frequency given the input index. Parameters ---------- index : DatetimeIndex, TimedeltaIndex, Series or array-like If passed a Series will use the values of the series (NOT THE INDEX). 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. Examples -------- >>> idx = pd.date_range(start='2020/12/01', end='2020/12/30', periods=30) >>> pd.infer_freq(idx) 'D' r)r mMz>cannot infer freq from a non-convertible dtype on a Series of dtypezJPeriodIndex given. Check the `freq` attribute instead of using infer_freq.mz8cannot infer freq from a non-convertible index of dtype )pandas.core.apir isinstancer_valuesr is_np_dtyper;robject TypeErrorhasattrr_TimedeltaFrequencyInfererget_freqr_FrequencyInferer)r7r valuesinferers r4 infer_freqrIYs:.-----%##  OFL$ / / &,88 |v%%0"'+00  5' " "  EK - -   +    c * * ,U33!!! %+ & &  Tu{ T T    e] + +% e$$&&G     r6cReZdZdZddZed dZed dZed!d Zed!d Z d"d Z ed#dZ ed#dZ ed$dZ ed%dZd"dZed dZed dZd"dZd"dZd"dZd"dZd"dZd!dZd"dZdS)&rFz8 Not sure if I can avoid the state machine here r0Nonec||_|j|_t|tr$t |jjj|_ nt |jj|_ t|dr-|j &t|j|j |j |_t|dkrtd|jjp |jj|_dS)Ntzresoz(Need at least 3 dates to infer frequency)r7asi8i8valuesr>rr_data_ndarrayr;_cresorCrMr len ValueError_is_monotonic_increasing_is_monotonic_decreasing is_monotonic)selfr7s r4__init__z_FrequencyInferer.__init__s    eX & & D. $*DKK .en.BCCDK 5$   x# 3M58$+!!!  u::>>GHH H J / V4:3V r6npt.NDArray[np.int64]c*t|jSN)rrRr[s r4deltasz_FrequencyInferer.deltassT]+++r6c4t|jjSr_)rr7rQr`s r4 deltas_asi8z_FrequencyInferer.deltas_asi8sTZ_---r6boolc2t|jdkSN)rVrar`s r4 is_uniquez_FrequencyInferer.is_uniques4;1$$r6c2t|jdkSrf)rVrcr`s r4is_unique_asi8z _FrequencyInferer.is_unique_asi8s4#$$))r6r1c|jr |jjsdS|jd}t |j}|r$t ||r|S|jddgddggdfvrdS|j sdS|j d}|dz}|d z}|d z}t ||rtd ||z St ||rtd ||z St ||rtd ||z St ||d zrtd||d zz St ||dzrtd||dzz Std|S)z Find the appropriate frequency string to describe the inferred frequency of self.i8values Returns ------- str or None NrrgA)rgrlrmbh<hminsimsi@Busns) rZr7 _is_uniquerar rU _is_multiple_infer_daily_rule hour_deltasrjrc_maybe_add_count)r[deltappdpphppmppss r4rEz_FrequencyInferer.get_freqs   (= 4 Adk**  ,\%-- ,))++ +  B!R+++> > >4 " 4 #RiRiRi s # # 1#C55 5 % % % 1#E53;77 7 % % % 1#C55 5 %#+ / / 1#D%3$;*?@@ @ %#"2 4 4 1#D%3)3C*DEE E$D%00 0r6 list[int]cRt|jfd|jDS)Ncg|]}|z Sr).0xr}s r4 z0_FrequencyInferer.day_deltas.. ---AC---r6r rUra)r[r}s @r4 day_deltasz_FrequencyInferer.day_deltass.dk**--------r6cXt|jdzfd|jDS)Nrocg|]}|z Srr)rrr~s r4rz1_FrequencyInferer.hour_deltas..rr6r)r[r~s @r4rzz_FrequencyInferer.hour_deltas s3dk**b0--------r6 np.ndarrayc8t|j|jS)NrN)rrRrUr`s r4fieldsz_FrequencyInferer.fieldss!$-dkBBBBr6rcNt|jd|jjS)Nr)unit)rrRr7rr`s r4 rep_stampz_FrequencyInferer.rep_stamps q) @@@@r6c@t|j|jjSr_)rrr7 dayofweekr`s r4rz&_FrequencyInferer.month_position_checks#DK1EFFFr6c|jddz|jdz}t|dS)Nr+ Mi8)rrastype)r[nmonthss r4mdiffsz_FrequencyInferer.mdiffss9+c"R'$+c*::W^^D11222r6c\t|jddS)Nr+r)rrrr`s r4ydiffsz_FrequencyInferer.ydiffs!s%T[-44T::;;;r6cb|}|r;|jd}t|jj}|d|}t ||S|}|rM|jddz }dddd}t||jjdz}|d|}t ||S|}|rt ||jdS|j r| S| rdS| } | r| SdS) Nrr*rPr )rrgB) _get_annual_rulerr rmonthr{_get_quarterly_ruler_get_monthly_rulerh_get_daily_rule_is_business_daily _get_wom_rule) r[ annual_rulenyearsraliasquarterly_rule nquartersmod_dict monthly_rulewom_rules r4ryz#_FrequencyInferer._infer_daily_rule%sT++--  3[^F!$."67E",,U,,E#E622 21133  6 A*I",,H!(4>+?!+C"DEE%////E#E955 5--//  B#L$+a.AA A > *'')) )  " " $ $ 3%%''  Otr6ct|j}|jd|z }|dzdkr':':Q'>'>4a 1$ HQK ( d B   r6N)r0rK)r0r]r0rd)r0r1)r0r)r0r)r0r)__name__ __module__ __qualname____doc__r\rrarcrhrjrErrzrrrrrryrrrrrrrr6r4rFrFs@    >,,,^,...^. %%%^%***^*01010101d...^....^.CCC^CAAA^AGGGG333^3<<<^<@ / / / / U U U U U U U UUUUU    &!!!!!!r6rFceZdZdZdS)rDc<|jr|SdSr_)rhrr`s r4ryz,_TimedeltaFrequencyInferer._infer_daily_rules( > *'')) ) * *r6N)rrrryrr6r4rDrDs#*****r6rDmultintrdc||zdkS)Nrr)rurs r4rxrxs 9>r6basecountfloatcf|dkr*|t|ksJt|}||S|Srf)r)rrs r4r{r{sC zzE """"E  r6c  ||dSt|}t|}t|r=t|r*tt |t |S|dvSt|r|dvSt |r|dvSt |r||ddddd d d d d h vS|dkr|dvS|dkr|dvS|dkr|dvS|dkr|dvS|d kr|dvS|d kr|dvS|d kr|dvS|d kr|dvS|d kr|dvSdS)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> rCrrrqrsrtrvrurr> rrrrqrsrtrvrurrrrrrqrrrsrtrurv>rrqrsrtrvrurr>rrqrsrtrvrurr>rrqrsrtrvrurr>rqrsrtrvrurr>rsrtrvrurr>rsrtrvru>rtrvru>rvru>rv)_maybe_coerce_freq _is_annual _is_quarterly_quarter_months_conformr _is_monthly _is_weekly)sourcetargets r4 is_subperiodrs ~u  ' 'F  ' 'F&   *v&&v(>(> PPP v  PPP V  KKK F  &#sCeS$dSSS 3AAA 3AAA 3AAA 3<<< 5777 3000 4+++ 4%% 4ur6c ||dSt|}t|}t|rpt|r t|t|kSt|r.t|}t|}t ||S|dvSt|r|dvSt |r|dvSt |r||ddddd d d d d h vS|dkr|dvS|dkr|dvS|dkr|dvS|dkr|dvS|d kr|dvS|d kr|dvS|d kr|dvS|d kr|dvS|d kr|dvSdS)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> rrrrrqrsrtrvrurr> rrrrqrsrtrvrurrrrrrqrrrsrtrurv>rqrsrtrvrurr>rsrtrvrurr>rsrtrvru>rtrvru>rvru>rv)rrrrrrr)rrsmonthtmonths r4is_superperiodrs ~u  ' 'F  ' 'F&" f   D!&))^F-C-CC C   ;#F++F#F++F*66:: :PPP v  PPP V  KKK F  &#sCeS$dSSS 3KKK 3KKK 3KKK 3<<< 5777 3000 4+++ 4%% 4ur6c|Jt|trtd|j}|dvr|S|S)zwe might need to coerce a code to a rule_code and uppercase it Parameters ---------- source : str or DateOffset Frequency converting from Returns ------- str Nrg>rqrsrtrvrurr)r>rrnameupper)codes r4rr#sR    $ ##4%a33 222 zz||r6rrcNt|}t|}|dz|dzkS)NrP)r )rrsnumtnums r4rr9s)  D  D !8tax r6rulec`|}|dkp|dS)Nr+zY-r startswithrs r4rr?* ::<r"s"""""" ,,,,,,  766666222222666666 *)))))G"""""" GFFFFF877 JJGJJ2(@(I %%J22G22""b""+1 ((2 44B*3r))Y"YY''::::CCCCLy!y!y!y!y!y!y!y!x*****!2*** 4444n7777t,    0000 8888  0000    r6