@@ -107,6 +107,8 @@ cdef extern from "period_helper.h":
107
107
int pday(int64_t ordinal, int freq) except INT32_MIN
108
108
int pweekday(int64_t ordinal, int freq) except INT32_MIN
109
109
int pday_of_week(int64_t ordinal, int freq) except INT32_MIN
110
+ # TODO: pday_of_week and pweekday are identical. Make one an alias instead
111
+ # of importing them separately.
110
112
int pday_of_year(int64_t ordinal, int freq) except INT32_MIN
111
113
int pweek(int64_t ordinal, int freq) except INT32_MIN
112
114
int phour(int64_t ordinal, int freq) except INT32_MIN
@@ -868,58 +870,81 @@ cdef class _Period(object):
868
870
dt64 = period_ordinal_to_dt64(val.ordinal, base)
869
871
return Timestamp(dt64, tz = tz)
870
872
871
- cdef _field(self , alias):
873
+ @property
874
+ def year (self ):
875
+ base, mult = get_freq_code(self .freq)
876
+ return pyear(self .ordinal, base)
877
+
878
+ @property
879
+ def month (self ):
880
+ base, mult = get_freq_code(self .freq)
881
+ return pmonth(self .ordinal, base)
882
+
883
+ @property
884
+ def day (self ):
885
+ base, mult = get_freq_code(self .freq)
886
+ return pday(self .ordinal, base)
887
+
888
+ @property
889
+ def hour (self ):
890
+ base, mult = get_freq_code(self .freq)
891
+ return phour(self .ordinal, base)
892
+
893
+ @property
894
+ def minute (self ):
895
+ base, mult = get_freq_code(self .freq)
896
+ return pminute(self .ordinal, base)
897
+
898
+ @property
899
+ def second (self ):
900
+ base, mult = get_freq_code(self .freq)
901
+ return psecond(self .ordinal, base)
902
+
903
+ @property
904
+ def weekofyear (self ):
905
+ base, mult = get_freq_code(self .freq)
906
+ return pweek(self .ordinal, base)
907
+
908
+ @property
909
+ def week (self ):
910
+ return self .weekofyear
911
+
912
+ @property
913
+ def dayofweek (self ):
914
+ base, mult = get_freq_code(self .freq)
915
+ return pweekday(self .ordinal, base)
916
+
917
+ @property
918
+ def weekday (self ):
919
+ return self .dayofweek
920
+
921
+ @property
922
+ def dayofyear (self ):
923
+ base, mult = get_freq_code(self .freq)
924
+ return pday_of_year(self .ordinal, base)
925
+
926
+ @property
927
+ def quarter (self ):
872
928
base, mult = get_freq_code(self .freq)
873
- return get_period_field(alias, self .ordinal, base)
874
-
875
- property year :
876
- def __get__ (self ):
877
- return self ._field(0 )
878
- property month :
879
- def __get__ (self ):
880
- return self ._field(3 )
881
- property day :
882
- def __get__ (self ):
883
- return self ._field(4 )
884
- property hour :
885
- def __get__ (self ):
886
- return self ._field(5 )
887
- property minute :
888
- def __get__ (self ):
889
- return self ._field(6 )
890
- property second :
891
- def __get__ (self ):
892
- return self ._field(7 )
893
- property weekofyear :
894
- def __get__ (self ):
895
- return self ._field(8 )
896
- property week :
897
- def __get__ (self ):
898
- return self .weekofyear
899
- property dayofweek :
900
- def __get__ (self ):
901
- return self ._field(10 )
902
- property weekday :
903
- def __get__ (self ):
904
- return self .dayofweek
905
- property dayofyear :
906
- def __get__ (self ):
907
- return self ._field(9 )
908
- property quarter :
909
- def __get__ (self ):
910
- return self ._field(2 )
911
- property qyear :
912
- def __get__ (self ):
913
- return self ._field(1 )
914
- property days_in_month :
915
- def __get__ (self ):
916
- return self ._field(11 )
917
- property daysinmonth :
918
- def __get__ (self ):
919
- return self .days_in_month
920
- property is_leap_year :
921
- def __get__ (self ):
922
- return bool (is_leapyear(self ._field(0 )))
929
+ return pquarter(self .ordinal, base)
930
+
931
+ @property
932
+ def qyear (self ):
933
+ base, mult = get_freq_code(self .freq)
934
+ return pqyear(self .ordinal, base)
935
+
936
+ @property
937
+ def days_in_month (self ):
938
+ base, mult = get_freq_code(self .freq)
939
+ return pdays_in_month(self .ordinal, base)
940
+
941
+ @property
942
+ def daysinmonth (self ):
943
+ return self .days_in_month
944
+
945
+ @property
946
+ def is_leap_year (self ):
947
+ return bool (is_leapyear(self .year))
923
948
924
949
@classmethod
925
950
def now (cls , freq = None ):
0 commit comments