hyb
2025-12-23 10f3a1daddfbc7fa3dd2069197d83e8b6ef19176
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
Ë
nñúh‘9ãó"—dZddlmZddlmZddlZddlmZddl    m
Z
ddl m Z ddl mZdd    lmZdd
lmZd ZGd „d «ZGd„de«ZGd„de«ZGd„de«ZGd„de«ZGd„de«ZGd„de«ZGd„de«Zy)zLIndexer objects for computing start/end window bounds for rolling operationsé)Ú annotations)Ú    timedeltaN)Ú
BaseOffset)Ú calculate_variable_window_bounds)ÚAppender)Úensure_platform_int)Ú DatetimeIndex)ÚNanoa¾
Computes the bounds of a window.
 
Parameters
----------
num_values : int, default 0
    number of values that will be aggregated over
window_size : int, default 0
    the number of rows in a window
min_periods : int, default None
    min_periods passed from the top level rolling API
center : bool, default None
    center passed from the top level rolling API
closed : str, default None
    closed passed from the top level rolling API
step : int, default None
    step passed from the top level rolling API
    .. versionadded:: 1.5
win_type : str, default None
    win_type passed from the top level rolling API
 
Returns
-------
A tuple of ndarray[int64]s, indicating the boundaries of each
window
cóf—eZdZdZ    d                    dd„Zee«                    d                                            dd„«Zy)    Ú BaseIndexeraà
    Base class for window bounds calculations.
 
    Examples
    --------
    >>> from pandas.api.indexers import BaseIndexer
    >>> class CustomIndexer(BaseIndexer):
    ...     def get_window_bounds(self, num_values, min_periods, center, closed, step):
    ...         start = np.empty(num_values, dtype=np.int64)
    ...         end = np.empty(num_values, dtype=np.int64)
    ...         for i in range(num_values):
    ...             start[i] = i
    ...             end[i] = i + self.window_size
    ...         return start, end
    >>> df = pd.DataFrame({"values": range(5)})
    >>> indexer = CustomIndexer(window_size=2)
    >>> df.rolling(indexer).sum()
        values
    0    1.0
    1    3.0
    2    5.0
    3    7.0
    4    4.0
    Nc ój—||_||_|j«D]\}}t|||«Œy©N)Ú index_arrayÚ window_sizeÚitemsÚsetattr)ÚselfrrÚkwargsÚkeyÚvalues      úOH:\Change_password\venv_build\Lib\site-packages\pandas/core/indexers/objects.pyÚ__init__zBaseIndexer.__init__Hs9€ð'ˆÔØ&ˆÔà Ÿ,™,›.ò    &‰JˆCÜ D˜#˜uÕ %ñ    &ócó—t‚r)ÚNotImplementedError©rÚ
num_valuesÚ min_periodsÚcenterÚclosedÚsteps      rÚget_window_boundszBaseIndexer.get_window_boundsQs
€ô"Ð!r)Nr)rúnp.ndarray | NonerÚintÚreturnÚNone©rNNNN© rr$rú
int | Nonerz bool | Noner z
str | Noner!r)r%ztuple[np.ndarray, np.ndarray])Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrÚget_window_bounds_docr"©rrr r .s„ñð4IJð&Ø,ð&ØBEð&à     ó&ñÐ#Ó$ðØ"&Ø"Ø!Øð "àð"ð ð"ðð    "ð
ð "ð ð "ð
'ò"ó%ñ"rr cóP—eZdZdZee«                    d                                            dd„«Zy)ÚFixedWindowIndexerz3Creates window boundaries that are of fixed length.Ncó8—|s|jdk(r|jdz
dz}nd}tjd|z|dz|z|d¬«}||jz
}|dvr|dz}|dvr|dz}tj|d|«}tj|d|«}||fS)NrééÚint64©Údtype©ÚleftÚboth)r9Úneither)rÚnpÚarangeÚclip)    rrrrr r!ÚoffsetÚendÚstarts             rr"z$FixedWindowIndexer.get_window_bounds`s±€ñ T×%Ñ%¨Ò*Ø×&Ñ&¨Ñ*¨qÑ0‰FàˆFäi‰i˜˜F™
 J°¡N°VÑ$;¸TÈÔQˆØd×&Ñ&Ñ&ˆØ Ð%Ñ %Ø Q‰JˆEØ Ð(Ñ (Ø 1‰HˆCäg‰gc˜1˜jÓ)ˆÜ—‘˜˜q *Ó-ˆàcˆzÐrr'r(©r*r+r,r-rr.r"r/rrr1r1]sh„Ù=á Ð#Ó$ðØ"&Ø"Ø!Øð àðð ððð    ð
ð ð ð ð
'òó%ñrr1cóP—eZdZdZee«                    d                                            dd„«Zy)ÚVariableWindowIndexerzNCreates window boundaries that are of variable length, namely for time series.NcóJ—t||j||||j«Sr)rrrrs      rr"z'VariableWindowIndexer.get_window_bounds~s/€ô0Ø Ø × Ñ Ø Ø Ø Ø × Ñ ó 
ð    
rr'r(rBr/rrrDrD{sh„ÙXá Ð#Ó$ðØ"&Ø"Ø!Øð 
àð
ð ð
ðð    
ð
ð 
ð ð 
ð
'ò
ó%ñ
rrDc󀇗eZdZdZ                d                                    dˆfd„ Zee«                    d                                            dd„«ZˆxZS)ÚVariableOffsetWindowIndexeraP
    Calculate window boundaries based on a non-fixed offset such as a BusinessDay.
 
    Examples
    --------
    >>> from pandas.api.indexers import VariableOffsetWindowIndexer
    >>> df = pd.DataFrame(range(10), index=pd.date_range("2020", periods=10))
    >>> offset = pd.offsets.BDay(1)
    >>> indexer = VariableOffsetWindowIndexer(index=df.index, offset=offset)
    >>> df
                0
    2020-01-01  0
    2020-01-02  1
    2020-01-03  2
    2020-01-04  3
    2020-01-05  4
    2020-01-06  5
    2020-01-07  6
    2020-01-08  7
    2020-01-09  8
    2020-01-10  9
    >>> df.rolling(indexer).sum()
                   0
    2020-01-01   0.0
    2020-01-02   1.0
    2020-01-03   2.0
    2020-01-04   3.0
    2020-01-05   7.0
    2020-01-06  12.0
    2020-01-07   6.0
    2020-01-08   7.0
    2020-01-09   8.0
    2020-01-10   9.0
    c ó°•—t‰|||fi|¤Žt|t«s t    d«‚||_t|t «s t    d«‚||_y)Nzindex must be a DatetimeIndex.z(offset must be a DateOffset-like object.)ÚsuperrÚ
isinstancer    Ú
ValueErrorÚindexrr?)rrrrLr?rÚ    __class__s      €rrz$VariableOffsetWindowIndexer.__init__¹sSø€ô    ‰Ñ˜ kÑ<°VÒ<ܘ%¤Ô/ÜÐ=Ó>Ð >؈Œ
ܘ&¤*Ô-ÜÐGÓHÐ H؈ rcóœ—| td«‚|dkr.tjdd¬«tjdd¬«fS|€|jdnd}|dv}|dv}|j|d    z
|jdkrd
}nd    }||jz}    tj|d¬«}
|
j d
«tj|d¬«} | j d
«d|
d<|rd    | d<nd| d<t d«} td    |«D]½} |j| }||    z
}|r|td    «z}| |
| <t|
| d    z
| «D]#}|j||z
|z}|| kDsŒ||
| <n|j| | d    z
|z
|z}|| k(r|s| | d    z
d    z| | <n|| kr    | d    z| | <n | | d    z
| | <|rŒ±| | xxd    zcc<Œ¿|
| fS) Nz/step not implemented for variable offset windowrr5r6Úrightr:)rOr:r8r3éÿÿÿÿ)    rr<ÚemptyrLr?ÚfillrÚranger
)rrrrr r!Ú right_closedÚ left_closedÚindex_growth_signÚ offset_diffrAr@ÚzeroÚiÚ    end_boundÚ start_boundÚjÚ
start_diffÚend_diffs                   rr"z-VariableOffsetWindowIndexer.get_window_boundsÉs €ð Ð Ü%Ð&WÓXÐ XØ ˜Š?Ü—8‘8˜A WÔ-¬r¯x©x¸ÀÔ/IÐIÐ Ið ˆ>Ø $§
¡
Р6‘W¸FˆFàÐ!2Ð2ˆ ØР0Ð0ˆ à :‰:j 1‘nÑ %¨¯
©
°1© Ò 5Ø "Ñ à !Ð Ø'¨$¯+©+Ñ5ˆ ä—‘˜¨7Ô3ˆØ 
‰
2ŒÜh‰hz¨Ô1ˆØ ‰Œ àˆˆa‰ñ ؈CŠFðˆC‰F䘋|ˆôq˜*Ó%ò    ˆAØŸ
™
 1™ ˆIØ# kÑ1ˆKñØœt A›wÑ& ðˆE!‰Hܘ5  Q¡™<¨Ó+ò Ø"Ÿj™j¨™m¨kÑ9Ð=NÑN
Ø Ó$Ø E˜!‘HÙð     ðŸ
™
 3 q¨1¡u¡:Ñ.°Ñ:Ð>OÑOˆHؘ4Ò© ؘQ ™U™ a™A’ؘTÒ!ؘQ™A’à˜Q ™U™A‘ò ØA“˜!‘ ”ð;    ð>cˆzÐr)NrNN)
rr#rr$rLzDatetimeIndex | Noner?zBaseOffset | Noner%r&r'r()    r*r+r,r-rrr.r"Ú __classcell__©rMs@rrGrG•s¹ø„ñ!ðJ*.ØØ&*Ø$(ð à&ðððð$ð    ð
"ð ð
õñ Ð#Ó$ðØ"&Ø"Ø!Øð JàðJð ðJðð    Jð
ð Jð ð Jð
'òJó%ôJrrGcóP—eZdZdZee«                    d                                            dd„«Zy)ÚExpandingIndexerz;Calculate expanding window bounds, mimicking df.expanding()Ncóž—tj|tj¬«tjd|dztj¬«fS)Nr6r3)r<Úzerosr5r=rs      rr"z"ExpandingIndexer.get_window_boundss8€ô H‰HZ¤r§x¡xÔ 0Ü I‰Ia˜ a™¬r¯x©xÔ 8ð
ð    
rr'r(rBr/rrrbrbsh„ÙEá Ð#Ó$ðØ"&Ø"Ø!Øð 
àð 
ð ð 
ðð     
ð
ð 
ð ð 
ð
'ò 
ó%ñ 
rrbcóP—eZdZdZee«                    d                                            dd„«Zy)ÚFixedForwardWindowIndexera¿
    Creates window boundaries for fixed-length windows that include the current row.
 
    Examples
    --------
    >>> df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
    >>> df
         B
    0  0.0
    1  1.0
    2  2.0
    3  NaN
    4  4.0
 
    >>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
    >>> df.rolling(window=indexer, min_periods=1).sum()
         B
    0  1.0
    1  3.0
    2  2.0
    3  4.0
    4  4.0
    Ncóܗ|r td«‚| td«‚|€d}tjd||d¬«}||jz}|jrtj|d|«}||fS)Nz.Forward-looking windows can't have center=TruezAForward-looking windows don't support setting the closed argumentr3rr5r6)rKr<r=rr>)rrrrr r!rAr@s        rr"z+FixedForwardWindowIndexer.get_window_boundsBs~€ñ ÜÐMÓNÐ NØ Ð ÜØSóð ð ˆ<؈Dä—    ‘    ˜!˜Z¨°WÔ=ˆØd×&Ñ&Ñ&ˆØ × Ò Ü—'‘'˜#˜q *Ó-ˆCàcˆzÐrr'r(rBr/rrrfrf)sl„ññ0Ð#Ó$ðØ"&Ø"Ø!Øð àðð ððð    ð
ð ð ð ð
'òó%ñrrfc󆇗eZdZdZdddedf                                            dˆfd„ Zee«                    d                                            dd„«ZˆxZ    S)    ÚGroupbyIndexerzMCalculate bounds to compute groupby rolling, mimicking df.groupby().rolling()Nrc ó´•—|xsi|_||_|r|j«ni|_t    ‰|d||jj d|«dœ|¤Žy)a4
        Parameters
        ----------
        index_array : np.ndarray or None
            np.ndarray of the index of the original object that we are performing
            a chained groupby operation over. This index has been pre-sorted relative to
            the groups
        window_size : int or BaseIndexer
            window size during the windowing operation
        groupby_indices : dict or None
            dict of {group label: [positional index of rows belonging to the group]}
        window_indexer : BaseIndexer
            BaseIndexer class determining the start and end bounds of each group
        indexer_kwargs : dict or None
            Custom kwargs to be passed to window_indexer
        **kwargs :
            keyword arguments that will be available when get_window_bounds is called
        r©rrNr/)Úgroupby_indicesÚwindow_indexerÚcopyÚindexer_kwargsrIrÚpop)rrrrlrmrorrMs       €rrzGroupbyIndexer.__init___sdø€ð6 /Ò4°"ˆÔØ,ˆÔÙ7E˜n×1Ñ1Ô3È2ˆÔÜ ‰Ñð    
Ø#Ø×+Ñ+×/Ñ/° ¸{ÓKñ    
ðó    
rcó¤—g}g}d}|jj«D]§\}    }
|j%|jjt    |
««} n |j} |j
d    | |j dœ|j¤Ž} | jt|
«||||«\} }| jtj«} |jtj«}t| «t|«k(sJd«‚tj||t|
«z«}|t|
«z }tj||ddzg«jtjd¬«}|j|jt    | «««|j|jt    |«««Œªt|«dk(rJtjgtj¬«tjgtj¬«fStj |«} tj |«}| |fS)
Nrrkz6these should be equal in length from get_window_boundsrPr3F)rnr6r/)rlrrÚtakerrmrror"ÚlenÚastyper<r5r=ÚappendÚarrayÚ concatenate)rrrrr r!Ú start_arraysÚ
end_arraysÚwindow_indices_startrÚindicesrÚindexerrAr@Úwindow_indicess                rr"z GroupbyIndexer.get_window_boundsƒs€ðˆ ؈
Ø ÐØ ×0Ñ0×6Ñ6Ó8ó    M‰LˆCð×ÑÐ+Ø"×.Ñ.×3Ñ3Ô4GÈÓ4PÓQ‘ à"×.Ñ. Ø)d×)Ñ)ðØ'Ø ×,Ñ,ñð×%Ñ%ñˆGð
!×2Ñ2ܐG“ ˜k¨6°6¸4ó‰JˆE3ð—L‘L¤§¡Ó*ˆEØ—*‘*œRŸX™XÓ&ˆCܐu“:¤Øó"òð HàGó Hðô
 ŸY™YØ$Ð&:¼SÀ»\Ñ&IóˆNð !¤C¨£LÑ 0Ð  äŸY™Y ~¸ÀrÑ8JÈQÑ8NÐ7OÓP×WÑWÜ—‘˜uðXóˆNð × Ñ  × 3Ñ 3Ô4GÈÓ4NÓ OÔ PØ × Ñ ˜n×1Ñ1Ô2EÀcÓ2JÓKÖ Lð?    Mô@ ˆ|Ó  Ò !Ü—8‘8˜B¤b§h¡hÔ/´·±¸"ÄBÇHÁHÔ1MÐMÐ MÜ—‘˜|Ó,ˆÜn‰n˜ZÓ(ˆØcˆzÐr) rr#rzint | BaseIndexerrlú dict | Nonermztype[BaseIndexer]ror~r%r&r'r()
r*r+r,r-r rrr.r"r_r`s@rriri\s¼ø„ÙWð*.Ø)*Ø'+Ø,7Ø&*ð "
à&ð"
ð'ð"
ð%ð    "
ð
*ð "
ð $ð "
ð
õ"
ñHÐ#Ó$ðØ"&Ø"Ø!Øð 2àð2ð ð2ðð    2ð
ð 2ð ð 2ð
'ò2ó%ô2rricóP—eZdZdZee«                    d                                            dd„«Zy)ÚExponentialMovingWindowIndexerz/Calculate ewm window bounds (the entire window)Ncóš—tjdgtj¬«tj|gtj¬«fS)Nrr6)r<rvr5rs      rr"z0ExponentialMovingWindowIndexer.get_window_bounds¼s1€ôx‰x˜˜¤2§8¡8Ô,¬b¯h©h¸
°|Ì2Ï8É8Ô.TÐTÐTrr'r(rBr/rrr€r€¹sp„Ù9á Ð#Ó$ðØ"&Ø"Ø!Øð UàðUð ðUðð    Uð
ð Uð ð Uð
'òUó%ñUrr€)r-Ú
__future__rÚdatetimerÚnumpyr<Úpandas._libs.tslibsrÚpandas._libs.window.indexersrÚpandas.util._decoratorsrÚpandas.core.dtypes.commonrÚpandas.core.indexes.datetimesr    Úpandas.tseries.offsetsr
r.r r1rDrGrbrfrir€r/rrú<module>r‹s“ðÙRÝ"åãå*ÝIÝ,å9å7å'ðÐ÷8,"ñ,"ô^˜ôô<
˜Kô
ô4 +ôôD
{ô
ô$0  ô0ôfZ[ôZôz U [õ Ur