1414 Timestamp ,
1515 iNaT ,
1616)
17+ from pandas ._typing import npt
1718
1819
1920def 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 ,
2324 freq : BaseOffset ,
24- ):
25+ ) -> npt . NDArray [ np . intp ] :
2526 """
2627 Generate a range of dates or timestamps with the spans between dates
2728 described by the given `freq` DateOffset.
@@ -32,7 +33,7 @@ def generate_regular_range(
3233 First point of produced date range.
3334 end : Timedelta, Timestamp or None
3435 Last point of produced date range.
35- periods : int
36+ periods : int or None
3637 Number of periods in produced date range.
3738 freq : Tick
3839 Describes space between dates in produced date range.
@@ -45,15 +46,15 @@ def generate_regular_range(
4546 iend = end .value if end is not None else None
4647 stride = freq .nanos
4748
48- if periods is None :
49+ if periods is None and istart is not None and iend is not None :
4950 b = istart
5051 # cannot just use e = Timestamp(end) + 1 because arange breaks when
5152 # stride is too large, see GH10887
5253 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 :
5455 b = istart
5556 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 :
5758 e = iend + stride
5859 b = _generate_range_overflow_safe (e , periods , stride , side = "end" )
5960 else :
0 commit comments