#pragma once #include #include #include #include #include #include namespace torch { namespace distributed { namespace rpc { using torch::jit::Operator; // A ScriptCall instance represents an invocation of a builtin operator for a // TorchScript function. If it is a builtin operator, it // contains a shared ptr to the `Operator` and a list of arguments. // If it is a TorchScript function, it contains a non empty qualifiedName string // to the TorchScript function schema name and a list of arguments. class TORCH_API ScriptCall : public RpcCommandBase { public: // Constructor for builitin operator call. ScriptCall(std::shared_ptr op, std::vector&& stack); // Constructor for TorchScript function call. ScriptCall( const c10::QualifiedName& qualifiedName, std::vector&& stack, const bool isAsyncExecution = false); bool hasOp() const; std::shared_ptr op() const; bool hasQualifiedName() const; const c10::QualifiedName& qualifiedName() const; // return the argument stack of this builtin operator const std::vector& stack() const; std::vector& stackRef(); inline bool isAsyncExecution() const { return isAsyncExecution_; } c10::intrusive_ptr toMessageImpl() && override; static std::unique_ptr fromMessage(const Message& message); ~ScriptCall() override = default; protected: virtual void toIValues(std::vector& ivalues) const; static std::unique_ptr fromIValues( std::vector& ivalues); private: // Given an operator symbol and a string schema, return the matched operator. static std::shared_ptr matchOperator(const std::string& str_schema); static const std::string BUILTIN_OP_NAMESPACE_; static const std::string ATEN_PREFIX_; // This field has value if this ScriptCall represents invocation of a builtin // operator. std::optional> op_; // This field has non empty string if this ScriptCall represents invocation of // an annotated torchscript function defined by users. std::optional qualifiedName_; std::vector stack_; const bool isAsyncExecution_; }; } // namespace rpc } // namespace distributed } // namespace torch