Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/py-polars/tests/unit/functions/range/test_datetime_range.py
6939 views
1
from __future__ import annotations
2
3
from datetime import date, datetime, timedelta
4
from typing import TYPE_CHECKING
5
from zoneinfo import ZoneInfo
6
7
import hypothesis.strategies as st
8
import pytest
9
from hypothesis import given, settings
10
11
import polars as pl
12
from polars.datatypes import DTYPE_TEMPORAL_UNITS
13
from polars.exceptions import ComputeError, InvalidOperationError, SchemaError
14
from polars.testing import assert_frame_equal, assert_series_equal
15
16
if TYPE_CHECKING:
17
from polars._typing import ClosedInterval, PolarsDataType, TimeUnit
18
19
20
def test_datetime_range() -> None:
21
result = pl.datetime_range(
22
date(1985, 1, 1), date(2015, 7, 1), timedelta(days=1, hours=12), eager=True
23
)
24
assert len(result) == 7426
25
assert result.dt[0] == datetime(1985, 1, 1)
26
assert result.dt[1] == datetime(1985, 1, 2, 12, 0)
27
assert result.dt[2] == datetime(1985, 1, 4, 0, 0)
28
assert result.dt[-1] == datetime(2015, 6, 30, 12, 0)
29
30
for time_unit in DTYPE_TEMPORAL_UNITS:
31
rng = pl.datetime_range(
32
datetime(2020, 1, 1),
33
date(2020, 1, 2),
34
"2h",
35
time_unit=time_unit,
36
eager=True,
37
)
38
assert rng.dtype.time_unit == time_unit # type: ignore[attr-defined]
39
assert rng.shape == (13,)
40
assert rng.dt[0] == datetime(2020, 1, 1)
41
assert rng.dt[-1] == datetime(2020, 1, 2)
42
43
result = pl.datetime_range(date(2022, 1, 1), date(2022, 1, 2), "1h30m", eager=True)
44
assert list(result) == [
45
datetime(2022, 1, 1, 0, 0),
46
datetime(2022, 1, 1, 1, 30),
47
datetime(2022, 1, 1, 3, 0),
48
datetime(2022, 1, 1, 4, 30),
49
datetime(2022, 1, 1, 6, 0),
50
datetime(2022, 1, 1, 7, 30),
51
datetime(2022, 1, 1, 9, 0),
52
datetime(2022, 1, 1, 10, 30),
53
datetime(2022, 1, 1, 12, 0),
54
datetime(2022, 1, 1, 13, 30),
55
datetime(2022, 1, 1, 15, 0),
56
datetime(2022, 1, 1, 16, 30),
57
datetime(2022, 1, 1, 18, 0),
58
datetime(2022, 1, 1, 19, 30),
59
datetime(2022, 1, 1, 21, 0),
60
datetime(2022, 1, 1, 22, 30),
61
datetime(2022, 1, 2, 0, 0),
62
]
63
64
result = pl.datetime_range(
65
datetime(2022, 1, 1), datetime(2022, 1, 1, 0, 1), "987456321ns", eager=True
66
)
67
assert len(result) == 61
68
assert result.dtype.time_unit == "ns" # type: ignore[attr-defined]
69
assert result.dt.second()[-1] == 59
70
assert result.cast(pl.String)[-1] == "2022-01-01 00:00:59.247379260"
71
72
73
@pytest.mark.parametrize(
74
("time_unit", "expected_micros"),
75
[
76
("ms", 986000),
77
("us", 986759),
78
("ns", 986759),
79
(None, 986759),
80
],
81
)
82
def test_datetime_range_precision(
83
time_unit: TimeUnit | None, expected_micros: int
84
) -> None:
85
micros = 986759
86
start = datetime(2000, 5, 30, 1, 53, 4, micros)
87
stop = datetime(2000, 5, 31, 1, 53, 4, micros)
88
result = pl.datetime_range(start, stop, time_unit=time_unit, eager=True)
89
expected_start = start.replace(microsecond=expected_micros)
90
expected_stop = stop.replace(microsecond=expected_micros)
91
assert result[0] == expected_start
92
assert result[1] == expected_stop
93
94
95
def test_datetime_range_invalid_time_unit() -> None:
96
with pytest.raises(InvalidOperationError, match="'x' not supported"):
97
pl.datetime_range(
98
start=datetime(2021, 12, 16),
99
end=datetime(2021, 12, 16, 3),
100
interval="1X",
101
eager=True,
102
)
103
104
105
def test_datetime_range_lazy_time_zones() -> None:
106
start = datetime(2020, 1, 1, tzinfo=ZoneInfo("Asia/Kathmandu"))
107
stop = datetime(2020, 1, 2, tzinfo=ZoneInfo("Asia/Kathmandu"))
108
result = (
109
pl.DataFrame({"start": [start], "stop": [stop]})
110
.with_columns(
111
pl.datetime_range(
112
start,
113
stop,
114
interval="678d",
115
eager=False,
116
time_zone="Pacific/Tarawa",
117
)
118
)
119
.lazy()
120
)
121
expected = pl.DataFrame(
122
{
123
"start": [
124
datetime(2020, 1, 1, 00, 00, tzinfo=ZoneInfo(key="Asia/Kathmandu"))
125
],
126
"stop": [
127
datetime(2020, 1, 2, 00, 00, tzinfo=ZoneInfo(key="Asia/Kathmandu"))
128
],
129
"literal": [
130
datetime(2020, 1, 1, 6, 15, tzinfo=ZoneInfo(key="Pacific/Tarawa"))
131
],
132
}
133
).with_columns(pl.col("literal").dt.convert_time_zone("Pacific/Tarawa"))
134
assert_frame_equal(result.collect(), expected)
135
136
137
@pytest.mark.parametrize("low", ["start", pl.col("start")])
138
@pytest.mark.parametrize("high", ["stop", pl.col("stop")])
139
def test_datetime_range_lazy_with_expressions(
140
low: str | pl.Expr, high: str | pl.Expr
141
) -> None:
142
df = pl.DataFrame(
143
{
144
"start": [datetime(2000, 1, 1), datetime(2022, 6, 1)],
145
"stop": [datetime(2000, 1, 2), datetime(2022, 6, 2)],
146
}
147
)
148
149
result_df = df.with_columns(
150
pl.datetime_ranges(low, high, interval="1d").alias("dts")
151
)
152
153
assert result_df.to_dict(as_series=False) == {
154
"start": [datetime(2000, 1, 1, 0, 0), datetime(2022, 6, 1, 0, 0)],
155
"stop": [datetime(2000, 1, 2, 0, 0), datetime(2022, 6, 2, 0, 0)],
156
"dts": [
157
[datetime(2000, 1, 1, 0, 0), datetime(2000, 1, 2, 0, 0)],
158
[datetime(2022, 6, 1, 0, 0), datetime(2022, 6, 2, 0, 0)],
159
],
160
}
161
162
163
def test_datetime_range_invalid_time_zone() -> None:
164
with pytest.raises(ComputeError, match="unable to parse time zone: 'foo'"):
165
pl.datetime_range(
166
datetime(2001, 1, 1),
167
datetime(2001, 1, 3),
168
time_zone="foo",
169
eager=True,
170
)
171
172
173
def test_timezone_aware_datetime_range() -> None:
174
low = datetime(2022, 10, 17, 10, tzinfo=ZoneInfo("Asia/Shanghai"))
175
high = datetime(2022, 11, 17, 10, tzinfo=ZoneInfo("Asia/Shanghai"))
176
177
assert pl.datetime_range(
178
low, high, interval=timedelta(days=5), eager=True
179
).to_list() == [
180
datetime(2022, 10, 17, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
181
datetime(2022, 10, 22, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
182
datetime(2022, 10, 27, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
183
datetime(2022, 11, 1, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
184
datetime(2022, 11, 6, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
185
datetime(2022, 11, 11, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
186
datetime(2022, 11, 16, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai")),
187
]
188
189
with pytest.raises(
190
SchemaError,
191
match="failed to determine supertype",
192
):
193
pl.datetime_range(
194
low,
195
high.replace(tzinfo=None),
196
interval=timedelta(days=5),
197
time_zone="UTC",
198
eager=True,
199
)
200
201
202
def test_tzaware_datetime_range_crossing_dst_hourly() -> None:
203
result = pl.datetime_range(
204
datetime(2021, 11, 7),
205
datetime(2021, 11, 7, 2),
206
"1h",
207
time_zone="US/Central",
208
eager=True,
209
)
210
assert result.to_list() == [
211
datetime(2021, 11, 7, 0, 0, tzinfo=ZoneInfo("US/Central")),
212
datetime(2021, 11, 7, 1, 0, tzinfo=ZoneInfo("US/Central")),
213
datetime(2021, 11, 7, 1, 0, fold=1, tzinfo=ZoneInfo("US/Central")),
214
datetime(2021, 11, 7, 2, 0, tzinfo=ZoneInfo("US/Central")),
215
]
216
217
218
def test_tzaware_datetime_range_crossing_dst_daily() -> None:
219
result = pl.datetime_range(
220
datetime(2021, 11, 7),
221
datetime(2021, 11, 11),
222
"2d",
223
time_zone="US/Central",
224
eager=True,
225
)
226
assert result.to_list() == [
227
datetime(2021, 11, 7, 0, 0, tzinfo=ZoneInfo("US/Central")),
228
datetime(2021, 11, 9, 0, 0, tzinfo=ZoneInfo("US/Central")),
229
datetime(2021, 11, 11, 0, 0, tzinfo=ZoneInfo("US/Central")),
230
]
231
232
233
def test_tzaware_datetime_range_crossing_dst_weekly() -> None:
234
result = pl.datetime_range(
235
datetime(2021, 11, 7),
236
datetime(2021, 11, 20),
237
"1w",
238
time_zone="US/Central",
239
eager=True,
240
)
241
assert result.to_list() == [
242
datetime(2021, 11, 7, 0, 0, tzinfo=ZoneInfo("US/Central")),
243
datetime(2021, 11, 14, 0, 0, tzinfo=ZoneInfo("US/Central")),
244
]
245
246
247
def test_tzaware_datetime_range_crossing_dst_monthly() -> None:
248
result = pl.datetime_range(
249
datetime(2021, 11, 7),
250
datetime(2021, 12, 20),
251
"1mo",
252
time_zone="US/Central",
253
eager=True,
254
)
255
assert result.to_list() == [
256
datetime(2021, 11, 7, 0, 0, tzinfo=ZoneInfo("US/Central")),
257
datetime(2021, 12, 7, 0, 0, tzinfo=ZoneInfo("US/Central")),
258
]
259
260
261
def test_datetime_range_with_unsupported_datetimes() -> None:
262
with pytest.raises(
263
ComputeError,
264
match=r"datetime '2021-11-07 01:00:00' is ambiguous in time zone 'US/Central'",
265
):
266
pl.datetime_range(
267
datetime(2021, 11, 7, 1),
268
datetime(2021, 11, 7, 2),
269
"1h",
270
time_zone="US/Central",
271
eager=True,
272
)
273
with pytest.raises(
274
ComputeError,
275
match=r"datetime '2021-03-28 02:30:00' is non-existent in time zone 'Europe/Vienna'",
276
):
277
pl.datetime_range(
278
datetime(2021, 3, 28, 2, 30),
279
datetime(2021, 3, 28, 4),
280
"1h",
281
time_zone="Europe/Vienna",
282
eager=True,
283
)
284
285
286
@pytest.mark.parametrize(
287
("values_time_zone", "input_time_zone", "output_time_zone"),
288
[
289
("Asia/Kathmandu", "Asia/Kathmandu", "Asia/Kathmandu"),
290
("Asia/Kathmandu", None, "Asia/Kathmandu"),
291
(None, "Asia/Kathmandu", "Asia/Kathmandu"),
292
(None, None, None),
293
],
294
)
295
@pytest.mark.parametrize(
296
("values_time_unit", "input_time_unit", "output_time_unit"),
297
[
298
("ms", None, "ms"),
299
("us", None, "us"),
300
("ns", None, "ns"),
301
("ms", "ms", "ms"),
302
("us", "ms", "ms"),
303
("ns", "ms", "ms"),
304
("ms", "us", "us"),
305
("us", "us", "us"),
306
("ns", "us", "us"),
307
("ms", "ns", "ns"),
308
("us", "ns", "ns"),
309
("ns", "ns", "ns"),
310
],
311
)
312
def test_datetime_ranges_schema(
313
values_time_zone: str | None,
314
input_time_zone: str | None,
315
output_time_zone: str | None,
316
values_time_unit: TimeUnit,
317
input_time_unit: TimeUnit | None,
318
output_time_unit: TimeUnit,
319
) -> None:
320
df = (
321
pl.DataFrame({"start": [datetime(2020, 1, 1)], "end": [datetime(2020, 1, 2)]})
322
.with_columns(
323
pl.col("*")
324
.dt.replace_time_zone(values_time_zone)
325
.dt.cast_time_unit(values_time_unit)
326
)
327
.lazy()
328
)
329
result = df.with_columns(
330
datetime_range=pl.datetime_ranges(
331
pl.col("start"),
332
pl.col("end"),
333
time_zone=input_time_zone,
334
time_unit=input_time_unit,
335
)
336
)
337
expected_schema = {
338
"start": pl.Datetime(time_unit=values_time_unit, time_zone=values_time_zone),
339
"end": pl.Datetime(time_unit=values_time_unit, time_zone=values_time_zone),
340
"datetime_range": pl.List(
341
pl.Datetime(time_unit=output_time_unit, time_zone=output_time_zone)
342
),
343
}
344
assert result.collect_schema() == expected_schema
345
assert result.collect().schema == expected_schema
346
347
expected = pl.DataFrame(
348
{
349
"start": [datetime(2020, 1, 1)],
350
"end": [datetime(2020, 1, 2)],
351
"datetime_range": [[datetime(2020, 1, 1), datetime(2020, 1, 2)]],
352
}
353
).with_columns(
354
pl.col("start")
355
.dt.replace_time_zone(values_time_zone)
356
.dt.cast_time_unit(values_time_unit),
357
pl.col("end")
358
.dt.replace_time_zone(values_time_zone)
359
.dt.cast_time_unit(values_time_unit),
360
pl.col("datetime_range")
361
.explode()
362
.dt.replace_time_zone(output_time_zone)
363
.dt.cast_time_unit(output_time_unit)
364
.implode(),
365
)
366
assert_frame_equal(result.collect(), expected)
367
368
369
@pytest.mark.parametrize(
370
(
371
"input_time_unit",
372
"input_time_zone",
373
"output_dtype",
374
"interval",
375
"expected_datetime_range",
376
),
377
[
378
(None, None, pl.Datetime("us"), "1s1d", ["2020-01-01", "2020-01-02 00:00:01"]),
379
(None, None, pl.Datetime("us"), "1d1s", ["2020-01-01", "2020-01-02 00:00:01"]),
380
(
381
None,
382
None,
383
pl.Datetime("ns"),
384
"1d1ns",
385
["2020-01-01", "2020-01-02 00:00:00.000000001"],
386
),
387
("ms", None, pl.Datetime("ms"), "1s1d", ["2020-01-01", "2020-01-02 00:00:01"]),
388
("ms", None, pl.Datetime("ms"), "1d1s", ["2020-01-01", "2020-01-02 00:00:01"]),
389
(
390
None,
391
"Asia/Kathmandu",
392
pl.Datetime("us", "Asia/Kathmandu"),
393
"1s1d",
394
["2020-01-01", "2020-01-02 00:00:01"],
395
),
396
(
397
None,
398
"Asia/Kathmandu",
399
pl.Datetime("us", "Asia/Kathmandu"),
400
"1d1s",
401
["2020-01-01", "2020-01-02 00:00:01"],
402
),
403
(
404
None,
405
"Asia/Kathmandu",
406
pl.Datetime("ns", "Asia/Kathmandu"),
407
"1d1ns",
408
["2020-01-01", "2020-01-02 00:00:00.000000001"],
409
),
410
(
411
"ms",
412
"Asia/Kathmandu",
413
pl.Datetime("ms", "Asia/Kathmandu"),
414
"1s1d",
415
["2020-01-01", "2020-01-02 00:00:01"],
416
),
417
(
418
"ms",
419
"Asia/Kathmandu",
420
pl.Datetime("ms", "Asia/Kathmandu"),
421
"1d1s",
422
["2020-01-01", "2020-01-02 00:00:01"],
423
),
424
],
425
)
426
def test_datetime_range_schema_upcasts_to_datetime(
427
input_time_unit: TimeUnit | None,
428
input_time_zone: str | None,
429
output_dtype: PolarsDataType,
430
interval: str,
431
expected_datetime_range: list[str],
432
) -> None:
433
df = pl.DataFrame({"start": [date(2020, 1, 1)], "end": [date(2020, 1, 3)]}).lazy()
434
result = df.with_columns(
435
datetime_range=pl.datetime_ranges(
436
pl.col("start"),
437
pl.col("end"),
438
interval=interval,
439
time_unit=input_time_unit,
440
time_zone=input_time_zone,
441
)
442
)
443
expected_schema = {
444
"start": pl.Date,
445
"end": pl.Date,
446
"datetime_range": pl.List(output_dtype),
447
}
448
assert result.collect_schema() == expected_schema
449
assert result.collect().schema == expected_schema
450
451
expected = pl.DataFrame(
452
{
453
"start": [date(2020, 1, 1)],
454
"end": [date(2020, 1, 3)],
455
"datetime_range": pl.Series(expected_datetime_range)
456
.str.to_datetime(time_unit="ns")
457
.implode(),
458
}
459
).with_columns(
460
pl.col("datetime_range")
461
.explode()
462
.dt.cast_time_unit(output_dtype.time_unit) # type: ignore[union-attr]
463
.dt.replace_time_zone(output_dtype.time_zone) # type: ignore[union-attr]
464
.implode(),
465
)
466
assert_frame_equal(result.collect(), expected)
467
468
# check datetime_range too
469
result_single = pl.datetime_range(
470
date(2020, 1, 1),
471
date(2020, 1, 3),
472
interval=interval,
473
time_unit=input_time_unit,
474
time_zone=input_time_zone,
475
eager=True,
476
).alias("datetime")
477
assert_series_equal(
478
result_single, expected["datetime_range"].explode().rename("datetime")
479
)
480
481
482
def test_datetime_ranges_no_alias_schema_9037() -> None:
483
df = pl.DataFrame(
484
{"start": [datetime(2020, 1, 1)], "end": [datetime(2020, 1, 2)]}
485
).lazy()
486
result = df.with_columns(pl.datetime_ranges(pl.col("start"), pl.col("end")))
487
expected_schema = {
488
"start": pl.List(pl.Datetime(time_unit="us", time_zone=None)),
489
"end": pl.Datetime(time_unit="us", time_zone=None),
490
}
491
assert result.collect_schema() == expected_schema
492
assert result.collect().schema == expected_schema
493
494
495
@pytest.mark.parametrize("interval", [timedelta(0), timedelta(minutes=-10)])
496
def test_datetime_range_invalid_interval(interval: timedelta) -> None:
497
with pytest.raises(ComputeError, match="`interval` must be positive"):
498
pl.datetime_range(
499
datetime(2000, 3, 20), datetime(2000, 3, 21), interval="-1h", eager=True
500
)
501
502
503
@pytest.mark.parametrize(
504
("closed", "expected_values"),
505
[
506
("right", [datetime(2020, 2, 29), datetime(2020, 3, 31)]),
507
("left", [datetime(2020, 1, 31), datetime(2020, 2, 29)]),
508
("none", [datetime(2020, 2, 29)]),
509
("both", [datetime(2020, 1, 31), datetime(2020, 2, 29), datetime(2020, 3, 31)]),
510
],
511
)
512
def test_datetime_range_end_of_month_5441(
513
closed: ClosedInterval, expected_values: list[datetime]
514
) -> None:
515
start = date(2020, 1, 31)
516
stop = date(2020, 3, 31)
517
result = pl.datetime_range(start, stop, interval="1mo", closed=closed, eager=True)
518
expected = pl.Series("literal", expected_values)
519
assert_series_equal(result, expected)
520
521
522
def test_datetime_ranges_broadcasting() -> None:
523
df = pl.DataFrame(
524
{
525
"datetimes": [
526
datetime(2021, 1, 1),
527
datetime(2021, 1, 2),
528
datetime(2021, 1, 3),
529
]
530
}
531
)
532
result = df.select(
533
pl.datetime_ranges(start="datetimes", end=datetime(2021, 1, 3)).alias("end"),
534
pl.datetime_ranges(start=datetime(2021, 1, 1), end="datetimes").alias("start"),
535
)
536
expected = pl.DataFrame(
537
{
538
"end": [
539
[datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
540
[datetime(2021, 1, 2), datetime(2021, 1, 3)],
541
[datetime(2021, 1, 3)],
542
],
543
"start": [
544
[datetime(2021, 1, 1)],
545
[datetime(2021, 1, 1), datetime(2021, 1, 2)],
546
[datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
547
],
548
}
549
)
550
assert_frame_equal(result, expected)
551
552
553
def test_datetime_range_specifying_ambiguous_11713() -> None:
554
result = pl.datetime_range(
555
pl.datetime(2023, 10, 29, 2, 0).dt.replace_time_zone(
556
"Europe/Madrid", ambiguous="earliest"
557
),
558
pl.datetime(2023, 10, 29, 3, 0).dt.replace_time_zone("Europe/Madrid"),
559
"1h",
560
eager=True,
561
)
562
expected = pl.Series(
563
"datetime",
564
[
565
datetime(2023, 10, 29, 2),
566
datetime(2023, 10, 29, 2),
567
datetime(2023, 10, 29, 3),
568
],
569
).dt.replace_time_zone(
570
"Europe/Madrid", ambiguous=pl.Series(["earliest", "latest", "raise"])
571
)
572
assert_series_equal(result, expected)
573
result = pl.datetime_range(
574
pl.datetime(2023, 10, 29, 2, 0).dt.replace_time_zone(
575
"Europe/Madrid", ambiguous="latest"
576
),
577
pl.datetime(2023, 10, 29, 3, 0).dt.replace_time_zone("Europe/Madrid"),
578
"1h",
579
eager=True,
580
)
581
expected = pl.Series(
582
"datetime", [datetime(2023, 10, 29, 2), datetime(2023, 10, 29, 3)]
583
).dt.replace_time_zone("Europe/Madrid", ambiguous=pl.Series(["latest", "raise"]))
584
assert_series_equal(result, expected)
585
586
587
@given(
588
closed=st.sampled_from(["none", "left", "right", "both"]),
589
time_unit=st.sampled_from(["ms", "us", "ns"]),
590
n=st.integers(1, 10),
591
size=st.integers(8, 10),
592
unit=st.sampled_from(["s", "m", "h", "d", "mo"]),
593
start=st.datetimes(datetime(1965, 1, 1), datetime(2100, 1, 1)),
594
)
595
@settings(max_examples=50)
596
@pytest.mark.benchmark
597
def test_datetime_range_fast_slow_paths(
598
closed: ClosedInterval,
599
time_unit: TimeUnit,
600
n: int,
601
size: int,
602
unit: str,
603
start: datetime,
604
) -> None:
605
end = pl.select(pl.lit(start).dt.offset_by(f"{n * size}{unit}")).item()
606
result_slow = pl.datetime_range(
607
start,
608
end,
609
closed=closed,
610
time_unit=time_unit,
611
interval=f"{n}{unit}",
612
time_zone="Asia/Kathmandu",
613
eager=True,
614
).dt.replace_time_zone(None)
615
result_fast = pl.datetime_range(
616
start,
617
end,
618
closed=closed,
619
time_unit=time_unit,
620
interval=f"{n}{unit}",
621
eager=True,
622
)
623
assert_series_equal(result_slow, result_fast)
624
625
626
def test_dt_range_with_nanosecond_interval_19931() -> None:
627
with pytest.raises(
628
InvalidOperationError, match="interval 1ns is too small for time unit ms"
629
):
630
pl.datetime_range(
631
pl.date(2022, 1, 1),
632
pl.date(2022, 1, 1),
633
time_zone="Asia/Kathmandu",
634
interval="1ns",
635
time_unit="ms",
636
eager=True,
637
)
638
639
640
def test_datetime_range_with_nanoseconds_overflow_15735() -> None:
641
s = pl.datetime_range(date(2000, 1, 1), date(2300, 1, 1), "24h", eager=True)
642
assert s.dtype == pl.Datetime("us")
643
assert s.shape == (109574,)
644
645