zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
U
®ý°dGã@sddlmZddlZddlmZddlmZmZm    Z    m
Z
ddl m Z m Z mZmZmZddlmZmZddlmZmZmZddlmZdd    lmZdd
lmZdd lmZm Z m!Z!m"Z"dd l#m$Z$m%Z%dd l&m'Z'ddddddddddddddddddddddddddddœZ(ddddd d!d"d#d$g    Z)e)D],Z*eD] Z+e*›d%e+›Z,e(e*e(e,<q.q&d&D](Z*eD]Z+e*›d%e+›Z-e-e(e-<q`qXe D]Z.d'e.›e(d'e.›<q†d(d)d*œd+d,„Z/d)d-œd.d/„Z0Gd0d1„d1ƒZ1Gd2d3„d3e1ƒZ2d4d5d6œd7d8„Z3d(d9d(d:œd;d<„Z4d5d-œd=d>„Z5d5d-œd?d@„Z6d(d-œdAdB„Z7d(d(d5dCœdDdE„Z8d(d5dFœdGdH„Z9d(d5dFœdIdJ„Z:d(d5dFœdKdL„Z;d(d5dFœdMdN„Z<dOd,d/d>d@dPgZ=dS)Qé)Ú annotationsN)Ú unique_deltas)Ú    TimestampÚget_unit_from_dtypeÚperiods_per_dayÚtz_convert_from_utc)ÚDAYSÚ MONTH_ALIASESÚ MONTH_NUMBERSÚMONTHSÚint_to_weekday)Úbuild_field_sarrayÚmonth_position_check)Ú
DateOffsetÚDayÚ    to_offset)Úget_rule_month)Únpt)Úcache_readonly)Úis_datetime64_dtypeÚis_numeric_dtypeÚis_period_dtypeÚis_timedelta64_dtype)ÚABCIndexÚ    ABCSeries)ÚuniqueÚDÚMÚQÚAÚCÚBÚTÚSÚLÚUÚNÚHÚW)ZWEEKDAYZEOMÚBMÚBQSÚQSÚBQÚBAÚASÚBASÚMSrr r!r"r#r$r%r&r'rrr(rÚYÚBYÚYSÚBYSr+r,r*r3r.r2r-r4r/ú-)rrúW-Ústrú
str | None)Ú
offset_strÚreturncCs t |d¡S)z4
    Alias to closest period strings BQ->Q etc.
    N)Ú_offset_to_period_mapÚget)r9©r=úQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tseries/frequencies.pyÚget_period_alias^sr?©r:cCsÜddlm}m}t|tƒrN|j}t|ƒsJt|ƒsJ|jt    ksJt
d|j›ƒ‚|}t |dƒsZn.t |jƒrnt
dƒ‚nt|jƒrˆt |ƒ}| ¡St||ƒrºt||ƒsºt|ƒr´t
d|j›ƒ‚|j}t||ƒsÌ||ƒ}t|ƒ}| ¡S)aC
    Infer the most likely frequency given the input index.
 
    Parameters
    ----------
    index : DatetimeIndex or TimedeltaIndex
      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)Ú DatetimeIndexÚIndexz>cannot infer freq from a non-convertible dtype on a Series of ÚdtypezJPeriodIndex given. Check the `freq` attribute instead of using infer_freq.z8cannot infer freq from a non-convertible index of dtype )Zpandas.core.apirArBÚ
isinstancerZ_valuesrrrCÚobjectÚ    TypeErrorÚhasattrrÚ_TimedeltaFrequencyInfererÚget_freqrÚ_FrequencyInferer)ÚindexrArBÚvaluesZinfererr=r=r>Ú
infer_freqis@
ÿþý
ÿ
 
ÿ
 
ÿ
rMc@sPeZdZdZddœdd„Zeddœdd„ƒZeddœd    d
„ƒZed dœd d „ƒZed dœdd„ƒZ    ddœdd„Z
eddœdd„ƒZ eddœdd„ƒZ eddœdd„ƒZ eddœdd„ƒZddœdd„Zeddœd d!„ƒZeddœd"d#„ƒZddœd$d%„Zddœd&d'„Zddœd(d)„Zddœd*d+„Zddœd,d-„Zd dœd.d/„Zddœd0d1„Zd2S)3rJz8
    Not sure if I can avoid the state machine here
    ÚNoner@cCsŒ||_|j|_t|tƒr*t|jjjƒ|_    nt|jjƒ|_    t
|dƒrb|j dk    rbt |j|j |j    d|_t |ƒdkrvtdƒ‚|jjp„|jj|_dS)NÚtz©Zresoéz(Need at least 3 dates to infer frequency)rKÚasi8Úi8valuesrDrrÚ_dataZ_ndarrayrCÚ_cresorGrOrÚlenÚ
ValueErrorZ_is_monotonic_increasingZ_is_monotonic_decreasingÚ is_monotonic)ÚselfrKr=r=r>Ú__init__·s$
ÿ
 
ÿ ÿz_FrequencyInferer.__init__znpt.NDArray[np.int64]cCs
t|jƒS©N)rrS©rYr=r=r>ÚdeltasÖsz_FrequencyInferer.deltascCs t|jjƒSr[)rrKrRr\r=r=r>Ú deltas_asi8Úsz_FrequencyInferer.deltas_asi8ÚboolcCst|jƒdkS©Né)rVr]r\r=r=r>Ú    is_uniqueàsz_FrequencyInferer.is_uniquecCst|jƒdkSr`)rVr^r\r=r=r>Úis_unique_asi8äsz _FrequencyInferer.is_unique_asi8r8cCs"|jr|jjsdS|jd}t|jƒ}|r<t||ƒr<| ¡S|jddgddgdddgfkr^dS|j    shdS|j
d}|d}|d}|d}t||ƒr¢t d    ||ƒSt||ƒrºt d
||ƒSt||ƒrÒt d ||ƒSt||d ƒròt d ||d ƒSt||dƒrt d||dƒSt d|ƒSdS)z¨
        Find the appropriate frequency string to describe the inferred
        frequency of self.i8values
 
        Returns
        -------
        str or None
        NrraééAZBHéé<r'r"r#ièr$i@Br%r&) rXrKZ
_is_uniquer]rrUÚ _is_multipleÚ_infer_daily_ruleÚ hour_deltasrcr^Ú_maybe_add_count)rYÚdeltaÚppdÚpphÚppmZppsr=r=r>rIès2    
 
 
 
 
 
z_FrequencyInferer.get_freqz    list[int]cst|jƒ‰‡fdd„|jDƒS)Ncsg|] }|ˆ‘qSr=r=©Ú.0Úx©rmr=r>Ú
<listcomp>sz0_FrequencyInferer.day_deltas.<locals>.<listcomp>©rrUr]r\r=rsr>Ú
day_deltass
z_FrequencyInferer.day_deltascs"t|jƒd‰‡fdd„|jDƒS)Nrfcsg|] }|ˆ‘qSr=r=rp©rnr=r>rt"sz1_FrequencyInferer.hour_deltas.<locals>.<listcomp>rur\r=rwr>rjsz_FrequencyInferer.hour_deltasz
np.ndarraycCst|j|jdS)NrP)r rSrUr\r=r=r>Úfields$sz_FrequencyInferer.fieldsrcCst|jdƒS©Nr)rrSr\r=r=r>Ú    rep_stamp(sz_FrequencyInferer.rep_stampcCst|j|jjƒSr[)rrxrKZ    dayofweekr\r=r=r>r,sz&_FrequencyInferer.month_position_checkcCs&|jdd|jd}t| d¡ƒS)Nr1é rÚi8)rxrÚastype)rYZnmonthsr=r=r>Úmdiffs/sz_FrequencyInferer.mdiffscCst|jd d¡ƒS)Nr1r|)rrxr}r\r=r=r>Úydiffs4sz_FrequencyInferer.ydiffsc
CsÖ| ¡}|r:|jd}t|jj}|›d|›}t||ƒS| ¡}|rŒ|jdd}ddddœ}t||jjd}|›d|›}t||ƒS| ¡}|r¨t||jdƒS|j    r¶| 
¡S|  ¡rÂdS|  ¡}    |    rÒ|    SdS)    Nrr5rQr{é é
)rérar!) Ú_get_annual_rulerr    rzÚmonthrkÚ_get_quarterly_ruler~Ú_get_monthly_rulerbÚ_get_daily_ruleÚ_is_business_dailyÚ _get_wom_rule)
rYZ annual_ruleZnyearsr„ÚaliasZquarterly_ruleZ    nquartersÚmod_dictZ monthly_ruleZwom_ruler=r=r>ri8s0
 
 
z#_FrequencyInferer._infer_daily_rulecCsXt|jƒ}|jd|}|ddkrJt|j ¡}d|›}t||dƒStd|ƒSdS)Nrér6r)rrUr]r rzÚweekdayrk)rYrmÚdaysÚwdrŠr=r=r>r‡Xs
 
z!_FrequencyInferer._get_daily_rulecCsXt|jƒdkrdStt|jdƒƒdkr,dS| ¡}|dkr@dSdddddœ |¡SdS)Nrarr.r/rr-©ÚcsÚbsZceÚbe)rVrrrxrr<©rYZ    pos_checkr=r=r>rƒcsz"_FrequencyInferer._get_annual_rulecCsTt|jƒdkrdS|jdddks(dS| ¡}|dkr<dSdddddœ |¡SdS)    NrarrQr+r*rr,r©rVr~rr<r”r=r=r>r…qsz%_FrequencyInferer._get_quarterly_rulecCs>t|jƒdkrdS| ¡}|dkr&dSdddddœ |¡SdS)Nrar0ZBMSrr)rr•r”r=r=r>r†s z#_FrequencyInferer._get_monthly_rulecCsŠ|jddgkrdS|jd ¡}t |j¡}t|jƒ}t ||¡}t     |t 
|¡d¡}t t  |dk|dk@|dk|dk@|dk@B¡ƒS)NrarQFrrŒé) rvrKrÚnpZdiffrSrrUZ floor_divideÚmodZcumsumr_Úall)rYZ first_weekdayZshiftsrmÚweekdaysr=r=r>rˆ‰s 
 ÿÿÿz$_FrequencyInferer._is_business_dailycCs~t|jjƒ}t|ƒdkrdSt|jjddƒ}||dk}t|ƒdksTt|ƒdkrXdS|dd}t|d}d|›|›S)NrarŒr–rzWOM-)rrKrrVÚdayr )rYršZweek_of_monthsÚweekrr=r=r>r‰œs     z_FrequencyInferer._get_wom_ruleN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rZrr]r^rbrcrIrvrjrxrzrr~rrir‡rƒr…r†rˆr‰r=r=r=r>rJ²s>2  
rJc@seZdZdd„ZdS)rHcCs|jr| ¡SdSr[)rbr‡r\r=r=r>ri¯sz,_TimedeltaFrequencyInferer._infer_daily_ruleN)rržrŸrir=r=r=r>rH®srHÚintr_)Úmultr:cCs ||dkSryr=)Úusr¢r=r=r>rh´srhÚfloat)ÚbaseÚcountr:cCs4|dkr,|t|ƒkst‚t|ƒ}|›|›S|SdSr`)r¡ÚAssertionError)r¥r¦r=r=r>rk¸s
 rkc 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
krô|dkS|d kr|dkS|d kr|dkS|d kr*|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"r r'r$r#rr%¾    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%>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%¾r&)Ú_maybe_coerce_freqÚ
_is_annualÚ _is_quarterlyÚ_quarter_months_conformrÚ _is_monthlyÚ
_is_weekly)ÚsourceÚtargetr=r=r>Ú is_subperiodÅsHÿ
 
 
 
r¸c 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|dkrô|dkS|d    kr|dkS|d
kr|dkS|d kr*|dkS|d kr<|dkS|d krN|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
    NFr¨r©rr r!r'r"r#r$r%r&rªr«r¬r­r®r¯)r°r±rr²r³r´rµ)r¶r·ZsmonthZtmonthr=r=r>Úis_superperiodýsJ
 
 
 
 
 
 
r¹cCs$|dk    s t‚t|tƒr|j}| ¡S)zÈwe might need to coerce a code to a rule_code
    and uppercase it
 
    Parameters
    ----------
    source : str or DateOffset
        Frequency converting from
 
    Returns
    -------
    str
    N)r§rDrZ    rule_codeÚupper)Úcoder=r=r>r°7s 
r°)r¶r·r:cCs t|}t|}|d|dkS)NrQ)r
)r¶r·ZsnumZtnumr=r=r>r³Jsr³)Úruler:cCs| ¡}|dkp| d¡S)NrzA-©rºÚ
startswith©r¼r=r=r>r±Psr±cCs$| ¡}|dkp"| d¡p"| d¡S)NrzQ-r,r½r¿r=r=r>r²Usr²cCs| ¡}|dkS)N)rr))rºr¿r=r=r>r´Zsr´cCs| ¡}|dkp| d¡S)Nr(r6r½r¿r=r=r>rµ_srµrr)>Ú
__future__rÚnumpyr—Zpandas._libs.algosrZpandas._libs.tslibsrrrrZpandas._libs.tslibs.ccalendarrr    r
r r Zpandas._libs.tslibs.fieldsr rZpandas._libs.tslibs.offsetsrrrZpandas._libs.tslibs.parsingrZpandas._typingrZpandas.util._decoratorsrZpandas.core.dtypes.commonrrrrZpandas.core.dtypes.genericrrZpandas.core.algorithmsrr;Z _need_suffixÚ_prefixÚ_mÚkeyÚ_aliasZ_dr?rMrJrHrhrkr¸r¹r°r³r±r²r´rµÚ__all__r=r=r=r>Ú<module>s’      å I} 8:ú