Skip to content

Commit 5496002

Browse files
authored
Merge pull request #177 from r-lib/feature/vec-ptype
Add vec-ptype methods
2 parents b05903d + 798a032 commit 5496002

22 files changed

+495
-1
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ VignetteBuilder:
4343
knitr
4444
Remotes:
4545
r-lib/tzdb,
46-
r-lib/vctrs
46+
r-lib/vctrs#1322
4747
Config/testthat/edition: 3
4848
Encoding: UTF-8
4949
LazyData: true

NAMESPACE

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,15 @@ S3method(vec_proxy,clock_year_quarter_day)
477477
S3method(vec_proxy,clock_zoned_time)
478478
S3method(vec_proxy_compare,clock_weekday)
479479
S3method(vec_proxy_compare,clock_year_month_weekday)
480+
S3method(vec_ptype,clock_iso_year_week_day)
481+
S3method(vec_ptype,clock_naive_time)
482+
S3method(vec_ptype,clock_sys_time)
483+
S3method(vec_ptype,clock_weekday)
484+
S3method(vec_ptype,clock_year_day)
485+
S3method(vec_ptype,clock_year_month_day)
486+
S3method(vec_ptype,clock_year_month_weekday)
487+
S3method(vec_ptype,clock_year_quarter_day)
488+
S3method(vec_ptype,clock_zoned_time)
480489
S3method(vec_ptype2,clock_duration.clock_duration)
481490
S3method(vec_ptype2,clock_iso_year_week_day.clock_iso_year_week_day)
482491
S3method(vec_ptype2,clock_naive_time.clock_naive_time)

R/gregorian-year-day.R

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,25 @@ is_year_day <- function(x) {
137137

138138
# ------------------------------------------------------------------------------
139139

140+
#' @export
141+
vec_ptype.clock_year_day <- function(x, ...) {
142+
switch(
143+
calendar_precision(x) + 1L,
144+
clock_empty_year_day_year,
145+
abort("Internal error: Invalid precision"),
146+
abort("Internal error: Invalid precision"),
147+
abort("Internal error: Invalid precision"),
148+
clock_empty_year_day_day,
149+
clock_empty_year_day_hour,
150+
clock_empty_year_day_minute,
151+
clock_empty_year_day_second,
152+
clock_empty_year_day_millisecond,
153+
clock_empty_year_day_microsecond,
154+
clock_empty_year_day_nanosecond,
155+
abort("Internal error: Invalid precision.")
156+
)
157+
}
158+
140159
#' @export
141160
vec_ptype2.clock_year_day.clock_year_day <- function(x, y, ...) {
142161
ptype2_calendar_and_calendar(x, y, ...)
@@ -903,3 +922,20 @@ seq.clock_year_day <- function(from,
903922
...
904923
)
905924
}
925+
926+
# ------------------------------------------------------------------------------
927+
928+
clock_init_year_day_utils <- function(env) {
929+
year <- year_day(integer())
930+
931+
assign("clock_empty_year_day_year", year, envir = env)
932+
assign("clock_empty_year_day_day", calendar_widen(year, "day"), envir = env)
933+
assign("clock_empty_year_day_hour", calendar_widen(year, "hour"), envir = env)
934+
assign("clock_empty_year_day_minute", calendar_widen(year, "minute"), envir = env)
935+
assign("clock_empty_year_day_second", calendar_widen(year, "second"), envir = env)
936+
assign("clock_empty_year_day_millisecond", calendar_widen(year, "millisecond"), envir = env)
937+
assign("clock_empty_year_day_microsecond", calendar_widen(year, "microsecond"), envir = env)
938+
assign("clock_empty_year_day_nanosecond", calendar_widen(year, "nanosecond"), envir = env)
939+
940+
invisible(NULL)
941+
}

R/gregorian-year-month-day.R

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,25 @@ is_year_month_day <- function(x) {
323323

324324
# ------------------------------------------------------------------------------
325325

326+
#' @export
327+
vec_ptype.clock_year_month_day <- function(x, ...) {
328+
switch(
329+
calendar_precision(x) + 1L,
330+
clock_empty_year_month_day_year,
331+
abort("Internal error: Invalid precision"),
332+
clock_empty_year_month_day_month,
333+
abort("Internal error: Invalid precision"),
334+
clock_empty_year_month_day_day,
335+
clock_empty_year_month_day_hour,
336+
clock_empty_year_month_day_minute,
337+
clock_empty_year_month_day_second,
338+
clock_empty_year_month_day_millisecond,
339+
clock_empty_year_month_day_microsecond,
340+
clock_empty_year_month_day_nanosecond,
341+
abort("Internal error: Invalid precision.")
342+
)
343+
}
344+
326345
#' @export
327346
vec_ptype2.clock_year_month_day.clock_year_month_day <- function(x, y, ...) {
328347
ptype2_calendar_and_calendar(x, y, ...)
@@ -1183,3 +1202,21 @@ seq.clock_year_month_day <- function(from,
11831202
...
11841203
)
11851204
}
1205+
1206+
# ------------------------------------------------------------------------------
1207+
1208+
clock_init_year_month_day_utils <- function(env) {
1209+
year <- year_month_day(integer())
1210+
1211+
assign("clock_empty_year_month_day_year", year, envir = env)
1212+
assign("clock_empty_year_month_day_month", calendar_widen(year, "month"), envir = env)
1213+
assign("clock_empty_year_month_day_day", calendar_widen(year, "day"), envir = env)
1214+
assign("clock_empty_year_month_day_hour", calendar_widen(year, "hour"), envir = env)
1215+
assign("clock_empty_year_month_day_minute", calendar_widen(year, "minute"), envir = env)
1216+
assign("clock_empty_year_month_day_second", calendar_widen(year, "second"), envir = env)
1217+
assign("clock_empty_year_month_day_millisecond", calendar_widen(year, "millisecond"), envir = env)
1218+
assign("clock_empty_year_month_day_microsecond", calendar_widen(year, "microsecond"), envir = env)
1219+
assign("clock_empty_year_month_day_nanosecond", calendar_widen(year, "nanosecond"), envir = env)
1220+
1221+
invisible(NULL)
1222+
}

R/gregorian-year-month-weekday.R

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,25 @@ is_year_month_weekday <- function(x) {
175175

176176
# ------------------------------------------------------------------------------
177177

178+
#' @export
179+
vec_ptype.clock_year_month_weekday <- function(x, ...) {
180+
switch(
181+
calendar_precision(x) + 1L,
182+
clock_empty_year_month_weekday_year,
183+
abort("Internal error: Invalid precision"),
184+
clock_empty_year_month_weekday_month,
185+
abort("Internal error: Invalid precision"),
186+
clock_empty_year_month_weekday_day,
187+
clock_empty_year_month_weekday_hour,
188+
clock_empty_year_month_weekday_minute,
189+
clock_empty_year_month_weekday_second,
190+
clock_empty_year_month_weekday_millisecond,
191+
clock_empty_year_month_weekday_microsecond,
192+
clock_empty_year_month_weekday_nanosecond,
193+
abort("Internal error: Invalid precision.")
194+
)
195+
}
196+
178197
#' @export
179198
vec_ptype2.clock_year_month_weekday.clock_year_month_weekday <- function(x, y, ...) {
180199
ptype2_calendar_and_calendar(x, y, ...)
@@ -1050,3 +1069,21 @@ seq.clock_year_month_weekday <- function(from,
10501069
...) {
10511070
seq.clock_year_month_day(from, to, by, length.out, along.with, ...)
10521071
}
1072+
1073+
# ------------------------------------------------------------------------------
1074+
1075+
clock_init_year_month_weekday_utils <- function(env) {
1076+
year <- year_month_weekday(integer())
1077+
1078+
assign("clock_empty_year_month_weekday_year", year, envir = env)
1079+
assign("clock_empty_year_month_weekday_month", calendar_widen(year, "month"), envir = env)
1080+
assign("clock_empty_year_month_weekday_day", calendar_widen(year, "day"), envir = env)
1081+
assign("clock_empty_year_month_weekday_hour", calendar_widen(year, "hour"), envir = env)
1082+
assign("clock_empty_year_month_weekday_minute", calendar_widen(year, "minute"), envir = env)
1083+
assign("clock_empty_year_month_weekday_second", calendar_widen(year, "second"), envir = env)
1084+
assign("clock_empty_year_month_weekday_millisecond", calendar_widen(year, "millisecond"), envir = env)
1085+
assign("clock_empty_year_month_weekday_microsecond", calendar_widen(year, "microsecond"), envir = env)
1086+
assign("clock_empty_year_month_weekday_nanosecond", calendar_widen(year, "nanosecond"), envir = env)
1087+
1088+
invisible(NULL)
1089+
}

R/iso-year-week-day.R

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,25 @@ is_iso_year_week_day <- function(x) {
152152

153153
# ------------------------------------------------------------------------------
154154

155+
#' @export
156+
vec_ptype.clock_iso_year_week_day <- function(x, ...) {
157+
switch(
158+
calendar_precision(x) + 1L,
159+
clock_empty_iso_year_week_day_year,
160+
abort("Internal error: Invalid precision"),
161+
abort("Internal error: Invalid precision"),
162+
clock_empty_iso_year_week_day_week,
163+
clock_empty_iso_year_week_day_day,
164+
clock_empty_iso_year_week_day_hour,
165+
clock_empty_iso_year_week_day_minute,
166+
clock_empty_iso_year_week_day_second,
167+
clock_empty_iso_year_week_day_millisecond,
168+
clock_empty_iso_year_week_day_microsecond,
169+
clock_empty_iso_year_week_day_nanosecond,
170+
abort("Internal error: Invalid precision.")
171+
)
172+
}
173+
155174
#' @export
156175
vec_ptype2.clock_iso_year_week_day.clock_iso_year_week_day <- function(x, y, ...) {
157176
ptype2_calendar_and_calendar(x, y, ...)
@@ -916,3 +935,21 @@ seq.clock_iso_year_week_day <- function(from,
916935
...
917936
)
918937
}
938+
939+
# ------------------------------------------------------------------------------
940+
941+
clock_init_iso_year_week_day_utils <- function(env) {
942+
year <- iso_year_week_day(integer())
943+
944+
assign("clock_empty_iso_year_week_day_year", year, envir = env)
945+
assign("clock_empty_iso_year_week_day_week", calendar_widen(year, "week"), envir = env)
946+
assign("clock_empty_iso_year_week_day_day", calendar_widen(year, "day"), envir = env)
947+
assign("clock_empty_iso_year_week_day_hour", calendar_widen(year, "hour"), envir = env)
948+
assign("clock_empty_iso_year_week_day_minute", calendar_widen(year, "minute"), envir = env)
949+
assign("clock_empty_iso_year_week_day_second", calendar_widen(year, "second"), envir = env)
950+
assign("clock_empty_iso_year_week_day_millisecond", calendar_widen(year, "millisecond"), envir = env)
951+
assign("clock_empty_iso_year_week_day_microsecond", calendar_widen(year, "microsecond"), envir = env)
952+
assign("clock_empty_iso_year_week_day_nanosecond", calendar_widen(year, "nanosecond"), envir = env)
953+
954+
invisible(NULL)
955+
}

R/naive-time.R

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,25 @@ new_naive_info_from_fields <- function(fields) {
697697

698698
# ------------------------------------------------------------------------------
699699

700+
#' @export
701+
vec_ptype.clock_naive_time <- function(x, ...) {
702+
switch(
703+
time_point_precision(x) + 1L,
704+
abort("Internal error: Invalid precision"),
705+
abort("Internal error: Invalid precision"),
706+
abort("Internal error: Invalid precision"),
707+
abort("Internal error: Invalid precision"),
708+
clock_empty_naive_time_day,
709+
clock_empty_naive_time_hour,
710+
clock_empty_naive_time_minute,
711+
clock_empty_naive_time_second,
712+
clock_empty_naive_time_millisecond,
713+
clock_empty_naive_time_microsecond,
714+
clock_empty_naive_time_nanosecond,
715+
abort("Internal error: Invalid precision.")
716+
)
717+
}
718+
700719
#' @export
701720
vec_ptype2.clock_naive_time.clock_naive_time <- function(x, y, ...) {
702721
ptype2_time_point_and_time_point(x, y, ...)
@@ -751,3 +770,19 @@ vec_arith.clock_naive_time.numeric <- function(op, x, y, ...) {
751770
vec_arith.numeric.clock_naive_time <- function(op, x, y, ...) {
752771
arith_numeric_and_time_point(op, x, y, ...)
753772
}
773+
774+
# ------------------------------------------------------------------------------
775+
776+
clock_init_naive_time_utils <- function(env) {
777+
day <- as_naive(year_month_day(integer(), integer(), integer()))
778+
779+
assign("clock_empty_naive_time_day", day, envir = env)
780+
assign("clock_empty_naive_time_hour", time_point_cast(day, "hour"), envir = env)
781+
assign("clock_empty_naive_time_minute", time_point_cast(day, "minute"), envir = env)
782+
assign("clock_empty_naive_time_second", time_point_cast(day, "second"), envir = env)
783+
assign("clock_empty_naive_time_millisecond", time_point_cast(day, "millisecond"), envir = env)
784+
assign("clock_empty_naive_time_microsecond", time_point_cast(day, "microsecond"), envir = env)
785+
assign("clock_empty_naive_time_nanosecond", time_point_cast(day, "nanosecond"), envir = env)
786+
787+
invisible(NULL)
788+
}

R/precision.R

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,19 @@ precision_common2 <- function(x, y) {
6262
y
6363
}
6464
}
65+
66+
precision_names <- function() {
67+
c(
68+
"year",
69+
"quarter",
70+
"month",
71+
"week",
72+
"day",
73+
"hour",
74+
"minute",
75+
"second",
76+
"millisecond",
77+
"microsecond",
78+
"nanosecond"
79+
)
80+
}

R/quarterly-year-quarter-day.R

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,33 @@ is_year_quarter_day <- function(x) {
175175

176176
# ------------------------------------------------------------------------------
177177

178+
#' @export
179+
vec_ptype.clock_year_quarter_day <- function(x, ...) {
180+
names <- NULL
181+
precision <- calendar_precision(x)
182+
start <- quarterly_start(x)
183+
184+
f <- integer()
185+
186+
fields <- switch(
187+
precision + 1L,
188+
list(year = f),
189+
list(year = f, quarter = f),
190+
abort("Internal error: Invalid precision"),
191+
abort("Internal error: Invalid precision"),
192+
list(year = f, quarter = f, day = f),
193+
list(year = f, quarter = f, day = f, hour = f),
194+
list(year = f, quarter = f, day = f, hour = f, minute = f),
195+
list(year = f, quarter = f, day = f, hour = f, minute = f, second = f),
196+
list(year = f, quarter = f, day = f, hour = f, minute = f, second = f, subsecond = f),
197+
list(year = f, quarter = f, day = f, hour = f, minute = f, second = f, subsecond = f),
198+
list(year = f, quarter = f, day = f, hour = f, minute = f, second = f, subsecond = f),
199+
abort("Internal error: Invalid precision.")
200+
)
201+
202+
new_year_quarter_day_from_fields(fields, precision, start, names)
203+
}
204+
178205
#' @export
179206
vec_ptype2.clock_year_quarter_day.clock_year_quarter_day <- function(x, y, ...) {
180207
if (quarterly_start(x) != quarterly_start(y)) {

R/sys-time.R

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,25 @@ new_sys_info_from_fields <- function(fields) {
416416

417417
# ------------------------------------------------------------------------------
418418

419+
#' @export
420+
vec_ptype.clock_sys_time <- function(x, ...) {
421+
switch(
422+
time_point_precision(x) + 1L,
423+
abort("Internal error: Invalid precision"),
424+
abort("Internal error: Invalid precision"),
425+
abort("Internal error: Invalid precision"),
426+
abort("Internal error: Invalid precision"),
427+
clock_empty_sys_time_day,
428+
clock_empty_sys_time_hour,
429+
clock_empty_sys_time_minute,
430+
clock_empty_sys_time_second,
431+
clock_empty_sys_time_millisecond,
432+
clock_empty_sys_time_microsecond,
433+
clock_empty_sys_time_nanosecond,
434+
abort("Internal error: Invalid precision.")
435+
)
436+
}
437+
419438
#' @export
420439
vec_ptype2.clock_sys_time.clock_sys_time <- function(x, y, ...) {
421440
ptype2_time_point_and_time_point(x, y, ...)
@@ -471,3 +490,18 @@ vec_arith.numeric.clock_sys_time <- function(op, x, y, ...) {
471490
arith_numeric_and_time_point(op, x, y, ...)
472491
}
473492

493+
# ------------------------------------------------------------------------------
494+
495+
clock_init_sys_time_utils <- function(env) {
496+
day <- as_sys(year_month_day(integer(), integer(), integer()))
497+
498+
assign("clock_empty_sys_time_day", day, envir = env)
499+
assign("clock_empty_sys_time_hour", time_point_cast(day, "hour"), envir = env)
500+
assign("clock_empty_sys_time_minute", time_point_cast(day, "minute"), envir = env)
501+
assign("clock_empty_sys_time_second", time_point_cast(day, "second"), envir = env)
502+
assign("clock_empty_sys_time_millisecond", time_point_cast(day, "millisecond"), envir = env)
503+
assign("clock_empty_sys_time_microsecond", time_point_cast(day, "microsecond"), envir = env)
504+
assign("clock_empty_sys_time_nanosecond", time_point_cast(day, "nanosecond"), envir = env)
505+
506+
invisible(NULL)
507+
}

0 commit comments

Comments
 (0)