14
14
Timestamp ,
15
15
iNaT ,
16
16
)
17
+ from pandas ._typing import npt
17
18
18
19
19
20
def generate_regular_range (
20
- start : Timestamp | Timedelta ,
21
- end : Timestamp | Timedelta ,
22
- periods : int ,
21
+ start : Timestamp | Timedelta | None ,
22
+ end : Timestamp | Timedelta | None ,
23
+ periods : int | None ,
23
24
freq : BaseOffset ,
24
- ):
25
+ ) -> npt . NDArray [ np . intp ] :
25
26
"""
26
27
Generate a range of dates or timestamps with the spans between dates
27
28
described by the given `freq` DateOffset.
@@ -32,7 +33,7 @@ def generate_regular_range(
32
33
First point of produced date range.
33
34
end : Timedelta, Timestamp or None
34
35
Last point of produced date range.
35
- periods : int
36
+ periods : int or None
36
37
Number of periods in produced date range.
37
38
freq : Tick
38
39
Describes space between dates in produced date range.
@@ -45,15 +46,15 @@ def generate_regular_range(
45
46
iend = end .value if end is not None else None
46
47
stride = freq .nanos
47
48
48
- if periods is None :
49
+ if periods is None and istart is not None and iend is not None :
49
50
b = istart
50
51
# cannot just use e = Timestamp(end) + 1 because arange breaks when
51
52
# stride is too large, see GH10887
52
53
e = b + (iend - b ) // stride * stride + stride // 2 + 1
53
- elif istart is not None :
54
+ elif istart is not None and periods is not None :
54
55
b = istart
55
56
e = _generate_range_overflow_safe (b , periods , stride , side = "start" )
56
- elif iend is not None :
57
+ elif iend is not None and periods is not None :
57
58
e = iend + stride
58
59
b = _generate_range_overflow_safe (e , periods , stride , side = "end" )
59
60
else :
0 commit comments