ONE - On-device Neural Engine
Loading...
Searching...
No Matches
mio::circle::Reader Class Reference

Loads Circle file and provides helpers to access attributes. More...

#include <Reader.h>

Public Member Functions

 Reader (const ::circle::Model *model)
 
 Reader (const ::circle::Model *model, const std::vector< char > *rawdata)
 
 Reader ()=delete
 
uint32_t version () const
 
const std::vector< const ::circle::OperatorCode * > & opcodes ()
 
const CircleBuffers_tbuffers ()
 
const CircleTensors_ttensors ()
 
const CircleOperators_toperators ()
 
const std::vector< int32_t > & inputs () const
 
const std::vector< int32_t > & outputs () const
 
const CircleMetadata_tmetadata () const
 
const CircleSignatureDef_tsignature_defs () const
 
uint32_t num_subgraph () const
 
size_t buffer_info (uint32_t buf_idx, const uint8_t **buff_data)
 
size_t buffer_info (uint32_t buf_idx, const uint8_t **buff_data, bool &ext_offset)
 
::circle::BuiltinOperator builtin_code (const ::circle::Operator *op) const
 
std::string opcode_name (const ::circle::Operator *op) const
 
std::vector< int32_t > outputs (const ::circle::Operator *op) const
 
std::string tensor_name (const ::circle::Tensor *tensor) const
 
std::string tensor_dtype (const ::circle::Tensor *tensor) const
 
bool select_subgraph (uint32_t subgraph)
 
const std::string & subgraph_name (void) const
 
uint32_t subgraph_index (void) const
 

Detailed Description

Loads Circle file and provides helpers to access attributes.

Definition at line 38 of file Reader.h.

Constructor & Destructor Documentation

◆ Reader() [1/3]

mio::circle::Reader::Reader ( const ::circle::Model *  model)

Definition at line 29 of file Reader.cpp.

30{
31 if (model == nullptr)
32 {
33 throw std::runtime_error("Invalid model");
34 }
35
36 _version = model->version();
37 _subgraphs = model->subgraphs();
38 _buffers = model->buffers();
39 _metadata = model->metadata();
40 _signature_defs = model->signature_defs();
41
42 auto opcodes = model->operator_codes();
43 for (const ::circle::OperatorCode *opcode : *opcodes)
44 {
45 _op_codes.push_back(opcode);
46 }
47}
const std::vector< const ::circle::OperatorCode * > & opcodes()
Definition Reader.h:57

References opcodes().

◆ Reader() [2/3]

mio::circle::Reader::Reader ( const ::circle::Model *  model,
const std::vector< char > *  rawdata 
)

Definition at line 49 of file Reader.cpp.

50{
51 if (model == nullptr)
52 {
53 throw std::runtime_error("Invalid model");
54 }
55
56 _rawdata = rawdata;
57
58 _version = model->version();
59 _subgraphs = model->subgraphs();
60 _buffers = model->buffers();
61 _metadata = model->metadata();
62 _signature_defs = model->signature_defs();
63
64 auto opcodes = model->operator_codes();
65 for (const ::circle::OperatorCode *opcode : *opcodes)
66 {
67 _op_codes.push_back(opcode);
68 }
69}

References opcodes().

◆ Reader() [3/3]

mio::circle::Reader::Reader ( )
delete

Member Function Documentation

◆ buffer_info() [1/2]

size_t mio::circle::Reader::buffer_info ( uint32_t  buf_idx,
const uint8_t **  buff_data 
)

Definition at line 71 of file Reader.cpp.

72{
73 if (buff_data != nullptr)
74 {
75 *buff_data = nullptr;
76 }
77
78 if (buf_idx == 0)
79 return 0;
80
81 if (auto *buffer = (*_buffers)[buf_idx])
82 {
83 assert(buffer->offset() == 0);
84
85 if (auto *array = buffer->data())
86 {
87 if (size_t size = array->size())
88 {
89 if (buff_data != nullptr)
90 {
91 *buff_data = reinterpret_cast<const uint8_t *>(array->data());
92 }
93 return size;
94 }
95 }
96 }
97
98 return 0;
99}
int32_t size[5]
Definition Slice.cpp:35

References size.

Referenced by circledump::dump_model(), and circleinspect::DumpConstants::run().

◆ buffer_info() [2/2]

size_t mio::circle::Reader::buffer_info ( uint32_t  buf_idx,
const uint8_t **  buff_data,
bool &  ext_offset 
)

Definition at line 101 of file Reader.cpp.

102{
103 ext_offset = false;
104
105 if (buff_data != nullptr)
106 {
107 *buff_data = nullptr;
108 }
109
110 if (buf_idx == 0)
111 return 0;
112
113 if (auto *buffer = (*_buffers)[buf_idx])
114 {
115 auto buffer_offset = buffer->offset();
116 if (buffer_offset > 1)
117 {
118 assert(_rawdata); // make debug break for invalid case
119 if (_rawdata == nullptr)
120 return 0;
121
122 ext_offset = true;
123 if (buff_data != nullptr)
124 {
125 *buff_data = reinterpret_cast<const uint8_t *>(&_rawdata->at(buffer_offset));
126 }
127 return buffer->size();
128 }
129 else if (auto *array = buffer->data())
130 {
131 if (size_t size = array->size())
132 {
133 if (buff_data != nullptr)
134 {
135 *buff_data = reinterpret_cast<const uint8_t *>(array->data());
136 }
137 return size;
138 }
139 }
140 else
141 {
142 if (buffer->offset() == 1 && buffer->size() == 1)
143 {
144 std::cerr << "Buffer " << buf_idx << " has invalid offset/size." << std::endl;
145 }
146 }
147 }
148
149 return 0;
150}

References size.

◆ buffers()

const CircleBuffers_t * mio::circle::Reader::buffers ( )
inline

Definition at line 58 of file Reader.h.

58{ return _buffers; }

Referenced by circledump::dump_model(), circletensordump::DumpTensors::run(), and circletensordump::DumpTensorsToHdf5::run().

◆ builtin_code()

circle::BuiltinOperator mio::circle::Reader::builtin_code ( const ::circle::Operator *  op) const

Definition at line 152 of file Reader.cpp.

153{
154 uint32_t index = op->opcode_index();
155 assert(index < _op_codes.size());
156 const ::circle::OperatorCode *opcode = _op_codes.at(index);
157
159}
::circle::BuiltinOperator builtin_code_neutral(const ::circle::OperatorCode *opcode)
Definition Helper.cpp:33
loco::GraphInputIndex index(const TFPlaceholder *node)
Definition TFNode.cpp:54

References mio::circle::builtin_code_neutral().

Referenced by circledump::dump_sub_graph(), and circleinspect::DumpConv2DWeight::run().

◆ inputs()

◆ metadata()

const CircleMetadata_t * mio::circle::Reader::metadata ( ) const
inline

Definition at line 63 of file Reader.h.

63{ return _metadata; }

Referenced by circledump::dump_model().

◆ num_subgraph()

◆ opcode_name()

std::string mio::circle::Reader::opcode_name ( const ::circle::Operator *  op) const

Definition at line 161 of file Reader.cpp.

162{
163 uint32_t index = op->opcode_index();
164 assert(index < _op_codes.size());
165 const ::circle::OperatorCode *opcode = _op_codes.at(index);
166
167 if (!mio::circle::is_valid(opcode))
168 {
169 std::ostringstream oss;
170 oss << "(invalid: " << index << ")";
171 return oss.str();
172 }
173
174 return mio::circle::opcode_name(opcode);
175}
std::string opcode_name(const ::circle::OperatorCode *opcode)
Definition Helper.cpp:70
bool is_valid(const ::circle::OperatorCode *opcode)
Definition Helper.cpp:46

References mio::circle::is_valid(), and mio::circle::opcode_name().

Referenced by circledump::dump_sub_graph(), circleinspect::DumpOperators::run(), circleinspect::DumpConv2DWeight::run(), and circleinspect::DumpOperatorVersion::run().

◆ opcodes()

const std::vector< const ::circle::OperatorCode * > & mio::circle::Reader::opcodes ( )
inline

Definition at line 57 of file Reader.h.

57{ return _op_codes; }

Referenced by circledump::dump_model(), Reader(), Reader(), and circleinspect::DumpOperatorVersion::run().

◆ operators()

const CircleOperators_t * mio::circle::Reader::operators ( )
inline

◆ outputs() [1/2]

const std::vector< int32_t > & mio::circle::Reader::outputs ( ) const
inline

◆ outputs() [2/2]

std::vector< int32_t > mio::circle::Reader::outputs ( const ::circle::Operator *  op) const

Definition at line 177 of file Reader.cpp.

178{
179 return as_index_vector(op->outputs());
180}
std::vector< T > as_index_vector(const flatbuffers::Vector< T > *flat_array)
Definition Helper.h:36

References mio::circle::as_index_vector().

Referenced by onert.common.basesession.BaseSession::_set_outputs(), and validate_onnx2circle.OnnxRunner::get_outputs().

◆ select_subgraph()

bool mio::circle::Reader::select_subgraph ( uint32_t  subgraph)

Definition at line 192 of file Reader.cpp.

193{
194 _subgraph_index = sgindex;
195 _tensors = nullptr;
196 _operators = nullptr;
197
198 _inputs.clear();
199 _outputs.clear();
200
201 if (_subgraphs->size() <= sgindex)
202 {
203 assert(false);
204 return false;
205 }
206
207 const ::circle::SubGraph *subgraph = (*_subgraphs)[sgindex];
208
209 auto name = subgraph->name();
210 _subgraph_name = name ? name->c_str() : "(noname)";
211
212 _tensors = subgraph->tensors();
213 _operators = subgraph->operators();
214
215 _inputs = as_index_vector(subgraph->inputs());
216 _outputs = as_index_vector(subgraph->outputs());
217
218 return true;
219}
name
Definition setup.py:158

References mio::circle::as_index_vector(), and flatbuffers::Vector< T, SizeT >::size().

Referenced by circledump::dump_model(), cirops::DumpOperators::run(), circletensordump::DumpTensors::run(), circletensordump::DumpTensorsToHdf5::run(), circleinspect::DumpOperators::run(), circleinspect::DumpConv2DWeight::run(), circleinspect::DumpOperatorVersion::run(), circleinspect::DumpTensorDType::run(), circleinspect::DumpConstants::run(), and circleinspect::DumpTensorShape::run().

◆ signature_defs()

const CircleSignatureDef_t * mio::circle::Reader::signature_defs ( ) const
inline

Definition at line 64 of file Reader.h.

64{ return _signature_defs; }

Referenced by circledump::dump_model().

◆ subgraph_index()

uint32_t mio::circle::Reader::subgraph_index ( void  ) const
inline

Definition at line 79 of file Reader.h.

79{ return _subgraph_index; }

Referenced by circledump::dump_sub_graph().

◆ subgraph_name()

const std::string & mio::circle::Reader::subgraph_name ( void  ) const
inline

Definition at line 78 of file Reader.h.

78{ return _subgraph_name; }

Referenced by circledump::dump_model().

◆ tensor_dtype()

std::string mio::circle::Reader::tensor_dtype ( const ::circle::Tensor *  tensor) const

Definition at line 187 of file Reader.cpp.

188{
189 return mio::circle::tensor_type(tensor);
190}
const char * tensor_type(const ::circle::Tensor *tensor)
Definition Helper.cpp:96

References mio::circle::tensor_type().

Referenced by circleinspect::DumpTensorDType::run().

◆ tensor_name()

std::string mio::circle::Reader::tensor_name ( const ::circle::Tensor *  tensor) const

Definition at line 182 of file Reader.cpp.

183{
184 return mio::circle::tensor_name(tensor);
185}
const char * tensor_name(const ::circle::Tensor *tensor)
Definition Helper.cpp:101

References mio::circle::tensor_name().

Referenced by circleinspect::DumpTensorDType::run(), circleinspect::DumpConstants::run(), and circleinspect::DumpTensorShape::run().

◆ tensors()

◆ version()

uint32_t mio::circle::Reader::version ( ) const
inline

Definition at line 55 of file Reader.h.

55{ return _version; }

Referenced by circledump::dump_model().


The documentation for this class was generated from the following files: