@@ -497,32 +497,31 @@ cdef int64_t asfreq_DTtoA(int64_t ordinal, asfreq_info *af_info) nogil:
497
497
return < int64_t> (dts.year - 1970 )
498
498
499
499
500
- cdef int DtoQ_yq(int64_t ordinal, asfreq_info * af_info, int * year ) nogil:
500
+ cdef int DtoQ_yq(int64_t ordinal, asfreq_info * af_info, npy_datetimestruct * dts ) nogil:
501
501
cdef:
502
- npy_datetimestruct dts
503
502
int quarter
504
503
505
- pandas_datetime_to_datetimestruct(ordinal, NPY_FR_D, & dts)
504
+ pandas_datetime_to_datetimestruct(ordinal, NPY_FR_D, dts)
506
505
if af_info.to_end != 12 :
507
506
dts.month -= af_info.to_end
508
507
if dts.month <= 0 :
509
508
dts.month += 12
510
509
else :
511
510
dts.year += 1
512
511
513
- year[0 ] = dts.year
514
512
quarter = month_to_quarter(dts.month)
515
513
return quarter
516
514
517
515
518
516
cdef int64_t asfreq_DTtoQ(int64_t ordinal, asfreq_info * af_info) nogil:
519
517
cdef:
520
- int year, quarter
518
+ int quarter
519
+ npy_datetimestruct dts
521
520
522
521
ordinal = downsample_daytime(ordinal, af_info)
523
522
524
- quarter = DtoQ_yq(ordinal, af_info, & year )
525
- return < int64_t> ((year - 1970 ) * 4 + quarter - 1 )
523
+ quarter = DtoQ_yq(ordinal, af_info, & dts )
524
+ return < int64_t> ((dts. year - 1970 ) * 4 + quarter - 1 )
526
525
527
526
528
527
cdef int64_t asfreq_DTtoM(int64_t ordinal, asfreq_info * af_info) nogil:
@@ -919,30 +918,30 @@ cdef int64_t get_time_nanos(int freq, int64_t unix_date, int64_t ordinal) nogil:
919
918
return sub * factor
920
919
921
920
922
- cdef int get_yq(int64_t ordinal, int freq, int * quarter, int * year ):
921
+ cdef int get_yq(int64_t ordinal, int freq, npy_datetimestruct * dts ):
923
922
"""
924
923
Find the year and quarter of a Period with the given ordinal and frequency
925
924
926
925
Parameters
927
926
----------
928
927
ordinal : int64_t
929
928
freq : int
930
- quarter : *int
931
- year : *int
929
+ dts : *npy_datetimestruct
932
930
933
931
Returns
934
932
-------
935
- qtr_freq : int
933
+ quarter : int
936
934
describes the implied quarterly frequency associated with `freq`
937
935
938
936
Notes
939
937
-----
940
- Sets quarter and year inplace
938
+ Sets dts. year in-place.
941
939
"""
942
940
cdef:
943
941
asfreq_info af_info
944
942
int qtr_freq
945
943
int64_t unix_date
944
+ int quarter
946
945
947
946
unix_date = get_unix_date(ordinal, freq)
948
947
@@ -951,11 +950,10 @@ cdef int get_yq(int64_t ordinal, int freq, int *quarter, int *year):
951
950
else :
952
951
qtr_freq = FR_QTR
953
952
954
- assert (qtr_freq % 1000 ) <= 12
955
953
get_asfreq_info(FR_DAY, qtr_freq, True , & af_info)
956
954
957
- quarter[ 0 ] = DtoQ_yq(unix_date, & af_info, year )
958
- return qtr_freq
955
+ quarter = DtoQ_yq(unix_date, & af_info, dts )
956
+ return quarter
959
957
960
958
961
959
cdef inline int month_to_quarter(int month) nogil:
@@ -1225,15 +1223,15 @@ cdef str _period_strftime(int64_t value, int freq, bytes fmt):
1225
1223
1226
1224
for i in range (len (extra_fmts)):
1227
1225
if found_pat[i]:
1228
- if get_yq(value, freq, & quarter, & year) < 0 :
1229
- raise ValueError ( ' Unable to get quarter and year ' )
1226
+
1227
+ quarter = get_yq(value, freq, & dts )
1230
1228
1231
1229
if i == 0 :
1232
1230
repl = str (quarter)
1233
1231
elif i == 1 : # %f, 2-digit year
1234
- repl = f" {(year % 100):02d}"
1232
+ repl = f" {(dts. year % 100):02d}"
1235
1233
elif i == 2 :
1236
- repl = str (year)
1234
+ repl = str (dts. year)
1237
1235
elif i == 3 :
1238
1236
repl = f" {(value % 1_000):03d}"
1239
1237
elif i == 4 :
@@ -1259,20 +1257,19 @@ cdef int pyear(int64_t ordinal, int freq):
1259
1257
return dts.year
1260
1258
1261
1259
1262
- @cython.cdivision
1263
1260
cdef int pqyear(int64_t ordinal, int freq):
1264
1261
cdef:
1265
- int year = 0
1266
- int quarter = 0
1267
- get_yq(ordinal, freq, & quarter, & year )
1268
- return year
1262
+ npy_datetimestruct dts
1263
+
1264
+ get_yq(ordinal, freq, & dts )
1265
+ return dts. year
1269
1266
1270
1267
1271
1268
cdef int pquarter(int64_t ordinal, int freq):
1272
1269
cdef:
1273
- int year = 0
1274
- int quarter = 0
1275
- get_yq(ordinal, freq, & quarter, & year )
1270
+ int quarter
1271
+ npy_datetimestruct dts
1272
+ quarter = get_yq(ordinal, freq, & dts )
1276
1273
return quarter
1277
1274
1278
1275
0 commit comments