Automated sync from github.com/tensorflow/tensorflow (#2510)

BUG=automated sync from upstream
NO_CHECK_TFLITE_FILES=automated sync from upstream
diff --git a/python/tflite_micro/numpy_utils.cc b/python/tflite_micro/numpy_utils.cc
index 4a4aad8..20f43c9 100644
--- a/python/tflite_micro/numpy_utils.cc
+++ b/python/tflite_micro/numpy_utils.cc
@@ -40,6 +40,9 @@
       return NPY_FLOAT32;
     case kTfLiteFloat16:
       return NPY_FLOAT16;
+    case kTfLiteBFloat16:
+      // TODO(b/329491949): NPY_BFLOAT16 currently doesn't exist
+      return NPY_FLOAT16;
     case kTfLiteFloat64:
       return NPY_FLOAT64;
     case kTfLiteInt32:
diff --git a/tensorflow/lite/core/api/flatbuffer_conversions.cc b/tensorflow/lite/core/api/flatbuffer_conversions.cc
index 10feeb3..d36c2b6 100644
--- a/tensorflow/lite/core/api/flatbuffer_conversions.cc
+++ b/tensorflow/lite/core/api/flatbuffer_conversions.cc
@@ -1017,6 +1017,9 @@
     case TensorType_FLOAT16:
       *type = kTfLiteFloat16;
       return kTfLiteOk;
+    case TensorType_BFLOAT16:
+      *type = kTfLiteBFloat16;
+      return kTfLiteOk;
     case TensorType_FLOAT32:
       *type = kTfLiteFloat32;
       return kTfLiteOk;
diff --git a/tensorflow/lite/core/c/c_api_types.h b/tensorflow/lite/core/c/c_api_types.h
index 1170025..32cefa8 100644
--- a/tensorflow/lite/core/c/c_api_types.h
+++ b/tensorflow/lite/core/c/c_api_types.h
@@ -133,6 +133,7 @@
   kTfLiteUInt32 = 16,
   kTfLiteUInt16 = 17,
   kTfLiteInt4 = 18,
+  kTfLiteBFloat16 = 19,
 } TfLiteType;
 
 /// Legacy. Will be deprecated in favor of `TfLiteAffineQuantization`.
diff --git a/tensorflow/lite/core/c/common.cc b/tensorflow/lite/core/c/common.cc
index fd7c415..7afecdb 100644
--- a/tensorflow/lite/core/c/common.cc
+++ b/tensorflow/lite/core/c/common.cc
@@ -370,6 +370,8 @@
       return "STRING";
     case kTfLiteFloat16:
       return "FLOAT16";
+    case kTfLiteBFloat16:
+      return "BFLOAT16";
     case kTfLiteFloat64:
       return "FLOAT64";
     case kTfLiteResource:
diff --git a/tensorflow/lite/core/c/common.h b/tensorflow/lite/core/c/common.h
index 4e48901..9801bde 100644
--- a/tensorflow/lite/core/c/common.h
+++ b/tensorflow/lite/core/c/common.h
@@ -296,6 +296,13 @@
   uint16_t data;
 } TfLiteFloat16;
 
+/// bfloat16 data type compatible with the Google Brain definition.
+/// https://cloud.google.com/tpu/docs/bfloat16.
+/// This provides 1 bit of sign, 8 bits of exponent, and 7 bits of mantissa.
+typedef struct TfLiteBFloat16 {
+  uint16_t data;
+} TfLiteBFloat16;
+
 /// Return the name of a given type, for error reporting purposes.
 const char* TfLiteTypeGetName(TfLiteType type);
 
diff --git a/tensorflow/lite/micro/memory_helpers.cc b/tensorflow/lite/micro/memory_helpers.cc
index 685f04b..94a6fe3 100644
--- a/tensorflow/lite/micro/memory_helpers.cc
+++ b/tensorflow/lite/micro/memory_helpers.cc
@@ -50,6 +50,9 @@
     case kTfLiteFloat16:
       *size = sizeof(int16_t);
       break;
+    case kTfLiteBFloat16:
+      *size = sizeof(int16_t);
+      break;
     case kTfLiteFloat32:
       *size = sizeof(float);
       break;
diff --git a/tensorflow/lite/micro/tools/ci_build/test_code_style.sh b/tensorflow/lite/micro/tools/ci_build/test_code_style.sh
index 462fe7e..d49f429 100755
--- a/tensorflow/lite/micro/tools/ci_build/test_code_style.sh
+++ b/tensorflow/lite/micro/tools/ci_build/test_code_style.sh
@@ -97,6 +97,7 @@
   -e experimental \
   -e schema/schema_generated.h \
   -e schema/schema_utils.h \
+  -e tensorflow/lite/micro/tools/layer_by_layer_schema_generated.h \
   -e "\.inc" \
   -e "\.md" \
   ${EXCLUDE_SHARED_TFL_CODE}
diff --git a/tensorflow/lite/micro/tools/layer_by_layer.cc b/tensorflow/lite/micro/tools/layer_by_layer.cc
index d9df228..91d325e 100644
--- a/tensorflow/lite/micro/tools/layer_by_layer.cc
+++ b/tensorflow/lite/micro/tools/layer_by_layer.cc
@@ -66,6 +66,9 @@
     case kTfLiteFloat16:
       tensor_type = TensorTypes_FLOAT16;
       return kTfLiteOk;
+    case kTfLiteBFloat16:
+      tensor_type = TensorTypes_BFLOAT16;
+      return kTfLiteOk;
     case kTfLiteFloat32:
       tensor_type = TensorTypes_FLOAT32;
       return kTfLiteOk;
diff --git a/tensorflow/lite/micro/tools/layer_by_layer_schema.fbs b/tensorflow/lite/micro/tools/layer_by_layer_schema.fbs
index 9252ac3..4183c9c 100644
--- a/tensorflow/lite/micro/tools/layer_by_layer_schema.fbs
+++ b/tensorflow/lite/micro/tools/layer_by_layer_schema.fbs
@@ -34,6 +34,7 @@
   UINT32 = 15,
   UINT16 = 16,
   INT4 = 17,
+  BFLOAT16 = 18,
 }
 
 table TensorData {
diff --git a/tensorflow/lite/micro/tools/layer_by_layer_schema_generated.h b/tensorflow/lite/micro/tools/layer_by_layer_schema_generated.h
index 1fe6ccb..67a2caa 100644
--- a/tensorflow/lite/micro/tools/layer_by_layer_schema_generated.h
+++ b/tensorflow/lite/micro/tools/layer_by_layer_schema_generated.h
@@ -14,6 +14,7 @@
 ==============================================================================*/
 // automatically generated by the FlatBuffers compiler, do not modify
 
+
 #ifndef FLATBUFFERS_GENERATED_LAYERBYLAYERSCHEMA_H_
 #define FLATBUFFERS_GENERATED_LAYERBYLAYERSCHEMA_H_
 
@@ -22,9 +23,9 @@
 // Ensure the included flatbuffers.h is the same version as when this file was
 // generated, otherwise it may not be compatible.
 static_assert(FLATBUFFERS_VERSION_MAJOR == 23 &&
-                  FLATBUFFERS_VERSION_MINOR == 5 &&
-                  FLATBUFFERS_VERSION_REVISION == 26,
-              "Non-compatible flatbuffers version included");
+              FLATBUFFERS_VERSION_MINOR == 5 &&
+              FLATBUFFERS_VERSION_REVISION == 26,
+             "Non-compatible flatbuffers version included");
 
 struct TensorData;
 struct TensorDataBuilder;
@@ -57,33 +58,64 @@
   TensorTypes_UINT32 = 15,
   TensorTypes_UINT16 = 16,
   TensorTypes_INT4 = 17,
+  TensorTypes_BFLOAT16 = 18,
   TensorTypes_MIN = TensorTypes_FLOAT32,
-  TensorTypes_MAX = TensorTypes_INT4
+  TensorTypes_MAX = TensorTypes_BFLOAT16
 };
 
-inline const TensorTypes (&EnumValuesTensorTypes())[18] {
+inline const TensorTypes (&EnumValuesTensorTypes())[19] {
   static const TensorTypes values[] = {
-      TensorTypes_FLOAT32, TensorTypes_FLOAT16,  TensorTypes_INT32,
-      TensorTypes_UINT8,   TensorTypes_INT64,    TensorTypes_STRING,
-      TensorTypes_BOOL,    TensorTypes_INT16,    TensorTypes_COMPLEX64,
-      TensorTypes_INT8,    TensorTypes_FLOAT64,  TensorTypes_COMPLEX128,
-      TensorTypes_UINT64,  TensorTypes_RESOURCE, TensorTypes_VARIANT,
-      TensorTypes_UINT32,  TensorTypes_UINT16,   TensorTypes_INT4};
+    TensorTypes_FLOAT32,
+    TensorTypes_FLOAT16,
+    TensorTypes_INT32,
+    TensorTypes_UINT8,
+    TensorTypes_INT64,
+    TensorTypes_STRING,
+    TensorTypes_BOOL,
+    TensorTypes_INT16,
+    TensorTypes_COMPLEX64,
+    TensorTypes_INT8,
+    TensorTypes_FLOAT64,
+    TensorTypes_COMPLEX128,
+    TensorTypes_UINT64,
+    TensorTypes_RESOURCE,
+    TensorTypes_VARIANT,
+    TensorTypes_UINT32,
+    TensorTypes_UINT16,
+    TensorTypes_INT4,
+    TensorTypes_BFLOAT16
+  };
   return values;
 }
 
-inline const char* const* EnumNamesTensorTypes() {
-  static const char* const names[19] = {
-      "FLOAT32", "FLOAT16",    "INT32",  "UINT8",     "INT64",
-      "STRING",  "BOOL",       "INT16",  "COMPLEX64", "INT8",
-      "FLOAT64", "COMPLEX128", "UINT64", "RESOURCE",  "VARIANT",
-      "UINT32",  "UINT16",     "INT4",   nullptr};
+inline const char * const *EnumNamesTensorTypes() {
+  static const char * const names[20] = {
+    "FLOAT32",
+    "FLOAT16",
+    "INT32",
+    "UINT8",
+    "INT64",
+    "STRING",
+    "BOOL",
+    "INT16",
+    "COMPLEX64",
+    "INT8",
+    "FLOAT64",
+    "COMPLEX128",
+    "UINT64",
+    "RESOURCE",
+    "VARIANT",
+    "UINT32",
+    "UINT16",
+    "INT4",
+    "BFLOAT16",
+    nullptr
+  };
   return names;
 }
 
-inline const char* EnumNameTensorTypes(TensorTypes e) {
-  if (::flatbuffers::IsOutRange(e, TensorTypes_FLOAT32, TensorTypes_INT4))
-    return "";
+inline const char *EnumNameTensorTypes(TensorTypes e) {
+  if (::flatbuffers::IsOutRange(e, TensorTypes_FLOAT32, TensorTypes_BFLOAT16)) return "";
   const size_t index = static_cast<size_t>(e);
   return EnumNamesTensorTypes()[index];
 }
@@ -111,47 +143,48 @@
     VT_NUM_BYTES = 14,
     VT_LAYER_NUMBER = 16
   };
-  uint32_t input_index() const { return GetField<uint32_t>(VT_INPUT_INDEX, 0); }
+  uint32_t input_index() const {
+    return GetField<uint32_t>(VT_INPUT_INDEX, 0);
+  }
   uint32_t tensor_index() const {
     return GetField<uint32_t>(VT_TENSOR_INDEX, 0);
   }
-  const ::flatbuffers::Vector<int32_t>* shape() const {
-    return GetPointer<const ::flatbuffers::Vector<int32_t>*>(VT_SHAPE);
+  const ::flatbuffers::Vector<int32_t> *shape() const {
+    return GetPointer<const ::flatbuffers::Vector<int32_t> *>(VT_SHAPE);
   }
   TensorTypes dtype() const {
     return static_cast<TensorTypes>(GetField<int8_t>(VT_DTYPE, 0));
   }
-  const ::flatbuffers::Vector<uint8_t>* data() const {
-    return GetPointer<const ::flatbuffers::Vector<uint8_t>*>(VT_DATA);
+  const ::flatbuffers::Vector<uint8_t> *data() const {
+    return GetPointer<const ::flatbuffers::Vector<uint8_t> *>(VT_DATA);
   }
-  uint32_t num_bytes() const { return GetField<uint32_t>(VT_NUM_BYTES, 0); }
+  uint32_t num_bytes() const {
+    return GetField<uint32_t>(VT_NUM_BYTES, 0);
+  }
   uint32_t layer_number() const {
     return GetField<uint32_t>(VT_LAYER_NUMBER, 0);
   }
-  bool Verify(::flatbuffers::Verifier& verifier) const {
+  bool Verify(::flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
            VerifyField<uint32_t>(verifier, VT_INPUT_INDEX, 4) &&
            VerifyField<uint32_t>(verifier, VT_TENSOR_INDEX, 4) &&
-           VerifyOffset(verifier, VT_SHAPE) && verifier.VerifyVector(shape()) &&
+           VerifyOffset(verifier, VT_SHAPE) &&
+           verifier.VerifyVector(shape()) &&
            VerifyField<int8_t>(verifier, VT_DTYPE, 1) &&
-           VerifyOffset(verifier, VT_DATA) && verifier.VerifyVector(data()) &&
+           VerifyOffset(verifier, VT_DATA) &&
+           verifier.VerifyVector(data()) &&
            VerifyField<uint32_t>(verifier, VT_NUM_BYTES, 4) &&
            VerifyField<uint32_t>(verifier, VT_LAYER_NUMBER, 4) &&
            verifier.EndTable();
   }
-  TensorDataT* UnPack(
-      const ::flatbuffers::resolver_function_t* _resolver = nullptr) const;
-  void UnPackTo(
-      TensorDataT* _o,
-      const ::flatbuffers::resolver_function_t* _resolver = nullptr) const;
-  static ::flatbuffers::Offset<TensorData> Pack(
-      ::flatbuffers::FlatBufferBuilder& _fbb, const TensorDataT* _o,
-      const ::flatbuffers::rehasher_function_t* _rehasher = nullptr);
+  TensorDataT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
+  void UnPackTo(TensorDataT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
+  static ::flatbuffers::Offset<TensorData> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const TensorDataT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
 };
 
 struct TensorDataBuilder {
   typedef TensorData Table;
-  ::flatbuffers::FlatBufferBuilder& fbb_;
+  ::flatbuffers::FlatBufferBuilder &fbb_;
   ::flatbuffers::uoffset_t start_;
   void add_input_index(uint32_t input_index) {
     fbb_.AddElement<uint32_t>(TensorData::VT_INPUT_INDEX, input_index, 0);
@@ -163,8 +196,7 @@
     fbb_.AddOffset(TensorData::VT_SHAPE, shape);
   }
   void add_dtype(TensorTypes dtype) {
-    fbb_.AddElement<int8_t>(TensorData::VT_DTYPE, static_cast<int8_t>(dtype),
-                            0);
+    fbb_.AddElement<int8_t>(TensorData::VT_DTYPE, static_cast<int8_t>(dtype), 0);
   }
   void add_data(::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> data) {
     fbb_.AddOffset(TensorData::VT_DATA, data);
@@ -175,8 +207,8 @@
   void add_layer_number(uint32_t layer_number) {
     fbb_.AddElement<uint32_t>(TensorData::VT_LAYER_NUMBER, layer_number, 0);
   }
-  explicit TensorDataBuilder(::flatbuffers::FlatBufferBuilder& _fbb)
-      : fbb_(_fbb) {
+  explicit TensorDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
+        : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   ::flatbuffers::Offset<TensorData> Finish() {
@@ -187,12 +219,14 @@
 };
 
 inline ::flatbuffers::Offset<TensorData> CreateTensorData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, uint32_t input_index = 0,
+    ::flatbuffers::FlatBufferBuilder &_fbb,
+    uint32_t input_index = 0,
     uint32_t tensor_index = 0,
     ::flatbuffers::Offset<::flatbuffers::Vector<int32_t>> shape = 0,
     TensorTypes dtype = TensorTypes_FLOAT32,
     ::flatbuffers::Offset<::flatbuffers::Vector<uint8_t>> data = 0,
-    uint32_t num_bytes = 0, uint32_t layer_number = 0) {
+    uint32_t num_bytes = 0,
+    uint32_t layer_number = 0) {
   TensorDataBuilder builder_(_fbb);
   builder_.add_layer_number(layer_number);
   builder_.add_num_bytes(num_bytes);
@@ -205,29 +239,37 @@
 }
 
 inline ::flatbuffers::Offset<TensorData> CreateTensorDataDirect(
-    ::flatbuffers::FlatBufferBuilder& _fbb, uint32_t input_index = 0,
-    uint32_t tensor_index = 0, const std::vector<int32_t>* shape = nullptr,
+    ::flatbuffers::FlatBufferBuilder &_fbb,
+    uint32_t input_index = 0,
+    uint32_t tensor_index = 0,
+    const std::vector<int32_t> *shape = nullptr,
     TensorTypes dtype = TensorTypes_FLOAT32,
-    const std::vector<uint8_t>* data = nullptr, uint32_t num_bytes = 0,
+    const std::vector<uint8_t> *data = nullptr,
+    uint32_t num_bytes = 0,
     uint32_t layer_number = 0) {
   auto shape__ = shape ? _fbb.CreateVector<int32_t>(*shape) : 0;
   auto data__ = data ? _fbb.CreateVector<uint8_t>(*data) : 0;
-  return CreateTensorData(_fbb, input_index, tensor_index, shape__, dtype,
-                          data__, num_bytes, layer_number);
+  return CreateTensorData(
+      _fbb,
+      input_index,
+      tensor_index,
+      shape__,
+      dtype,
+      data__,
+      num_bytes,
+      layer_number);
 }
 
-::flatbuffers::Offset<TensorData> CreateTensorData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const TensorDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher = nullptr);
+::flatbuffers::Offset<TensorData> CreateTensorData(::flatbuffers::FlatBufferBuilder &_fbb, const TensorDataT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
 
 struct SubgraphDataT : public ::flatbuffers::NativeTable {
   typedef SubgraphData TableType;
   std::vector<std::unique_ptr<TensorDataT>> outputs{};
   uint32_t subgraph_index = 0;
   SubgraphDataT() = default;
-  SubgraphDataT(const SubgraphDataT& o);
+  SubgraphDataT(const SubgraphDataT &o);
   SubgraphDataT(SubgraphDataT&&) FLATBUFFERS_NOEXCEPT = default;
-  SubgraphDataT& operator=(SubgraphDataT o) FLATBUFFERS_NOEXCEPT;
+  SubgraphDataT &operator=(SubgraphDataT o) FLATBUFFERS_NOEXCEPT;
 };
 
 struct SubgraphData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
@@ -237,47 +279,37 @@
     VT_OUTPUTS = 4,
     VT_SUBGRAPH_INDEX = 6
   };
-  const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>* outputs()
-      const {
-    return GetPointer<
-        const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>*>(
-        VT_OUTPUTS);
+  const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>> *outputs() const {
+    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>> *>(VT_OUTPUTS);
   }
   uint32_t subgraph_index() const {
     return GetField<uint32_t>(VT_SUBGRAPH_INDEX, 0);
   }
-  bool Verify(::flatbuffers::Verifier& verifier) const {
-    return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_OUTPUTS) &&
+  bool Verify(::flatbuffers::Verifier &verifier) const {
+    return VerifyTableStart(verifier) &&
+           VerifyOffset(verifier, VT_OUTPUTS) &&
            verifier.VerifyVector(outputs()) &&
            verifier.VerifyVectorOfTables(outputs()) &&
            VerifyField<uint32_t>(verifier, VT_SUBGRAPH_INDEX, 4) &&
            verifier.EndTable();
   }
-  SubgraphDataT* UnPack(
-      const ::flatbuffers::resolver_function_t* _resolver = nullptr) const;
-  void UnPackTo(
-      SubgraphDataT* _o,
-      const ::flatbuffers::resolver_function_t* _resolver = nullptr) const;
-  static ::flatbuffers::Offset<SubgraphData> Pack(
-      ::flatbuffers::FlatBufferBuilder& _fbb, const SubgraphDataT* _o,
-      const ::flatbuffers::rehasher_function_t* _rehasher = nullptr);
+  SubgraphDataT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
+  void UnPackTo(SubgraphDataT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
+  static ::flatbuffers::Offset<SubgraphData> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const SubgraphDataT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
 };
 
 struct SubgraphDataBuilder {
   typedef SubgraphData Table;
-  ::flatbuffers::FlatBufferBuilder& fbb_;
+  ::flatbuffers::FlatBufferBuilder &fbb_;
   ::flatbuffers::uoffset_t start_;
-  void add_outputs(::flatbuffers::Offset<
-                   ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>>
-                       outputs) {
+  void add_outputs(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>> outputs) {
     fbb_.AddOffset(SubgraphData::VT_OUTPUTS, outputs);
   }
   void add_subgraph_index(uint32_t subgraph_index) {
-    fbb_.AddElement<uint32_t>(SubgraphData::VT_SUBGRAPH_INDEX, subgraph_index,
-                              0);
+    fbb_.AddElement<uint32_t>(SubgraphData::VT_SUBGRAPH_INDEX, subgraph_index, 0);
   }
-  explicit SubgraphDataBuilder(::flatbuffers::FlatBufferBuilder& _fbb)
-      : fbb_(_fbb) {
+  explicit SubgraphDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
+        : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   ::flatbuffers::Offset<SubgraphData> Finish() {
@@ -288,10 +320,8 @@
 };
 
 inline ::flatbuffers::Offset<SubgraphData> CreateSubgraphData(
-    ::flatbuffers::FlatBufferBuilder& _fbb,
-    ::flatbuffers::Offset<
-        ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>>
-        outputs = 0,
+    ::flatbuffers::FlatBufferBuilder &_fbb,
+    ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>> outputs = 0,
     uint32_t subgraph_index = 0) {
   SubgraphDataBuilder builder_(_fbb);
   builder_.add_subgraph_index(subgraph_index);
@@ -300,27 +330,26 @@
 }
 
 inline ::flatbuffers::Offset<SubgraphData> CreateSubgraphDataDirect(
-    ::flatbuffers::FlatBufferBuilder& _fbb,
-    const std::vector<::flatbuffers::Offset<TensorData>>* outputs = nullptr,
+    ::flatbuffers::FlatBufferBuilder &_fbb,
+    const std::vector<::flatbuffers::Offset<TensorData>> *outputs = nullptr,
     uint32_t subgraph_index = 0) {
-  auto outputs__ =
-      outputs ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>>(*outputs)
-              : 0;
-  return CreateSubgraphData(_fbb, outputs__, subgraph_index);
+  auto outputs__ = outputs ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>>(*outputs) : 0;
+  return CreateSubgraphData(
+      _fbb,
+      outputs__,
+      subgraph_index);
 }
 
-::flatbuffers::Offset<SubgraphData> CreateSubgraphData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const SubgraphDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher = nullptr);
+::flatbuffers::Offset<SubgraphData> CreateSubgraphData(::flatbuffers::FlatBufferBuilder &_fbb, const SubgraphDataT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
 
 struct ModelTestDataT : public ::flatbuffers::NativeTable {
   typedef ModelTestData TableType;
   std::vector<std::unique_ptr<TensorDataT>> input_data{};
   std::vector<std::unique_ptr<SubgraphDataT>> subgraph_data{};
   ModelTestDataT() = default;
-  ModelTestDataT(const ModelTestDataT& o);
+  ModelTestDataT(const ModelTestDataT &o);
   ModelTestDataT(ModelTestDataT&&) FLATBUFFERS_NOEXCEPT = default;
-  ModelTestDataT& operator=(ModelTestDataT o) FLATBUFFERS_NOEXCEPT;
+  ModelTestDataT &operator=(ModelTestDataT o) FLATBUFFERS_NOEXCEPT;
 };
 
 struct ModelTestData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
@@ -330,19 +359,13 @@
     VT_INPUT_DATA = 4,
     VT_SUBGRAPH_DATA = 6
   };
-  const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>* input_data()
-      const {
-    return GetPointer<
-        const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>*>(
-        VT_INPUT_DATA);
+  const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>> *input_data() const {
+    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>> *>(VT_INPUT_DATA);
   }
-  const ::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>>*
-  subgraph_data() const {
-    return GetPointer<
-        const ::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>>*>(
-        VT_SUBGRAPH_DATA);
+  const ::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>> *subgraph_data() const {
+    return GetPointer<const ::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>> *>(VT_SUBGRAPH_DATA);
   }
-  bool Verify(::flatbuffers::Verifier& verifier) const {
+  bool Verify(::flatbuffers::Verifier &verifier) const {
     return VerifyTableStart(verifier) &&
            VerifyOffset(verifier, VT_INPUT_DATA) &&
            verifier.VerifyVector(input_data()) &&
@@ -352,33 +375,23 @@
            verifier.VerifyVectorOfTables(subgraph_data()) &&
            verifier.EndTable();
   }
-  ModelTestDataT* UnPack(
-      const ::flatbuffers::resolver_function_t* _resolver = nullptr) const;
-  void UnPackTo(
-      ModelTestDataT* _o,
-      const ::flatbuffers::resolver_function_t* _resolver = nullptr) const;
-  static ::flatbuffers::Offset<ModelTestData> Pack(
-      ::flatbuffers::FlatBufferBuilder& _fbb, const ModelTestDataT* _o,
-      const ::flatbuffers::rehasher_function_t* _rehasher = nullptr);
+  ModelTestDataT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
+  void UnPackTo(ModelTestDataT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
+  static ::flatbuffers::Offset<ModelTestData> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const ModelTestDataT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
 };
 
 struct ModelTestDataBuilder {
   typedef ModelTestData Table;
-  ::flatbuffers::FlatBufferBuilder& fbb_;
+  ::flatbuffers::FlatBufferBuilder &fbb_;
   ::flatbuffers::uoffset_t start_;
-  void add_input_data(::flatbuffers::Offset<
-                      ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>>
-                          input_data) {
+  void add_input_data(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>> input_data) {
     fbb_.AddOffset(ModelTestData::VT_INPUT_DATA, input_data);
   }
-  void add_subgraph_data(
-      ::flatbuffers::Offset<
-          ::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>>>
-          subgraph_data) {
+  void add_subgraph_data(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>>> subgraph_data) {
     fbb_.AddOffset(ModelTestData::VT_SUBGRAPH_DATA, subgraph_data);
   }
-  explicit ModelTestDataBuilder(::flatbuffers::FlatBufferBuilder& _fbb)
-      : fbb_(_fbb) {
+  explicit ModelTestDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
+        : fbb_(_fbb) {
     start_ = fbb_.StartTable();
   }
   ::flatbuffers::Offset<ModelTestData> Finish() {
@@ -389,13 +402,9 @@
 };
 
 inline ::flatbuffers::Offset<ModelTestData> CreateModelTestData(
-    ::flatbuffers::FlatBufferBuilder& _fbb,
-    ::flatbuffers::Offset<
-        ::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>>
-        input_data = 0,
-    ::flatbuffers::Offset<
-        ::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>>>
-        subgraph_data = 0) {
+    ::flatbuffers::FlatBufferBuilder &_fbb,
+    ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<TensorData>>> input_data = 0,
+    ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<SubgraphData>>> subgraph_data = 0) {
   ModelTestDataBuilder builder_(_fbb);
   builder_.add_subgraph_data(subgraph_data);
   builder_.add_input_data(input_data);
@@ -403,94 +412,45 @@
 }
 
 inline ::flatbuffers::Offset<ModelTestData> CreateModelTestDataDirect(
-    ::flatbuffers::FlatBufferBuilder& _fbb,
-    const std::vector<::flatbuffers::Offset<TensorData>>* input_data = nullptr,
-    const std::vector<::flatbuffers::Offset<SubgraphData>>* subgraph_data =
-        nullptr) {
-  auto input_data__ =
-      input_data
-          ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>>(*input_data)
-          : 0;
-  auto subgraph_data__ =
-      subgraph_data ? _fbb.CreateVector<::flatbuffers::Offset<SubgraphData>>(
-                          *subgraph_data)
-                    : 0;
-  return CreateModelTestData(_fbb, input_data__, subgraph_data__);
+    ::flatbuffers::FlatBufferBuilder &_fbb,
+    const std::vector<::flatbuffers::Offset<TensorData>> *input_data = nullptr,
+    const std::vector<::flatbuffers::Offset<SubgraphData>> *subgraph_data = nullptr) {
+  auto input_data__ = input_data ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>>(*input_data) : 0;
+  auto subgraph_data__ = subgraph_data ? _fbb.CreateVector<::flatbuffers::Offset<SubgraphData>>(*subgraph_data) : 0;
+  return CreateModelTestData(
+      _fbb,
+      input_data__,
+      subgraph_data__);
 }
 
-::flatbuffers::Offset<ModelTestData> CreateModelTestData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const ModelTestDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher = nullptr);
+::flatbuffers::Offset<ModelTestData> CreateModelTestData(::flatbuffers::FlatBufferBuilder &_fbb, const ModelTestDataT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
 
-inline TensorDataT* TensorData::UnPack(
-    const ::flatbuffers::resolver_function_t* _resolver) const {
+inline TensorDataT *TensorData::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
   auto _o = std::unique_ptr<TensorDataT>(new TensorDataT());
   UnPackTo(_o.get(), _resolver);
   return _o.release();
 }
 
-inline void TensorData::UnPackTo(
-    TensorDataT* _o,
-    const ::flatbuffers::resolver_function_t* _resolver) const {
+inline void TensorData::UnPackTo(TensorDataT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
   (void)_o;
   (void)_resolver;
-  {
-    auto _e = input_index();
-    _o->input_index = _e;
-  }
-  {
-    auto _e = tensor_index();
-    _o->tensor_index = _e;
-  }
-  {
-    auto _e = shape();
-    if (_e) {
-      _o->shape.resize(_e->size());
-      for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) {
-        _o->shape[_i] = _e->Get(_i);
-      }
-    } else {
-      _o->shape.resize(0);
-    }
-  }
-  {
-    auto _e = dtype();
-    _o->dtype = _e;
-  }
-  {
-    auto _e = data();
-    if (_e) {
-      _o->data.resize(_e->size());
-      std::copy(_e->begin(), _e->end(), _o->data.begin());
-    }
-  }
-  {
-    auto _e = num_bytes();
-    _o->num_bytes = _e;
-  }
-  {
-    auto _e = layer_number();
-    _o->layer_number = _e;
-  }
+  { auto _e = input_index(); _o->input_index = _e; }
+  { auto _e = tensor_index(); _o->tensor_index = _e; }
+  { auto _e = shape(); if (_e) { _o->shape.resize(_e->size()); for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->shape[_i] = _e->Get(_i); } } else { _o->shape.resize(0); } }
+  { auto _e = dtype(); _o->dtype = _e; }
+  { auto _e = data(); if (_e) { _o->data.resize(_e->size()); std::copy(_e->begin(), _e->end(), _o->data.begin()); } }
+  { auto _e = num_bytes(); _o->num_bytes = _e; }
+  { auto _e = layer_number(); _o->layer_number = _e; }
 }
 
-inline ::flatbuffers::Offset<TensorData> TensorData::Pack(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const TensorDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher) {
+inline ::flatbuffers::Offset<TensorData> TensorData::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const TensorDataT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
   return CreateTensorData(_fbb, _o, _rehasher);
 }
 
-inline ::flatbuffers::Offset<TensorData> CreateTensorData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const TensorDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher) {
+inline ::flatbuffers::Offset<TensorData> CreateTensorData(::flatbuffers::FlatBufferBuilder &_fbb, const TensorDataT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
   (void)_rehasher;
   (void)_o;
-  struct _VectorArgs {
-    ::flatbuffers::FlatBufferBuilder* __fbb;
-    const TensorDataT* __o;
-    const ::flatbuffers::rehasher_function_t* __rehasher;
-  } _va = {&_fbb, _o, _rehasher};
-  (void)_va;
+  struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const TensorDataT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
   auto _input_index = _o->input_index;
   auto _tensor_index = _o->tensor_index;
   auto _shape = _o->shape.size() ? _fbb.CreateVector(_o->shape) : 0;
@@ -498,236 +458,140 @@
   auto _data = _o->data.size() ? _fbb.CreateVector(_o->data) : 0;
   auto _num_bytes = _o->num_bytes;
   auto _layer_number = _o->layer_number;
-  return CreateTensorData(_fbb, _input_index, _tensor_index, _shape, _dtype,
-                          _data, _num_bytes, _layer_number);
+  return CreateTensorData(
+      _fbb,
+      _input_index,
+      _tensor_index,
+      _shape,
+      _dtype,
+      _data,
+      _num_bytes,
+      _layer_number);
 }
 
-inline SubgraphDataT::SubgraphDataT(const SubgraphDataT& o)
-    : subgraph_index(o.subgraph_index) {
+inline SubgraphDataT::SubgraphDataT(const SubgraphDataT &o)
+      : subgraph_index(o.subgraph_index) {
   outputs.reserve(o.outputs.size());
-  for (const auto& outputs_ : o.outputs) {
-    outputs.emplace_back((outputs_) ? new TensorDataT(*outputs_) : nullptr);
-  }
+  for (const auto &outputs_ : o.outputs) { outputs.emplace_back((outputs_) ? new TensorDataT(*outputs_) : nullptr); }
 }
 
-inline SubgraphDataT& SubgraphDataT::operator=(SubgraphDataT o)
-    FLATBUFFERS_NOEXCEPT {
+inline SubgraphDataT &SubgraphDataT::operator=(SubgraphDataT o) FLATBUFFERS_NOEXCEPT {
   std::swap(outputs, o.outputs);
   std::swap(subgraph_index, o.subgraph_index);
   return *this;
 }
 
-inline SubgraphDataT* SubgraphData::UnPack(
-    const ::flatbuffers::resolver_function_t* _resolver) const {
+inline SubgraphDataT *SubgraphData::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
   auto _o = std::unique_ptr<SubgraphDataT>(new SubgraphDataT());
   UnPackTo(_o.get(), _resolver);
   return _o.release();
 }
 
-inline void SubgraphData::UnPackTo(
-    SubgraphDataT* _o,
-    const ::flatbuffers::resolver_function_t* _resolver) const {
+inline void SubgraphData::UnPackTo(SubgraphDataT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
   (void)_o;
   (void)_resolver;
-  {
-    auto _e = outputs();
-    if (_e) {
-      _o->outputs.resize(_e->size());
-      for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) {
-        if (_o->outputs[_i]) {
-          _e->Get(_i)->UnPackTo(_o->outputs[_i].get(), _resolver);
-        } else {
-          _o->outputs[_i] =
-              std::unique_ptr<TensorDataT>(_e->Get(_i)->UnPack(_resolver));
-        };
-      }
-    } else {
-      _o->outputs.resize(0);
-    }
-  }
-  {
-    auto _e = subgraph_index();
-    _o->subgraph_index = _e;
-  }
+  { auto _e = outputs(); if (_e) { _o->outputs.resize(_e->size()); for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { if(_o->outputs[_i]) { _e->Get(_i)->UnPackTo(_o->outputs[_i].get(), _resolver); } else { _o->outputs[_i] = std::unique_ptr<TensorDataT>(_e->Get(_i)->UnPack(_resolver)); }; } } else { _o->outputs.resize(0); } }
+  { auto _e = subgraph_index(); _o->subgraph_index = _e; }
 }
 
-inline ::flatbuffers::Offset<SubgraphData> SubgraphData::Pack(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const SubgraphDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher) {
+inline ::flatbuffers::Offset<SubgraphData> SubgraphData::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const SubgraphDataT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
   return CreateSubgraphData(_fbb, _o, _rehasher);
 }
 
-inline ::flatbuffers::Offset<SubgraphData> CreateSubgraphData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const SubgraphDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher) {
+inline ::flatbuffers::Offset<SubgraphData> CreateSubgraphData(::flatbuffers::FlatBufferBuilder &_fbb, const SubgraphDataT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
   (void)_rehasher;
   (void)_o;
-  struct _VectorArgs {
-    ::flatbuffers::FlatBufferBuilder* __fbb;
-    const SubgraphDataT* __o;
-    const ::flatbuffers::rehasher_function_t* __rehasher;
-  } _va = {&_fbb, _o, _rehasher};
-  (void)_va;
-  auto _outputs = _o->outputs.size()
-                      ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>>(
-                            _o->outputs.size(),
-                            [](size_t i, _VectorArgs* __va) {
-                              return CreateTensorData(
-                                  *__va->__fbb, __va->__o->outputs[i].get(),
-                                  __va->__rehasher);
-                            },
-                            &_va)
-                      : 0;
+  struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const SubgraphDataT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
+  auto _outputs = _o->outputs.size() ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>> (_o->outputs.size(), [](size_t i, _VectorArgs *__va) { return CreateTensorData(*__va->__fbb, __va->__o->outputs[i].get(), __va->__rehasher); }, &_va ) : 0;
   auto _subgraph_index = _o->subgraph_index;
-  return CreateSubgraphData(_fbb, _outputs, _subgraph_index);
+  return CreateSubgraphData(
+      _fbb,
+      _outputs,
+      _subgraph_index);
 }
 
-inline ModelTestDataT::ModelTestDataT(const ModelTestDataT& o) {
+inline ModelTestDataT::ModelTestDataT(const ModelTestDataT &o) {
   input_data.reserve(o.input_data.size());
-  for (const auto& input_data_ : o.input_data) {
-    input_data.emplace_back((input_data_) ? new TensorDataT(*input_data_)
-                                          : nullptr);
-  }
+  for (const auto &input_data_ : o.input_data) { input_data.emplace_back((input_data_) ? new TensorDataT(*input_data_) : nullptr); }
   subgraph_data.reserve(o.subgraph_data.size());
-  for (const auto& subgraph_data_ : o.subgraph_data) {
-    subgraph_data.emplace_back(
-        (subgraph_data_) ? new SubgraphDataT(*subgraph_data_) : nullptr);
-  }
+  for (const auto &subgraph_data_ : o.subgraph_data) { subgraph_data.emplace_back((subgraph_data_) ? new SubgraphDataT(*subgraph_data_) : nullptr); }
 }
 
-inline ModelTestDataT& ModelTestDataT::operator=(ModelTestDataT o)
-    FLATBUFFERS_NOEXCEPT {
+inline ModelTestDataT &ModelTestDataT::operator=(ModelTestDataT o) FLATBUFFERS_NOEXCEPT {
   std::swap(input_data, o.input_data);
   std::swap(subgraph_data, o.subgraph_data);
   return *this;
 }
 
-inline ModelTestDataT* ModelTestData::UnPack(
-    const ::flatbuffers::resolver_function_t* _resolver) const {
+inline ModelTestDataT *ModelTestData::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
   auto _o = std::unique_ptr<ModelTestDataT>(new ModelTestDataT());
   UnPackTo(_o.get(), _resolver);
   return _o.release();
 }
 
-inline void ModelTestData::UnPackTo(
-    ModelTestDataT* _o,
-    const ::flatbuffers::resolver_function_t* _resolver) const {
+inline void ModelTestData::UnPackTo(ModelTestDataT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
   (void)_o;
   (void)_resolver;
-  {
-    auto _e = input_data();
-    if (_e) {
-      _o->input_data.resize(_e->size());
-      for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) {
-        if (_o->input_data[_i]) {
-          _e->Get(_i)->UnPackTo(_o->input_data[_i].get(), _resolver);
-        } else {
-          _o->input_data[_i] =
-              std::unique_ptr<TensorDataT>(_e->Get(_i)->UnPack(_resolver));
-        };
-      }
-    } else {
-      _o->input_data.resize(0);
-    }
-  }
-  {
-    auto _e = subgraph_data();
-    if (_e) {
-      _o->subgraph_data.resize(_e->size());
-      for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) {
-        if (_o->subgraph_data[_i]) {
-          _e->Get(_i)->UnPackTo(_o->subgraph_data[_i].get(), _resolver);
-        } else {
-          _o->subgraph_data[_i] =
-              std::unique_ptr<SubgraphDataT>(_e->Get(_i)->UnPack(_resolver));
-        };
-      }
-    } else {
-      _o->subgraph_data.resize(0);
-    }
-  }
+  { auto _e = input_data(); if (_e) { _o->input_data.resize(_e->size()); for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { if(_o->input_data[_i]) { _e->Get(_i)->UnPackTo(_o->input_data[_i].get(), _resolver); } else { _o->input_data[_i] = std::unique_ptr<TensorDataT>(_e->Get(_i)->UnPack(_resolver)); }; } } else { _o->input_data.resize(0); } }
+  { auto _e = subgraph_data(); if (_e) { _o->subgraph_data.resize(_e->size()); for (::flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { if(_o->subgraph_data[_i]) { _e->Get(_i)->UnPackTo(_o->subgraph_data[_i].get(), _resolver); } else { _o->subgraph_data[_i] = std::unique_ptr<SubgraphDataT>(_e->Get(_i)->UnPack(_resolver)); }; } } else { _o->subgraph_data.resize(0); } }
 }
 
-inline ::flatbuffers::Offset<ModelTestData> ModelTestData::Pack(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const ModelTestDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher) {
+inline ::flatbuffers::Offset<ModelTestData> ModelTestData::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const ModelTestDataT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
   return CreateModelTestData(_fbb, _o, _rehasher);
 }
 
-inline ::flatbuffers::Offset<ModelTestData> CreateModelTestData(
-    ::flatbuffers::FlatBufferBuilder& _fbb, const ModelTestDataT* _o,
-    const ::flatbuffers::rehasher_function_t* _rehasher) {
+inline ::flatbuffers::Offset<ModelTestData> CreateModelTestData(::flatbuffers::FlatBufferBuilder &_fbb, const ModelTestDataT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
   (void)_rehasher;
   (void)_o;
-  struct _VectorArgs {
-    ::flatbuffers::FlatBufferBuilder* __fbb;
-    const ModelTestDataT* __o;
-    const ::flatbuffers::rehasher_function_t* __rehasher;
-  } _va = {&_fbb, _o, _rehasher};
-  (void)_va;
-  auto _input_data =
-      _o->input_data.size()
-          ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>>(
-                _o->input_data.size(),
-                [](size_t i, _VectorArgs* __va) {
-                  return CreateTensorData(*__va->__fbb,
-                                          __va->__o->input_data[i].get(),
-                                          __va->__rehasher);
-                },
-                &_va)
-          : 0;
-  auto _subgraph_data =
-      _o->subgraph_data.size()
-          ? _fbb.CreateVector<::flatbuffers::Offset<SubgraphData>>(
-                _o->subgraph_data.size(),
-                [](size_t i, _VectorArgs* __va) {
-                  return CreateSubgraphData(*__va->__fbb,
-                                            __va->__o->subgraph_data[i].get(),
-                                            __va->__rehasher);
-                },
-                &_va)
-          : 0;
-  return CreateModelTestData(_fbb, _input_data, _subgraph_data);
+  struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const ModelTestDataT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
+  auto _input_data = _o->input_data.size() ? _fbb.CreateVector<::flatbuffers::Offset<TensorData>> (_o->input_data.size(), [](size_t i, _VectorArgs *__va) { return CreateTensorData(*__va->__fbb, __va->__o->input_data[i].get(), __va->__rehasher); }, &_va ) : 0;
+  auto _subgraph_data = _o->subgraph_data.size() ? _fbb.CreateVector<::flatbuffers::Offset<SubgraphData>> (_o->subgraph_data.size(), [](size_t i, _VectorArgs *__va) { return CreateSubgraphData(*__va->__fbb, __va->__o->subgraph_data[i].get(), __va->__rehasher); }, &_va ) : 0;
+  return CreateModelTestData(
+      _fbb,
+      _input_data,
+      _subgraph_data);
 }
 
-inline const ModelTestData* GetModelTestData(const void* buf) {
+inline const ModelTestData *GetModelTestData(const void *buf) {
   return ::flatbuffers::GetRoot<ModelTestData>(buf);
 }
 
-inline const ModelTestData* GetSizePrefixedModelTestData(const void* buf) {
+inline const ModelTestData *GetSizePrefixedModelTestData(const void *buf) {
   return ::flatbuffers::GetSizePrefixedRoot<ModelTestData>(buf);
 }
 
-inline bool VerifyModelTestDataBuffer(::flatbuffers::Verifier& verifier) {
+inline bool VerifyModelTestDataBuffer(
+    ::flatbuffers::Verifier &verifier) {
   return verifier.VerifyBuffer<ModelTestData>(nullptr);
 }
 
 inline bool VerifySizePrefixedModelTestDataBuffer(
-    ::flatbuffers::Verifier& verifier) {
+    ::flatbuffers::Verifier &verifier) {
   return verifier.VerifySizePrefixedBuffer<ModelTestData>(nullptr);
 }
 
 inline void FinishModelTestDataBuffer(
-    ::flatbuffers::FlatBufferBuilder& fbb,
+    ::flatbuffers::FlatBufferBuilder &fbb,
     ::flatbuffers::Offset<ModelTestData> root) {
   fbb.Finish(root);
 }
 
 inline void FinishSizePrefixedModelTestDataBuffer(
-    ::flatbuffers::FlatBufferBuilder& fbb,
+    ::flatbuffers::FlatBufferBuilder &fbb,
     ::flatbuffers::Offset<ModelTestData> root) {
   fbb.FinishSizePrefixed(root);
 }
 
 inline std::unique_ptr<ModelTestDataT> UnPackModelTestData(
-    const void* buf, const ::flatbuffers::resolver_function_t* res = nullptr) {
+    const void *buf,
+    const ::flatbuffers::resolver_function_t *res = nullptr) {
   return std::unique_ptr<ModelTestDataT>(GetModelTestData(buf)->UnPack(res));
 }
 
 inline std::unique_ptr<ModelTestDataT> UnPackSizePrefixedModelTestData(
-    const void* buf, const ::flatbuffers::resolver_function_t* res = nullptr) {
-  return std::unique_ptr<ModelTestDataT>(
-      GetSizePrefixedModelTestData(buf)->UnPack(res));
+    const void *buf,
+    const ::flatbuffers::resolver_function_t *res = nullptr) {
+  return std::unique_ptr<ModelTestDataT>(GetSizePrefixedModelTestData(buf)->UnPack(res));
 }
 
 #endif  // FLATBUFFERS_GENERATED_LAYERBYLAYERSCHEMA_H_
diff --git a/tensorflow/lite/python/schema_py_generated.py b/tensorflow/lite/python/schema_py_generated.py
index 994ab39..e3a26ed 100755
--- a/tensorflow/lite/python/schema_py_generated.py
+++ b/tensorflow/lite/python/schema_py_generated.py
@@ -26,6 +26,7 @@
     UINT32 = 15
     UINT16 = 16
     INT4 = 17
+    BFLOAT16 = 18
 
 
 class QuantizationDetails(object):
diff --git a/tensorflow/lite/schema/schema.fbs b/tensorflow/lite/schema/schema.fbs
index 382462f..fe9ee4c 100644
--- a/tensorflow/lite/schema/schema.fbs
+++ b/tensorflow/lite/schema/schema.fbs
@@ -58,6 +58,7 @@
   UINT32 = 15,
   UINT16 = 16,
   INT4 = 17,
+  BFLOAT16 = 18,
 }
 
 // Custom quantization parameters for experimenting with new quantization
diff --git a/tensorflow/lite/schema/schema_generated.h b/tensorflow/lite/schema/schema_generated.h
index 758e6ee..a420de0 100755
--- a/tensorflow/lite/schema/schema_generated.h
+++ b/tensorflow/lite/schema/schema_generated.h
@@ -686,11 +686,12 @@
   TensorType_UINT32 = 15,
   TensorType_UINT16 = 16,
   TensorType_INT4 = 17,
+  TensorType_BFLOAT16 = 18,
   TensorType_MIN = TensorType_FLOAT32,
-  TensorType_MAX = TensorType_INT4
+  TensorType_MAX = TensorType_BFLOAT16
 };
 
-inline const TensorType (&EnumValuesTensorType())[18] {
+inline const TensorType (&EnumValuesTensorType())[19] {
   static const TensorType values[] = {
     TensorType_FLOAT32,
     TensorType_FLOAT16,
@@ -709,13 +710,14 @@
     TensorType_VARIANT,
     TensorType_UINT32,
     TensorType_UINT16,
-    TensorType_INT4
+    TensorType_INT4,
+    TensorType_BFLOAT16
   };
   return values;
 }
 
 inline const char * const *EnumNamesTensorType() {
-  static const char * const names[19] = {
+  static const char * const names[20] = {
     "FLOAT32",
     "FLOAT16",
     "INT32",
@@ -734,13 +736,14 @@
     "UINT32",
     "UINT16",
     "INT4",
+    "BFLOAT16",
     nullptr
   };
   return names;
 }
 
 inline const char *EnumNameTensorType(TensorType e) {
-  if (::flatbuffers::IsOutRange(e, TensorType_FLOAT32, TensorType_INT4)) return "";
+  if (::flatbuffers::IsOutRange(e, TensorType_FLOAT32, TensorType_BFLOAT16)) return "";
   const size_t index = static_cast<size_t>(e);
   return EnumNamesTensorType()[index];
 }