#pragma once #include #include #include #include namespace torch { namespace jit { namespace script { // try to match a list if inputs and keyword 'attributes' to this schema, // if it works return the flat list of positional inputs to the call // if it returns nullopt, then failure_messages contains a good error report // set convert_tensor_to_num to true if ImplicitTensorToNums should be inserted // to match the schema struct MatchedSchema { std::vector inputs; std::vector return_types; c10::OptNameList return_field_names; }; TORCH_API c10::optional tryMatchSchema( const ::c10::FunctionSchema& schema, const SourceRange& loc, Graph& graph, c10::optional self, at::ArrayRef args, at::ArrayRef kwargs, std::ostream* failure_messages, bool allow_conversions); TORCH_API MatchedSchema matchSchema( const ::c10::FunctionSchema& schema, const SourceRange& loc, Graph& graph, at::ArrayRef args, at::ArrayRef kwarg); TORCH_API bool convertibleToList( const TypePtr& type, const TypePtr& list_type_); TORCH_API Value* emitBuiltinCall( const SourceRange& loc, Graph& graph, Symbol name, const c10::optional& self, at::ArrayRef inputs, at::ArrayRef attributes, // if true, emitBuiltinCall will throw an exception if this builtin does not // exist, otherwise it will return nullptr if the builtin is not found. bool required, // should error strings be eager materialized? bool render_errors = false); TORCH_API c10::optional findInputWithName( const std::string& name, at::ArrayRef kwargs); // applies implict conversion from value trying to turn it into type // concrete_type it succeeds if the return_value->isSubtypeOf(concrete_type) TORCH_API Value* tryConvertToType( const SourceRange& loc, Graph& graph, const TypePtr& concrete_type, Value* value, bool allow_conversions); } // namespace script } // namespace jit } // namespace torch