20 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser ConstantOfShape op has input tensor" +
input_name +
21 " but its type is not yet registered");
26 std::cout <<
"\t.... ";
28 std::cout <<
"ConstantOfShape " <<
nodeproto.input(0) <<
" -> ";
30 std::cout <<
"Constant --> ";
31 std::cout <<
nodeproto.output(0) << std::endl;
34 std::unique_ptr<ROperator>
op;
39 std::vector<std::size_t> shape;
42 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser Constant or ConstantOfShape and attribute size is larger than 1");
47 const onnx::TensorProto & t =
nodeproto.attribute(0).t();
51 for (
int j = 0;
j < t.dims_size();
j++) {
52 shape.push_back(t.dims(
j));
58 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser ConstantOfShape has invalid tensor size " + std::to_string(
length));
64 std::vector<int32_t> values(
length);
65 if (t.int32_data_size() ==
int(
length)) {
66 for (
size_t i = 0; i <
length; i++)
67 values[i] = t.int32_data(i);
69 auto raw_data_ptr =
reinterpret_cast<int32_t *
>(
const_cast<char *
>(t.raw_data().c_str()));
76 std::vector<int64_t> values(
length);
77 if (t.int64_data_size() ==
int(
length)) {
78 for (
size_t i = 0; i <
length; i++)
79 values[i] = t.int64_data(i);
81 auto raw_data_ptr =
reinterpret_cast<int64_t *
>(
const_cast<char *
>(t.raw_data().c_str()));
88 std::vector<float> values(
length);
89 if (t.float_data_size() ==
int(
length)) {
90 for (
size_t i = 0; i <
length; i++)
91 values[i] = t.float_data(i);
93 auto raw_data_ptr =
reinterpret_cast<float *
>(
const_cast<char *
>(t.raw_data().c_str()));
100 std::vector<double> values(
length);
101 if (t.double_data_size() ==
int(
length)) {
102 for (
size_t i = 0; i <
length; i++)
103 values[i] = t.double_data(i);
105 auto raw_data_ptr =
reinterpret_cast<double *
>(
const_cast<char *
>(t.raw_data().c_str()));
112 std::vector<bool> values(
length);
113 auto raw_data_ptr =
reinterpret_cast<bool *
>(
const_cast<char *
>(t.raw_data().c_str()));
122 " is not supported!\n");
130 std::vector<float> values(1);
136 auto values = std::vector<float>({
nodeproto.attribute(0).floats().begin(),
nodeproto.attribute(0).floats().
end()});
137 shape.push_back(values.size());
141 std::vector<int64_t> values(1);
147 auto values = std::vector<int64_t>({
nodeproto.attribute(0).ints().begin(),
nodeproto.attribute(0).ints().
end()});
148 shape.push_back(values.size());
151 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser Constant op: not yet supporting attribute " +
attribute_name);
154 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser ConstantOfShape op: parsed invalid attribute " +
attribute_name);
162 std::vector<float> values(1);
166 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser Constant has no attribute");
175 std::cout <<
"\t ParseConstant: operator created\n";