imHvddlmZddlmZddlZddlmZddlm Z ddl m Z m Z m Z mZddlmZmZmZmZmZddlmZdd lmZmZdd lmZmZmZdd lmZdd l m!Z!m"Z"dd l#m$Z$ddl%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+ddl,m-Z-erddl.m/Z/ddl0m1Z1m2Z2m3Z3ddl4m5Z5gdZ6e6D]Z7eD]Z8e7de8Z9ee7ee9<dD]Z7eD]Z8e7de8Z:e:ee:<eD] Z;de;ede;<d9dZ<e"dd:d Z=Gd!d"Z>Gd#d$e>Z?d;d(Z@dd/ZDd?d2ZEd@d4ZFd@d5ZGd@d6ZHd@d7ZIgd8ZJdS)A) 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_FREQSTR)build_field_sarraymonth_position_check) DateOffsetDay to_offset)get_rule_month)cache_readonly set_module)is_numeric_dtype) ArrowDtypeDatetimeTZDtype 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 HC:\PYTHON\_runtimes\venv\Lib\site-packages\pandas/tseries/frequencies.pyget_period_aliasr6Os $ ' D 9 99pandasindex@DatetimeIndex | TimedeltaIndex | Series | DatetimeLikeArrayMixincpddlm}t|tr|j}t|jt r>> idx = pd.date_range(start="2020/12/01", end="2020/12/30", periods=30) >>> pd.infer_freq(idx) 'D' r)r!NmMz>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 F)copy)pandas.core.apir! isinstancer_valuesr=rpyarrowtypes is_timestamp pyarrow_dtype_to_datetimearrayr is_np_dtyperobject TypeErrorhasattrr_TimedeltaFrequencyInfererget_freqr_FrequencyInferer)r9r!valuespainferers r5 infer_freqrRZsT.-----%## ek: . . 4 x$$V\%?@@ 41133 OFL$ / / &,88 |v%%0"'+00  5' " "  EK - -   X    c * * ,U33!!! %+ & &  Tu{ T T    e] + +1 e%000&&G     r7cReZdZdZddZed 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)&rNz8 Not sure if I can avoid the state machine here r1Nonec||_|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)r9asi8i8valuesrArr_data_ndarrayr=_cresorKrVr len ValueError_is_monotonic_increasing_is_monotonic_decreasing is_monotonic)selfr9s r5__init__z_FrequencyInferer.__init__s    eX & & D. $*DKK .en.BCCDK 5$   x# 3M58$+!!!  u::>>GHH H J / V4:3V r7npt.NDArray[np.int64]c*t|jSN)rr[rds r5deltasz_FrequencyInferer.deltassT]+++r7c4t|jjSrh)rr9rZris r5 deltas_asi8z_FrequencyInferer.deltas_asi8sTZ_---r7boolc2t|jdkSN)r_rjris r5 is_uniquez_FrequencyInferer.is_uniques4;1$$r7c2t|jdkSro)r_rlris r5is_unique_asi8z _FrequencyInferer.is_unique_asi8s4#$$))r7r2c|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 NrrpA)rprurvbh<hminsimsi@Busns) rcr9 _is_uniquerjr r^ _is_multiple_infer_daily_rule hour_deltasrsrl_maybe_add_count)rddeltappdpphppmppss r5rMz_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 0r7 list[int]cRt|jfd|jDS)Ncg|]}|z Sr).0xrs r5 z0_FrequencyInferer.day_deltas..---AC---r7r r^rj)rdrs @r5 day_deltasz_FrequencyInferer.day_deltass.dk**--------r7cXt|jdzfd|jDS)Nrxcg|]}|z Srr)rrrs r5rz1_FrequencyInferer.hour_deltas..$rr7r)rdrs @r5rz_FrequencyInferer.hour_deltas!s3dk**b0--------r7 np.ndarrayc8t|j|jS)NrW)rr[r^ris r5fieldsz_FrequencyInferer.fields&s!$-dkBBBBr7rcNt|jd|jjS)Nr)unit)rr[r9rris r5 rep_stampz_FrequencyInferer.rep_stamp*s q) @@@@r7c@t|j|jjSrh)rrr9 dayofweekris r5rz&_FrequencyInferer.month_position_check.s#DK1EFFFr7c|jddz|jdz}t|dS)Nr, Mi8)rrastype)rdnmonthss r5mdiffsz_FrequencyInferer.mdiffs1s9+c"R'$+c*::W^^D11222r7c\t|jddS)Nr,r)rrrris r5ydiffsz_FrequencyInferer.ydiffs6s%T[-44T::;;;r7cb|}|r;|jd}t|jj}|d|}t ||S|}|rM|jddz }dddd}t||jjdz}|d|}t ||S|}|rt ||jdS|j r| S| rdS| } | r| SdS) Nrr+rYr )rrpB) _get_annual_rulerr rmonthr_get_quarterly_ruler_get_monthly_rulerq_get_daily_rule_is_business_daily _get_wom_rule) rd annual_rulenyearsraliasquarterly_rule nquartersmod_dict monthly_rulewom_rules r5rz#_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%%''  Otr7ct|j}|jd|z }|dzdkr':':Q'>'>4a 1$ HQK ( d B   r7N)r1rT)r1rfr1rm)r1r2)r1r)r1r)r1r)__name__ __module__ __qualname____doc__rerrjrlrqrsrMrrrrrrrrrrrrrrrr7r5rNrNs@    >,,,^,...^. %%%^%***^*01010101d...^....^.CCC^CAAA^AGGGG333^3<<<^<@ / / / / U U U U U U U UUUUU    &!!!!!!r7rNceZdZdZdS)rLc<|jr|SdSrh)rqrris r5rz,_TimedeltaFrequencyInferer._infer_daily_rules( > *'')) ) * *r7N)rrrrrr7r5rLrLs#*****r7rLmultintrmc||zdkS)Nrr)r~rs r5rrs 9>r7basecountfloatcf|dkr*|t|ksJt|}||S|Sro)r)rrs r5rrsC zzE """"E  r7c  ||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> rCrrrzr|r}rr~r{> rrrrzr|r}rr~r{rrrrzr{r|r}r~r>rrzr|r}rr~r{>rrzr|r}rr~r{>rrzr|r}rr~r{>rzr|r}rr~r{>r|r}rr~r{>r|r}rr~>r}rr~>rr~>r)_maybe_coerce_freq _is_annual _is_quarterly_quarter_months_conformr _is_monthly _is_weekly)sourcetargets r5 is_subperiodrs ~u  ' 'F  ' 'F&   *v&&v(>(> PPP v  PPP V  KKK F  &#sCeS$dSSS 3AAA 3AAA 3AAA 3<<< 5777 3000 4+++ 4%% 4ur7c ||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> rrrrrzr|r}rr~r{> rrrrzr|r}rr~r{rrrrzr{r|r}r~r>rzr|r}rr~r{>r|r}rr~r{>r|r}rr~>r}rr~>rr~>r)rrrrrrr)rrsmonthtmonths r5is_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%% 4ur7c|Jt|tr&tt|jj}|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 N>rzr|r}rr~r{)rArrrname_freqstrupper)codes r5rr8s[    $ ##:9TY//009 222 zz||r7rrcNt|}t|}|dz|dzkS)NrY)r )rrsnumtnums r5rrNs)  D  D !8tax r7rulec`|}|dkp|dS)Nr,zY-r startswithrs r5rrT* ::<r+s"""""" ,,,,,, @????? 766666 766666  *)))))G"""""" GFFFFF877 JJGJJ2(@(I %%J22G22""b""+1 ((2 44B*3r))Y"YY'':::: HVVVVry!y!y!y!y!y!y!y!x*****!2*** 4444n7777t,    0000 8888  0000    r7