blob: b8a83625e2e184a570404b636ce6d1a69ec27796 [file] [log] [blame]
#pragma once
#include <ATen/core/dispatch/Dispatcher.h>
template <class... Inputs>
inline std::vector<c10::IValue> makeStack(Inputs&&... inputs) {
return {std::forward<Inputs>(inputs)...};
}
template <class... Args>
inline std::vector<c10::IValue> callOp(
const c10::OperatorHandle& op,
Args... args) {
auto stack = makeStack(std::forward<Args>(args)...);
c10::Dispatcher::singleton().callBoxed(op, &stack);
return stack;
}
template <class... Args>
inline std::vector<c10::IValue> callOp(
const char* func_name,
const char* overload_name,
Args... args) {
const c10::optional<c10::OperatorHandle> op_handle =
c10::Dispatcher::singleton().findSchema({func_name, overload_name});
assert(op_handle.has_value());
return callOp(op_handle.value(), args...);
}