| 227 | } // namespace |
| 228 | |
| 229 | string SummarizeAttrValue(const AttrValue& attr_value) { |
| 230 | switch (attr_value.value_case()) { |
| 231 | case AttrValue::kS: |
| 232 | return SummarizeString(attr_value.s()); |
| 233 | case AttrValue::kI: |
| 234 | return strings::StrCat(attr_value.i()); |
| 235 | case AttrValue::kF: |
| 236 | return strings::StrCat(attr_value.f()); |
| 237 | case AttrValue::kB: |
| 238 | return attr_value.b() ? "true" : "false"; |
| 239 | case AttrValue::kType: |
| 240 | return EnumName_DataType(attr_value.type()); |
| 241 | case AttrValue::kShape: |
| 242 | return PartialTensorShape::DebugString(attr_value.shape()); |
| 243 | case AttrValue::kTensor: |
| 244 | return SummarizeTensor(attr_value.tensor()); |
| 245 | case AttrValue::kList: { |
| 246 | std::vector<string> pieces; |
| 247 | if (attr_value.list().s_size() > 0) { |
| 248 | for (int i = 0; i < attr_value.list().s_size(); ++i) { |
| 249 | pieces.push_back(SummarizeString(attr_value.list().s(i))); |
| 250 | } |
| 251 | } else if (attr_value.list().i_size() > 0) { |
| 252 | for (int i = 0; i < attr_value.list().i_size(); ++i) { |
| 253 | pieces.push_back(strings::StrCat(attr_value.list().i(i))); |
| 254 | } |
| 255 | } else if (attr_value.list().f_size() > 0) { |
| 256 | for (int i = 0; i < attr_value.list().f_size(); ++i) { |
| 257 | pieces.push_back(strings::StrCat(attr_value.list().f(i))); |
| 258 | } |
| 259 | } else if (attr_value.list().b_size() > 0) { |
| 260 | for (int i = 0; i < attr_value.list().b_size(); ++i) { |
| 261 | pieces.push_back(attr_value.list().b(i) ? "true" : "false"); |
| 262 | } |
| 263 | } else if (attr_value.list().type_size() > 0) { |
| 264 | for (int i = 0; i < attr_value.list().type_size(); ++i) { |
| 265 | pieces.push_back(EnumName_DataType(attr_value.list().type(i))); |
| 266 | } |
| 267 | } else if (attr_value.list().shape_size() > 0) { |
| 268 | for (int i = 0; i < attr_value.list().shape_size(); ++i) { |
| 269 | pieces.push_back( |
| 270 | TensorShape::DebugString(attr_value.list().shape(i))); |
| 271 | } |
| 272 | } else if (attr_value.list().tensor_size() > 0) { |
| 273 | for (int i = 0; i < attr_value.list().tensor_size(); ++i) { |
| 274 | pieces.push_back(SummarizeTensor(attr_value.list().tensor(i))); |
| 275 | } |
| 276 | } else if (attr_value.list().func_size() > 0) { |
| 277 | for (int i = 0; i < attr_value.list().func_size(); ++i) { |
| 278 | pieces.push_back(SummarizeFunc(attr_value.list().func(i))); |
| 279 | } |
| 280 | } |
| 281 | constexpr int kMaxListSummarySize = 15; |
| 282 | if (pieces.size() >= kMaxListSummarySize) { |
| 283 | pieces.erase(pieces.begin() + 5, pieces.begin() + (pieces.size() - 6)); |
| 284 | pieces[5] = "..."; |
| 285 | } |
| 286 | return strings::StrCat("[", absl::StrJoin(pieces, ", "), "]"); |