@@ -107,6 +107,8 @@ cdef extern from "period_helper.h":
107107 int pday(int64_t ordinal, int freq) except INT32_MIN
108108 int pweekday(int64_t ordinal, int freq) except INT32_MIN
109109 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.
110112 int pday_of_year(int64_t ordinal, int freq) except INT32_MIN
111113 int pweek(int64_t ordinal, int freq) except INT32_MIN
112114 int phour(int64_t ordinal, int freq) except INT32_MIN
@@ -868,58 +870,81 @@ cdef class _Period(object):
868870 dt64 = period_ordinal_to_dt64(val.ordinal, base)
869871 return Timestamp(dt64, tz = tz)
870872
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 ):
872928 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))
923948
924949 @classmethod
925950 def now (cls , freq = None ):
0 commit comments