#pragma once
#include <executorch/runtime/core/exec_aten/exec_aten.h>
#include <executorch/runtime/core/portable_type/device.h>
#include <executorch/runtime/core/result.h>
#include <executorch/runtime/core/span.h>
#include <executorch/runtime/core/tag.h>
namespace executorch_flatbuffer {
struct ExecutionPlan;
}
namespace executorch {
namespace ET_RUNTIME_NAMESPACE {
namespace testing {
class TensorInfoTestFriend;
}
class TensorInfo final {
public:
TensorInfo() = delete;
TensorInfo(const TensorInfo&) = default;
TensorInfo(TensorInfo&&) = default;
TensorInfo& operator=(const TensorInfo&) = default;
TensorInfo& operator=(TensorInfo&& other) = default;
~TensorInfo() = default;
Span<const int32_t> sizes() const;
Span<const uint8_t> dim_order() const;
executorch::aten::ScalarType scalar_type() const;
bool is_memory_planned() const;
size_t nbytes() const;
std::string_view name() const;
private:
friend class MethodMeta;
friend class testing::TensorInfoTestFriend;
static Result<TensorInfo> create(
Span<const int32_t> sizes,
Span<const uint8_t> dim_order,
executorch::aten::ScalarType scalar_type,
const bool is_memory_planned,
std::string_view name);
TensorInfo(
Span<const int32_t> sizes,
Span<const uint8_t> dim_order,
executorch::aten::ScalarType scalar_type,
const bool is_memory_planned,
std::string_view name,
size_t nbytes);
Span<const int32_t> sizes_;
Span<const uint8_t> dim_order_;
std::string_view name_;
executorch::aten::ScalarType scalar_type_;
bool is_memory_planned_;
size_t nbytes_;
};
class MethodMeta final {
public:
MethodMeta() = delete;
MethodMeta(const MethodMeta&) = default;
MethodMeta(MethodMeta&&) = default;
MethodMeta& operator=(const MethodMeta&) = default;
MethodMeta& operator=(MethodMeta&& other) = default;
~MethodMeta() = default;
const char* name() const;
size_t num_inputs() const;
Result<Tag> input_tag(size_t index) const;
Result<TensorInfo> input_tensor_meta(size_t index) const;
size_t num_outputs() const;
Result<Tag> output_tag(size_t index) const;
Result<TensorInfo> output_tensor_meta(size_t index) const;
size_t num_attributes() const;
Result<TensorInfo> attribute_tensor_meta(size_t index) const;
size_t num_memory_planned_buffers() const;
Result<int64_t> memory_planned_buffer_size(size_t index) const;
Result<etensor::Device> memory_planned_buffer_device(size_t index) const;
bool uses_backend(const char* backend_name) const;
size_t num_backends() const;
Result<const char*> get_backend_name(size_t index) const;
ET_EXPERIMENTAL size_t num_instructions() const;
ET_DEPRECATED size_t num_non_const_buffers() const {
return num_memory_planned_buffers();
}
Result<int64_t> non_const_buffer_size(size_t index) const {
return memory_planned_buffer_size(index);
}
private:
friend class Program;
explicit MethodMeta(const executorch_flatbuffer::ExecutionPlan* s_plan);
const executorch_flatbuffer::ExecutionPlan* s_plan_;
};
} }
namespace torch {
namespace executor {
using ::executorch::ET_RUNTIME_NAMESPACE::MethodMeta;
using ::executorch::ET_RUNTIME_NAMESPACE::TensorInfo;
} }