Skip to content

Commit 095499d

Browse files
authored
speed up spec_is_possible() helper (#932)
1 parent 48efe84 commit 095499d

File tree

1 file changed

+31
-16
lines changed

1 file changed

+31
-16
lines changed

R/misc.R

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -97,25 +97,40 @@ spec_is_possible <- function(spec,
9797
user_specified_mode = spec$user_specified_mode) {
9898
cls <- class(spec)[[1]]
9999

100-
all_model_info <-
101-
dplyr::full_join(
102-
model_info_table,
103-
rlang::env_get(get_model_env(), cls) %>% dplyr::mutate(model = cls),
104-
by = c("model", "engine", "mode")
105-
)
100+
model_env <- rlang::env_get(get_model_env(), cls)
101+
model_env_matches <- model_env
102+
model_env_matches$model <- cls
103+
model_info_table_matches <-
104+
vctrs::vec_slice(model_info_table,
105+
model_info_table$model == cls)
106+
107+
if (isTRUE(user_specified_engine) && !is.null(engine)) {
108+
model_env_matches <-
109+
vctrs::vec_slice(model_env_matches,
110+
model_env_matches$engine == engine)
111+
112+
model_info_table_matches <-
113+
vctrs::vec_slice(model_info_table_matches,
114+
model_info_table_matches$engine == engine)
115+
}
106116

107-
engine_condition <- engine_filter_condition(engine, user_specified_engine)
108-
mode_condition <- mode_filter_condition(mode, user_specified_mode)
117+
if (isTRUE(user_specified_mode) && !is.null(mode)) {
118+
model_env_matches <-
119+
vctrs::vec_slice(model_env_matches,
120+
model_env_matches$mode == mode)
109121

110-
possibilities <-
111-
all_model_info %>%
112-
dplyr::filter(
113-
model == cls,
114-
!!engine_condition,
115-
!!mode_condition
116-
)
122+
model_info_table_matches <-
123+
vctrs::vec_slice(model_info_table_matches,
124+
model_info_table_matches$mode == mode)
125+
}
126+
127+
128+
if (vctrs::vec_size(model_env_matches) > 0 ||
129+
vctrs::vec_size(model_info_table_matches) > 0) {
130+
return(TRUE)
131+
}
117132

118-
return(nrow(possibilities) > 0)
133+
return(FALSE)
119134
}
120135

121136
# see ?add_on_exports for more information on usage

0 commit comments

Comments
 (0)