66from __future__ import annotations
77
88import random
9- from datetime import datetime , timedelta
9+ from datetime import datetime , timedelta , timezone
1010from itertools import cycle , islice
1111from typing import Any
1212
3030 np .empty (shape = (24 * 1800 ,), dtype = np .float64 ),
3131 TWO_HUNDRED_MS ,
3232 ),
33- OrderedRingBuffer ([0.0 ] * 1800 , TWO_HUNDRED_MS , datetime (2000 , 1 , 1 )),
33+ OrderedRingBuffer (
34+ [0.0 ] * 1800 , TWO_HUNDRED_MS , datetime (2000 , 1 , 1 , tzinfo = timezone .utc )
35+ ),
3436 ],
3537)
3638def test_timestamp_ringbuffer (buffer : OrderedRingBuffer [Any ]) -> None :
@@ -46,14 +48,16 @@ def test_timestamp_ringbuffer(buffer: OrderedRingBuffer[Any]) -> None:
4648 # Push in random order
4749 # for i in random.sample(range(size), size):
4850 for i in range (size ):
49- buffer .update (Sample (datetime .fromtimestamp (200 + i * resolution ), i ))
51+ buffer .update (
52+ Sample (datetime .fromtimestamp (200 + i * resolution , tz = timezone .utc ), i )
53+ )
5054
5155 # Check all possible window sizes and start positions
5256 for i in range (0 , size , 1000 ):
5357 for j in range (1 , size - i , 987 ):
5458 assert i + j < size
55- start = datetime .fromtimestamp (200 + i * resolution )
56- end = datetime .fromtimestamp (200 + (j + i ) * resolution )
59+ start = datetime .fromtimestamp (200 + i * resolution , tz = timezone . utc )
60+ end = datetime .fromtimestamp (200 + (j + i ) * resolution , tz = timezone . utc )
5761
5862 tmp = list (islice (cycle (range (0 , size )), i , i + j ))
5963 assert list (buffer .window (start , end )) == list (tmp )
@@ -74,17 +78,17 @@ def test_timestamp_ringbuffer_overwrite(buffer: OrderedRingBuffer[Any]) -> None:
7478
7579 # Push in random order
7680 for i in random .sample (range (size ), size ):
77- buffer .update (Sample (datetime .fromtimestamp (200 + i ), i ))
81+ buffer .update (Sample (datetime .fromtimestamp (200 + i , tz = timezone . utc ), i ))
7882
7983 # Push the same amount twice
8084 for i in random .sample (range (size ), size ):
81- buffer .update (Sample (datetime .fromtimestamp (200 + i ), i * 2 ))
85+ buffer .update (Sample (datetime .fromtimestamp (200 + i , tz = timezone . utc ), i * 2 ))
8286
8387 # Check all possible window sizes and start positions
8488 for i in range (size ):
8589 for j in range (1 , size - i ):
86- start = datetime .fromtimestamp (200 + i )
87- end = datetime .fromtimestamp (200 + j + i )
90+ start = datetime .fromtimestamp (200 + i , tz = timezone . utc )
91+ end = datetime .fromtimestamp (200 + j + i , tz = timezone . utc )
8892
8993 tmp = islice (cycle (range (0 , size * 2 , 2 )), i , i + j )
9094 actual : float
@@ -110,28 +114,28 @@ def test_timestamp_ringbuffer_gaps(
110114
111115 # Add initial data
112116 for i in random .sample (range (size ), size ):
113- buffer .update (Sample (datetime .fromtimestamp (200 + i ), i ))
117+ buffer .update (Sample (datetime .fromtimestamp (200 + i , tz = timezone . utc ), i ))
114118
115119 # Request window of the data
116120 buffer .window (
117- datetime .fromtimestamp (200 ),
118- datetime .fromtimestamp (202 ),
121+ datetime .fromtimestamp (200 , tz = timezone . utc ),
122+ datetime .fromtimestamp (202 , tz = timezone . utc ),
119123 )
120124
121125 # Add entry far in the future
122- buffer .update (Sample (datetime .fromtimestamp (500 + size ), 9999 ))
126+ buffer .update (Sample (datetime .fromtimestamp (500 + size , tz = timezone . utc ), 9999 ))
123127
124128 # Expect exception for the same window
125129 with pytest .raises (IndexError ):
126130 buffer .window (
127- datetime .fromtimestamp (200 ),
128- datetime .fromtimestamp (202 ),
131+ datetime .fromtimestamp (200 , tz = timezone . utc ),
132+ datetime .fromtimestamp (202 , tz = timezone . utc ),
129133 )
130134
131135 # Receive new window without exception
132136 buffer .window (
133- datetime .fromtimestamp (501 ),
134- datetime .fromtimestamp (500 + size ),
137+ datetime .fromtimestamp (501 , tz = timezone . utc ),
138+ datetime .fromtimestamp (500 + size , tz = timezone . utc ),
135139 )
136140
137141
@@ -149,30 +153,30 @@ def test_timestamp_ringbuffer_missing_parameter(
149153 buffer : OrderedRingBuffer [Any ],
150154) -> None :
151155 """Test ordered ring buffer."""
152- buffer .update (Sample (datetime (2 , 2 , 2 , 0 , 0 ), 0 ))
156+ buffer .update (Sample (datetime (2 , 2 , 2 , 0 , 0 , tzinfo = timezone . utc ), 0 ))
153157
154158 # pylint: disable=protected-access
155159 assert buffer ._normalize_timestamp (buffer .gaps [0 ].start ) == buffer .gaps [0 ].start
156160
157161 # Expecting one gap now, made of all the previous entries of the one just
158162 # added.
159163 assert len (buffer .gaps ) == 1
160- assert buffer .gaps [0 ].end == datetime (2 , 2 , 2 )
164+ assert buffer .gaps [0 ].end == datetime (2 , 2 , 2 , tzinfo = timezone . utc )
161165
162166 # Add entry so that a second gap appears
163167 # pylint: disable=protected-access
164- assert buffer ._normalize_timestamp (datetime ( 2 , 2 , 2 , 0 , 7 , 31 )) == datetime (
165- 2 , 2 , 2 , 0 , 10
166- )
167- buffer .update (Sample (datetime (2 , 2 , 2 , 0 , 7 , 31 ), 0 ))
168+ assert buffer ._normalize_timestamp (
169+ datetime ( 2 , 2 , 2 , 0 , 7 , 31 , tzinfo = timezone . utc )
170+ ) == datetime ( 2 , 2 , 2 , 0 , 10 , tzinfo = timezone . utc )
171+ buffer .update (Sample (datetime (2 , 2 , 2 , 0 , 7 , 31 , tzinfo = timezone . utc ), 0 ))
168172
169173 assert buffer .datetime_to_index (
170- datetime (2 , 2 , 2 , 0 , 7 , 31 )
171- ) == buffer .datetime_to_index (datetime (2 , 2 , 2 , 0 , 10 ))
174+ datetime (2 , 2 , 2 , 0 , 7 , 31 , tzinfo = timezone . utc )
175+ ) == buffer .datetime_to_index (datetime (2 , 2 , 2 , 0 , 10 , tzinfo = timezone . utc ))
172176 assert len (buffer .gaps ) == 2
173177
174178 # import pdb; pdb.set_trace()
175- buffer .update (Sample (datetime (2 , 2 , 2 , 0 , 5 ), 0 ))
179+ buffer .update (Sample (datetime (2 , 2 , 2 , 0 , 5 , tzinfo = timezone . utc ), 0 ))
176180 assert len (buffer .gaps ) == 1
177181
178182
@@ -213,7 +217,8 @@ def test_timestamp_ringbuffer_missing_parameter_smoke(
213217 buffer .update (
214218 Sample (
215219 datetime .fromtimestamp (
216- 200 + j * buffer .sampling_period .total_seconds ()
220+ 200 + j * buffer .sampling_period .total_seconds (),
221+ tz = timezone .utc ,
217222 ),
218223 None if missing else j ,
219224 )
@@ -224,11 +229,11 @@ def test_timestamp_ringbuffer_missing_parameter_smoke(
224229 lambda x : Gap (
225230 # pylint: disable=protected-access
226231 start = buffer ._normalize_timestamp (
227- datetime .fromtimestamp (200 + x [0 ] * resolution )
232+ datetime .fromtimestamp (200 + x [0 ] * resolution , tz = timezone . utc )
228233 ),
229234 # pylint: disable=protected-access
230235 end = buffer ._normalize_timestamp (
231- datetime .fromtimestamp (200 + x [1 ] * resolution )
236+ datetime .fromtimestamp (200 + x [1 ] * resolution , tz = timezone . utc )
232237 ),
233238 ),
234239 expected_gaps_concrete ,
@@ -261,10 +266,10 @@ def test_len_ringbuffer_samples_fit_buffer_size() -> None:
261266 buffer = OrderedRingBuffer (
262267 np .empty (shape = len (test_samples ), dtype = float ),
263268 sampling_period = timedelta (seconds = 1 ),
264- time_index_alignment = datetime (1 , 1 , 1 ),
269+ time_index_alignment = datetime (1 , 1 , 1 , tzinfo = timezone . utc ),
265270 )
266271
267- start_ts : datetime = datetime (2023 , 1 , 1 )
272+ start_ts : datetime = datetime (2023 , 1 , 1 , tzinfo = timezone . utc )
268273 for index , sample_value in enumerate (test_samples ):
269274 timestamp = start_ts + timedelta (seconds = index )
270275 buffer .update (Sample (timestamp , float (sample_value )))
@@ -289,10 +294,10 @@ def test_len_ringbuffer_samples_overwrite_buffer() -> None:
289294 buffer = OrderedRingBuffer (
290295 np .empty (shape = half_buffer_size , dtype = float ),
291296 sampling_period = timedelta (seconds = 1 ),
292- time_index_alignment = datetime (1 , 1 , 1 ),
297+ time_index_alignment = datetime (1 , 1 , 1 , tzinfo = timezone . utc ),
293298 )
294299
295- start_ts : datetime = datetime (2023 , 1 , 1 )
300+ start_ts : datetime = datetime (2023 , 1 , 1 , tzinfo = timezone . utc )
296301 for index , sample_value in enumerate (test_samples ):
297302 timestamp = start_ts + timedelta (seconds = index )
298303 buffer .update (Sample (timestamp , float (sample_value )))
0 commit comments