@@ -97,25 +97,40 @@ spec_is_possible <- function(spec,
97
97
user_specified_mode = spec $ user_specified_mode ) {
98
98
cls <- class(spec )[[1 ]]
99
99
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
+ }
106
116
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 )
109
121
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
+ }
117
132
118
- return (nrow( possibilities ) > 0 )
133
+ return (FALSE )
119
134
}
120
135
121
136
# see ?add_on_exports for more information on usage
0 commit comments