// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: onnx-ml.proto3

package ai.onnxruntime;

public final class OnnxMl {
  private OnnxMl() {}

  public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {}

  public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   *
   *
   * <pre>
   * Versioning
   * ONNX versioning is specified in docs/IR.md and elaborated on in docs/Versioning.md
   * To be compatible with both proto2 and proto3, we will use a version number
   * that is not defined by the default value but an explicit enum number.
   * </pre>
   *
   * Protobuf enum {@code onnx.Version}
   */
  public enum Version implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     *
     * <pre>
     * proto3 requires the first enum value to be zero.
     * We add this just to appease the compiler.
     * </pre>
     *
     * <code>_START_VERSION = 0;</code>
     */
    _START_VERSION(0),
    /**
     *
     *
     * <pre>
     * The version field is always serialized and we will use it to store the
     * version that the  graph is generated from. This helps us set up version
     * control.
     * For the IR, we are using simple numbers starting with with 0x00000001,
     * which was the version we published on Oct 10, 2017.
     * </pre>
     *
     * <code>IR_VERSION_2017_10_10 = 1;</code>
     */
    IR_VERSION_2017_10_10(1),
    /**
     *
     *
     * <pre>
     * IR_VERSION 2 published on Oct 30, 2017
     * - Added type discriminator to AttributeProto to support proto3 users
     * </pre>
     *
     * <code>IR_VERSION_2017_10_30 = 2;</code>
     */
    IR_VERSION_2017_10_30(2),
    /**
     *
     *
     * <pre>
     * IR VERSION 3 published on Nov 3, 2017
     * - For operator versioning:
     *    - Added new message OperatorSetIdProto
     *    - Added opset_import in ModelProto
     * - For vendor extensions, added domain in NodeProto
     * </pre>
     *
     * <code>IR_VERSION_2017_11_3 = 3;</code>
     */
    IR_VERSION_2017_11_3(3),
    /**
     *
     *
     * <pre>
     * IR VERSION 4 published on Jan 22, 2019
     * - Relax constraint that initializers should be a subset of graph inputs
     * - Add type BFLOAT16
     * </pre>
     *
     * <code>IR_VERSION_2019_1_22 = 4;</code>
     */
    IR_VERSION_2019_1_22(4),
    /**
     *
     *
     * <pre>
     * IR VERSION 5 published on March 18, 2019
     * - Add message TensorAnnotation.
     * - Add quantization annotation in GraphProto to map tensor with its scale and zero point quantization parameters.
     * </pre>
     *
     * <code>IR_VERSION_2019_3_18 = 5;</code>
     */
    IR_VERSION_2019_3_18(5),
    /**
     *
     *
     * <pre>
     * IR VERSION 6 published on Sep 19, 2019
     * - Add support for sparse tensor constants stored in model.
     *   - Add message SparseTensorProto
     *   - Add sparse initializers
     * </pre>
     *
     * <code>IR_VERSION = 6;</code>
     */
    IR_VERSION(6),
    UNRECOGNIZED(-1),
    ;

    /**
     *
     *
     * <pre>
     * proto3 requires the first enum value to be zero.
     * We add this just to appease the compiler.
     * </pre>
     *
     * <code>_START_VERSION = 0;</code>
     */
    public static final int _START_VERSION_VALUE = 0;
    /**
     *
     *
     * <pre>
     * The version field is always serialized and we will use it to store the
     * version that the  graph is generated from. This helps us set up version
     * control.
     * For the IR, we are using simple numbers starting with with 0x00000001,
     * which was the version we published on Oct 10, 2017.
     * </pre>
     *
     * <code>IR_VERSION_2017_10_10 = 1;</code>
     */
    public static final int IR_VERSION_2017_10_10_VALUE = 1;
    /**
     *
     *
     * <pre>
     * IR_VERSION 2 published on Oct 30, 2017
     * - Added type discriminator to AttributeProto to support proto3 users
     * </pre>
     *
     * <code>IR_VERSION_2017_10_30 = 2;</code>
     */
    public static final int IR_VERSION_2017_10_30_VALUE = 2;
    /**
     *
     *
     * <pre>
     * IR VERSION 3 published on Nov 3, 2017
     * - For operator versioning:
     *    - Added new message OperatorSetIdProto
     *    - Added opset_import in ModelProto
     * - For vendor extensions, added domain in NodeProto
     * </pre>
     *
     * <code>IR_VERSION_2017_11_3 = 3;</code>
     */
    public static final int IR_VERSION_2017_11_3_VALUE = 3;
    /**
     *
     *
     * <pre>
     * IR VERSION 4 published on Jan 22, 2019
     * - Relax constraint that initializers should be a subset of graph inputs
     * - Add type BFLOAT16
     * </pre>
     *
     * <code>IR_VERSION_2019_1_22 = 4;</code>
     */
    public static final int IR_VERSION_2019_1_22_VALUE = 4;
    /**
     *
     *
     * <pre>
     * IR VERSION 5 published on March 18, 2019
     * - Add message TensorAnnotation.
     * - Add quantization annotation in GraphProto to map tensor with its scale and zero point quantization parameters.
     * </pre>
     *
     * <code>IR_VERSION_2019_3_18 = 5;</code>
     */
    public static final int IR_VERSION_2019_3_18_VALUE = 5;
    /**
     *
     *
     * <pre>
     * IR VERSION 6 published on Sep 19, 2019
     * - Add support for sparse tensor constants stored in model.
     *   - Add message SparseTensorProto
     *   - Add sparse initializers
     * </pre>
     *
     * <code>IR_VERSION = 6;</code>
     */
    public static final int IR_VERSION_VALUE = 6;

    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /** @deprecated Use {@link #forNumber(int)} instead. */
    @java.lang.Deprecated
    public static Version valueOf(int value) {
      return forNumber(value);
    }

    public static Version forNumber(int value) {
      switch (value) {
        case 0:
          return _START_VERSION;
        case 1:
          return IR_VERSION_2017_10_10;
        case 2:
          return IR_VERSION_2017_10_30;
        case 3:
          return IR_VERSION_2017_11_3;
        case 4:
          return IR_VERSION_2019_1_22;
        case 5:
          return IR_VERSION_2019_3_18;
        case 6:
          return IR_VERSION;
        default:
          return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Version> internalGetValueMap() {
      return internalValueMap;
    }

    private static final com.google.protobuf.Internal.EnumLiteMap<Version> internalValueMap =
        new com.google.protobuf.Internal.EnumLiteMap<Version>() {
          public Version findValueByNumber(int number) {
            return Version.forNumber(number);
          }
        };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }

    public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
      return getDescriptor();
    }

    public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
      return OnnxMl.getDescriptor().getEnumTypes().get(0);
    }

    private static final Version[] VALUES = values();

    public static Version valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private Version(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:onnx.Version)
  }

  /**
   *
   *
   * <pre>
   * Operator/function status.
   * </pre>
   *
   * Protobuf enum {@code onnx.OperatorStatus}
   */
  public enum OperatorStatus implements com.google.protobuf.ProtocolMessageEnum {
    /** <code>EXPERIMENTAL = 0;</code> */
    EXPERIMENTAL(0),
    /** <code>STABLE = 1;</code> */
    STABLE(1),
    UNRECOGNIZED(-1),
    ;

    /** <code>EXPERIMENTAL = 0;</code> */
    public static final int EXPERIMENTAL_VALUE = 0;
    /** <code>STABLE = 1;</code> */
    public static final int STABLE_VALUE = 1;

    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /** @deprecated Use {@link #forNumber(int)} instead. */
    @java.lang.Deprecated
    public static OperatorStatus valueOf(int value) {
      return forNumber(value);
    }

    public static OperatorStatus forNumber(int value) {
      switch (value) {
        case 0:
          return EXPERIMENTAL;
        case 1:
          return STABLE;
        default:
          return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<OperatorStatus> internalGetValueMap() {
      return internalValueMap;
    }

    private static final com.google.protobuf.Internal.EnumLiteMap<OperatorStatus> internalValueMap =
        new com.google.protobuf.Internal.EnumLiteMap<OperatorStatus>() {
          public OperatorStatus findValueByNumber(int number) {
            return OperatorStatus.forNumber(number);
          }
        };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }

    public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
      return getDescriptor();
    }

    public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
      return OnnxMl.getDescriptor().getEnumTypes().get(1);
    }

    private static final OperatorStatus[] VALUES = values();

    public static OperatorStatus valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private OperatorStatus(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:onnx.OperatorStatus)
  }

  public interface AttributeProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.AttributeProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The name field MUST be present for this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    java.lang.String getName();
    /**
     *
     *
     * <pre>
     * The name field MUST be present for this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    com.google.protobuf.ByteString getNameBytes();

    /**
     *
     *
     * <pre>
     * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
     * In this case, this AttributeProto does not contain data, and it's a reference of attribute
     * in parent scope.
     * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
     * </pre>
     *
     * <code>string ref_attr_name = 21;</code>
     */
    java.lang.String getRefAttrName();
    /**
     *
     *
     * <pre>
     * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
     * In this case, this AttributeProto does not contain data, and it's a reference of attribute
     * in parent scope.
     * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
     * </pre>
     *
     * <code>string ref_attr_name = 21;</code>
     */
    com.google.protobuf.ByteString getRefAttrNameBytes();

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this attribute. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 13;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this attribute. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 13;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();

    /**
     *
     *
     * <pre>
     * The type field MUST be present for this version of the IR.
     * For 0.0.1 versions of the IR, this field was not defined, and
     * implementations needed to use has_field heuristics to determine
     * which value field was in use.  For IR_VERSION 0.0.2 or later, this
     * field MUST be set and match the f|i|s|t|... field in use.  This
     * change was made to accommodate proto3 implementations.
     * </pre>
     *
     * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
     */
    int getTypeValue();
    /**
     *
     *
     * <pre>
     * The type field MUST be present for this version of the IR.
     * For 0.0.1 versions of the IR, this field was not defined, and
     * implementations needed to use has_field heuristics to determine
     * which value field was in use.  For IR_VERSION 0.0.2 or later, this
     * field MUST be set and match the f|i|s|t|... field in use.  This
     * change was made to accommodate proto3 implementations.
     * </pre>
     *
     * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
     */
    OnnxMl.AttributeProto.AttributeType getType();

    /**
     *
     *
     * <pre>
     * Exactly ONE of the following fields must be present for this version of the IR
     * </pre>
     *
     * <code>float f = 2;</code>
     */
    float getF();

    /**
     *
     *
     * <pre>
     * int
     * </pre>
     *
     * <code>int64 i = 3;</code>
     */
    long getI();

    /**
     *
     *
     * <pre>
     * UTF-8 string
     * </pre>
     *
     * <code>bytes s = 4;</code>
     */
    com.google.protobuf.ByteString getS();

    /**
     *
     *
     * <pre>
     * tensor value
     * </pre>
     *
     * <code>.onnx.TensorProto t = 5;</code>
     */
    boolean hasT();
    /**
     *
     *
     * <pre>
     * tensor value
     * </pre>
     *
     * <code>.onnx.TensorProto t = 5;</code>
     */
    OnnxMl.TensorProto getT();
    /**
     *
     *
     * <pre>
     * tensor value
     * </pre>
     *
     * <code>.onnx.TensorProto t = 5;</code>
     */
    OnnxMl.TensorProtoOrBuilder getTOrBuilder();

    /**
     *
     *
     * <pre>
     * graph
     * </pre>
     *
     * <code>.onnx.GraphProto g = 6;</code>
     */
    boolean hasG();
    /**
     *
     *
     * <pre>
     * graph
     * </pre>
     *
     * <code>.onnx.GraphProto g = 6;</code>
     */
    OnnxMl.GraphProto getG();
    /**
     *
     *
     * <pre>
     * graph
     * </pre>
     *
     * <code>.onnx.GraphProto g = 6;</code>
     */
    OnnxMl.GraphProtoOrBuilder getGOrBuilder();

    /**
     *
     *
     * <pre>
     * sparse tensor value
     * </pre>
     *
     * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
     */
    boolean hasSparseTensor();
    /**
     *
     *
     * <pre>
     * sparse tensor value
     * </pre>
     *
     * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
     */
    OnnxMl.SparseTensorProto getSparseTensor();
    /**
     *
     *
     * <pre>
     * sparse tensor value
     * </pre>
     *
     * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
     */
    OnnxMl.SparseTensorProtoOrBuilder getSparseTensorOrBuilder();

    /**
     *
     *
     * <pre>
     * list of floats
     * </pre>
     *
     * <code>repeated float floats = 7;</code>
     */
    java.util.List<java.lang.Float> getFloatsList();
    /**
     *
     *
     * <pre>
     * list of floats
     * </pre>
     *
     * <code>repeated float floats = 7;</code>
     */
    int getFloatsCount();
    /**
     *
     *
     * <pre>
     * list of floats
     * </pre>
     *
     * <code>repeated float floats = 7;</code>
     */
    float getFloats(int index);

    /**
     *
     *
     * <pre>
     * list of ints
     * </pre>
     *
     * <code>repeated int64 ints = 8;</code>
     */
    java.util.List<java.lang.Long> getIntsList();
    /**
     *
     *
     * <pre>
     * list of ints
     * </pre>
     *
     * <code>repeated int64 ints = 8;</code>
     */
    int getIntsCount();
    /**
     *
     *
     * <pre>
     * list of ints
     * </pre>
     *
     * <code>repeated int64 ints = 8;</code>
     */
    long getInts(int index);

    /**
     *
     *
     * <pre>
     * list of UTF-8 strings
     * </pre>
     *
     * <code>repeated bytes strings = 9;</code>
     */
    java.util.List<com.google.protobuf.ByteString> getStringsList();
    /**
     *
     *
     * <pre>
     * list of UTF-8 strings
     * </pre>
     *
     * <code>repeated bytes strings = 9;</code>
     */
    int getStringsCount();
    /**
     *
     *
     * <pre>
     * list of UTF-8 strings
     * </pre>
     *
     * <code>repeated bytes strings = 9;</code>
     */
    com.google.protobuf.ByteString getStrings(int index);

    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    java.util.List<OnnxMl.TensorProto> getTensorsList();
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    OnnxMl.TensorProto getTensors(int index);
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    int getTensorsCount();
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    java.util.List<? extends OnnxMl.TensorProtoOrBuilder> getTensorsOrBuilderList();
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    OnnxMl.TensorProtoOrBuilder getTensorsOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    java.util.List<OnnxMl.GraphProto> getGraphsList();
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    OnnxMl.GraphProto getGraphs(int index);
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    int getGraphsCount();
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    java.util.List<? extends OnnxMl.GraphProtoOrBuilder> getGraphsOrBuilderList();
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    OnnxMl.GraphProtoOrBuilder getGraphsOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    java.util.List<OnnxMl.SparseTensorProto> getSparseTensorsList();
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    OnnxMl.SparseTensorProto getSparseTensors(int index);
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    int getSparseTensorsCount();
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    java.util.List<? extends OnnxMl.SparseTensorProtoOrBuilder> getSparseTensorsOrBuilderList();
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    OnnxMl.SparseTensorProtoOrBuilder getSparseTensorsOrBuilder(int index);
  }
  /**
   *
   *
   * <pre>
   * Attributes
   * A named attribute containing either singular float, integer, string, graph,
   * and tensor values, or repeated float, integer, string, graph, and tensor values.
   * An AttributeProto MUST contain the name field, and *only one* of the
   * following content fields, effectively enforcing a C/C++ union equivalent.
   * </pre>
   *
   * Protobuf type {@code onnx.AttributeProto}
   */
  public static final class AttributeProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.AttributeProto)
      AttributeProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use AttributeProto.newBuilder() to construct.
    private AttributeProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private AttributeProto() {
      name_ = "";
      refAttrName_ = "";
      docString_ = "";
      type_ = 0;
      f_ = 0F;
      i_ = 0L;
      s_ = com.google.protobuf.ByteString.EMPTY;
      floats_ = java.util.Collections.emptyList();
      ints_ = java.util.Collections.emptyList();
      strings_ = java.util.Collections.emptyList();
      tensors_ = java.util.Collections.emptyList();
      graphs_ = java.util.Collections.emptyList();
      sparseTensors_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private AttributeProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
            case 21:
              {
                f_ = input.readFloat();
                break;
              }
            case 24:
              {
                i_ = input.readInt64();
                break;
              }
            case 34:
              {
                s_ = input.readBytes();
                break;
              }
            case 42:
              {
                OnnxMl.TensorProto.Builder subBuilder = null;
                if (t_ != null) {
                  subBuilder = t_.toBuilder();
                }
                t_ = input.readMessage(OnnxMl.TensorProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(t_);
                  t_ = subBuilder.buildPartial();
                }

                break;
              }
            case 50:
              {
                OnnxMl.GraphProto.Builder subBuilder = null;
                if (g_ != null) {
                  subBuilder = g_.toBuilder();
                }
                g_ = input.readMessage(OnnxMl.GraphProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(g_);
                  g_ = subBuilder.buildPartial();
                }

                break;
              }
            case 61:
              {
                if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                  floats_ = new java.util.ArrayList<java.lang.Float>();
                  mutable_bitField0_ |= 0x00000400;
                }
                floats_.add(input.readFloat());
                break;
              }
            case 58:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)
                    && input.getBytesUntilLimit() > 0) {
                  floats_ = new java.util.ArrayList<java.lang.Float>();
                  mutable_bitField0_ |= 0x00000400;
                }
                while (input.getBytesUntilLimit() > 0) {
                  floats_.add(input.readFloat());
                }
                input.popLimit(limit);
                break;
              }
            case 64:
              {
                if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                  ints_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000800;
                }
                ints_.add(input.readInt64());
                break;
              }
            case 66:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)
                    && input.getBytesUntilLimit() > 0) {
                  ints_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000800;
                }
                while (input.getBytesUntilLimit() > 0) {
                  ints_.add(input.readInt64());
                }
                input.popLimit(limit);
                break;
              }
            case 74:
              {
                if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
                  strings_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00001000;
                }
                strings_.add(input.readBytes());
                break;
              }
            case 82:
              {
                if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
                  tensors_ = new java.util.ArrayList<OnnxMl.TensorProto>();
                  mutable_bitField0_ |= 0x00002000;
                }
                tensors_.add(input.readMessage(OnnxMl.TensorProto.parser(), extensionRegistry));
                break;
              }
            case 90:
              {
                if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                  graphs_ = new java.util.ArrayList<OnnxMl.GraphProto>();
                  mutable_bitField0_ |= 0x00004000;
                }
                graphs_.add(input.readMessage(OnnxMl.GraphProto.parser(), extensionRegistry));
                break;
              }
            case 106:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            case 160:
              {
                int rawValue = input.readEnum();

                type_ = rawValue;
                break;
              }
            case 170:
              {
                java.lang.String s = input.readStringRequireUtf8();

                refAttrName_ = s;
                break;
              }
            case 178:
              {
                OnnxMl.SparseTensorProto.Builder subBuilder = null;
                if (sparseTensor_ != null) {
                  subBuilder = sparseTensor_.toBuilder();
                }
                sparseTensor_ =
                    input.readMessage(OnnxMl.SparseTensorProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(sparseTensor_);
                  sparseTensor_ = subBuilder.buildPartial();
                }

                break;
              }
            case 186:
              {
                if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
                  sparseTensors_ = new java.util.ArrayList<OnnxMl.SparseTensorProto>();
                  mutable_bitField0_ |= 0x00008000;
                }
                sparseTensors_.add(
                    input.readMessage(OnnxMl.SparseTensorProto.parser(), extensionRegistry));
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          floats_ = java.util.Collections.unmodifiableList(floats_);
        }
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          ints_ = java.util.Collections.unmodifiableList(ints_);
        }
        if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
          strings_ = java.util.Collections.unmodifiableList(strings_);
        }
        if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
          tensors_ = java.util.Collections.unmodifiableList(tensors_);
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          graphs_ = java.util.Collections.unmodifiableList(graphs_);
        }
        if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
          sparseTensors_ = java.util.Collections.unmodifiableList(sparseTensors_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_AttributeProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_AttributeProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.AttributeProto.class, OnnxMl.AttributeProto.Builder.class);
    }

    /**
     *
     *
     * <pre>
     * Note: this enum is structurally identical to the OpSchema::AttrType
     * enum defined in schema.h.  If you rev one, you likely need to rev the other.
     * </pre>
     *
     * Protobuf enum {@code onnx.AttributeProto.AttributeType}
     */
    public enum AttributeType implements com.google.protobuf.ProtocolMessageEnum {
      /** <code>UNDEFINED = 0;</code> */
      UNDEFINED(0),
      /** <code>FLOAT = 1;</code> */
      FLOAT(1),
      /** <code>INT = 2;</code> */
      INT(2),
      /** <code>STRING = 3;</code> */
      STRING(3),
      /** <code>TENSOR = 4;</code> */
      TENSOR(4),
      /** <code>GRAPH = 5;</code> */
      GRAPH(5),
      /** <code>SPARSE_TENSOR = 11;</code> */
      SPARSE_TENSOR(11),
      /** <code>FLOATS = 6;</code> */
      FLOATS(6),
      /** <code>INTS = 7;</code> */
      INTS(7),
      /** <code>STRINGS = 8;</code> */
      STRINGS(8),
      /** <code>TENSORS = 9;</code> */
      TENSORS(9),
      /** <code>GRAPHS = 10;</code> */
      GRAPHS(10),
      /** <code>SPARSE_TENSORS = 12;</code> */
      SPARSE_TENSORS(12),
      UNRECOGNIZED(-1),
      ;

      /** <code>UNDEFINED = 0;</code> */
      public static final int UNDEFINED_VALUE = 0;
      /** <code>FLOAT = 1;</code> */
      public static final int FLOAT_VALUE = 1;
      /** <code>INT = 2;</code> */
      public static final int INT_VALUE = 2;
      /** <code>STRING = 3;</code> */
      public static final int STRING_VALUE = 3;
      /** <code>TENSOR = 4;</code> */
      public static final int TENSOR_VALUE = 4;
      /** <code>GRAPH = 5;</code> */
      public static final int GRAPH_VALUE = 5;
      /** <code>SPARSE_TENSOR = 11;</code> */
      public static final int SPARSE_TENSOR_VALUE = 11;
      /** <code>FLOATS = 6;</code> */
      public static final int FLOATS_VALUE = 6;
      /** <code>INTS = 7;</code> */
      public static final int INTS_VALUE = 7;
      /** <code>STRINGS = 8;</code> */
      public static final int STRINGS_VALUE = 8;
      /** <code>TENSORS = 9;</code> */
      public static final int TENSORS_VALUE = 9;
      /** <code>GRAPHS = 10;</code> */
      public static final int GRAPHS_VALUE = 10;
      /** <code>SPARSE_TENSORS = 12;</code> */
      public static final int SPARSE_TENSORS_VALUE = 12;

      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /** @deprecated Use {@link #forNumber(int)} instead. */
      @java.lang.Deprecated
      public static AttributeType valueOf(int value) {
        return forNumber(value);
      }

      public static AttributeType forNumber(int value) {
        switch (value) {
          case 0:
            return UNDEFINED;
          case 1:
            return FLOAT;
          case 2:
            return INT;
          case 3:
            return STRING;
          case 4:
            return TENSOR;
          case 5:
            return GRAPH;
          case 11:
            return SPARSE_TENSOR;
          case 6:
            return FLOATS;
          case 7:
            return INTS;
          case 8:
            return STRINGS;
          case 9:
            return TENSORS;
          case 10:
            return GRAPHS;
          case 12:
            return SPARSE_TENSORS;
          default:
            return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<AttributeType> internalGetValueMap() {
        return internalValueMap;
      }

      private static final com.google.protobuf.Internal.EnumLiteMap<AttributeType>
          internalValueMap =
              new com.google.protobuf.Internal.EnumLiteMap<AttributeType>() {
                public AttributeType findValueByNumber(int number) {
                  return AttributeType.forNumber(number);
                }
              };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }

      public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
        return getDescriptor();
      }

      public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
        return OnnxMl.AttributeProto.getDescriptor().getEnumTypes().get(0);
      }

      private static final AttributeType[] VALUES = values();

      public static AttributeType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private AttributeType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:onnx.AttributeProto.AttributeType)
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     *
     *
     * <pre>
     * The name field MUST be present for this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The name field MUST be present for this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REF_ATTR_NAME_FIELD_NUMBER = 21;
    private volatile java.lang.Object refAttrName_;
    /**
     *
     *
     * <pre>
     * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
     * In this case, this AttributeProto does not contain data, and it's a reference of attribute
     * in parent scope.
     * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
     * </pre>
     *
     * <code>string ref_attr_name = 21;</code>
     */
    public java.lang.String getRefAttrName() {
      java.lang.Object ref = refAttrName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        refAttrName_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
     * In this case, this AttributeProto does not contain data, and it's a reference of attribute
     * in parent scope.
     * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
     * </pre>
     *
     * <code>string ref_attr_name = 21;</code>
     */
    public com.google.protobuf.ByteString getRefAttrNameBytes() {
      java.lang.Object ref = refAttrName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        refAttrName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DOC_STRING_FIELD_NUMBER = 13;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this attribute. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 13;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this attribute. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 13;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_FIELD_NUMBER = 20;
    private int type_;
    /**
     *
     *
     * <pre>
     * The type field MUST be present for this version of the IR.
     * For 0.0.1 versions of the IR, this field was not defined, and
     * implementations needed to use has_field heuristics to determine
     * which value field was in use.  For IR_VERSION 0.0.2 or later, this
     * field MUST be set and match the f|i|s|t|... field in use.  This
     * change was made to accommodate proto3 implementations.
     * </pre>
     *
     * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
     */
    public int getTypeValue() {
      return type_;
    }
    /**
     *
     *
     * <pre>
     * The type field MUST be present for this version of the IR.
     * For 0.0.1 versions of the IR, this field was not defined, and
     * implementations needed to use has_field heuristics to determine
     * which value field was in use.  For IR_VERSION 0.0.2 or later, this
     * field MUST be set and match the f|i|s|t|... field in use.  This
     * change was made to accommodate proto3 implementations.
     * </pre>
     *
     * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
     */
    public OnnxMl.AttributeProto.AttributeType getType() {
      @SuppressWarnings("deprecation")
      OnnxMl.AttributeProto.AttributeType result =
          OnnxMl.AttributeProto.AttributeType.valueOf(type_);
      return result == null ? OnnxMl.AttributeProto.AttributeType.UNRECOGNIZED : result;
    }

    public static final int F_FIELD_NUMBER = 2;
    private float f_;
    /**
     *
     *
     * <pre>
     * Exactly ONE of the following fields must be present for this version of the IR
     * </pre>
     *
     * <code>float f = 2;</code>
     */
    public float getF() {
      return f_;
    }

    public static final int I_FIELD_NUMBER = 3;
    private long i_;
    /**
     *
     *
     * <pre>
     * int
     * </pre>
     *
     * <code>int64 i = 3;</code>
     */
    public long getI() {
      return i_;
    }

    public static final int S_FIELD_NUMBER = 4;
    private com.google.protobuf.ByteString s_;
    /**
     *
     *
     * <pre>
     * UTF-8 string
     * </pre>
     *
     * <code>bytes s = 4;</code>
     */
    public com.google.protobuf.ByteString getS() {
      return s_;
    }

    public static final int T_FIELD_NUMBER = 5;
    private OnnxMl.TensorProto t_;
    /**
     *
     *
     * <pre>
     * tensor value
     * </pre>
     *
     * <code>.onnx.TensorProto t = 5;</code>
     */
    public boolean hasT() {
      return t_ != null;
    }
    /**
     *
     *
     * <pre>
     * tensor value
     * </pre>
     *
     * <code>.onnx.TensorProto t = 5;</code>
     */
    public OnnxMl.TensorProto getT() {
      return t_ == null ? OnnxMl.TensorProto.getDefaultInstance() : t_;
    }
    /**
     *
     *
     * <pre>
     * tensor value
     * </pre>
     *
     * <code>.onnx.TensorProto t = 5;</code>
     */
    public OnnxMl.TensorProtoOrBuilder getTOrBuilder() {
      return getT();
    }

    public static final int G_FIELD_NUMBER = 6;
    private OnnxMl.GraphProto g_;
    /**
     *
     *
     * <pre>
     * graph
     * </pre>
     *
     * <code>.onnx.GraphProto g = 6;</code>
     */
    public boolean hasG() {
      return g_ != null;
    }
    /**
     *
     *
     * <pre>
     * graph
     * </pre>
     *
     * <code>.onnx.GraphProto g = 6;</code>
     */
    public OnnxMl.GraphProto getG() {
      return g_ == null ? OnnxMl.GraphProto.getDefaultInstance() : g_;
    }
    /**
     *
     *
     * <pre>
     * graph
     * </pre>
     *
     * <code>.onnx.GraphProto g = 6;</code>
     */
    public OnnxMl.GraphProtoOrBuilder getGOrBuilder() {
      return getG();
    }

    public static final int SPARSE_TENSOR_FIELD_NUMBER = 22;
    private OnnxMl.SparseTensorProto sparseTensor_;
    /**
     *
     *
     * <pre>
     * sparse tensor value
     * </pre>
     *
     * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
     */
    public boolean hasSparseTensor() {
      return sparseTensor_ != null;
    }
    /**
     *
     *
     * <pre>
     * sparse tensor value
     * </pre>
     *
     * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
     */
    public OnnxMl.SparseTensorProto getSparseTensor() {
      return sparseTensor_ == null ? OnnxMl.SparseTensorProto.getDefaultInstance() : sparseTensor_;
    }
    /**
     *
     *
     * <pre>
     * sparse tensor value
     * </pre>
     *
     * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
     */
    public OnnxMl.SparseTensorProtoOrBuilder getSparseTensorOrBuilder() {
      return getSparseTensor();
    }

    public static final int FLOATS_FIELD_NUMBER = 7;
    private java.util.List<java.lang.Float> floats_;
    /**
     *
     *
     * <pre>
     * list of floats
     * </pre>
     *
     * <code>repeated float floats = 7;</code>
     */
    public java.util.List<java.lang.Float> getFloatsList() {
      return floats_;
    }
    /**
     *
     *
     * <pre>
     * list of floats
     * </pre>
     *
     * <code>repeated float floats = 7;</code>
     */
    public int getFloatsCount() {
      return floats_.size();
    }
    /**
     *
     *
     * <pre>
     * list of floats
     * </pre>
     *
     * <code>repeated float floats = 7;</code>
     */
    public float getFloats(int index) {
      return floats_.get(index);
    }

    private int floatsMemoizedSerializedSize = -1;

    public static final int INTS_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Long> ints_;
    /**
     *
     *
     * <pre>
     * list of ints
     * </pre>
     *
     * <code>repeated int64 ints = 8;</code>
     */
    public java.util.List<java.lang.Long> getIntsList() {
      return ints_;
    }
    /**
     *
     *
     * <pre>
     * list of ints
     * </pre>
     *
     * <code>repeated int64 ints = 8;</code>
     */
    public int getIntsCount() {
      return ints_.size();
    }
    /**
     *
     *
     * <pre>
     * list of ints
     * </pre>
     *
     * <code>repeated int64 ints = 8;</code>
     */
    public long getInts(int index) {
      return ints_.get(index);
    }

    private int intsMemoizedSerializedSize = -1;

    public static final int STRINGS_FIELD_NUMBER = 9;
    private java.util.List<com.google.protobuf.ByteString> strings_;
    /**
     *
     *
     * <pre>
     * list of UTF-8 strings
     * </pre>
     *
     * <code>repeated bytes strings = 9;</code>
     */
    public java.util.List<com.google.protobuf.ByteString> getStringsList() {
      return strings_;
    }
    /**
     *
     *
     * <pre>
     * list of UTF-8 strings
     * </pre>
     *
     * <code>repeated bytes strings = 9;</code>
     */
    public int getStringsCount() {
      return strings_.size();
    }
    /**
     *
     *
     * <pre>
     * list of UTF-8 strings
     * </pre>
     *
     * <code>repeated bytes strings = 9;</code>
     */
    public com.google.protobuf.ByteString getStrings(int index) {
      return strings_.get(index);
    }

    public static final int TENSORS_FIELD_NUMBER = 10;
    private java.util.List<OnnxMl.TensorProto> tensors_;
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    public java.util.List<OnnxMl.TensorProto> getTensorsList() {
      return tensors_;
    }
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    public java.util.List<? extends OnnxMl.TensorProtoOrBuilder> getTensorsOrBuilderList() {
      return tensors_;
    }
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    public int getTensorsCount() {
      return tensors_.size();
    }
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    public OnnxMl.TensorProto getTensors(int index) {
      return tensors_.get(index);
    }
    /**
     *
     *
     * <pre>
     * list of tensors
     * </pre>
     *
     * <code>repeated .onnx.TensorProto tensors = 10;</code>
     */
    public OnnxMl.TensorProtoOrBuilder getTensorsOrBuilder(int index) {
      return tensors_.get(index);
    }

    public static final int GRAPHS_FIELD_NUMBER = 11;
    private java.util.List<OnnxMl.GraphProto> graphs_;
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    public java.util.List<OnnxMl.GraphProto> getGraphsList() {
      return graphs_;
    }
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    public java.util.List<? extends OnnxMl.GraphProtoOrBuilder> getGraphsOrBuilderList() {
      return graphs_;
    }
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    public int getGraphsCount() {
      return graphs_.size();
    }
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    public OnnxMl.GraphProto getGraphs(int index) {
      return graphs_.get(index);
    }
    /**
     *
     *
     * <pre>
     * list of graph
     * </pre>
     *
     * <code>repeated .onnx.GraphProto graphs = 11;</code>
     */
    public OnnxMl.GraphProtoOrBuilder getGraphsOrBuilder(int index) {
      return graphs_.get(index);
    }

    public static final int SPARSE_TENSORS_FIELD_NUMBER = 23;
    private java.util.List<OnnxMl.SparseTensorProto> sparseTensors_;
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    public java.util.List<OnnxMl.SparseTensorProto> getSparseTensorsList() {
      return sparseTensors_;
    }
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    public java.util.List<? extends OnnxMl.SparseTensorProtoOrBuilder>
        getSparseTensorsOrBuilderList() {
      return sparseTensors_;
    }
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    public int getSparseTensorsCount() {
      return sparseTensors_.size();
    }
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    public OnnxMl.SparseTensorProto getSparseTensors(int index) {
      return sparseTensors_.get(index);
    }
    /**
     *
     *
     * <pre>
     * list of sparse tensors
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
     */
    public OnnxMl.SparseTensorProtoOrBuilder getSparseTensorsOrBuilder(int index) {
      return sparseTensors_.get(index);
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      getSerializedSize();
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (f_ != 0F) {
        output.writeFloat(2, f_);
      }
      if (i_ != 0L) {
        output.writeInt64(3, i_);
      }
      if (!s_.isEmpty()) {
        output.writeBytes(4, s_);
      }
      if (t_ != null) {
        output.writeMessage(5, getT());
      }
      if (g_ != null) {
        output.writeMessage(6, getG());
      }
      if (getFloatsList().size() > 0) {
        output.writeUInt32NoTag(58);
        output.writeUInt32NoTag(floatsMemoizedSerializedSize);
      }
      for (int i = 0; i < floats_.size(); i++) {
        output.writeFloatNoTag(floats_.get(i));
      }
      if (getIntsList().size() > 0) {
        output.writeUInt32NoTag(66);
        output.writeUInt32NoTag(intsMemoizedSerializedSize);
      }
      for (int i = 0; i < ints_.size(); i++) {
        output.writeInt64NoTag(ints_.get(i));
      }
      for (int i = 0; i < strings_.size(); i++) {
        output.writeBytes(9, strings_.get(i));
      }
      for (int i = 0; i < tensors_.size(); i++) {
        output.writeMessage(10, tensors_.get(i));
      }
      for (int i = 0; i < graphs_.size(); i++) {
        output.writeMessage(11, graphs_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 13, docString_);
      }
      if (type_ != OnnxMl.AttributeProto.AttributeType.UNDEFINED.getNumber()) {
        output.writeEnum(20, type_);
      }
      if (!getRefAttrNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 21, refAttrName_);
      }
      if (sparseTensor_ != null) {
        output.writeMessage(22, getSparseTensor());
      }
      for (int i = 0; i < sparseTensors_.size(); i++) {
        output.writeMessage(23, sparseTensors_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (f_ != 0F) {
        size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, f_);
      }
      if (i_ != 0L) {
        size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, i_);
      }
      if (!s_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, s_);
      }
      if (t_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getT());
      }
      if (g_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getG());
      }
      {
        int dataSize = 0;
        dataSize = 4 * getFloatsList().size();
        size += dataSize;
        if (!getFloatsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        floatsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < ints_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream.computeInt64SizeNoTag(ints_.get(i));
        }
        size += dataSize;
        if (!getIntsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        intsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < strings_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream.computeBytesSizeNoTag(strings_.get(i));
        }
        size += dataSize;
        size += 1 * getStringsList().size();
      }
      for (int i = 0; i < tensors_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, tensors_.get(i));
      }
      for (int i = 0; i < graphs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, graphs_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, docString_);
      }
      if (type_ != OnnxMl.AttributeProto.AttributeType.UNDEFINED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream.computeEnumSize(20, type_);
      }
      if (!getRefAttrNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(21, refAttrName_);
      }
      if (sparseTensor_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(22, getSparseTensor());
      }
      for (int i = 0; i < sparseTensors_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(23, sparseTensors_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.AttributeProto)) {
        return super.equals(obj);
      }
      OnnxMl.AttributeProto other = (OnnxMl.AttributeProto) obj;

      boolean result = true;
      result = result && getName().equals(other.getName());
      result = result && getRefAttrName().equals(other.getRefAttrName());
      result = result && getDocString().equals(other.getDocString());
      result = result && type_ == other.type_;
      result =
          result
              && (java.lang.Float.floatToIntBits(getF())
                  == java.lang.Float.floatToIntBits(other.getF()));
      result = result && (getI() == other.getI());
      result = result && getS().equals(other.getS());
      result = result && (hasT() == other.hasT());
      if (hasT()) {
        result = result && getT().equals(other.getT());
      }
      result = result && (hasG() == other.hasG());
      if (hasG()) {
        result = result && getG().equals(other.getG());
      }
      result = result && (hasSparseTensor() == other.hasSparseTensor());
      if (hasSparseTensor()) {
        result = result && getSparseTensor().equals(other.getSparseTensor());
      }
      result = result && getFloatsList().equals(other.getFloatsList());
      result = result && getIntsList().equals(other.getIntsList());
      result = result && getStringsList().equals(other.getStringsList());
      result = result && getTensorsList().equals(other.getTensorsList());
      result = result && getGraphsList().equals(other.getGraphsList());
      result = result && getSparseTensorsList().equals(other.getSparseTensorsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + REF_ATTR_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getRefAttrName().hashCode();
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      hash = (37 * hash) + F_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(getF());
      hash = (37 * hash) + I_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getI());
      hash = (37 * hash) + S_FIELD_NUMBER;
      hash = (53 * hash) + getS().hashCode();
      if (hasT()) {
        hash = (37 * hash) + T_FIELD_NUMBER;
        hash = (53 * hash) + getT().hashCode();
      }
      if (hasG()) {
        hash = (37 * hash) + G_FIELD_NUMBER;
        hash = (53 * hash) + getG().hashCode();
      }
      if (hasSparseTensor()) {
        hash = (37 * hash) + SPARSE_TENSOR_FIELD_NUMBER;
        hash = (53 * hash) + getSparseTensor().hashCode();
      }
      if (getFloatsCount() > 0) {
        hash = (37 * hash) + FLOATS_FIELD_NUMBER;
        hash = (53 * hash) + getFloatsList().hashCode();
      }
      if (getIntsCount() > 0) {
        hash = (37 * hash) + INTS_FIELD_NUMBER;
        hash = (53 * hash) + getIntsList().hashCode();
      }
      if (getStringsCount() > 0) {
        hash = (37 * hash) + STRINGS_FIELD_NUMBER;
        hash = (53 * hash) + getStringsList().hashCode();
      }
      if (getTensorsCount() > 0) {
        hash = (37 * hash) + TENSORS_FIELD_NUMBER;
        hash = (53 * hash) + getTensorsList().hashCode();
      }
      if (getGraphsCount() > 0) {
        hash = (37 * hash) + GRAPHS_FIELD_NUMBER;
        hash = (53 * hash) + getGraphsList().hashCode();
      }
      if (getSparseTensorsCount() > 0) {
        hash = (37 * hash) + SPARSE_TENSORS_FIELD_NUMBER;
        hash = (53 * hash) + getSparseTensorsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.AttributeProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.AttributeProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.AttributeProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.AttributeProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.AttributeProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.AttributeProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.AttributeProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.AttributeProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.AttributeProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.AttributeProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.AttributeProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.AttributeProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.AttributeProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Attributes
     * A named attribute containing either singular float, integer, string, graph,
     * and tensor values, or repeated float, integer, string, graph, and tensor values.
     * An AttributeProto MUST contain the name field, and *only one* of the
     * following content fields, effectively enforcing a C/C++ union equivalent.
     * </pre>
     *
     * Protobuf type {@code onnx.AttributeProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.AttributeProto)
        OnnxMl.AttributeProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_AttributeProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_AttributeProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.AttributeProto.class, OnnxMl.AttributeProto.Builder.class);
      }

      // Construct using OnnxMlProto3.AttributeProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getTensorsFieldBuilder();
          getGraphsFieldBuilder();
          getSparseTensorsFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        refAttrName_ = "";

        docString_ = "";

        type_ = 0;

        f_ = 0F;

        i_ = 0L;

        s_ = com.google.protobuf.ByteString.EMPTY;

        if (tBuilder_ == null) {
          t_ = null;
        } else {
          t_ = null;
          tBuilder_ = null;
        }
        if (gBuilder_ == null) {
          g_ = null;
        } else {
          g_ = null;
          gBuilder_ = null;
        }
        if (sparseTensorBuilder_ == null) {
          sparseTensor_ = null;
        } else {
          sparseTensor_ = null;
          sparseTensorBuilder_ = null;
        }
        floats_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000400);
        ints_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000800);
        strings_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00001000);
        if (tensorsBuilder_ == null) {
          tensors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          tensorsBuilder_.clear();
        }
        if (graphsBuilder_ == null) {
          graphs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
        } else {
          graphsBuilder_.clear();
        }
        if (sparseTensorsBuilder_ == null) {
          sparseTensors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          sparseTensorsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_AttributeProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.AttributeProto getDefaultInstanceForType() {
        return OnnxMl.AttributeProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.AttributeProto build() {
        OnnxMl.AttributeProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.AttributeProto buildPartial() {
        OnnxMl.AttributeProto result = new OnnxMl.AttributeProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.name_ = name_;
        result.refAttrName_ = refAttrName_;
        result.docString_ = docString_;
        result.type_ = type_;
        result.f_ = f_;
        result.i_ = i_;
        result.s_ = s_;
        if (tBuilder_ == null) {
          result.t_ = t_;
        } else {
          result.t_ = tBuilder_.build();
        }
        if (gBuilder_ == null) {
          result.g_ = g_;
        } else {
          result.g_ = gBuilder_.build();
        }
        if (sparseTensorBuilder_ == null) {
          result.sparseTensor_ = sparseTensor_;
        } else {
          result.sparseTensor_ = sparseTensorBuilder_.build();
        }
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          floats_ = java.util.Collections.unmodifiableList(floats_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.floats_ = floats_;
        if (((bitField0_ & 0x00000800) == 0x00000800)) {
          ints_ = java.util.Collections.unmodifiableList(ints_);
          bitField0_ = (bitField0_ & ~0x00000800);
        }
        result.ints_ = ints_;
        if (((bitField0_ & 0x00001000) == 0x00001000)) {
          strings_ = java.util.Collections.unmodifiableList(strings_);
          bitField0_ = (bitField0_ & ~0x00001000);
        }
        result.strings_ = strings_;
        if (tensorsBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000)) {
            tensors_ = java.util.Collections.unmodifiableList(tensors_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.tensors_ = tensors_;
        } else {
          result.tensors_ = tensorsBuilder_.build();
        }
        if (graphsBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000)) {
            graphs_ = java.util.Collections.unmodifiableList(graphs_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.graphs_ = graphs_;
        } else {
          result.graphs_ = graphsBuilder_.build();
        }
        if (sparseTensorsBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            sparseTensors_ = java.util.Collections.unmodifiableList(sparseTensors_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.sparseTensors_ = sparseTensors_;
        } else {
          result.sparseTensors_ = sparseTensorsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.AttributeProto) {
          return mergeFrom((OnnxMl.AttributeProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.AttributeProto other) {
        if (other == OnnxMl.AttributeProto.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getRefAttrName().isEmpty()) {
          refAttrName_ = other.refAttrName_;
          onChanged();
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (other.getF() != 0F) {
          setF(other.getF());
        }
        if (other.getI() != 0L) {
          setI(other.getI());
        }
        if (other.getS() != com.google.protobuf.ByteString.EMPTY) {
          setS(other.getS());
        }
        if (other.hasT()) {
          mergeT(other.getT());
        }
        if (other.hasG()) {
          mergeG(other.getG());
        }
        if (other.hasSparseTensor()) {
          mergeSparseTensor(other.getSparseTensor());
        }
        if (!other.floats_.isEmpty()) {
          if (floats_.isEmpty()) {
            floats_ = other.floats_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureFloatsIsMutable();
            floats_.addAll(other.floats_);
          }
          onChanged();
        }
        if (!other.ints_.isEmpty()) {
          if (ints_.isEmpty()) {
            ints_ = other.ints_;
            bitField0_ = (bitField0_ & ~0x00000800);
          } else {
            ensureIntsIsMutable();
            ints_.addAll(other.ints_);
          }
          onChanged();
        }
        if (!other.strings_.isEmpty()) {
          if (strings_.isEmpty()) {
            strings_ = other.strings_;
            bitField0_ = (bitField0_ & ~0x00001000);
          } else {
            ensureStringsIsMutable();
            strings_.addAll(other.strings_);
          }
          onChanged();
        }
        if (tensorsBuilder_ == null) {
          if (!other.tensors_.isEmpty()) {
            if (tensors_.isEmpty()) {
              tensors_ = other.tensors_;
              bitField0_ = (bitField0_ & ~0x00002000);
            } else {
              ensureTensorsIsMutable();
              tensors_.addAll(other.tensors_);
            }
            onChanged();
          }
        } else {
          if (!other.tensors_.isEmpty()) {
            if (tensorsBuilder_.isEmpty()) {
              tensorsBuilder_.dispose();
              tensorsBuilder_ = null;
              tensors_ = other.tensors_;
              bitField0_ = (bitField0_ & ~0x00002000);
              tensorsBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getTensorsFieldBuilder()
                      : null;
            } else {
              tensorsBuilder_.addAllMessages(other.tensors_);
            }
          }
        }
        if (graphsBuilder_ == null) {
          if (!other.graphs_.isEmpty()) {
            if (graphs_.isEmpty()) {
              graphs_ = other.graphs_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureGraphsIsMutable();
              graphs_.addAll(other.graphs_);
            }
            onChanged();
          }
        } else {
          if (!other.graphs_.isEmpty()) {
            if (graphsBuilder_.isEmpty()) {
              graphsBuilder_.dispose();
              graphsBuilder_ = null;
              graphs_ = other.graphs_;
              bitField0_ = (bitField0_ & ~0x00004000);
              graphsBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getGraphsFieldBuilder()
                      : null;
            } else {
              graphsBuilder_.addAllMessages(other.graphs_);
            }
          }
        }
        if (sparseTensorsBuilder_ == null) {
          if (!other.sparseTensors_.isEmpty()) {
            if (sparseTensors_.isEmpty()) {
              sparseTensors_ = other.sparseTensors_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureSparseTensorsIsMutable();
              sparseTensors_.addAll(other.sparseTensors_);
            }
            onChanged();
          }
        } else {
          if (!other.sparseTensors_.isEmpty()) {
            if (sparseTensorsBuilder_.isEmpty()) {
              sparseTensorsBuilder_.dispose();
              sparseTensorsBuilder_ = null;
              sparseTensors_ = other.sparseTensors_;
              bitField0_ = (bitField0_ & ~0x00008000);
              sparseTensorsBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getSparseTensorsFieldBuilder()
                      : null;
            } else {
              sparseTensorsBuilder_.addAllMessages(other.sparseTensors_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.AttributeProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.AttributeProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       *
       *
       * <pre>
       * The name field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder setName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        name_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder clearName() {

        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder setNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object refAttrName_ = "";
      /**
       *
       *
       * <pre>
       * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
       * In this case, this AttributeProto does not contain data, and it's a reference of attribute
       * in parent scope.
       * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
       * </pre>
       *
       * <code>string ref_attr_name = 21;</code>
       */
      public java.lang.String getRefAttrName() {
        java.lang.Object ref = refAttrName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          refAttrName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
       * In this case, this AttributeProto does not contain data, and it's a reference of attribute
       * in parent scope.
       * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
       * </pre>
       *
       * <code>string ref_attr_name = 21;</code>
       */
      public com.google.protobuf.ByteString getRefAttrNameBytes() {
        java.lang.Object ref = refAttrName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          refAttrName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
       * In this case, this AttributeProto does not contain data, and it's a reference of attribute
       * in parent scope.
       * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
       * </pre>
       *
       * <code>string ref_attr_name = 21;</code>
       */
      public Builder setRefAttrName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        refAttrName_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
       * In this case, this AttributeProto does not contain data, and it's a reference of attribute
       * in parent scope.
       * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
       * </pre>
       *
       * <code>string ref_attr_name = 21;</code>
       */
      public Builder clearRefAttrName() {

        refAttrName_ = getDefaultInstance().getRefAttrName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * if ref_attr_name is not empty, ref_attr_name is the attribute name in parent function.
       * In this case, this AttributeProto does not contain data, and it's a reference of attribute
       * in parent scope.
       * NOTE: This should ONLY be used in function (sub-graph). It's invalid to be used in main graph.
       * </pre>
       *
       * <code>string ref_attr_name = 21;</code>
       */
      public Builder setRefAttrNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        refAttrName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this attribute. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 13;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this attribute. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 13;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this attribute. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 13;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this attribute. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 13;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this attribute. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 13;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       *
       *
       * <pre>
       * The type field MUST be present for this version of the IR.
       * For 0.0.1 versions of the IR, this field was not defined, and
       * implementations needed to use has_field heuristics to determine
       * which value field was in use.  For IR_VERSION 0.0.2 or later, this
       * field MUST be set and match the f|i|s|t|... field in use.  This
       * change was made to accommodate proto3 implementations.
       * </pre>
       *
       * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
       */
      public int getTypeValue() {
        return type_;
      }
      /**
       *
       *
       * <pre>
       * The type field MUST be present for this version of the IR.
       * For 0.0.1 versions of the IR, this field was not defined, and
       * implementations needed to use has_field heuristics to determine
       * which value field was in use.  For IR_VERSION 0.0.2 or later, this
       * field MUST be set and match the f|i|s|t|... field in use.  This
       * change was made to accommodate proto3 implementations.
       * </pre>
       *
       * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
       */
      public Builder setTypeValue(int value) {
        type_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type field MUST be present for this version of the IR.
       * For 0.0.1 versions of the IR, this field was not defined, and
       * implementations needed to use has_field heuristics to determine
       * which value field was in use.  For IR_VERSION 0.0.2 or later, this
       * field MUST be set and match the f|i|s|t|... field in use.  This
       * change was made to accommodate proto3 implementations.
       * </pre>
       *
       * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
       */
      public OnnxMl.AttributeProto.AttributeType getType() {
        @SuppressWarnings("deprecation")
        OnnxMl.AttributeProto.AttributeType result =
            OnnxMl.AttributeProto.AttributeType.valueOf(type_);
        return result == null ? OnnxMl.AttributeProto.AttributeType.UNRECOGNIZED : result;
      }
      /**
       *
       *
       * <pre>
       * The type field MUST be present for this version of the IR.
       * For 0.0.1 versions of the IR, this field was not defined, and
       * implementations needed to use has_field heuristics to determine
       * which value field was in use.  For IR_VERSION 0.0.2 or later, this
       * field MUST be set and match the f|i|s|t|... field in use.  This
       * change was made to accommodate proto3 implementations.
       * </pre>
       *
       * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
       */
      public Builder setType(OnnxMl.AttributeProto.AttributeType value) {
        if (value == null) {
          throw new NullPointerException();
        }

        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type field MUST be present for this version of the IR.
       * For 0.0.1 versions of the IR, this field was not defined, and
       * implementations needed to use has_field heuristics to determine
       * which value field was in use.  For IR_VERSION 0.0.2 or later, this
       * field MUST be set and match the f|i|s|t|... field in use.  This
       * change was made to accommodate proto3 implementations.
       * </pre>
       *
       * <code>.onnx.AttributeProto.AttributeType type = 20;</code>
       */
      public Builder clearType() {

        type_ = 0;
        onChanged();
        return this;
      }

      private float f_;
      /**
       *
       *
       * <pre>
       * Exactly ONE of the following fields must be present for this version of the IR
       * </pre>
       *
       * <code>float f = 2;</code>
       */
      public float getF() {
        return f_;
      }
      /**
       *
       *
       * <pre>
       * Exactly ONE of the following fields must be present for this version of the IR
       * </pre>
       *
       * <code>float f = 2;</code>
       */
      public Builder setF(float value) {

        f_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Exactly ONE of the following fields must be present for this version of the IR
       * </pre>
       *
       * <code>float f = 2;</code>
       */
      public Builder clearF() {

        f_ = 0F;
        onChanged();
        return this;
      }

      private long i_;
      /**
       *
       *
       * <pre>
       * int
       * </pre>
       *
       * <code>int64 i = 3;</code>
       */
      public long getI() {
        return i_;
      }
      /**
       *
       *
       * <pre>
       * int
       * </pre>
       *
       * <code>int64 i = 3;</code>
       */
      public Builder setI(long value) {

        i_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * int
       * </pre>
       *
       * <code>int64 i = 3;</code>
       */
      public Builder clearI() {

        i_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString s_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       *
       * <pre>
       * UTF-8 string
       * </pre>
       *
       * <code>bytes s = 4;</code>
       */
      public com.google.protobuf.ByteString getS() {
        return s_;
      }
      /**
       *
       *
       * <pre>
       * UTF-8 string
       * </pre>
       *
       * <code>bytes s = 4;</code>
       */
      public Builder setS(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }

        s_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * UTF-8 string
       * </pre>
       *
       * <code>bytes s = 4;</code>
       */
      public Builder clearS() {

        s_ = getDefaultInstance().getS();
        onChanged();
        return this;
      }

      private OnnxMl.TensorProto t_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          tBuilder_;
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public boolean hasT() {
        return tBuilder_ != null || t_ != null;
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public OnnxMl.TensorProto getT() {
        if (tBuilder_ == null) {
          return t_ == null ? OnnxMl.TensorProto.getDefaultInstance() : t_;
        } else {
          return tBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public Builder setT(OnnxMl.TensorProto value) {
        if (tBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          t_ = value;
          onChanged();
        } else {
          tBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public Builder setT(OnnxMl.TensorProto.Builder builderForValue) {
        if (tBuilder_ == null) {
          t_ = builderForValue.build();
          onChanged();
        } else {
          tBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public Builder mergeT(OnnxMl.TensorProto value) {
        if (tBuilder_ == null) {
          if (t_ != null) {
            t_ = OnnxMl.TensorProto.newBuilder(t_).mergeFrom(value).buildPartial();
          } else {
            t_ = value;
          }
          onChanged();
        } else {
          tBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public Builder clearT() {
        if (tBuilder_ == null) {
          t_ = null;
          onChanged();
        } else {
          t_ = null;
          tBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public OnnxMl.TensorProto.Builder getTBuilder() {

        onChanged();
        return getTFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      public OnnxMl.TensorProtoOrBuilder getTOrBuilder() {
        if (tBuilder_ != null) {
          return tBuilder_.getMessageOrBuilder();
        } else {
          return t_ == null ? OnnxMl.TensorProto.getDefaultInstance() : t_;
        }
      }
      /**
       *
       *
       * <pre>
       * tensor value
       * </pre>
       *
       * <code>.onnx.TensorProto t = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          getTFieldBuilder() {
        if (tBuilder_ == null) {
          tBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>(
                  getT(), getParentForChildren(), isClean());
          t_ = null;
        }
        return tBuilder_;
      }

      private OnnxMl.GraphProto g_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>
          gBuilder_;
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public boolean hasG() {
        return gBuilder_ != null || g_ != null;
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public OnnxMl.GraphProto getG() {
        if (gBuilder_ == null) {
          return g_ == null ? OnnxMl.GraphProto.getDefaultInstance() : g_;
        } else {
          return gBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public Builder setG(OnnxMl.GraphProto value) {
        if (gBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          g_ = value;
          onChanged();
        } else {
          gBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public Builder setG(OnnxMl.GraphProto.Builder builderForValue) {
        if (gBuilder_ == null) {
          g_ = builderForValue.build();
          onChanged();
        } else {
          gBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public Builder mergeG(OnnxMl.GraphProto value) {
        if (gBuilder_ == null) {
          if (g_ != null) {
            g_ = OnnxMl.GraphProto.newBuilder(g_).mergeFrom(value).buildPartial();
          } else {
            g_ = value;
          }
          onChanged();
        } else {
          gBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public Builder clearG() {
        if (gBuilder_ == null) {
          g_ = null;
          onChanged();
        } else {
          g_ = null;
          gBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public OnnxMl.GraphProto.Builder getGBuilder() {

        onChanged();
        return getGFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      public OnnxMl.GraphProtoOrBuilder getGOrBuilder() {
        if (gBuilder_ != null) {
          return gBuilder_.getMessageOrBuilder();
        } else {
          return g_ == null ? OnnxMl.GraphProto.getDefaultInstance() : g_;
        }
      }
      /**
       *
       *
       * <pre>
       * graph
       * </pre>
       *
       * <code>.onnx.GraphProto g = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>
          getGFieldBuilder() {
        if (gBuilder_ == null) {
          gBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>(
                  getG(), getParentForChildren(), isClean());
          g_ = null;
        }
        return gBuilder_;
      }

      private OnnxMl.SparseTensorProto sparseTensor_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.SparseTensorProto,
              OnnxMl.SparseTensorProto.Builder,
              OnnxMl.SparseTensorProtoOrBuilder>
          sparseTensorBuilder_;
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public boolean hasSparseTensor() {
        return sparseTensorBuilder_ != null || sparseTensor_ != null;
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public OnnxMl.SparseTensorProto getSparseTensor() {
        if (sparseTensorBuilder_ == null) {
          return sparseTensor_ == null
              ? OnnxMl.SparseTensorProto.getDefaultInstance()
              : sparseTensor_;
        } else {
          return sparseTensorBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public Builder setSparseTensor(OnnxMl.SparseTensorProto value) {
        if (sparseTensorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sparseTensor_ = value;
          onChanged();
        } else {
          sparseTensorBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public Builder setSparseTensor(OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseTensorBuilder_ == null) {
          sparseTensor_ = builderForValue.build();
          onChanged();
        } else {
          sparseTensorBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public Builder mergeSparseTensor(OnnxMl.SparseTensorProto value) {
        if (sparseTensorBuilder_ == null) {
          if (sparseTensor_ != null) {
            sparseTensor_ =
                OnnxMl.SparseTensorProto.newBuilder(sparseTensor_).mergeFrom(value).buildPartial();
          } else {
            sparseTensor_ = value;
          }
          onChanged();
        } else {
          sparseTensorBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public Builder clearSparseTensor() {
        if (sparseTensorBuilder_ == null) {
          sparseTensor_ = null;
          onChanged();
        } else {
          sparseTensor_ = null;
          sparseTensorBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public OnnxMl.SparseTensorProto.Builder getSparseTensorBuilder() {

        onChanged();
        return getSparseTensorFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      public OnnxMl.SparseTensorProtoOrBuilder getSparseTensorOrBuilder() {
        if (sparseTensorBuilder_ != null) {
          return sparseTensorBuilder_.getMessageOrBuilder();
        } else {
          return sparseTensor_ == null
              ? OnnxMl.SparseTensorProto.getDefaultInstance()
              : sparseTensor_;
        }
      }
      /**
       *
       *
       * <pre>
       * sparse tensor value
       * </pre>
       *
       * <code>.onnx.SparseTensorProto sparse_tensor = 22;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.SparseTensorProto,
              OnnxMl.SparseTensorProto.Builder,
              OnnxMl.SparseTensorProtoOrBuilder>
          getSparseTensorFieldBuilder() {
        if (sparseTensorBuilder_ == null) {
          sparseTensorBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.SparseTensorProto,
                  OnnxMl.SparseTensorProto.Builder,
                  OnnxMl.SparseTensorProtoOrBuilder>(
                  getSparseTensor(), getParentForChildren(), isClean());
          sparseTensor_ = null;
        }
        return sparseTensorBuilder_;
      }

      private java.util.List<java.lang.Float> floats_ = java.util.Collections.emptyList();

      private void ensureFloatsIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          floats_ = new java.util.ArrayList<java.lang.Float>(floats_);
          bitField0_ |= 0x00000400;
        }
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public java.util.List<java.lang.Float> getFloatsList() {
        return java.util.Collections.unmodifiableList(floats_);
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public int getFloatsCount() {
        return floats_.size();
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public float getFloats(int index) {
        return floats_.get(index);
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public Builder setFloats(int index, float value) {
        ensureFloatsIsMutable();
        floats_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public Builder addFloats(float value) {
        ensureFloatsIsMutable();
        floats_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public Builder addAllFloats(java.lang.Iterable<? extends java.lang.Float> values) {
        ensureFloatsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, floats_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of floats
       * </pre>
       *
       * <code>repeated float floats = 7;</code>
       */
      public Builder clearFloats() {
        floats_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Long> ints_ = java.util.Collections.emptyList();

      private void ensureIntsIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          ints_ = new java.util.ArrayList<java.lang.Long>(ints_);
          bitField0_ |= 0x00000800;
        }
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public java.util.List<java.lang.Long> getIntsList() {
        return java.util.Collections.unmodifiableList(ints_);
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public int getIntsCount() {
        return ints_.size();
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public long getInts(int index) {
        return ints_.get(index);
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public Builder setInts(int index, long value) {
        ensureIntsIsMutable();
        ints_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public Builder addInts(long value) {
        ensureIntsIsMutable();
        ints_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public Builder addAllInts(java.lang.Iterable<? extends java.lang.Long> values) {
        ensureIntsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ints_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of ints
       * </pre>
       *
       * <code>repeated int64 ints = 8;</code>
       */
      public Builder clearInts() {
        ints_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000800);
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.ByteString> strings_ =
          java.util.Collections.emptyList();

      private void ensureStringsIsMutable() {
        if (!((bitField0_ & 0x00001000) == 0x00001000)) {
          strings_ = new java.util.ArrayList<com.google.protobuf.ByteString>(strings_);
          bitField0_ |= 0x00001000;
        }
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public java.util.List<com.google.protobuf.ByteString> getStringsList() {
        return java.util.Collections.unmodifiableList(strings_);
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public int getStringsCount() {
        return strings_.size();
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public com.google.protobuf.ByteString getStrings(int index) {
        return strings_.get(index);
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public Builder setStrings(int index, com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureStringsIsMutable();
        strings_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public Builder addStrings(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureStringsIsMutable();
        strings_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public Builder addAllStrings(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureStringsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, strings_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of UTF-8 strings
       * </pre>
       *
       * <code>repeated bytes strings = 9;</code>
       */
      public Builder clearStrings() {
        strings_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00001000);
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.TensorProto> tensors_ = java.util.Collections.emptyList();

      private void ensureTensorsIsMutable() {
        if (!((bitField0_ & 0x00002000) == 0x00002000)) {
          tensors_ = new java.util.ArrayList<OnnxMl.TensorProto>(tensors_);
          bitField0_ |= 0x00002000;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          tensorsBuilder_;

      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public java.util.List<OnnxMl.TensorProto> getTensorsList() {
        if (tensorsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tensors_);
        } else {
          return tensorsBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public int getTensorsCount() {
        if (tensorsBuilder_ == null) {
          return tensors_.size();
        } else {
          return tensorsBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public OnnxMl.TensorProto getTensors(int index) {
        if (tensorsBuilder_ == null) {
          return tensors_.get(index);
        } else {
          return tensorsBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder setTensors(int index, OnnxMl.TensorProto value) {
        if (tensorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTensorsIsMutable();
          tensors_.set(index, value);
          onChanged();
        } else {
          tensorsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder setTensors(int index, OnnxMl.TensorProto.Builder builderForValue) {
        if (tensorsBuilder_ == null) {
          ensureTensorsIsMutable();
          tensors_.set(index, builderForValue.build());
          onChanged();
        } else {
          tensorsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder addTensors(OnnxMl.TensorProto value) {
        if (tensorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTensorsIsMutable();
          tensors_.add(value);
          onChanged();
        } else {
          tensorsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder addTensors(int index, OnnxMl.TensorProto value) {
        if (tensorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTensorsIsMutable();
          tensors_.add(index, value);
          onChanged();
        } else {
          tensorsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder addTensors(OnnxMl.TensorProto.Builder builderForValue) {
        if (tensorsBuilder_ == null) {
          ensureTensorsIsMutable();
          tensors_.add(builderForValue.build());
          onChanged();
        } else {
          tensorsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder addTensors(int index, OnnxMl.TensorProto.Builder builderForValue) {
        if (tensorsBuilder_ == null) {
          ensureTensorsIsMutable();
          tensors_.add(index, builderForValue.build());
          onChanged();
        } else {
          tensorsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder addAllTensors(java.lang.Iterable<? extends OnnxMl.TensorProto> values) {
        if (tensorsBuilder_ == null) {
          ensureTensorsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, tensors_);
          onChanged();
        } else {
          tensorsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder clearTensors() {
        if (tensorsBuilder_ == null) {
          tensors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          tensorsBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public Builder removeTensors(int index) {
        if (tensorsBuilder_ == null) {
          ensureTensorsIsMutable();
          tensors_.remove(index);
          onChanged();
        } else {
          tensorsBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public OnnxMl.TensorProto.Builder getTensorsBuilder(int index) {
        return getTensorsFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public OnnxMl.TensorProtoOrBuilder getTensorsOrBuilder(int index) {
        if (tensorsBuilder_ == null) {
          return tensors_.get(index);
        } else {
          return tensorsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public java.util.List<? extends OnnxMl.TensorProtoOrBuilder> getTensorsOrBuilderList() {
        if (tensorsBuilder_ != null) {
          return tensorsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tensors_);
        }
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public OnnxMl.TensorProto.Builder addTensorsBuilder() {
        return getTensorsFieldBuilder().addBuilder(OnnxMl.TensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public OnnxMl.TensorProto.Builder addTensorsBuilder(int index) {
        return getTensorsFieldBuilder().addBuilder(index, OnnxMl.TensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * list of tensors
       * </pre>
       *
       * <code>repeated .onnx.TensorProto tensors = 10;</code>
       */
      public java.util.List<OnnxMl.TensorProto.Builder> getTensorsBuilderList() {
        return getTensorsFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          getTensorsFieldBuilder() {
        if (tensorsBuilder_ == null) {
          tensorsBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>(
                  tensors_,
                  ((bitField0_ & 0x00002000) == 0x00002000),
                  getParentForChildren(),
                  isClean());
          tensors_ = null;
        }
        return tensorsBuilder_;
      }

      private java.util.List<OnnxMl.GraphProto> graphs_ = java.util.Collections.emptyList();

      private void ensureGraphsIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          graphs_ = new java.util.ArrayList<OnnxMl.GraphProto>(graphs_);
          bitField0_ |= 0x00004000;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>
          graphsBuilder_;

      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public java.util.List<OnnxMl.GraphProto> getGraphsList() {
        if (graphsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(graphs_);
        } else {
          return graphsBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public int getGraphsCount() {
        if (graphsBuilder_ == null) {
          return graphs_.size();
        } else {
          return graphsBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public OnnxMl.GraphProto getGraphs(int index) {
        if (graphsBuilder_ == null) {
          return graphs_.get(index);
        } else {
          return graphsBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder setGraphs(int index, OnnxMl.GraphProto value) {
        if (graphsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGraphsIsMutable();
          graphs_.set(index, value);
          onChanged();
        } else {
          graphsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder setGraphs(int index, OnnxMl.GraphProto.Builder builderForValue) {
        if (graphsBuilder_ == null) {
          ensureGraphsIsMutable();
          graphs_.set(index, builderForValue.build());
          onChanged();
        } else {
          graphsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder addGraphs(OnnxMl.GraphProto value) {
        if (graphsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGraphsIsMutable();
          graphs_.add(value);
          onChanged();
        } else {
          graphsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder addGraphs(int index, OnnxMl.GraphProto value) {
        if (graphsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGraphsIsMutable();
          graphs_.add(index, value);
          onChanged();
        } else {
          graphsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder addGraphs(OnnxMl.GraphProto.Builder builderForValue) {
        if (graphsBuilder_ == null) {
          ensureGraphsIsMutable();
          graphs_.add(builderForValue.build());
          onChanged();
        } else {
          graphsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder addGraphs(int index, OnnxMl.GraphProto.Builder builderForValue) {
        if (graphsBuilder_ == null) {
          ensureGraphsIsMutable();
          graphs_.add(index, builderForValue.build());
          onChanged();
        } else {
          graphsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder addAllGraphs(java.lang.Iterable<? extends OnnxMl.GraphProto> values) {
        if (graphsBuilder_ == null) {
          ensureGraphsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, graphs_);
          onChanged();
        } else {
          graphsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder clearGraphs() {
        if (graphsBuilder_ == null) {
          graphs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00004000);
          onChanged();
        } else {
          graphsBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public Builder removeGraphs(int index) {
        if (graphsBuilder_ == null) {
          ensureGraphsIsMutable();
          graphs_.remove(index);
          onChanged();
        } else {
          graphsBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public OnnxMl.GraphProto.Builder getGraphsBuilder(int index) {
        return getGraphsFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public OnnxMl.GraphProtoOrBuilder getGraphsOrBuilder(int index) {
        if (graphsBuilder_ == null) {
          return graphs_.get(index);
        } else {
          return graphsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public java.util.List<? extends OnnxMl.GraphProtoOrBuilder> getGraphsOrBuilderList() {
        if (graphsBuilder_ != null) {
          return graphsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(graphs_);
        }
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public OnnxMl.GraphProto.Builder addGraphsBuilder() {
        return getGraphsFieldBuilder().addBuilder(OnnxMl.GraphProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public OnnxMl.GraphProto.Builder addGraphsBuilder(int index) {
        return getGraphsFieldBuilder().addBuilder(index, OnnxMl.GraphProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * list of graph
       * </pre>
       *
       * <code>repeated .onnx.GraphProto graphs = 11;</code>
       */
      public java.util.List<OnnxMl.GraphProto.Builder> getGraphsBuilderList() {
        return getGraphsFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>
          getGraphsFieldBuilder() {
        if (graphsBuilder_ == null) {
          graphsBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>(
                  graphs_,
                  ((bitField0_ & 0x00004000) == 0x00004000),
                  getParentForChildren(),
                  isClean());
          graphs_ = null;
        }
        return graphsBuilder_;
      }

      private java.util.List<OnnxMl.SparseTensorProto> sparseTensors_ =
          java.util.Collections.emptyList();

      private void ensureSparseTensorsIsMutable() {
        if (!((bitField0_ & 0x00008000) == 0x00008000)) {
          sparseTensors_ = new java.util.ArrayList<OnnxMl.SparseTensorProto>(sparseTensors_);
          bitField0_ |= 0x00008000;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.SparseTensorProto,
              OnnxMl.SparseTensorProto.Builder,
              OnnxMl.SparseTensorProtoOrBuilder>
          sparseTensorsBuilder_;

      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public java.util.List<OnnxMl.SparseTensorProto> getSparseTensorsList() {
        if (sparseTensorsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sparseTensors_);
        } else {
          return sparseTensorsBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public int getSparseTensorsCount() {
        if (sparseTensorsBuilder_ == null) {
          return sparseTensors_.size();
        } else {
          return sparseTensorsBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public OnnxMl.SparseTensorProto getSparseTensors(int index) {
        if (sparseTensorsBuilder_ == null) {
          return sparseTensors_.get(index);
        } else {
          return sparseTensorsBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder setSparseTensors(int index, OnnxMl.SparseTensorProto value) {
        if (sparseTensorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseTensorsIsMutable();
          sparseTensors_.set(index, value);
          onChanged();
        } else {
          sparseTensorsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder setSparseTensors(int index, OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseTensorsBuilder_ == null) {
          ensureSparseTensorsIsMutable();
          sparseTensors_.set(index, builderForValue.build());
          onChanged();
        } else {
          sparseTensorsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder addSparseTensors(OnnxMl.SparseTensorProto value) {
        if (sparseTensorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseTensorsIsMutable();
          sparseTensors_.add(value);
          onChanged();
        } else {
          sparseTensorsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder addSparseTensors(int index, OnnxMl.SparseTensorProto value) {
        if (sparseTensorsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseTensorsIsMutable();
          sparseTensors_.add(index, value);
          onChanged();
        } else {
          sparseTensorsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder addSparseTensors(OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseTensorsBuilder_ == null) {
          ensureSparseTensorsIsMutable();
          sparseTensors_.add(builderForValue.build());
          onChanged();
        } else {
          sparseTensorsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder addSparseTensors(int index, OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseTensorsBuilder_ == null) {
          ensureSparseTensorsIsMutable();
          sparseTensors_.add(index, builderForValue.build());
          onChanged();
        } else {
          sparseTensorsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder addAllSparseTensors(
          java.lang.Iterable<? extends OnnxMl.SparseTensorProto> values) {
        if (sparseTensorsBuilder_ == null) {
          ensureSparseTensorsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, sparseTensors_);
          onChanged();
        } else {
          sparseTensorsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder clearSparseTensors() {
        if (sparseTensorsBuilder_ == null) {
          sparseTensors_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          sparseTensorsBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public Builder removeSparseTensors(int index) {
        if (sparseTensorsBuilder_ == null) {
          ensureSparseTensorsIsMutable();
          sparseTensors_.remove(index);
          onChanged();
        } else {
          sparseTensorsBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public OnnxMl.SparseTensorProto.Builder getSparseTensorsBuilder(int index) {
        return getSparseTensorsFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public OnnxMl.SparseTensorProtoOrBuilder getSparseTensorsOrBuilder(int index) {
        if (sparseTensorsBuilder_ == null) {
          return sparseTensors_.get(index);
        } else {
          return sparseTensorsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public java.util.List<? extends OnnxMl.SparseTensorProtoOrBuilder>
          getSparseTensorsOrBuilderList() {
        if (sparseTensorsBuilder_ != null) {
          return sparseTensorsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sparseTensors_);
        }
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public OnnxMl.SparseTensorProto.Builder addSparseTensorsBuilder() {
        return getSparseTensorsFieldBuilder()
            .addBuilder(OnnxMl.SparseTensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public OnnxMl.SparseTensorProto.Builder addSparseTensorsBuilder(int index) {
        return getSparseTensorsFieldBuilder()
            .addBuilder(index, OnnxMl.SparseTensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * list of sparse tensors
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_tensors = 23;</code>
       */
      public java.util.List<OnnxMl.SparseTensorProto.Builder> getSparseTensorsBuilderList() {
        return getSparseTensorsFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.SparseTensorProto,
              OnnxMl.SparseTensorProto.Builder,
              OnnxMl.SparseTensorProtoOrBuilder>
          getSparseTensorsFieldBuilder() {
        if (sparseTensorsBuilder_ == null) {
          sparseTensorsBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.SparseTensorProto,
                  OnnxMl.SparseTensorProto.Builder,
                  OnnxMl.SparseTensorProtoOrBuilder>(
                  sparseTensors_,
                  ((bitField0_ & 0x00008000) == 0x00008000),
                  getParentForChildren(),
                  isClean());
          sparseTensors_ = null;
        }
        return sparseTensorsBuilder_;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.AttributeProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.AttributeProto)
    private static final OnnxMl.AttributeProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.AttributeProto();
    }

    public static OnnxMl.AttributeProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<AttributeProto> PARSER =
        new com.google.protobuf.AbstractParser<AttributeProto>() {
          @java.lang.Override
          public AttributeProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new AttributeProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<AttributeProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<AttributeProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.AttributeProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface ValueInfoProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.ValueInfoProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    java.lang.String getName();
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    com.google.protobuf.ByteString getNameBytes();

    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR for
     * inputs and outputs of the top-level graph.
     * </pre>
     *
     * <code>.onnx.TypeProto type = 2;</code>
     */
    boolean hasType();
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR for
     * inputs and outputs of the top-level graph.
     * </pre>
     *
     * <code>.onnx.TypeProto type = 2;</code>
     */
    OnnxMl.TypeProto getType();
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR for
     * inputs and outputs of the top-level graph.
     * </pre>
     *
     * <code>.onnx.TypeProto type = 2;</code>
     */
    OnnxMl.TypeProtoOrBuilder getTypeOrBuilder();

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this value. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 3;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this value. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 3;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();
  }
  /**
   *
   *
   * <pre>
   * Defines information on value, including the name, the type, and
   * the shape of the value.
   * </pre>
   *
   * Protobuf type {@code onnx.ValueInfoProto}
   */
  public static final class ValueInfoProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.ValueInfoProto)
      ValueInfoProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use ValueInfoProto.newBuilder() to construct.
    private ValueInfoProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private ValueInfoProto() {
      name_ = "";
      docString_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private ValueInfoProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
            case 18:
              {
                OnnxMl.TypeProto.Builder subBuilder = null;
                if (type_ != null) {
                  subBuilder = type_.toBuilder();
                }
                type_ = input.readMessage(OnnxMl.TypeProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(type_);
                  type_ = subBuilder.buildPartial();
                }

                break;
              }
            case 26:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_ValueInfoProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_ValueInfoProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.ValueInfoProto.class, OnnxMl.ValueInfoProto.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_FIELD_NUMBER = 2;
    private OnnxMl.TypeProto type_;
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR for
     * inputs and outputs of the top-level graph.
     * </pre>
     *
     * <code>.onnx.TypeProto type = 2;</code>
     */
    public boolean hasType() {
      return type_ != null;
    }
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR for
     * inputs and outputs of the top-level graph.
     * </pre>
     *
     * <code>.onnx.TypeProto type = 2;</code>
     */
    public OnnxMl.TypeProto getType() {
      return type_ == null ? OnnxMl.TypeProto.getDefaultInstance() : type_;
    }
    /**
     *
     *
     * <pre>
     * This field MUST be present in this version of the IR for
     * inputs and outputs of the top-level graph.
     * </pre>
     *
     * <code>.onnx.TypeProto type = 2;</code>
     */
    public OnnxMl.TypeProtoOrBuilder getTypeOrBuilder() {
      return getType();
    }

    public static final int DOC_STRING_FIELD_NUMBER = 3;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this value. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 3;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this value. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 3;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (type_ != null) {
        output.writeMessage(2, getType());
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, docString_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (type_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getType());
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, docString_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.ValueInfoProto)) {
        return super.equals(obj);
      }
      OnnxMl.ValueInfoProto other = (OnnxMl.ValueInfoProto) obj;

      boolean result = true;
      result = result && getName().equals(other.getName());
      result = result && (hasType() == other.hasType());
      if (hasType()) {
        result = result && getType().equals(other.getType());
      }
      result = result && getDocString().equals(other.getDocString());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      if (hasType()) {
        hash = (37 * hash) + TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getType().hashCode();
      }
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.ValueInfoProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.ValueInfoProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.ValueInfoProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.ValueInfoProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.ValueInfoProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.ValueInfoProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.ValueInfoProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.ValueInfoProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.ValueInfoProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.ValueInfoProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.ValueInfoProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.ValueInfoProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.ValueInfoProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Defines information on value, including the name, the type, and
     * the shape of the value.
     * </pre>
     *
     * Protobuf type {@code onnx.ValueInfoProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.ValueInfoProto)
        OnnxMl.ValueInfoProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_ValueInfoProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_ValueInfoProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.ValueInfoProto.class, OnnxMl.ValueInfoProto.Builder.class);
      }

      // Construct using OnnxMlProto3.ValueInfoProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        if (typeBuilder_ == null) {
          type_ = null;
        } else {
          type_ = null;
          typeBuilder_ = null;
        }
        docString_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_ValueInfoProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.ValueInfoProto getDefaultInstanceForType() {
        return OnnxMl.ValueInfoProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.ValueInfoProto build() {
        OnnxMl.ValueInfoProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.ValueInfoProto buildPartial() {
        OnnxMl.ValueInfoProto result = new OnnxMl.ValueInfoProto(this);
        result.name_ = name_;
        if (typeBuilder_ == null) {
          result.type_ = type_;
        } else {
          result.type_ = typeBuilder_.build();
        }
        result.docString_ = docString_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.ValueInfoProto) {
          return mergeFrom((OnnxMl.ValueInfoProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.ValueInfoProto other) {
        if (other == OnnxMl.ValueInfoProto.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.hasType()) {
          mergeType(other.getType());
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.ValueInfoProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.ValueInfoProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder setName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        name_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder clearName() {

        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder setNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        name_ = value;
        onChanged();
        return this;
      }

      private OnnxMl.TypeProto type_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>
          typeBuilder_;
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public boolean hasType() {
        return typeBuilder_ != null || type_ != null;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public OnnxMl.TypeProto getType() {
        if (typeBuilder_ == null) {
          return type_ == null ? OnnxMl.TypeProto.getDefaultInstance() : type_;
        } else {
          return typeBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public Builder setType(OnnxMl.TypeProto value) {
        if (typeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          typeBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public Builder setType(OnnxMl.TypeProto.Builder builderForValue) {
        if (typeBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          typeBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public Builder mergeType(OnnxMl.TypeProto value) {
        if (typeBuilder_ == null) {
          if (type_ != null) {
            type_ = OnnxMl.TypeProto.newBuilder(type_).mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          typeBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public Builder clearType() {
        if (typeBuilder_ == null) {
          type_ = null;
          onChanged();
        } else {
          type_ = null;
          typeBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public OnnxMl.TypeProto.Builder getTypeBuilder() {

        onChanged();
        return getTypeFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      public OnnxMl.TypeProtoOrBuilder getTypeOrBuilder() {
        if (typeBuilder_ != null) {
          return typeBuilder_.getMessageOrBuilder();
        } else {
          return type_ == null ? OnnxMl.TypeProto.getDefaultInstance() : type_;
        }
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present in this version of the IR for
       * inputs and outputs of the top-level graph.
       * </pre>
       *
       * <code>.onnx.TypeProto type = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>
          getTypeFieldBuilder() {
        if (typeBuilder_ == null) {
          typeBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>(
                  getType(), getParentForChildren(), isClean());
          type_ = null;
        }
        return typeBuilder_;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this value. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 3;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this value. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 3;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this value. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 3;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this value. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 3;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this value. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 3;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.ValueInfoProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.ValueInfoProto)
    private static final OnnxMl.ValueInfoProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.ValueInfoProto();
    }

    public static OnnxMl.ValueInfoProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ValueInfoProto> PARSER =
        new com.google.protobuf.AbstractParser<ValueInfoProto>() {
          @java.lang.Override
          public ValueInfoProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new ValueInfoProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<ValueInfoProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ValueInfoProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.ValueInfoProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface NodeProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.NodeProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    java.util.List<java.lang.String> getInputList();
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    int getInputCount();
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    java.lang.String getInput(int index);
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    com.google.protobuf.ByteString getInputBytes(int index);

    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    java.util.List<java.lang.String> getOutputList();
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    int getOutputCount();
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    java.lang.String getOutput(int index);
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    com.google.protobuf.ByteString getOutputBytes(int index);

    /**
     *
     *
     * <pre>
     * An optional identifier for this node in a graph.
     * This field MAY be absent in ths version of the IR.
     * </pre>
     *
     * <code>string name = 3;</code>
     */
    java.lang.String getName();
    /**
     *
     *
     * <pre>
     * An optional identifier for this node in a graph.
     * This field MAY be absent in ths version of the IR.
     * </pre>
     *
     * <code>string name = 3;</code>
     */
    com.google.protobuf.ByteString getNameBytes();

    /**
     *
     *
     * <pre>
     * The symbolic identifier of the Operator to execute.
     * </pre>
     *
     * <code>string op_type = 4;</code>
     */
    java.lang.String getOpType();
    /**
     *
     *
     * <pre>
     * The symbolic identifier of the Operator to execute.
     * </pre>
     *
     * <code>string op_type = 4;</code>
     */
    com.google.protobuf.ByteString getOpTypeBytes();

    /**
     *
     *
     * <pre>
     * The domain of the OperatorSet that specifies the operator named by op_type.
     * </pre>
     *
     * <code>string domain = 7;</code>
     */
    java.lang.String getDomain();
    /**
     *
     *
     * <pre>
     * The domain of the OperatorSet that specifies the operator named by op_type.
     * </pre>
     *
     * <code>string domain = 7;</code>
     */
    com.google.protobuf.ByteString getDomainBytes();

    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    java.util.List<OnnxMl.AttributeProto> getAttributeList();
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    OnnxMl.AttributeProto getAttribute(int index);
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    int getAttributeCount();
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    java.util.List<? extends OnnxMl.AttributeProtoOrBuilder> getAttributeOrBuilderList();
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    OnnxMl.AttributeProtoOrBuilder getAttributeOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this node. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this node. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();
  }
  /**
   *
   *
   * <pre>
   * Nodes
   * Computation graphs are made up of a DAG of nodes, which represent what is
   * commonly called a "layer" or "pipeline stage" in machine learning frameworks.
   * For example, it can be a node of type "Conv" that takes in an image, a filter
   * tensor and a bias tensor, and produces the convolved output.
   * </pre>
   *
   * Protobuf type {@code onnx.NodeProto}
   */
  public static final class NodeProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.NodeProto)
      NodeProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use NodeProto.newBuilder() to construct.
    private NodeProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private NodeProto() {
      input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      output_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      name_ = "";
      opType_ = "";
      domain_ = "";
      attribute_ = java.util.Collections.emptyList();
      docString_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private NodeProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  input_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000001;
                }
                input_.add(s);
                break;
              }
            case 18:
              {
                java.lang.String s = input.readStringRequireUtf8();
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  output_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000002;
                }
                output_.add(s);
                break;
              }
            case 26:
              {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
            case 34:
              {
                java.lang.String s = input.readStringRequireUtf8();

                opType_ = s;
                break;
              }
            case 42:
              {
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  attribute_ = new java.util.ArrayList<OnnxMl.AttributeProto>();
                  mutable_bitField0_ |= 0x00000020;
                }
                attribute_.add(
                    input.readMessage(OnnxMl.AttributeProto.parser(), extensionRegistry));
                break;
              }
            case 50:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            case 58:
              {
                java.lang.String s = input.readStringRequireUtf8();

                domain_ = s;
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          input_ = input_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          output_ = output_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          attribute_ = java.util.Collections.unmodifiableList(attribute_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_NodeProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_NodeProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(OnnxMl.NodeProto.class, OnnxMl.NodeProto.Builder.class);
    }

    private int bitField0_;
    public static final int INPUT_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList input_;
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList getInputList() {
      return input_;
    }
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    public int getInputCount() {
      return input_.size();
    }
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    public java.lang.String getInput(int index) {
      return input_.get(index);
    }
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string input = 1;</code>
     */
    public com.google.protobuf.ByteString getInputBytes(int index) {
      return input_.getByteString(index);
    }

    public static final int OUTPUT_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList output_;
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList getOutputList() {
      return output_;
    }
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    public int getOutputCount() {
      return output_.size();
    }
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    public java.lang.String getOutput(int index) {
      return output_.get(index);
    }
    /**
     *
     *
     * <pre>
     * namespace Value
     * </pre>
     *
     * <code>repeated string output = 2;</code>
     */
    public com.google.protobuf.ByteString getOutputBytes(int index) {
      return output_.getByteString(index);
    }

    public static final int NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object name_;
    /**
     *
     *
     * <pre>
     * An optional identifier for this node in a graph.
     * This field MAY be absent in ths version of the IR.
     * </pre>
     *
     * <code>string name = 3;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * An optional identifier for this node in a graph.
     * This field MAY be absent in ths version of the IR.
     * </pre>
     *
     * <code>string name = 3;</code>
     */
    public com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OP_TYPE_FIELD_NUMBER = 4;
    private volatile java.lang.Object opType_;
    /**
     *
     *
     * <pre>
     * The symbolic identifier of the Operator to execute.
     * </pre>
     *
     * <code>string op_type = 4;</code>
     */
    public java.lang.String getOpType() {
      java.lang.Object ref = opType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        opType_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The symbolic identifier of the Operator to execute.
     * </pre>
     *
     * <code>string op_type = 4;</code>
     */
    public com.google.protobuf.ByteString getOpTypeBytes() {
      java.lang.Object ref = opType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        opType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DOMAIN_FIELD_NUMBER = 7;
    private volatile java.lang.Object domain_;
    /**
     *
     *
     * <pre>
     * The domain of the OperatorSet that specifies the operator named by op_type.
     * </pre>
     *
     * <code>string domain = 7;</code>
     */
    public java.lang.String getDomain() {
      java.lang.Object ref = domain_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        domain_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The domain of the OperatorSet that specifies the operator named by op_type.
     * </pre>
     *
     * <code>string domain = 7;</code>
     */
    public com.google.protobuf.ByteString getDomainBytes() {
      java.lang.Object ref = domain_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        domain_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ATTRIBUTE_FIELD_NUMBER = 5;
    private java.util.List<OnnxMl.AttributeProto> attribute_;
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    public java.util.List<OnnxMl.AttributeProto> getAttributeList() {
      return attribute_;
    }
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    public java.util.List<? extends OnnxMl.AttributeProtoOrBuilder> getAttributeOrBuilderList() {
      return attribute_;
    }
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    public int getAttributeCount() {
      return attribute_.size();
    }
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    public OnnxMl.AttributeProto getAttribute(int index) {
      return attribute_.get(index);
    }
    /**
     *
     *
     * <pre>
     * Additional named attributes.
     * </pre>
     *
     * <code>repeated .onnx.AttributeProto attribute = 5;</code>
     */
    public OnnxMl.AttributeProtoOrBuilder getAttributeOrBuilder(int index) {
      return attribute_.get(index);
    }

    public static final int DOC_STRING_FIELD_NUMBER = 6;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this node. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this node. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      for (int i = 0; i < input_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, input_.getRaw(i));
      }
      for (int i = 0; i < output_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, output_.getRaw(i));
      }
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
      }
      if (!getOpTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, opType_);
      }
      for (int i = 0; i < attribute_.size(); i++) {
        output.writeMessage(5, attribute_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, docString_);
      }
      if (!getDomainBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, domain_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < input_.size(); i++) {
          dataSize += computeStringSizeNoTag(input_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getInputList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < output_.size(); i++) {
          dataSize += computeStringSizeNoTag(output_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getOutputList().size();
      }
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
      }
      if (!getOpTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, opType_);
      }
      for (int i = 0; i < attribute_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, attribute_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, docString_);
      }
      if (!getDomainBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, domain_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.NodeProto)) {
        return super.equals(obj);
      }
      OnnxMl.NodeProto other = (OnnxMl.NodeProto) obj;

      boolean result = true;
      result = result && getInputList().equals(other.getInputList());
      result = result && getOutputList().equals(other.getOutputList());
      result = result && getName().equals(other.getName());
      result = result && getOpType().equals(other.getOpType());
      result = result && getDomain().equals(other.getDomain());
      result = result && getAttributeList().equals(other.getAttributeList());
      result = result && getDocString().equals(other.getDocString());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getInputCount() > 0) {
        hash = (37 * hash) + INPUT_FIELD_NUMBER;
        hash = (53 * hash) + getInputList().hashCode();
      }
      if (getOutputCount() > 0) {
        hash = (37 * hash) + OUTPUT_FIELD_NUMBER;
        hash = (53 * hash) + getOutputList().hashCode();
      }
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + OP_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getOpType().hashCode();
      hash = (37 * hash) + DOMAIN_FIELD_NUMBER;
      hash = (53 * hash) + getDomain().hashCode();
      if (getAttributeCount() > 0) {
        hash = (37 * hash) + ATTRIBUTE_FIELD_NUMBER;
        hash = (53 * hash) + getAttributeList().hashCode();
      }
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.NodeProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.NodeProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.NodeProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.NodeProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.NodeProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.NodeProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.NodeProto parseFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.NodeProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.NodeProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.NodeProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.NodeProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.NodeProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.NodeProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Nodes
     * Computation graphs are made up of a DAG of nodes, which represent what is
     * commonly called a "layer" or "pipeline stage" in machine learning frameworks.
     * For example, it can be a node of type "Conv" that takes in an image, a filter
     * tensor and a bias tensor, and produces the convolved output.
     * </pre>
     *
     * Protobuf type {@code onnx.NodeProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.NodeProto)
        OnnxMl.NodeProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_NodeProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_NodeProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.NodeProto.class, OnnxMl.NodeProto.Builder.class);
      }

      // Construct using OnnxMlProto3.NodeProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getAttributeFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        output_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = "";

        opType_ = "";

        domain_ = "";

        if (attributeBuilder_ == null) {
          attribute_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          attributeBuilder_.clear();
        }
        docString_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_NodeProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.NodeProto getDefaultInstanceForType() {
        return OnnxMl.NodeProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.NodeProto build() {
        OnnxMl.NodeProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.NodeProto buildPartial() {
        OnnxMl.NodeProto result = new OnnxMl.NodeProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          input_ = input_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.input_ = input_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output_ = output_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.output_ = output_;
        result.name_ = name_;
        result.opType_ = opType_;
        result.domain_ = domain_;
        if (attributeBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            attribute_ = java.util.Collections.unmodifiableList(attribute_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.attribute_ = attribute_;
        } else {
          result.attribute_ = attributeBuilder_.build();
        }
        result.docString_ = docString_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.NodeProto) {
          return mergeFrom((OnnxMl.NodeProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.NodeProto other) {
        if (other == OnnxMl.NodeProto.getDefaultInstance()) return this;
        if (!other.input_.isEmpty()) {
          if (input_.isEmpty()) {
            input_ = other.input_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureInputIsMutable();
            input_.addAll(other.input_);
          }
          onChanged();
        }
        if (!other.output_.isEmpty()) {
          if (output_.isEmpty()) {
            output_ = other.output_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureOutputIsMutable();
            output_.addAll(other.output_);
          }
          onChanged();
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getOpType().isEmpty()) {
          opType_ = other.opType_;
          onChanged();
        }
        if (!other.getDomain().isEmpty()) {
          domain_ = other.domain_;
          onChanged();
        }
        if (attributeBuilder_ == null) {
          if (!other.attribute_.isEmpty()) {
            if (attribute_.isEmpty()) {
              attribute_ = other.attribute_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureAttributeIsMutable();
              attribute_.addAll(other.attribute_);
            }
            onChanged();
          }
        } else {
          if (!other.attribute_.isEmpty()) {
            if (attributeBuilder_.isEmpty()) {
              attributeBuilder_.dispose();
              attributeBuilder_ = null;
              attribute_ = other.attribute_;
              bitField0_ = (bitField0_ & ~0x00000020);
              attributeBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getAttributeFieldBuilder()
                      : null;
            } else {
              attributeBuilder_.addAllMessages(other.attribute_);
            }
          }
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.NodeProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.NodeProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.LazyStringList input_ =
          com.google.protobuf.LazyStringArrayList.EMPTY;

      private void ensureInputIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          input_ = new com.google.protobuf.LazyStringArrayList(input_);
          bitField0_ |= 0x00000001;
        }
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList getInputList() {
        return input_.getUnmodifiableView();
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public int getInputCount() {
        return input_.size();
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public java.lang.String getInput(int index) {
        return input_.get(index);
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public com.google.protobuf.ByteString getInputBytes(int index) {
        return input_.getByteString(index);
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public Builder setInput(int index, java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputIsMutable();
        input_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public Builder addInput(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputIsMutable();
        input_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public Builder addAllInput(java.lang.Iterable<java.lang.String> values) {
        ensureInputIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, input_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public Builder clearInput() {
        input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string input = 1;</code>
       */
      public Builder addInputBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        ensureInputIsMutable();
        input_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList output_ =
          com.google.protobuf.LazyStringArrayList.EMPTY;

      private void ensureOutputIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          output_ = new com.google.protobuf.LazyStringArrayList(output_);
          bitField0_ |= 0x00000002;
        }
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList getOutputList() {
        return output_.getUnmodifiableView();
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public int getOutputCount() {
        return output_.size();
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public java.lang.String getOutput(int index) {
        return output_.get(index);
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public com.google.protobuf.ByteString getOutputBytes(int index) {
        return output_.getByteString(index);
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public Builder setOutput(int index, java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputIsMutable();
        output_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public Builder addOutput(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputIsMutable();
        output_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public Builder addAllOutput(java.lang.Iterable<java.lang.String> values) {
        ensureOutputIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, output_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public Builder clearOutput() {
        output_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * namespace Value
       * </pre>
       *
       * <code>repeated string output = 2;</code>
       */
      public Builder addOutputBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        ensureOutputIsMutable();
        output_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       *
       *
       * <pre>
       * An optional identifier for this node in a graph.
       * This field MAY be absent in ths version of the IR.
       * </pre>
       *
       * <code>string name = 3;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * An optional identifier for this node in a graph.
       * This field MAY be absent in ths version of the IR.
       * </pre>
       *
       * <code>string name = 3;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * An optional identifier for this node in a graph.
       * This field MAY be absent in ths version of the IR.
       * </pre>
       *
       * <code>string name = 3;</code>
       */
      public Builder setName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        name_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * An optional identifier for this node in a graph.
       * This field MAY be absent in ths version of the IR.
       * </pre>
       *
       * <code>string name = 3;</code>
       */
      public Builder clearName() {

        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * An optional identifier for this node in a graph.
       * This field MAY be absent in ths version of the IR.
       * </pre>
       *
       * <code>string name = 3;</code>
       */
      public Builder setNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object opType_ = "";
      /**
       *
       *
       * <pre>
       * The symbolic identifier of the Operator to execute.
       * </pre>
       *
       * <code>string op_type = 4;</code>
       */
      public java.lang.String getOpType() {
        java.lang.Object ref = opType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          opType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The symbolic identifier of the Operator to execute.
       * </pre>
       *
       * <code>string op_type = 4;</code>
       */
      public com.google.protobuf.ByteString getOpTypeBytes() {
        java.lang.Object ref = opType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          opType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The symbolic identifier of the Operator to execute.
       * </pre>
       *
       * <code>string op_type = 4;</code>
       */
      public Builder setOpType(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        opType_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The symbolic identifier of the Operator to execute.
       * </pre>
       *
       * <code>string op_type = 4;</code>
       */
      public Builder clearOpType() {

        opType_ = getDefaultInstance().getOpType();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The symbolic identifier of the Operator to execute.
       * </pre>
       *
       * <code>string op_type = 4;</code>
       */
      public Builder setOpTypeBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        opType_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object domain_ = "";
      /**
       *
       *
       * <pre>
       * The domain of the OperatorSet that specifies the operator named by op_type.
       * </pre>
       *
       * <code>string domain = 7;</code>
       */
      public java.lang.String getDomain() {
        java.lang.Object ref = domain_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          domain_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The domain of the OperatorSet that specifies the operator named by op_type.
       * </pre>
       *
       * <code>string domain = 7;</code>
       */
      public com.google.protobuf.ByteString getDomainBytes() {
        java.lang.Object ref = domain_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          domain_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The domain of the OperatorSet that specifies the operator named by op_type.
       * </pre>
       *
       * <code>string domain = 7;</code>
       */
      public Builder setDomain(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        domain_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The domain of the OperatorSet that specifies the operator named by op_type.
       * </pre>
       *
       * <code>string domain = 7;</code>
       */
      public Builder clearDomain() {

        domain_ = getDefaultInstance().getDomain();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The domain of the OperatorSet that specifies the operator named by op_type.
       * </pre>
       *
       * <code>string domain = 7;</code>
       */
      public Builder setDomainBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        domain_ = value;
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.AttributeProto> attribute_ = java.util.Collections.emptyList();

      private void ensureAttributeIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          attribute_ = new java.util.ArrayList<OnnxMl.AttributeProto>(attribute_);
          bitField0_ |= 0x00000020;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.AttributeProto, OnnxMl.AttributeProto.Builder, OnnxMl.AttributeProtoOrBuilder>
          attributeBuilder_;

      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public java.util.List<OnnxMl.AttributeProto> getAttributeList() {
        if (attributeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(attribute_);
        } else {
          return attributeBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public int getAttributeCount() {
        if (attributeBuilder_ == null) {
          return attribute_.size();
        } else {
          return attributeBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public OnnxMl.AttributeProto getAttribute(int index) {
        if (attributeBuilder_ == null) {
          return attribute_.get(index);
        } else {
          return attributeBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder setAttribute(int index, OnnxMl.AttributeProto value) {
        if (attributeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttributeIsMutable();
          attribute_.set(index, value);
          onChanged();
        } else {
          attributeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder setAttribute(int index, OnnxMl.AttributeProto.Builder builderForValue) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.set(index, builderForValue.build());
          onChanged();
        } else {
          attributeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder addAttribute(OnnxMl.AttributeProto value) {
        if (attributeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttributeIsMutable();
          attribute_.add(value);
          onChanged();
        } else {
          attributeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder addAttribute(int index, OnnxMl.AttributeProto value) {
        if (attributeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttributeIsMutable();
          attribute_.add(index, value);
          onChanged();
        } else {
          attributeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder addAttribute(OnnxMl.AttributeProto.Builder builderForValue) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.add(builderForValue.build());
          onChanged();
        } else {
          attributeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder addAttribute(int index, OnnxMl.AttributeProto.Builder builderForValue) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.add(index, builderForValue.build());
          onChanged();
        } else {
          attributeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder addAllAttribute(java.lang.Iterable<? extends OnnxMl.AttributeProto> values) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, attribute_);
          onChanged();
        } else {
          attributeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder clearAttribute() {
        if (attributeBuilder_ == null) {
          attribute_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          attributeBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public Builder removeAttribute(int index) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.remove(index);
          onChanged();
        } else {
          attributeBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public OnnxMl.AttributeProto.Builder getAttributeBuilder(int index) {
        return getAttributeFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public OnnxMl.AttributeProtoOrBuilder getAttributeOrBuilder(int index) {
        if (attributeBuilder_ == null) {
          return attribute_.get(index);
        } else {
          return attributeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public java.util.List<? extends OnnxMl.AttributeProtoOrBuilder> getAttributeOrBuilderList() {
        if (attributeBuilder_ != null) {
          return attributeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(attribute_);
        }
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public OnnxMl.AttributeProto.Builder addAttributeBuilder() {
        return getAttributeFieldBuilder().addBuilder(OnnxMl.AttributeProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public OnnxMl.AttributeProto.Builder addAttributeBuilder(int index) {
        return getAttributeFieldBuilder()
            .addBuilder(index, OnnxMl.AttributeProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Additional named attributes.
       * </pre>
       *
       * <code>repeated .onnx.AttributeProto attribute = 5;</code>
       */
      public java.util.List<OnnxMl.AttributeProto.Builder> getAttributeBuilderList() {
        return getAttributeFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.AttributeProto, OnnxMl.AttributeProto.Builder, OnnxMl.AttributeProtoOrBuilder>
          getAttributeFieldBuilder() {
        if (attributeBuilder_ == null) {
          attributeBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.AttributeProto,
                  OnnxMl.AttributeProto.Builder,
                  OnnxMl.AttributeProtoOrBuilder>(
                  attribute_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          attribute_ = null;
        }
        return attributeBuilder_;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this node. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this node. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this node. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this node. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this node. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.NodeProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.NodeProto)
    private static final OnnxMl.NodeProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.NodeProto();
    }

    public static OnnxMl.NodeProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<NodeProto> PARSER =
        new com.google.protobuf.AbstractParser<NodeProto>() {
          @java.lang.Override
          public NodeProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new NodeProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<NodeProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<NodeProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.NodeProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface ModelProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.ModelProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The version of the IR this model targets. See Version enum above.
     * This field MUST be present.
     * </pre>
     *
     * <code>int64 ir_version = 1;</code>
     */
    long getIrVersion();

    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    java.util.List<OnnxMl.OperatorSetIdProto> getOpsetImportList();
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    OnnxMl.OperatorSetIdProto getOpsetImport(int index);
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    int getOpsetImportCount();
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    java.util.List<? extends OnnxMl.OperatorSetIdProtoOrBuilder> getOpsetImportOrBuilderList();
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    OnnxMl.OperatorSetIdProtoOrBuilder getOpsetImportOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * The name of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_name = 2;</code>
     */
    java.lang.String getProducerName();
    /**
     *
     *
     * <pre>
     * The name of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_name = 2;</code>
     */
    com.google.protobuf.ByteString getProducerNameBytes();

    /**
     *
     *
     * <pre>
     * The version of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_version = 3;</code>
     */
    java.lang.String getProducerVersion();
    /**
     *
     *
     * <pre>
     * The version of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_version = 3;</code>
     */
    com.google.protobuf.ByteString getProducerVersionBytes();

    /**
     *
     *
     * <pre>
     * Domain name of the model.
     * We use reverse domain names as name space indicators. For example:
     * `com.facebook.fair` or `com.microsoft.cognitiveservices`
     * Together with `model_version` and GraphProto.name, this forms the unique identity of
     * the graph.
     * </pre>
     *
     * <code>string domain = 4;</code>
     */
    java.lang.String getDomain();
    /**
     *
     *
     * <pre>
     * Domain name of the model.
     * We use reverse domain names as name space indicators. For example:
     * `com.facebook.fair` or `com.microsoft.cognitiveservices`
     * Together with `model_version` and GraphProto.name, this forms the unique identity of
     * the graph.
     * </pre>
     *
     * <code>string domain = 4;</code>
     */
    com.google.protobuf.ByteString getDomainBytes();

    /**
     *
     *
     * <pre>
     * The version of the graph encoded. See Version enum below.
     * </pre>
     *
     * <code>int64 model_version = 5;</code>
     */
    long getModelVersion();

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this model. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this model. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();

    /**
     *
     *
     * <pre>
     * The parameterized graph that is evaluated to execute the model.
     * </pre>
     *
     * <code>.onnx.GraphProto graph = 7;</code>
     */
    boolean hasGraph();
    /**
     *
     *
     * <pre>
     * The parameterized graph that is evaluated to execute the model.
     * </pre>
     *
     * <code>.onnx.GraphProto graph = 7;</code>
     */
    OnnxMl.GraphProto getGraph();
    /**
     *
     *
     * <pre>
     * The parameterized graph that is evaluated to execute the model.
     * </pre>
     *
     * <code>.onnx.GraphProto graph = 7;</code>
     */
    OnnxMl.GraphProtoOrBuilder getGraphOrBuilder();

    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    java.util.List<OnnxMl.FunctionProto> getFunctionsList();
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    OnnxMl.FunctionProto getFunctions(int index);
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    int getFunctionsCount();
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    java.util.List<? extends OnnxMl.FunctionProtoOrBuilder> getFunctionsOrBuilderList();
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    OnnxMl.FunctionProtoOrBuilder getFunctionsOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    java.util.List<OnnxMl.StringStringEntryProto> getMetadataPropsList();
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    OnnxMl.StringStringEntryProto getMetadataProps(int index);
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    int getMetadataPropsCount();
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
        getMetadataPropsOrBuilderList();
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    OnnxMl.StringStringEntryProtoOrBuilder getMetadataPropsOrBuilder(int index);
  }
  /**
   *
   *
   * <pre>
   * Models
   * ModelProto is a top-level file/container format for bundling a ML model and
   * associating its computation graph with metadata.
   * The semantics of the model are described by the associated GraphProto.
   * </pre>
   *
   * Protobuf type {@code onnx.ModelProto}
   */
  public static final class ModelProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.ModelProto)
      ModelProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use ModelProto.newBuilder() to construct.
    private ModelProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private ModelProto() {
      irVersion_ = 0L;
      opsetImport_ = java.util.Collections.emptyList();
      producerName_ = "";
      producerVersion_ = "";
      domain_ = "";
      modelVersion_ = 0L;
      docString_ = "";
      functions_ = java.util.Collections.emptyList();
      metadataProps_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private ModelProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8:
              {
                irVersion_ = input.readInt64();
                break;
              }
            case 18:
              {
                java.lang.String s = input.readStringRequireUtf8();

                producerName_ = s;
                break;
              }
            case 26:
              {
                java.lang.String s = input.readStringRequireUtf8();

                producerVersion_ = s;
                break;
              }
            case 34:
              {
                java.lang.String s = input.readStringRequireUtf8();

                domain_ = s;
                break;
              }
            case 40:
              {
                modelVersion_ = input.readInt64();
                break;
              }
            case 50:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            case 58:
              {
                OnnxMl.GraphProto.Builder subBuilder = null;
                if (graph_ != null) {
                  subBuilder = graph_.toBuilder();
                }
                graph_ = input.readMessage(OnnxMl.GraphProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(graph_);
                  graph_ = subBuilder.buildPartial();
                }

                break;
              }
            case 66:
              {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  opsetImport_ = new java.util.ArrayList<OnnxMl.OperatorSetIdProto>();
                  mutable_bitField0_ |= 0x00000002;
                }
                opsetImport_.add(
                    input.readMessage(OnnxMl.OperatorSetIdProto.parser(), extensionRegistry));
                break;
              }
            case 114:
              {
                if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                  metadataProps_ = new java.util.ArrayList<OnnxMl.StringStringEntryProto>();
                  mutable_bitField0_ |= 0x00000200;
                }
                metadataProps_.add(
                    input.readMessage(OnnxMl.StringStringEntryProto.parser(), extensionRegistry));
                break;
              }
            case 802:
              {
                if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                  functions_ = new java.util.ArrayList<OnnxMl.FunctionProto>();
                  mutable_bitField0_ |= 0x00000100;
                }
                functions_.add(input.readMessage(OnnxMl.FunctionProto.parser(), extensionRegistry));
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          opsetImport_ = java.util.Collections.unmodifiableList(opsetImport_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          metadataProps_ = java.util.Collections.unmodifiableList(metadataProps_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          functions_ = java.util.Collections.unmodifiableList(functions_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_ModelProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_ModelProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.ModelProto.class, OnnxMl.ModelProto.Builder.class);
    }

    private int bitField0_;
    public static final int IR_VERSION_FIELD_NUMBER = 1;
    private long irVersion_;
    /**
     *
     *
     * <pre>
     * The version of the IR this model targets. See Version enum above.
     * This field MUST be present.
     * </pre>
     *
     * <code>int64 ir_version = 1;</code>
     */
    public long getIrVersion() {
      return irVersion_;
    }

    public static final int OPSET_IMPORT_FIELD_NUMBER = 8;
    private java.util.List<OnnxMl.OperatorSetIdProto> opsetImport_;
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    public java.util.List<OnnxMl.OperatorSetIdProto> getOpsetImportList() {
      return opsetImport_;
    }
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    public java.util.List<? extends OnnxMl.OperatorSetIdProtoOrBuilder>
        getOpsetImportOrBuilderList() {
      return opsetImport_;
    }
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    public int getOpsetImportCount() {
      return opsetImport_.size();
    }
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    public OnnxMl.OperatorSetIdProto getOpsetImport(int index) {
      return opsetImport_.get(index);
    }
    /**
     *
     *
     * <pre>
     * The OperatorSets this model relies on.
     * All ModelProtos MUST have at least one entry that
     * specifies which version of the ONNX OperatorSet is
     * being imported.
     * All nodes in the ModelProto's graph will bind against the operator
     * with the same-domain/same-op_type operator with the HIGHEST version
     * in the referenced operator sets.
     * </pre>
     *
     * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
     */
    public OnnxMl.OperatorSetIdProtoOrBuilder getOpsetImportOrBuilder(int index) {
      return opsetImport_.get(index);
    }

    public static final int PRODUCER_NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object producerName_;
    /**
     *
     *
     * <pre>
     * The name of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_name = 2;</code>
     */
    public java.lang.String getProducerName() {
      java.lang.Object ref = producerName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        producerName_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The name of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_name = 2;</code>
     */
    public com.google.protobuf.ByteString getProducerNameBytes() {
      java.lang.Object ref = producerName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        producerName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PRODUCER_VERSION_FIELD_NUMBER = 3;
    private volatile java.lang.Object producerVersion_;
    /**
     *
     *
     * <pre>
     * The version of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_version = 3;</code>
     */
    public java.lang.String getProducerVersion() {
      java.lang.Object ref = producerVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        producerVersion_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The version of the framework or tool used to generate this model.
     * This field SHOULD be present to indicate which implementation/tool/framework
     * emitted the model.
     * </pre>
     *
     * <code>string producer_version = 3;</code>
     */
    public com.google.protobuf.ByteString getProducerVersionBytes() {
      java.lang.Object ref = producerVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        producerVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DOMAIN_FIELD_NUMBER = 4;
    private volatile java.lang.Object domain_;
    /**
     *
     *
     * <pre>
     * Domain name of the model.
     * We use reverse domain names as name space indicators. For example:
     * `com.facebook.fair` or `com.microsoft.cognitiveservices`
     * Together with `model_version` and GraphProto.name, this forms the unique identity of
     * the graph.
     * </pre>
     *
     * <code>string domain = 4;</code>
     */
    public java.lang.String getDomain() {
      java.lang.Object ref = domain_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        domain_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * Domain name of the model.
     * We use reverse domain names as name space indicators. For example:
     * `com.facebook.fair` or `com.microsoft.cognitiveservices`
     * Together with `model_version` and GraphProto.name, this forms the unique identity of
     * the graph.
     * </pre>
     *
     * <code>string domain = 4;</code>
     */
    public com.google.protobuf.ByteString getDomainBytes() {
      java.lang.Object ref = domain_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        domain_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODEL_VERSION_FIELD_NUMBER = 5;
    private long modelVersion_;
    /**
     *
     *
     * <pre>
     * The version of the graph encoded. See Version enum below.
     * </pre>
     *
     * <code>int64 model_version = 5;</code>
     */
    public long getModelVersion() {
      return modelVersion_;
    }

    public static final int DOC_STRING_FIELD_NUMBER = 6;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this model. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this model. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 6;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GRAPH_FIELD_NUMBER = 7;
    private OnnxMl.GraphProto graph_;
    /**
     *
     *
     * <pre>
     * The parameterized graph that is evaluated to execute the model.
     * </pre>
     *
     * <code>.onnx.GraphProto graph = 7;</code>
     */
    public boolean hasGraph() {
      return graph_ != null;
    }
    /**
     *
     *
     * <pre>
     * The parameterized graph that is evaluated to execute the model.
     * </pre>
     *
     * <code>.onnx.GraphProto graph = 7;</code>
     */
    public OnnxMl.GraphProto getGraph() {
      return graph_ == null ? OnnxMl.GraphProto.getDefaultInstance() : graph_;
    }
    /**
     *
     *
     * <pre>
     * The parameterized graph that is evaluated to execute the model.
     * </pre>
     *
     * <code>.onnx.GraphProto graph = 7;</code>
     */
    public OnnxMl.GraphProtoOrBuilder getGraphOrBuilder() {
      return getGraph();
    }

    public static final int FUNCTIONS_FIELD_NUMBER = 100;
    private java.util.List<OnnxMl.FunctionProto> functions_;
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    public java.util.List<OnnxMl.FunctionProto> getFunctionsList() {
      return functions_;
    }
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    public java.util.List<? extends OnnxMl.FunctionProtoOrBuilder> getFunctionsOrBuilderList() {
      return functions_;
    }
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    public int getFunctionsCount() {
      return functions_.size();
    }
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    public OnnxMl.FunctionProto getFunctions(int index) {
      return functions_.get(index);
    }
    /**
     *
     *
     * <pre>
     * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
     * </pre>
     *
     * <code>repeated .onnx.FunctionProto functions = 100;</code>
     */
    public OnnxMl.FunctionProtoOrBuilder getFunctionsOrBuilder(int index) {
      return functions_.get(index);
    }

    public static final int METADATA_PROPS_FIELD_NUMBER = 14;
    private java.util.List<OnnxMl.StringStringEntryProto> metadataProps_;
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    public java.util.List<OnnxMl.StringStringEntryProto> getMetadataPropsList() {
      return metadataProps_;
    }
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    public java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
        getMetadataPropsOrBuilderList() {
      return metadataProps_;
    }
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    public int getMetadataPropsCount() {
      return metadataProps_.size();
    }
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    public OnnxMl.StringStringEntryProto getMetadataProps(int index) {
      return metadataProps_.get(index);
    }
    /**
     *
     *
     * <pre>
     * Named metadata values; keys should be distinct.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
     */
    public OnnxMl.StringStringEntryProtoOrBuilder getMetadataPropsOrBuilder(int index) {
      return metadataProps_.get(index);
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (irVersion_ != 0L) {
        output.writeInt64(1, irVersion_);
      }
      if (!getProducerNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, producerName_);
      }
      if (!getProducerVersionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, producerVersion_);
      }
      if (!getDomainBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, domain_);
      }
      if (modelVersion_ != 0L) {
        output.writeInt64(5, modelVersion_);
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, docString_);
      }
      if (graph_ != null) {
        output.writeMessage(7, getGraph());
      }
      for (int i = 0; i < opsetImport_.size(); i++) {
        output.writeMessage(8, opsetImport_.get(i));
      }
      for (int i = 0; i < metadataProps_.size(); i++) {
        output.writeMessage(14, metadataProps_.get(i));
      }
      for (int i = 0; i < functions_.size(); i++) {
        output.writeMessage(100, functions_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (irVersion_ != 0L) {
        size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, irVersion_);
      }
      if (!getProducerNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, producerName_);
      }
      if (!getProducerVersionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, producerVersion_);
      }
      if (!getDomainBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, domain_);
      }
      if (modelVersion_ != 0L) {
        size += com.google.protobuf.CodedOutputStream.computeInt64Size(5, modelVersion_);
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, docString_);
      }
      if (graph_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getGraph());
      }
      for (int i = 0; i < opsetImport_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, opsetImport_.get(i));
      }
      for (int i = 0; i < metadataProps_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(14, metadataProps_.get(i));
      }
      for (int i = 0; i < functions_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(100, functions_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.ModelProto)) {
        return super.equals(obj);
      }
      OnnxMl.ModelProto other = (OnnxMl.ModelProto) obj;

      boolean result = true;
      result = result && (getIrVersion() == other.getIrVersion());
      result = result && getOpsetImportList().equals(other.getOpsetImportList());
      result = result && getProducerName().equals(other.getProducerName());
      result = result && getProducerVersion().equals(other.getProducerVersion());
      result = result && getDomain().equals(other.getDomain());
      result = result && (getModelVersion() == other.getModelVersion());
      result = result && getDocString().equals(other.getDocString());
      result = result && (hasGraph() == other.hasGraph());
      if (hasGraph()) {
        result = result && getGraph().equals(other.getGraph());
      }
      result = result && getFunctionsList().equals(other.getFunctionsList());
      result = result && getMetadataPropsList().equals(other.getMetadataPropsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + IR_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getIrVersion());
      if (getOpsetImportCount() > 0) {
        hash = (37 * hash) + OPSET_IMPORT_FIELD_NUMBER;
        hash = (53 * hash) + getOpsetImportList().hashCode();
      }
      hash = (37 * hash) + PRODUCER_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getProducerName().hashCode();
      hash = (37 * hash) + PRODUCER_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + getProducerVersion().hashCode();
      hash = (37 * hash) + DOMAIN_FIELD_NUMBER;
      hash = (53 * hash) + getDomain().hashCode();
      hash = (37 * hash) + MODEL_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getModelVersion());
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      if (hasGraph()) {
        hash = (37 * hash) + GRAPH_FIELD_NUMBER;
        hash = (53 * hash) + getGraph().hashCode();
      }
      if (getFunctionsCount() > 0) {
        hash = (37 * hash) + FUNCTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getFunctionsList().hashCode();
      }
      if (getMetadataPropsCount() > 0) {
        hash = (37 * hash) + METADATA_PROPS_FIELD_NUMBER;
        hash = (53 * hash) + getMetadataPropsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.ModelProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.ModelProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.ModelProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.ModelProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.ModelProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.ModelProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.ModelProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.ModelProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.ModelProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.ModelProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.ModelProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.ModelProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.ModelProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Models
     * ModelProto is a top-level file/container format for bundling a ML model and
     * associating its computation graph with metadata.
     * The semantics of the model are described by the associated GraphProto.
     * </pre>
     *
     * Protobuf type {@code onnx.ModelProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.ModelProto)
        OnnxMl.ModelProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_ModelProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_ModelProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.ModelProto.class, OnnxMl.ModelProto.Builder.class);
      }

      // Construct using OnnxMlProto3.ModelProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getOpsetImportFieldBuilder();
          getFunctionsFieldBuilder();
          getMetadataPropsFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        irVersion_ = 0L;

        if (opsetImportBuilder_ == null) {
          opsetImport_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          opsetImportBuilder_.clear();
        }
        producerName_ = "";

        producerVersion_ = "";

        domain_ = "";

        modelVersion_ = 0L;

        docString_ = "";

        if (graphBuilder_ == null) {
          graph_ = null;
        } else {
          graph_ = null;
          graphBuilder_ = null;
        }
        if (functionsBuilder_ == null) {
          functions_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          functionsBuilder_.clear();
        }
        if (metadataPropsBuilder_ == null) {
          metadataProps_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          metadataPropsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_ModelProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.ModelProto getDefaultInstanceForType() {
        return OnnxMl.ModelProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.ModelProto build() {
        OnnxMl.ModelProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.ModelProto buildPartial() {
        OnnxMl.ModelProto result = new OnnxMl.ModelProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.irVersion_ = irVersion_;
        if (opsetImportBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            opsetImport_ = java.util.Collections.unmodifiableList(opsetImport_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.opsetImport_ = opsetImport_;
        } else {
          result.opsetImport_ = opsetImportBuilder_.build();
        }
        result.producerName_ = producerName_;
        result.producerVersion_ = producerVersion_;
        result.domain_ = domain_;
        result.modelVersion_ = modelVersion_;
        result.docString_ = docString_;
        if (graphBuilder_ == null) {
          result.graph_ = graph_;
        } else {
          result.graph_ = graphBuilder_.build();
        }
        if (functionsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            functions_ = java.util.Collections.unmodifiableList(functions_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.functions_ = functions_;
        } else {
          result.functions_ = functionsBuilder_.build();
        }
        if (metadataPropsBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            metadataProps_ = java.util.Collections.unmodifiableList(metadataProps_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.metadataProps_ = metadataProps_;
        } else {
          result.metadataProps_ = metadataPropsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.ModelProto) {
          return mergeFrom((OnnxMl.ModelProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.ModelProto other) {
        if (other == OnnxMl.ModelProto.getDefaultInstance()) return this;
        if (other.getIrVersion() != 0L) {
          setIrVersion(other.getIrVersion());
        }
        if (opsetImportBuilder_ == null) {
          if (!other.opsetImport_.isEmpty()) {
            if (opsetImport_.isEmpty()) {
              opsetImport_ = other.opsetImport_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureOpsetImportIsMutable();
              opsetImport_.addAll(other.opsetImport_);
            }
            onChanged();
          }
        } else {
          if (!other.opsetImport_.isEmpty()) {
            if (opsetImportBuilder_.isEmpty()) {
              opsetImportBuilder_.dispose();
              opsetImportBuilder_ = null;
              opsetImport_ = other.opsetImport_;
              bitField0_ = (bitField0_ & ~0x00000002);
              opsetImportBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getOpsetImportFieldBuilder()
                      : null;
            } else {
              opsetImportBuilder_.addAllMessages(other.opsetImport_);
            }
          }
        }
        if (!other.getProducerName().isEmpty()) {
          producerName_ = other.producerName_;
          onChanged();
        }
        if (!other.getProducerVersion().isEmpty()) {
          producerVersion_ = other.producerVersion_;
          onChanged();
        }
        if (!other.getDomain().isEmpty()) {
          domain_ = other.domain_;
          onChanged();
        }
        if (other.getModelVersion() != 0L) {
          setModelVersion(other.getModelVersion());
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        if (other.hasGraph()) {
          mergeGraph(other.getGraph());
        }
        if (functionsBuilder_ == null) {
          if (!other.functions_.isEmpty()) {
            if (functions_.isEmpty()) {
              functions_ = other.functions_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureFunctionsIsMutable();
              functions_.addAll(other.functions_);
            }
            onChanged();
          }
        } else {
          if (!other.functions_.isEmpty()) {
            if (functionsBuilder_.isEmpty()) {
              functionsBuilder_.dispose();
              functionsBuilder_ = null;
              functions_ = other.functions_;
              bitField0_ = (bitField0_ & ~0x00000100);
              functionsBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getFunctionsFieldBuilder()
                      : null;
            } else {
              functionsBuilder_.addAllMessages(other.functions_);
            }
          }
        }
        if (metadataPropsBuilder_ == null) {
          if (!other.metadataProps_.isEmpty()) {
            if (metadataProps_.isEmpty()) {
              metadataProps_ = other.metadataProps_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureMetadataPropsIsMutable();
              metadataProps_.addAll(other.metadataProps_);
            }
            onChanged();
          }
        } else {
          if (!other.metadataProps_.isEmpty()) {
            if (metadataPropsBuilder_.isEmpty()) {
              metadataPropsBuilder_.dispose();
              metadataPropsBuilder_ = null;
              metadataProps_ = other.metadataProps_;
              bitField0_ = (bitField0_ & ~0x00000200);
              metadataPropsBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getMetadataPropsFieldBuilder()
                      : null;
            } else {
              metadataPropsBuilder_.addAllMessages(other.metadataProps_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.ModelProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.ModelProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private long irVersion_;
      /**
       *
       *
       * <pre>
       * The version of the IR this model targets. See Version enum above.
       * This field MUST be present.
       * </pre>
       *
       * <code>int64 ir_version = 1;</code>
       */
      public long getIrVersion() {
        return irVersion_;
      }
      /**
       *
       *
       * <pre>
       * The version of the IR this model targets. See Version enum above.
       * This field MUST be present.
       * </pre>
       *
       * <code>int64 ir_version = 1;</code>
       */
      public Builder setIrVersion(long value) {

        irVersion_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The version of the IR this model targets. See Version enum above.
       * This field MUST be present.
       * </pre>
       *
       * <code>int64 ir_version = 1;</code>
       */
      public Builder clearIrVersion() {

        irVersion_ = 0L;
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.OperatorSetIdProto> opsetImport_ =
          java.util.Collections.emptyList();

      private void ensureOpsetImportIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          opsetImport_ = new java.util.ArrayList<OnnxMl.OperatorSetIdProto>(opsetImport_);
          bitField0_ |= 0x00000002;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.OperatorSetIdProto,
              OnnxMl.OperatorSetIdProto.Builder,
              OnnxMl.OperatorSetIdProtoOrBuilder>
          opsetImportBuilder_;

      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public java.util.List<OnnxMl.OperatorSetIdProto> getOpsetImportList() {
        if (opsetImportBuilder_ == null) {
          return java.util.Collections.unmodifiableList(opsetImport_);
        } else {
          return opsetImportBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public int getOpsetImportCount() {
        if (opsetImportBuilder_ == null) {
          return opsetImport_.size();
        } else {
          return opsetImportBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public OnnxMl.OperatorSetIdProto getOpsetImport(int index) {
        if (opsetImportBuilder_ == null) {
          return opsetImport_.get(index);
        } else {
          return opsetImportBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder setOpsetImport(int index, OnnxMl.OperatorSetIdProto value) {
        if (opsetImportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsetImportIsMutable();
          opsetImport_.set(index, value);
          onChanged();
        } else {
          opsetImportBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder setOpsetImport(int index, OnnxMl.OperatorSetIdProto.Builder builderForValue) {
        if (opsetImportBuilder_ == null) {
          ensureOpsetImportIsMutable();
          opsetImport_.set(index, builderForValue.build());
          onChanged();
        } else {
          opsetImportBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder addOpsetImport(OnnxMl.OperatorSetIdProto value) {
        if (opsetImportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsetImportIsMutable();
          opsetImport_.add(value);
          onChanged();
        } else {
          opsetImportBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder addOpsetImport(int index, OnnxMl.OperatorSetIdProto value) {
        if (opsetImportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOpsetImportIsMutable();
          opsetImport_.add(index, value);
          onChanged();
        } else {
          opsetImportBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder addOpsetImport(OnnxMl.OperatorSetIdProto.Builder builderForValue) {
        if (opsetImportBuilder_ == null) {
          ensureOpsetImportIsMutable();
          opsetImport_.add(builderForValue.build());
          onChanged();
        } else {
          opsetImportBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder addOpsetImport(int index, OnnxMl.OperatorSetIdProto.Builder builderForValue) {
        if (opsetImportBuilder_ == null) {
          ensureOpsetImportIsMutable();
          opsetImport_.add(index, builderForValue.build());
          onChanged();
        } else {
          opsetImportBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder addAllOpsetImport(
          java.lang.Iterable<? extends OnnxMl.OperatorSetIdProto> values) {
        if (opsetImportBuilder_ == null) {
          ensureOpsetImportIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, opsetImport_);
          onChanged();
        } else {
          opsetImportBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder clearOpsetImport() {
        if (opsetImportBuilder_ == null) {
          opsetImport_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          opsetImportBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public Builder removeOpsetImport(int index) {
        if (opsetImportBuilder_ == null) {
          ensureOpsetImportIsMutable();
          opsetImport_.remove(index);
          onChanged();
        } else {
          opsetImportBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public OnnxMl.OperatorSetIdProto.Builder getOpsetImportBuilder(int index) {
        return getOpsetImportFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public OnnxMl.OperatorSetIdProtoOrBuilder getOpsetImportOrBuilder(int index) {
        if (opsetImportBuilder_ == null) {
          return opsetImport_.get(index);
        } else {
          return opsetImportBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public java.util.List<? extends OnnxMl.OperatorSetIdProtoOrBuilder>
          getOpsetImportOrBuilderList() {
        if (opsetImportBuilder_ != null) {
          return opsetImportBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(opsetImport_);
        }
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public OnnxMl.OperatorSetIdProto.Builder addOpsetImportBuilder() {
        return getOpsetImportFieldBuilder()
            .addBuilder(OnnxMl.OperatorSetIdProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public OnnxMl.OperatorSetIdProto.Builder addOpsetImportBuilder(int index) {
        return getOpsetImportFieldBuilder()
            .addBuilder(index, OnnxMl.OperatorSetIdProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The OperatorSets this model relies on.
       * All ModelProtos MUST have at least one entry that
       * specifies which version of the ONNX OperatorSet is
       * being imported.
       * All nodes in the ModelProto's graph will bind against the operator
       * with the same-domain/same-op_type operator with the HIGHEST version
       * in the referenced operator sets.
       * </pre>
       *
       * <code>repeated .onnx.OperatorSetIdProto opset_import = 8;</code>
       */
      public java.util.List<OnnxMl.OperatorSetIdProto.Builder> getOpsetImportBuilderList() {
        return getOpsetImportFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.OperatorSetIdProto,
              OnnxMl.OperatorSetIdProto.Builder,
              OnnxMl.OperatorSetIdProtoOrBuilder>
          getOpsetImportFieldBuilder() {
        if (opsetImportBuilder_ == null) {
          opsetImportBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.OperatorSetIdProto,
                  OnnxMl.OperatorSetIdProto.Builder,
                  OnnxMl.OperatorSetIdProtoOrBuilder>(
                  opsetImport_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          opsetImport_ = null;
        }
        return opsetImportBuilder_;
      }

      private java.lang.Object producerName_ = "";
      /**
       *
       *
       * <pre>
       * The name of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_name = 2;</code>
       */
      public java.lang.String getProducerName() {
        java.lang.Object ref = producerName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          producerName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_name = 2;</code>
       */
      public com.google.protobuf.ByteString getProducerNameBytes() {
        java.lang.Object ref = producerName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          producerName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_name = 2;</code>
       */
      public Builder setProducerName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        producerName_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_name = 2;</code>
       */
      public Builder clearProducerName() {

        producerName_ = getDefaultInstance().getProducerName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_name = 2;</code>
       */
      public Builder setProducerNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        producerName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object producerVersion_ = "";
      /**
       *
       *
       * <pre>
       * The version of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_version = 3;</code>
       */
      public java.lang.String getProducerVersion() {
        java.lang.Object ref = producerVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          producerVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The version of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_version = 3;</code>
       */
      public com.google.protobuf.ByteString getProducerVersionBytes() {
        java.lang.Object ref = producerVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          producerVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The version of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_version = 3;</code>
       */
      public Builder setProducerVersion(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        producerVersion_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The version of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_version = 3;</code>
       */
      public Builder clearProducerVersion() {

        producerVersion_ = getDefaultInstance().getProducerVersion();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The version of the framework or tool used to generate this model.
       * This field SHOULD be present to indicate which implementation/tool/framework
       * emitted the model.
       * </pre>
       *
       * <code>string producer_version = 3;</code>
       */
      public Builder setProducerVersionBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        producerVersion_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object domain_ = "";
      /**
       *
       *
       * <pre>
       * Domain name of the model.
       * We use reverse domain names as name space indicators. For example:
       * `com.facebook.fair` or `com.microsoft.cognitiveservices`
       * Together with `model_version` and GraphProto.name, this forms the unique identity of
       * the graph.
       * </pre>
       *
       * <code>string domain = 4;</code>
       */
      public java.lang.String getDomain() {
        java.lang.Object ref = domain_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          domain_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Domain name of the model.
       * We use reverse domain names as name space indicators. For example:
       * `com.facebook.fair` or `com.microsoft.cognitiveservices`
       * Together with `model_version` and GraphProto.name, this forms the unique identity of
       * the graph.
       * </pre>
       *
       * <code>string domain = 4;</code>
       */
      public com.google.protobuf.ByteString getDomainBytes() {
        java.lang.Object ref = domain_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          domain_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Domain name of the model.
       * We use reverse domain names as name space indicators. For example:
       * `com.facebook.fair` or `com.microsoft.cognitiveservices`
       * Together with `model_version` and GraphProto.name, this forms the unique identity of
       * the graph.
       * </pre>
       *
       * <code>string domain = 4;</code>
       */
      public Builder setDomain(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        domain_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Domain name of the model.
       * We use reverse domain names as name space indicators. For example:
       * `com.facebook.fair` or `com.microsoft.cognitiveservices`
       * Together with `model_version` and GraphProto.name, this forms the unique identity of
       * the graph.
       * </pre>
       *
       * <code>string domain = 4;</code>
       */
      public Builder clearDomain() {

        domain_ = getDefaultInstance().getDomain();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Domain name of the model.
       * We use reverse domain names as name space indicators. For example:
       * `com.facebook.fair` or `com.microsoft.cognitiveservices`
       * Together with `model_version` and GraphProto.name, this forms the unique identity of
       * the graph.
       * </pre>
       *
       * <code>string domain = 4;</code>
       */
      public Builder setDomainBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        domain_ = value;
        onChanged();
        return this;
      }

      private long modelVersion_;
      /**
       *
       *
       * <pre>
       * The version of the graph encoded. See Version enum below.
       * </pre>
       *
       * <code>int64 model_version = 5;</code>
       */
      public long getModelVersion() {
        return modelVersion_;
      }
      /**
       *
       *
       * <pre>
       * The version of the graph encoded. See Version enum below.
       * </pre>
       *
       * <code>int64 model_version = 5;</code>
       */
      public Builder setModelVersion(long value) {

        modelVersion_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The version of the graph encoded. See Version enum below.
       * </pre>
       *
       * <code>int64 model_version = 5;</code>
       */
      public Builder clearModelVersion() {

        modelVersion_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this model. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this model. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this model. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this model. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this model. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 6;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      private OnnxMl.GraphProto graph_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>
          graphBuilder_;
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public boolean hasGraph() {
        return graphBuilder_ != null || graph_ != null;
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public OnnxMl.GraphProto getGraph() {
        if (graphBuilder_ == null) {
          return graph_ == null ? OnnxMl.GraphProto.getDefaultInstance() : graph_;
        } else {
          return graphBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public Builder setGraph(OnnxMl.GraphProto value) {
        if (graphBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          graph_ = value;
          onChanged();
        } else {
          graphBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public Builder setGraph(OnnxMl.GraphProto.Builder builderForValue) {
        if (graphBuilder_ == null) {
          graph_ = builderForValue.build();
          onChanged();
        } else {
          graphBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public Builder mergeGraph(OnnxMl.GraphProto value) {
        if (graphBuilder_ == null) {
          if (graph_ != null) {
            graph_ = OnnxMl.GraphProto.newBuilder(graph_).mergeFrom(value).buildPartial();
          } else {
            graph_ = value;
          }
          onChanged();
        } else {
          graphBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public Builder clearGraph() {
        if (graphBuilder_ == null) {
          graph_ = null;
          onChanged();
        } else {
          graph_ = null;
          graphBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public OnnxMl.GraphProto.Builder getGraphBuilder() {

        onChanged();
        return getGraphFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      public OnnxMl.GraphProtoOrBuilder getGraphOrBuilder() {
        if (graphBuilder_ != null) {
          return graphBuilder_.getMessageOrBuilder();
        } else {
          return graph_ == null ? OnnxMl.GraphProto.getDefaultInstance() : graph_;
        }
      }
      /**
       *
       *
       * <pre>
       * The parameterized graph that is evaluated to execute the model.
       * </pre>
       *
       * <code>.onnx.GraphProto graph = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>
          getGraphFieldBuilder() {
        if (graphBuilder_ == null) {
          graphBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.GraphProto, OnnxMl.GraphProto.Builder, OnnxMl.GraphProtoOrBuilder>(
                  getGraph(), getParentForChildren(), isClean());
          graph_ = null;
        }
        return graphBuilder_;
      }

      private java.util.List<OnnxMl.FunctionProto> functions_ = java.util.Collections.emptyList();

      private void ensureFunctionsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          functions_ = new java.util.ArrayList<OnnxMl.FunctionProto>(functions_);
          bitField0_ |= 0x00000100;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.FunctionProto, OnnxMl.FunctionProto.Builder, OnnxMl.FunctionProtoOrBuilder>
          functionsBuilder_;

      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public java.util.List<OnnxMl.FunctionProto> getFunctionsList() {
        if (functionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(functions_);
        } else {
          return functionsBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public int getFunctionsCount() {
        if (functionsBuilder_ == null) {
          return functions_.size();
        } else {
          return functionsBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public OnnxMl.FunctionProto getFunctions(int index) {
        if (functionsBuilder_ == null) {
          return functions_.get(index);
        } else {
          return functionsBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder setFunctions(int index, OnnxMl.FunctionProto value) {
        if (functionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFunctionsIsMutable();
          functions_.set(index, value);
          onChanged();
        } else {
          functionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder setFunctions(int index, OnnxMl.FunctionProto.Builder builderForValue) {
        if (functionsBuilder_ == null) {
          ensureFunctionsIsMutable();
          functions_.set(index, builderForValue.build());
          onChanged();
        } else {
          functionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder addFunctions(OnnxMl.FunctionProto value) {
        if (functionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFunctionsIsMutable();
          functions_.add(value);
          onChanged();
        } else {
          functionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder addFunctions(int index, OnnxMl.FunctionProto value) {
        if (functionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFunctionsIsMutable();
          functions_.add(index, value);
          onChanged();
        } else {
          functionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder addFunctions(OnnxMl.FunctionProto.Builder builderForValue) {
        if (functionsBuilder_ == null) {
          ensureFunctionsIsMutable();
          functions_.add(builderForValue.build());
          onChanged();
        } else {
          functionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder addFunctions(int index, OnnxMl.FunctionProto.Builder builderForValue) {
        if (functionsBuilder_ == null) {
          ensureFunctionsIsMutable();
          functions_.add(index, builderForValue.build());
          onChanged();
        } else {
          functionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder addAllFunctions(java.lang.Iterable<? extends OnnxMl.FunctionProto> values) {
        if (functionsBuilder_ == null) {
          ensureFunctionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, functions_);
          onChanged();
        } else {
          functionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder clearFunctions() {
        if (functionsBuilder_ == null) {
          functions_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          functionsBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public Builder removeFunctions(int index) {
        if (functionsBuilder_ == null) {
          ensureFunctionsIsMutable();
          functions_.remove(index);
          onChanged();
        } else {
          functionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public OnnxMl.FunctionProto.Builder getFunctionsBuilder(int index) {
        return getFunctionsFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public OnnxMl.FunctionProtoOrBuilder getFunctionsOrBuilder(int index) {
        if (functionsBuilder_ == null) {
          return functions_.get(index);
        } else {
          return functionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public java.util.List<? extends OnnxMl.FunctionProtoOrBuilder> getFunctionsOrBuilderList() {
        if (functionsBuilder_ != null) {
          return functionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(functions_);
        }
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public OnnxMl.FunctionProto.Builder addFunctionsBuilder() {
        return getFunctionsFieldBuilder().addBuilder(OnnxMl.FunctionProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public OnnxMl.FunctionProto.Builder addFunctionsBuilder(int index) {
        return getFunctionsFieldBuilder()
            .addBuilder(index, OnnxMl.FunctionProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * kezhan: This field is not in ONNX, and will be pushed into ONNX with good use cases in microsoft.
       * </pre>
       *
       * <code>repeated .onnx.FunctionProto functions = 100;</code>
       */
      public java.util.List<OnnxMl.FunctionProto.Builder> getFunctionsBuilderList() {
        return getFunctionsFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.FunctionProto, OnnxMl.FunctionProto.Builder, OnnxMl.FunctionProtoOrBuilder>
          getFunctionsFieldBuilder() {
        if (functionsBuilder_ == null) {
          functionsBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.FunctionProto,
                  OnnxMl.FunctionProto.Builder,
                  OnnxMl.FunctionProtoOrBuilder>(
                  functions_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          functions_ = null;
        }
        return functionsBuilder_;
      }

      private java.util.List<OnnxMl.StringStringEntryProto> metadataProps_ =
          java.util.Collections.emptyList();

      private void ensureMetadataPropsIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          metadataProps_ = new java.util.ArrayList<OnnxMl.StringStringEntryProto>(metadataProps_);
          bitField0_ |= 0x00000200;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.StringStringEntryProto,
              OnnxMl.StringStringEntryProto.Builder,
              OnnxMl.StringStringEntryProtoOrBuilder>
          metadataPropsBuilder_;

      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public java.util.List<OnnxMl.StringStringEntryProto> getMetadataPropsList() {
        if (metadataPropsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(metadataProps_);
        } else {
          return metadataPropsBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public int getMetadataPropsCount() {
        if (metadataPropsBuilder_ == null) {
          return metadataProps_.size();
        } else {
          return metadataPropsBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public OnnxMl.StringStringEntryProto getMetadataProps(int index) {
        if (metadataPropsBuilder_ == null) {
          return metadataProps_.get(index);
        } else {
          return metadataPropsBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder setMetadataProps(int index, OnnxMl.StringStringEntryProto value) {
        if (metadataPropsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetadataPropsIsMutable();
          metadataProps_.set(index, value);
          onChanged();
        } else {
          metadataPropsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder setMetadataProps(
          int index, OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (metadataPropsBuilder_ == null) {
          ensureMetadataPropsIsMutable();
          metadataProps_.set(index, builderForValue.build());
          onChanged();
        } else {
          metadataPropsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder addMetadataProps(OnnxMl.StringStringEntryProto value) {
        if (metadataPropsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetadataPropsIsMutable();
          metadataProps_.add(value);
          onChanged();
        } else {
          metadataPropsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder addMetadataProps(int index, OnnxMl.StringStringEntryProto value) {
        if (metadataPropsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetadataPropsIsMutable();
          metadataProps_.add(index, value);
          onChanged();
        } else {
          metadataPropsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder addMetadataProps(OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (metadataPropsBuilder_ == null) {
          ensureMetadataPropsIsMutable();
          metadataProps_.add(builderForValue.build());
          onChanged();
        } else {
          metadataPropsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder addMetadataProps(
          int index, OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (metadataPropsBuilder_ == null) {
          ensureMetadataPropsIsMutable();
          metadataProps_.add(index, builderForValue.build());
          onChanged();
        } else {
          metadataPropsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder addAllMetadataProps(
          java.lang.Iterable<? extends OnnxMl.StringStringEntryProto> values) {
        if (metadataPropsBuilder_ == null) {
          ensureMetadataPropsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, metadataProps_);
          onChanged();
        } else {
          metadataPropsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder clearMetadataProps() {
        if (metadataPropsBuilder_ == null) {
          metadataProps_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          metadataPropsBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public Builder removeMetadataProps(int index) {
        if (metadataPropsBuilder_ == null) {
          ensureMetadataPropsIsMutable();
          metadataProps_.remove(index);
          onChanged();
        } else {
          metadataPropsBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder getMetadataPropsBuilder(int index) {
        return getMetadataPropsFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public OnnxMl.StringStringEntryProtoOrBuilder getMetadataPropsOrBuilder(int index) {
        if (metadataPropsBuilder_ == null) {
          return metadataProps_.get(index);
        } else {
          return metadataPropsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
          getMetadataPropsOrBuilderList() {
        if (metadataPropsBuilder_ != null) {
          return metadataPropsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(metadataProps_);
        }
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder addMetadataPropsBuilder() {
        return getMetadataPropsFieldBuilder()
            .addBuilder(OnnxMl.StringStringEntryProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder addMetadataPropsBuilder(int index) {
        return getMetadataPropsFieldBuilder()
            .addBuilder(index, OnnxMl.StringStringEntryProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Named metadata values; keys should be distinct.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto metadata_props = 14;</code>
       */
      public java.util.List<OnnxMl.StringStringEntryProto.Builder> getMetadataPropsBuilderList() {
        return getMetadataPropsFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.StringStringEntryProto,
              OnnxMl.StringStringEntryProto.Builder,
              OnnxMl.StringStringEntryProtoOrBuilder>
          getMetadataPropsFieldBuilder() {
        if (metadataPropsBuilder_ == null) {
          metadataPropsBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.StringStringEntryProto,
                  OnnxMl.StringStringEntryProto.Builder,
                  OnnxMl.StringStringEntryProtoOrBuilder>(
                  metadataProps_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          metadataProps_ = null;
        }
        return metadataPropsBuilder_;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.ModelProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.ModelProto)
    private static final OnnxMl.ModelProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.ModelProto();
    }

    public static OnnxMl.ModelProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ModelProto> PARSER =
        new com.google.protobuf.AbstractParser<ModelProto>() {
          @java.lang.Override
          public ModelProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new ModelProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<ModelProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ModelProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.ModelProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface StringStringEntryProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.StringStringEntryProto)
      com.google.protobuf.MessageOrBuilder {

    /** <code>string key = 1;</code> */
    java.lang.String getKey();
    /** <code>string key = 1;</code> */
    com.google.protobuf.ByteString getKeyBytes();

    /** <code>string value = 2;</code> */
    java.lang.String getValue();
    /** <code>string value = 2;</code> */
    com.google.protobuf.ByteString getValueBytes();
  }
  /**
   *
   *
   * <pre>
   * StringStringEntryProto follows the pattern for cross-proto-version maps.
   * See https://developers.google.com/protocol-buffers/docs/proto3#maps
   * </pre>
   *
   * Protobuf type {@code onnx.StringStringEntryProto}
   */
  public static final class StringStringEntryProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.StringStringEntryProto)
      StringStringEntryProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use StringStringEntryProto.newBuilder() to construct.
    private StringStringEntryProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private StringStringEntryProto() {
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private StringStringEntryProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();

                key_ = s;
                break;
              }
            case 18:
              {
                java.lang.String s = input.readStringRequireUtf8();

                value_ = s;
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_StringStringEntryProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_StringStringEntryProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.StringStringEntryProto.class, OnnxMl.StringStringEntryProto.Builder.class);
    }

    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /** <code>string key = 1;</code> */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        key_ = s;
        return s;
      }
    }
    /** <code>string key = 1;</code> */
    public com.google.protobuf.ByteString getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /** <code>string value = 2;</code> */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        value_ = s;
        return s;
      }
    }
    /** <code>string value = 2;</code> */
    public com.google.protobuf.ByteString getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (!getKeyBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (!getValueBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getKeyBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (!getValueBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.StringStringEntryProto)) {
        return super.equals(obj);
      }
      OnnxMl.StringStringEntryProto other = (OnnxMl.StringStringEntryProto) obj;

      boolean result = true;
      result = result && getKey().equals(other.getKey());
      result = result && getValue().equals(other.getValue());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + KEY_FIELD_NUMBER;
      hash = (53 * hash) + getKey().hashCode();
      hash = (37 * hash) + VALUE_FIELD_NUMBER;
      hash = (53 * hash) + getValue().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.StringStringEntryProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.StringStringEntryProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.StringStringEntryProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(
        com.google.protobuf.CodedInputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.StringStringEntryProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.StringStringEntryProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * StringStringEntryProto follows the pattern for cross-proto-version maps.
     * See https://developers.google.com/protocol-buffers/docs/proto3#maps
     * </pre>
     *
     * Protobuf type {@code onnx.StringStringEntryProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.StringStringEntryProto)
        OnnxMl.StringStringEntryProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_StringStringEntryProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_StringStringEntryProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.StringStringEntryProto.class, OnnxMl.StringStringEntryProto.Builder.class);
      }

      // Construct using OnnxMlProto3.StringStringEntryProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        key_ = "";

        value_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_StringStringEntryProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.StringStringEntryProto getDefaultInstanceForType() {
        return OnnxMl.StringStringEntryProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.StringStringEntryProto build() {
        OnnxMl.StringStringEntryProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.StringStringEntryProto buildPartial() {
        OnnxMl.StringStringEntryProto result = new OnnxMl.StringStringEntryProto(this);
        result.key_ = key_;
        result.value_ = value_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.StringStringEntryProto) {
          return mergeFrom((OnnxMl.StringStringEntryProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.StringStringEntryProto other) {
        if (other == OnnxMl.StringStringEntryProto.getDefaultInstance()) return this;
        if (!other.getKey().isEmpty()) {
          key_ = other.key_;
          onChanged();
        }
        if (!other.getValue().isEmpty()) {
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.StringStringEntryProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.StringStringEntryProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object key_ = "";
      /** <code>string key = 1;</code> */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          key_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /** <code>string key = 1;</code> */
      public com.google.protobuf.ByteString getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /** <code>string key = 1;</code> */
      public Builder setKey(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        key_ = value;
        onChanged();
        return this;
      }
      /** <code>string key = 1;</code> */
      public Builder clearKey() {

        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /** <code>string key = 1;</code> */
      public Builder setKeyBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /** <code>string value = 2;</code> */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /** <code>string value = 2;</code> */
      public com.google.protobuf.ByteString getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /** <code>string value = 2;</code> */
      public Builder setValue(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        value_ = value;
        onChanged();
        return this;
      }
      /** <code>string value = 2;</code> */
      public Builder clearValue() {

        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /** <code>string value = 2;</code> */
      public Builder setValueBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        value_ = value;
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.StringStringEntryProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.StringStringEntryProto)
    private static final OnnxMl.StringStringEntryProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.StringStringEntryProto();
    }

    public static OnnxMl.StringStringEntryProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<StringStringEntryProto> PARSER =
        new com.google.protobuf.AbstractParser<StringStringEntryProto>() {
          @java.lang.Override
          public StringStringEntryProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new StringStringEntryProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<StringStringEntryProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<StringStringEntryProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.StringStringEntryProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface TensorAnnotationOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.TensorAnnotation)
      com.google.protobuf.MessageOrBuilder {

    /** <code>string tensor_name = 1;</code> */
    java.lang.String getTensorName();
    /** <code>string tensor_name = 1;</code> */
    com.google.protobuf.ByteString getTensorNameBytes();

    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    java.util.List<OnnxMl.StringStringEntryProto> getQuantParameterTensorNamesList();
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    OnnxMl.StringStringEntryProto getQuantParameterTensorNames(int index);
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    int getQuantParameterTensorNamesCount();
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
        getQuantParameterTensorNamesOrBuilderList();
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    OnnxMl.StringStringEntryProtoOrBuilder getQuantParameterTensorNamesOrBuilder(int index);
  }
  /** Protobuf type {@code onnx.TensorAnnotation} */
  public static final class TensorAnnotation extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.TensorAnnotation)
      TensorAnnotationOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use TensorAnnotation.newBuilder() to construct.
    private TensorAnnotation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private TensorAnnotation() {
      tensorName_ = "";
      quantParameterTensorNames_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private TensorAnnotation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();

                tensorName_ = s;
                break;
              }
            case 18:
              {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  quantParameterTensorNames_ =
                      new java.util.ArrayList<OnnxMl.StringStringEntryProto>();
                  mutable_bitField0_ |= 0x00000002;
                }
                quantParameterTensorNames_.add(
                    input.readMessage(OnnxMl.StringStringEntryProto.parser(), extensionRegistry));
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          quantParameterTensorNames_ =
              java.util.Collections.unmodifiableList(quantParameterTensorNames_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_TensorAnnotation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_TensorAnnotation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.TensorAnnotation.class, OnnxMl.TensorAnnotation.Builder.class);
    }

    private int bitField0_;
    public static final int TENSOR_NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object tensorName_;
    /** <code>string tensor_name = 1;</code> */
    public java.lang.String getTensorName() {
      java.lang.Object ref = tensorName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        tensorName_ = s;
        return s;
      }
    }
    /** <code>string tensor_name = 1;</code> */
    public com.google.protobuf.ByteString getTensorNameBytes() {
      java.lang.Object ref = tensorName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        tensorName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int QUANT_PARAMETER_TENSOR_NAMES_FIELD_NUMBER = 2;
    private java.util.List<OnnxMl.StringStringEntryProto> quantParameterTensorNames_;
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    public java.util.List<OnnxMl.StringStringEntryProto> getQuantParameterTensorNamesList() {
      return quantParameterTensorNames_;
    }
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    public java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
        getQuantParameterTensorNamesOrBuilderList() {
      return quantParameterTensorNames_;
    }
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    public int getQuantParameterTensorNamesCount() {
      return quantParameterTensorNames_.size();
    }
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    public OnnxMl.StringStringEntryProto getQuantParameterTensorNames(int index) {
      return quantParameterTensorNames_.get(index);
    }
    /**
     *
     *
     * <pre>
     * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
     * The keys used in the mapping below must be pre-defined in ONNX spec.
     * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
     * quantization parameter keys.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
     */
    public OnnxMl.StringStringEntryProtoOrBuilder getQuantParameterTensorNamesOrBuilder(int index) {
      return quantParameterTensorNames_.get(index);
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (!getTensorNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, tensorName_);
      }
      for (int i = 0; i < quantParameterTensorNames_.size(); i++) {
        output.writeMessage(2, quantParameterTensorNames_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getTensorNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, tensorName_);
      }
      for (int i = 0; i < quantParameterTensorNames_.size(); i++) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                2, quantParameterTensorNames_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.TensorAnnotation)) {
        return super.equals(obj);
      }
      OnnxMl.TensorAnnotation other = (OnnxMl.TensorAnnotation) obj;

      boolean result = true;
      result = result && getTensorName().equals(other.getTensorName());
      result =
          result
              && getQuantParameterTensorNamesList()
                  .equals(other.getQuantParameterTensorNamesList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + TENSOR_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getTensorName().hashCode();
      if (getQuantParameterTensorNamesCount() > 0) {
        hash = (37 * hash) + QUANT_PARAMETER_TENSOR_NAMES_FIELD_NUMBER;
        hash = (53 * hash) + getQuantParameterTensorNamesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.TensorAnnotation parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorAnnotation parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorAnnotation parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorAnnotation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorAnnotation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorAnnotation parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorAnnotation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorAnnotation parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TensorAnnotation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorAnnotation parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TensorAnnotation parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorAnnotation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.TensorAnnotation prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /** Protobuf type {@code onnx.TensorAnnotation} */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.TensorAnnotation)
        OnnxMl.TensorAnnotationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TensorAnnotation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TensorAnnotation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TensorAnnotation.class, OnnxMl.TensorAnnotation.Builder.class);
      }

      // Construct using OnnxMlProto3.TensorAnnotation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getQuantParameterTensorNamesFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        tensorName_ = "";

        if (quantParameterTensorNamesBuilder_ == null) {
          quantParameterTensorNames_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          quantParameterTensorNamesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_TensorAnnotation_descriptor;
      }

      @java.lang.Override
      public OnnxMl.TensorAnnotation getDefaultInstanceForType() {
        return OnnxMl.TensorAnnotation.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.TensorAnnotation build() {
        OnnxMl.TensorAnnotation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.TensorAnnotation buildPartial() {
        OnnxMl.TensorAnnotation result = new OnnxMl.TensorAnnotation(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.tensorName_ = tensorName_;
        if (quantParameterTensorNamesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            quantParameterTensorNames_ =
                java.util.Collections.unmodifiableList(quantParameterTensorNames_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.quantParameterTensorNames_ = quantParameterTensorNames_;
        } else {
          result.quantParameterTensorNames_ = quantParameterTensorNamesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.TensorAnnotation) {
          return mergeFrom((OnnxMl.TensorAnnotation) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.TensorAnnotation other) {
        if (other == OnnxMl.TensorAnnotation.getDefaultInstance()) return this;
        if (!other.getTensorName().isEmpty()) {
          tensorName_ = other.tensorName_;
          onChanged();
        }
        if (quantParameterTensorNamesBuilder_ == null) {
          if (!other.quantParameterTensorNames_.isEmpty()) {
            if (quantParameterTensorNames_.isEmpty()) {
              quantParameterTensorNames_ = other.quantParameterTensorNames_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureQuantParameterTensorNamesIsMutable();
              quantParameterTensorNames_.addAll(other.quantParameterTensorNames_);
            }
            onChanged();
          }
        } else {
          if (!other.quantParameterTensorNames_.isEmpty()) {
            if (quantParameterTensorNamesBuilder_.isEmpty()) {
              quantParameterTensorNamesBuilder_.dispose();
              quantParameterTensorNamesBuilder_ = null;
              quantParameterTensorNames_ = other.quantParameterTensorNames_;
              bitField0_ = (bitField0_ & ~0x00000002);
              quantParameterTensorNamesBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getQuantParameterTensorNamesFieldBuilder()
                      : null;
            } else {
              quantParameterTensorNamesBuilder_.addAllMessages(other.quantParameterTensorNames_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.TensorAnnotation parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.TensorAnnotation) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private java.lang.Object tensorName_ = "";
      /** <code>string tensor_name = 1;</code> */
      public java.lang.String getTensorName() {
        java.lang.Object ref = tensorName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          tensorName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /** <code>string tensor_name = 1;</code> */
      public com.google.protobuf.ByteString getTensorNameBytes() {
        java.lang.Object ref = tensorName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          tensorName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /** <code>string tensor_name = 1;</code> */
      public Builder setTensorName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        tensorName_ = value;
        onChanged();
        return this;
      }
      /** <code>string tensor_name = 1;</code> */
      public Builder clearTensorName() {

        tensorName_ = getDefaultInstance().getTensorName();
        onChanged();
        return this;
      }
      /** <code>string tensor_name = 1;</code> */
      public Builder setTensorNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        tensorName_ = value;
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.StringStringEntryProto> quantParameterTensorNames_ =
          java.util.Collections.emptyList();

      private void ensureQuantParameterTensorNamesIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          quantParameterTensorNames_ =
              new java.util.ArrayList<OnnxMl.StringStringEntryProto>(quantParameterTensorNames_);
          bitField0_ |= 0x00000002;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.StringStringEntryProto,
              OnnxMl.StringStringEntryProto.Builder,
              OnnxMl.StringStringEntryProtoOrBuilder>
          quantParameterTensorNamesBuilder_;

      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public java.util.List<OnnxMl.StringStringEntryProto> getQuantParameterTensorNamesList() {
        if (quantParameterTensorNamesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(quantParameterTensorNames_);
        } else {
          return quantParameterTensorNamesBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public int getQuantParameterTensorNamesCount() {
        if (quantParameterTensorNamesBuilder_ == null) {
          return quantParameterTensorNames_.size();
        } else {
          return quantParameterTensorNamesBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public OnnxMl.StringStringEntryProto getQuantParameterTensorNames(int index) {
        if (quantParameterTensorNamesBuilder_ == null) {
          return quantParameterTensorNames_.get(index);
        } else {
          return quantParameterTensorNamesBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder setQuantParameterTensorNames(int index, OnnxMl.StringStringEntryProto value) {
        if (quantParameterTensorNamesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.set(index, value);
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder setQuantParameterTensorNames(
          int index, OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (quantParameterTensorNamesBuilder_ == null) {
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.set(index, builderForValue.build());
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder addQuantParameterTensorNames(OnnxMl.StringStringEntryProto value) {
        if (quantParameterTensorNamesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.add(value);
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder addQuantParameterTensorNames(int index, OnnxMl.StringStringEntryProto value) {
        if (quantParameterTensorNamesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.add(index, value);
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder addQuantParameterTensorNames(
          OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (quantParameterTensorNamesBuilder_ == null) {
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.add(builderForValue.build());
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder addQuantParameterTensorNames(
          int index, OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (quantParameterTensorNamesBuilder_ == null) {
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.add(index, builderForValue.build());
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder addAllQuantParameterTensorNames(
          java.lang.Iterable<? extends OnnxMl.StringStringEntryProto> values) {
        if (quantParameterTensorNamesBuilder_ == null) {
          ensureQuantParameterTensorNamesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, quantParameterTensorNames_);
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder clearQuantParameterTensorNames() {
        if (quantParameterTensorNamesBuilder_ == null) {
          quantParameterTensorNames_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public Builder removeQuantParameterTensorNames(int index) {
        if (quantParameterTensorNamesBuilder_ == null) {
          ensureQuantParameterTensorNamesIsMutable();
          quantParameterTensorNames_.remove(index);
          onChanged();
        } else {
          quantParameterTensorNamesBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder getQuantParameterTensorNamesBuilder(int index) {
        return getQuantParameterTensorNamesFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public OnnxMl.StringStringEntryProtoOrBuilder getQuantParameterTensorNamesOrBuilder(
          int index) {
        if (quantParameterTensorNamesBuilder_ == null) {
          return quantParameterTensorNames_.get(index);
        } else {
          return quantParameterTensorNamesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
          getQuantParameterTensorNamesOrBuilderList() {
        if (quantParameterTensorNamesBuilder_ != null) {
          return quantParameterTensorNamesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(quantParameterTensorNames_);
        }
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder addQuantParameterTensorNamesBuilder() {
        return getQuantParameterTensorNamesFieldBuilder()
            .addBuilder(OnnxMl.StringStringEntryProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder addQuantParameterTensorNamesBuilder(int index) {
        return getQuantParameterTensorNamesFieldBuilder()
            .addBuilder(index, OnnxMl.StringStringEntryProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * &lt;key, value&gt; pairs to annotate tensor specified by &lt;tensor_name&gt; above.
       * The keys used in the mapping below must be pre-defined in ONNX spec.
       * For example, for 8-bit linear quantization case, 'SCALE_TENSOR', 'ZERO_POINT_TENSOR' will be pre-defined as
       * quantization parameter keys.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto quant_parameter_tensor_names = 2;</code>
       */
      public java.util.List<OnnxMl.StringStringEntryProto.Builder>
          getQuantParameterTensorNamesBuilderList() {
        return getQuantParameterTensorNamesFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.StringStringEntryProto,
              OnnxMl.StringStringEntryProto.Builder,
              OnnxMl.StringStringEntryProtoOrBuilder>
          getQuantParameterTensorNamesFieldBuilder() {
        if (quantParameterTensorNamesBuilder_ == null) {
          quantParameterTensorNamesBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.StringStringEntryProto,
                  OnnxMl.StringStringEntryProto.Builder,
                  OnnxMl.StringStringEntryProtoOrBuilder>(
                  quantParameterTensorNames_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          quantParameterTensorNames_ = null;
        }
        return quantParameterTensorNamesBuilder_;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.TensorAnnotation)
    }

    // @@protoc_insertion_point(class_scope:onnx.TensorAnnotation)
    private static final OnnxMl.TensorAnnotation DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.TensorAnnotation();
    }

    public static OnnxMl.TensorAnnotation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TensorAnnotation> PARSER =
        new com.google.protobuf.AbstractParser<TensorAnnotation>() {
          @java.lang.Override
          public TensorAnnotation parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new TensorAnnotation(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<TensorAnnotation> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<TensorAnnotation> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.TensorAnnotation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface GraphProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.GraphProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    java.util.List<OnnxMl.NodeProto> getNodeList();
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    OnnxMl.NodeProto getNode(int index);
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    int getNodeCount();
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    java.util.List<? extends OnnxMl.NodeProtoOrBuilder> getNodeOrBuilderList();
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    OnnxMl.NodeProtoOrBuilder getNodeOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * The name of the graph.
     * </pre>
     *
     * <code>string name = 2;</code>
     */
    java.lang.String getName();
    /**
     *
     *
     * <pre>
     * The name of the graph.
     * </pre>
     *
     * <code>string name = 2;</code>
     */
    com.google.protobuf.ByteString getNameBytes();

    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    java.util.List<OnnxMl.TensorProto> getInitializerList();
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    OnnxMl.TensorProto getInitializer(int index);
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    int getInitializerCount();
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    java.util.List<? extends OnnxMl.TensorProtoOrBuilder> getInitializerOrBuilderList();
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    OnnxMl.TensorProtoOrBuilder getInitializerOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    java.util.List<OnnxMl.SparseTensorProto> getSparseInitializerList();
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    OnnxMl.SparseTensorProto getSparseInitializer(int index);
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    int getSparseInitializerCount();
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    java.util.List<? extends OnnxMl.SparseTensorProtoOrBuilder> getSparseInitializerOrBuilderList();
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    OnnxMl.SparseTensorProtoOrBuilder getSparseInitializerOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this graph. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 10;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this graph. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 10;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();

    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    java.util.List<OnnxMl.ValueInfoProto> getInputList();
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    OnnxMl.ValueInfoProto getInput(int index);
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    int getInputCount();
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getInputOrBuilderList();
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    OnnxMl.ValueInfoProtoOrBuilder getInputOrBuilder(int index);

    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    java.util.List<OnnxMl.ValueInfoProto> getOutputList();
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    OnnxMl.ValueInfoProto getOutput(int index);
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    int getOutputCount();
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getOutputOrBuilderList();
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    OnnxMl.ValueInfoProtoOrBuilder getOutputOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    java.util.List<OnnxMl.ValueInfoProto> getValueInfoList();
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    OnnxMl.ValueInfoProto getValueInfo(int index);
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    int getValueInfoCount();
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getValueInfoOrBuilderList();
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    OnnxMl.ValueInfoProtoOrBuilder getValueInfoOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    java.util.List<OnnxMl.TensorAnnotation> getQuantizationAnnotationList();
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    OnnxMl.TensorAnnotation getQuantizationAnnotation(int index);
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    int getQuantizationAnnotationCount();
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    java.util.List<? extends OnnxMl.TensorAnnotationOrBuilder>
        getQuantizationAnnotationOrBuilderList();
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    OnnxMl.TensorAnnotationOrBuilder getQuantizationAnnotationOrBuilder(int index);
  }
  /**
   *
   *
   * <pre>
   * Graphs
   * A graph defines the computational logic of a model and is comprised of a parameterized
   * list of nodes that form a directed acyclic graph based on their inputs and outputs.
   * This is the equivalent of the "network" or "graph" in many deep learning
   * frameworks.
   * </pre>
   *
   * Protobuf type {@code onnx.GraphProto}
   */
  public static final class GraphProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.GraphProto)
      GraphProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use GraphProto.newBuilder() to construct.
    private GraphProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private GraphProto() {
      node_ = java.util.Collections.emptyList();
      name_ = "";
      initializer_ = java.util.Collections.emptyList();
      sparseInitializer_ = java.util.Collections.emptyList();
      docString_ = "";
      input_ = java.util.Collections.emptyList();
      output_ = java.util.Collections.emptyList();
      valueInfo_ = java.util.Collections.emptyList();
      quantizationAnnotation_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private GraphProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  node_ = new java.util.ArrayList<OnnxMl.NodeProto>();
                  mutable_bitField0_ |= 0x00000001;
                }
                node_.add(input.readMessage(OnnxMl.NodeProto.parser(), extensionRegistry));
                break;
              }
            case 18:
              {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
            case 42:
              {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  initializer_ = new java.util.ArrayList<OnnxMl.TensorProto>();
                  mutable_bitField0_ |= 0x00000004;
                }
                initializer_.add(input.readMessage(OnnxMl.TensorProto.parser(), extensionRegistry));
                break;
              }
            case 82:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            case 90:
              {
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  input_ = new java.util.ArrayList<OnnxMl.ValueInfoProto>();
                  mutable_bitField0_ |= 0x00000020;
                }
                input_.add(input.readMessage(OnnxMl.ValueInfoProto.parser(), extensionRegistry));
                break;
              }
            case 98:
              {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  output_ = new java.util.ArrayList<OnnxMl.ValueInfoProto>();
                  mutable_bitField0_ |= 0x00000040;
                }
                output_.add(input.readMessage(OnnxMl.ValueInfoProto.parser(), extensionRegistry));
                break;
              }
            case 106:
              {
                if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                  valueInfo_ = new java.util.ArrayList<OnnxMl.ValueInfoProto>();
                  mutable_bitField0_ |= 0x00000080;
                }
                valueInfo_.add(
                    input.readMessage(OnnxMl.ValueInfoProto.parser(), extensionRegistry));
                break;
              }
            case 114:
              {
                if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                  quantizationAnnotation_ = new java.util.ArrayList<OnnxMl.TensorAnnotation>();
                  mutable_bitField0_ |= 0x00000100;
                }
                quantizationAnnotation_.add(
                    input.readMessage(OnnxMl.TensorAnnotation.parser(), extensionRegistry));
                break;
              }
            case 122:
              {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  sparseInitializer_ = new java.util.ArrayList<OnnxMl.SparseTensorProto>();
                  mutable_bitField0_ |= 0x00000008;
                }
                sparseInitializer_.add(
                    input.readMessage(OnnxMl.SparseTensorProto.parser(), extensionRegistry));
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          node_ = java.util.Collections.unmodifiableList(node_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          initializer_ = java.util.Collections.unmodifiableList(initializer_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          input_ = java.util.Collections.unmodifiableList(input_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          output_ = java.util.Collections.unmodifiableList(output_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          valueInfo_ = java.util.Collections.unmodifiableList(valueInfo_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          quantizationAnnotation_ = java.util.Collections.unmodifiableList(quantizationAnnotation_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          sparseInitializer_ = java.util.Collections.unmodifiableList(sparseInitializer_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_GraphProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_GraphProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.GraphProto.class, OnnxMl.GraphProto.Builder.class);
    }

    private int bitField0_;
    public static final int NODE_FIELD_NUMBER = 1;
    private java.util.List<OnnxMl.NodeProto> node_;
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    public java.util.List<OnnxMl.NodeProto> getNodeList() {
      return node_;
    }
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    public java.util.List<? extends OnnxMl.NodeProtoOrBuilder> getNodeOrBuilderList() {
      return node_;
    }
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    public int getNodeCount() {
      return node_.size();
    }
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    public OnnxMl.NodeProto getNode(int index) {
      return node_.get(index);
    }
    /**
     *
     *
     * <pre>
     * The nodes in the graph, sorted topologically.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 1;</code>
     */
    public OnnxMl.NodeProtoOrBuilder getNodeOrBuilder(int index) {
      return node_.get(index);
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     *
     *
     * <pre>
     * The name of the graph.
     * </pre>
     *
     * <code>string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The name of the graph.
     * </pre>
     *
     * <code>string name = 2;</code>
     */
    public com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int INITIALIZER_FIELD_NUMBER = 5;
    private java.util.List<OnnxMl.TensorProto> initializer_;
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    public java.util.List<OnnxMl.TensorProto> getInitializerList() {
      return initializer_;
    }
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    public java.util.List<? extends OnnxMl.TensorProtoOrBuilder> getInitializerOrBuilderList() {
      return initializer_;
    }
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    public int getInitializerCount() {
      return initializer_.size();
    }
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    public OnnxMl.TensorProto getInitializer(int index) {
      return initializer_.get(index);
    }
    /**
     *
     *
     * <pre>
     * A list of named tensor values, used to specify constant inputs of the graph.
     * Each TensorProto entry must have a distinct name (within the list) that
     * MAY also appear in the input list.
     * </pre>
     *
     * <code>repeated .onnx.TensorProto initializer = 5;</code>
     */
    public OnnxMl.TensorProtoOrBuilder getInitializerOrBuilder(int index) {
      return initializer_.get(index);
    }

    public static final int SPARSE_INITIALIZER_FIELD_NUMBER = 15;
    private java.util.List<OnnxMl.SparseTensorProto> sparseInitializer_;
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    public java.util.List<OnnxMl.SparseTensorProto> getSparseInitializerList() {
      return sparseInitializer_;
    }
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    public java.util.List<? extends OnnxMl.SparseTensorProtoOrBuilder>
        getSparseInitializerOrBuilderList() {
      return sparseInitializer_;
    }
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    public int getSparseInitializerCount() {
      return sparseInitializer_.size();
    }
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    public OnnxMl.SparseTensorProto getSparseInitializer(int index) {
      return sparseInitializer_.get(index);
    }
    /**
     *
     *
     * <pre>
     * Initializers (see above) stored in sparse format.
     * </pre>
     *
     * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
     */
    public OnnxMl.SparseTensorProtoOrBuilder getSparseInitializerOrBuilder(int index) {
      return sparseInitializer_.get(index);
    }

    public static final int DOC_STRING_FIELD_NUMBER = 10;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this graph. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 10;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this graph. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 10;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int INPUT_FIELD_NUMBER = 11;
    private java.util.List<OnnxMl.ValueInfoProto> input_;
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    public java.util.List<OnnxMl.ValueInfoProto> getInputList() {
      return input_;
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    public java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getInputOrBuilderList() {
      return input_;
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    public int getInputCount() {
      return input_.size();
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    public OnnxMl.ValueInfoProto getInput(int index) {
      return input_.get(index);
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the graph.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto input = 11;</code>
     */
    public OnnxMl.ValueInfoProtoOrBuilder getInputOrBuilder(int index) {
      return input_.get(index);
    }

    public static final int OUTPUT_FIELD_NUMBER = 12;
    private java.util.List<OnnxMl.ValueInfoProto> output_;
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    public java.util.List<OnnxMl.ValueInfoProto> getOutputList() {
      return output_;
    }
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    public java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getOutputOrBuilderList() {
      return output_;
    }
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    public int getOutputCount() {
      return output_.size();
    }
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    public OnnxMl.ValueInfoProto getOutput(int index) {
      return output_.get(index);
    }
    /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
    public OnnxMl.ValueInfoProtoOrBuilder getOutputOrBuilder(int index) {
      return output_.get(index);
    }

    public static final int VALUE_INFO_FIELD_NUMBER = 13;
    private java.util.List<OnnxMl.ValueInfoProto> valueInfo_;
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    public java.util.List<OnnxMl.ValueInfoProto> getValueInfoList() {
      return valueInfo_;
    }
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    public java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getValueInfoOrBuilderList() {
      return valueInfo_;
    }
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    public int getValueInfoCount() {
      return valueInfo_.size();
    }
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    public OnnxMl.ValueInfoProto getValueInfo(int index) {
      return valueInfo_.get(index);
    }
    /**
     *
     *
     * <pre>
     * Information for the values in the graph. The ValueInfoProto.name's
     * must be distinct. It is optional for a value to appear in value_info list.
     * </pre>
     *
     * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
     */
    public OnnxMl.ValueInfoProtoOrBuilder getValueInfoOrBuilder(int index) {
      return valueInfo_.get(index);
    }

    public static final int QUANTIZATION_ANNOTATION_FIELD_NUMBER = 14;
    private java.util.List<OnnxMl.TensorAnnotation> quantizationAnnotation_;
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    public java.util.List<OnnxMl.TensorAnnotation> getQuantizationAnnotationList() {
      return quantizationAnnotation_;
    }
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    public java.util.List<? extends OnnxMl.TensorAnnotationOrBuilder>
        getQuantizationAnnotationOrBuilderList() {
      return quantizationAnnotation_;
    }
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    public int getQuantizationAnnotationCount() {
      return quantizationAnnotation_.size();
    }
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    public OnnxMl.TensorAnnotation getQuantizationAnnotation(int index) {
      return quantizationAnnotation_.get(index);
    }
    /**
     *
     *
     * <pre>
     * This field carries information to indicate the mapping among a tensor and its
     * quantization parameter tensors. For example:
     * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
     * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
     * </pre>
     *
     * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
     */
    public OnnxMl.TensorAnnotationOrBuilder getQuantizationAnnotationOrBuilder(int index) {
      return quantizationAnnotation_.get(index);
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      for (int i = 0; i < node_.size(); i++) {
        output.writeMessage(1, node_.get(i));
      }
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
      }
      for (int i = 0; i < initializer_.size(); i++) {
        output.writeMessage(5, initializer_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, docString_);
      }
      for (int i = 0; i < input_.size(); i++) {
        output.writeMessage(11, input_.get(i));
      }
      for (int i = 0; i < output_.size(); i++) {
        output.writeMessage(12, output_.get(i));
      }
      for (int i = 0; i < valueInfo_.size(); i++) {
        output.writeMessage(13, valueInfo_.get(i));
      }
      for (int i = 0; i < quantizationAnnotation_.size(); i++) {
        output.writeMessage(14, quantizationAnnotation_.get(i));
      }
      for (int i = 0; i < sparseInitializer_.size(); i++) {
        output.writeMessage(15, sparseInitializer_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < node_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, node_.get(i));
      }
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
      }
      for (int i = 0; i < initializer_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, initializer_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, docString_);
      }
      for (int i = 0; i < input_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(11, input_.get(i));
      }
      for (int i = 0; i < output_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(12, output_.get(i));
      }
      for (int i = 0; i < valueInfo_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(13, valueInfo_.get(i));
      }
      for (int i = 0; i < quantizationAnnotation_.size(); i++) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                14, quantizationAnnotation_.get(i));
      }
      for (int i = 0; i < sparseInitializer_.size(); i++) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(15, sparseInitializer_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.GraphProto)) {
        return super.equals(obj);
      }
      OnnxMl.GraphProto other = (OnnxMl.GraphProto) obj;

      boolean result = true;
      result = result && getNodeList().equals(other.getNodeList());
      result = result && getName().equals(other.getName());
      result = result && getInitializerList().equals(other.getInitializerList());
      result = result && getSparseInitializerList().equals(other.getSparseInitializerList());
      result = result && getDocString().equals(other.getDocString());
      result = result && getInputList().equals(other.getInputList());
      result = result && getOutputList().equals(other.getOutputList());
      result = result && getValueInfoList().equals(other.getValueInfoList());
      result =
          result && getQuantizationAnnotationList().equals(other.getQuantizationAnnotationList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getNodeCount() > 0) {
        hash = (37 * hash) + NODE_FIELD_NUMBER;
        hash = (53 * hash) + getNodeList().hashCode();
      }
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      if (getInitializerCount() > 0) {
        hash = (37 * hash) + INITIALIZER_FIELD_NUMBER;
        hash = (53 * hash) + getInitializerList().hashCode();
      }
      if (getSparseInitializerCount() > 0) {
        hash = (37 * hash) + SPARSE_INITIALIZER_FIELD_NUMBER;
        hash = (53 * hash) + getSparseInitializerList().hashCode();
      }
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      if (getInputCount() > 0) {
        hash = (37 * hash) + INPUT_FIELD_NUMBER;
        hash = (53 * hash) + getInputList().hashCode();
      }
      if (getOutputCount() > 0) {
        hash = (37 * hash) + OUTPUT_FIELD_NUMBER;
        hash = (53 * hash) + getOutputList().hashCode();
      }
      if (getValueInfoCount() > 0) {
        hash = (37 * hash) + VALUE_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getValueInfoList().hashCode();
      }
      if (getQuantizationAnnotationCount() > 0) {
        hash = (37 * hash) + QUANTIZATION_ANNOTATION_FIELD_NUMBER;
        hash = (53 * hash) + getQuantizationAnnotationList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.GraphProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.GraphProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.GraphProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.GraphProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.GraphProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.GraphProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.GraphProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.GraphProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.GraphProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.GraphProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.GraphProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.GraphProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.GraphProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Graphs
     * A graph defines the computational logic of a model and is comprised of a parameterized
     * list of nodes that form a directed acyclic graph based on their inputs and outputs.
     * This is the equivalent of the "network" or "graph" in many deep learning
     * frameworks.
     * </pre>
     *
     * Protobuf type {@code onnx.GraphProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.GraphProto)
        OnnxMl.GraphProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_GraphProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_GraphProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.GraphProto.class, OnnxMl.GraphProto.Builder.class);
      }

      // Construct using OnnxMlProto3.GraphProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getNodeFieldBuilder();
          getInitializerFieldBuilder();
          getSparseInitializerFieldBuilder();
          getInputFieldBuilder();
          getOutputFieldBuilder();
          getValueInfoFieldBuilder();
          getQuantizationAnnotationFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (nodeBuilder_ == null) {
          node_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          nodeBuilder_.clear();
        }
        name_ = "";

        if (initializerBuilder_ == null) {
          initializer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          initializerBuilder_.clear();
        }
        if (sparseInitializerBuilder_ == null) {
          sparseInitializer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          sparseInitializerBuilder_.clear();
        }
        docString_ = "";

        if (inputBuilder_ == null) {
          input_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          inputBuilder_.clear();
        }
        if (outputBuilder_ == null) {
          output_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          outputBuilder_.clear();
        }
        if (valueInfoBuilder_ == null) {
          valueInfo_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          valueInfoBuilder_.clear();
        }
        if (quantizationAnnotationBuilder_ == null) {
          quantizationAnnotation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          quantizationAnnotationBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_GraphProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.GraphProto getDefaultInstanceForType() {
        return OnnxMl.GraphProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.GraphProto build() {
        OnnxMl.GraphProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.GraphProto buildPartial() {
        OnnxMl.GraphProto result = new OnnxMl.GraphProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nodeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            node_ = java.util.Collections.unmodifiableList(node_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.node_ = node_;
        } else {
          result.node_ = nodeBuilder_.build();
        }
        result.name_ = name_;
        if (initializerBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            initializer_ = java.util.Collections.unmodifiableList(initializer_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.initializer_ = initializer_;
        } else {
          result.initializer_ = initializerBuilder_.build();
        }
        if (sparseInitializerBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            sparseInitializer_ = java.util.Collections.unmodifiableList(sparseInitializer_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.sparseInitializer_ = sparseInitializer_;
        } else {
          result.sparseInitializer_ = sparseInitializerBuilder_.build();
        }
        result.docString_ = docString_;
        if (inputBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            input_ = java.util.Collections.unmodifiableList(input_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.input_ = input_;
        } else {
          result.input_ = inputBuilder_.build();
        }
        if (outputBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            output_ = java.util.Collections.unmodifiableList(output_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.output_ = output_;
        } else {
          result.output_ = outputBuilder_.build();
        }
        if (valueInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            valueInfo_ = java.util.Collections.unmodifiableList(valueInfo_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.valueInfo_ = valueInfo_;
        } else {
          result.valueInfo_ = valueInfoBuilder_.build();
        }
        if (quantizationAnnotationBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            quantizationAnnotation_ =
                java.util.Collections.unmodifiableList(quantizationAnnotation_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.quantizationAnnotation_ = quantizationAnnotation_;
        } else {
          result.quantizationAnnotation_ = quantizationAnnotationBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.GraphProto) {
          return mergeFrom((OnnxMl.GraphProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.GraphProto other) {
        if (other == OnnxMl.GraphProto.getDefaultInstance()) return this;
        if (nodeBuilder_ == null) {
          if (!other.node_.isEmpty()) {
            if (node_.isEmpty()) {
              node_ = other.node_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureNodeIsMutable();
              node_.addAll(other.node_);
            }
            onChanged();
          }
        } else {
          if (!other.node_.isEmpty()) {
            if (nodeBuilder_.isEmpty()) {
              nodeBuilder_.dispose();
              nodeBuilder_ = null;
              node_ = other.node_;
              bitField0_ = (bitField0_ & ~0x00000001);
              nodeBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getNodeFieldBuilder()
                      : null;
            } else {
              nodeBuilder_.addAllMessages(other.node_);
            }
          }
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (initializerBuilder_ == null) {
          if (!other.initializer_.isEmpty()) {
            if (initializer_.isEmpty()) {
              initializer_ = other.initializer_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureInitializerIsMutable();
              initializer_.addAll(other.initializer_);
            }
            onChanged();
          }
        } else {
          if (!other.initializer_.isEmpty()) {
            if (initializerBuilder_.isEmpty()) {
              initializerBuilder_.dispose();
              initializerBuilder_ = null;
              initializer_ = other.initializer_;
              bitField0_ = (bitField0_ & ~0x00000004);
              initializerBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getInitializerFieldBuilder()
                      : null;
            } else {
              initializerBuilder_.addAllMessages(other.initializer_);
            }
          }
        }
        if (sparseInitializerBuilder_ == null) {
          if (!other.sparseInitializer_.isEmpty()) {
            if (sparseInitializer_.isEmpty()) {
              sparseInitializer_ = other.sparseInitializer_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureSparseInitializerIsMutable();
              sparseInitializer_.addAll(other.sparseInitializer_);
            }
            onChanged();
          }
        } else {
          if (!other.sparseInitializer_.isEmpty()) {
            if (sparseInitializerBuilder_.isEmpty()) {
              sparseInitializerBuilder_.dispose();
              sparseInitializerBuilder_ = null;
              sparseInitializer_ = other.sparseInitializer_;
              bitField0_ = (bitField0_ & ~0x00000008);
              sparseInitializerBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getSparseInitializerFieldBuilder()
                      : null;
            } else {
              sparseInitializerBuilder_.addAllMessages(other.sparseInitializer_);
            }
          }
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        if (inputBuilder_ == null) {
          if (!other.input_.isEmpty()) {
            if (input_.isEmpty()) {
              input_ = other.input_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureInputIsMutable();
              input_.addAll(other.input_);
            }
            onChanged();
          }
        } else {
          if (!other.input_.isEmpty()) {
            if (inputBuilder_.isEmpty()) {
              inputBuilder_.dispose();
              inputBuilder_ = null;
              input_ = other.input_;
              bitField0_ = (bitField0_ & ~0x00000020);
              inputBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getInputFieldBuilder()
                      : null;
            } else {
              inputBuilder_.addAllMessages(other.input_);
            }
          }
        }
        if (outputBuilder_ == null) {
          if (!other.output_.isEmpty()) {
            if (output_.isEmpty()) {
              output_ = other.output_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureOutputIsMutable();
              output_.addAll(other.output_);
            }
            onChanged();
          }
        } else {
          if (!other.output_.isEmpty()) {
            if (outputBuilder_.isEmpty()) {
              outputBuilder_.dispose();
              outputBuilder_ = null;
              output_ = other.output_;
              bitField0_ = (bitField0_ & ~0x00000040);
              outputBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getOutputFieldBuilder()
                      : null;
            } else {
              outputBuilder_.addAllMessages(other.output_);
            }
          }
        }
        if (valueInfoBuilder_ == null) {
          if (!other.valueInfo_.isEmpty()) {
            if (valueInfo_.isEmpty()) {
              valueInfo_ = other.valueInfo_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureValueInfoIsMutable();
              valueInfo_.addAll(other.valueInfo_);
            }
            onChanged();
          }
        } else {
          if (!other.valueInfo_.isEmpty()) {
            if (valueInfoBuilder_.isEmpty()) {
              valueInfoBuilder_.dispose();
              valueInfoBuilder_ = null;
              valueInfo_ = other.valueInfo_;
              bitField0_ = (bitField0_ & ~0x00000080);
              valueInfoBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getValueInfoFieldBuilder()
                      : null;
            } else {
              valueInfoBuilder_.addAllMessages(other.valueInfo_);
            }
          }
        }
        if (quantizationAnnotationBuilder_ == null) {
          if (!other.quantizationAnnotation_.isEmpty()) {
            if (quantizationAnnotation_.isEmpty()) {
              quantizationAnnotation_ = other.quantizationAnnotation_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureQuantizationAnnotationIsMutable();
              quantizationAnnotation_.addAll(other.quantizationAnnotation_);
            }
            onChanged();
          }
        } else {
          if (!other.quantizationAnnotation_.isEmpty()) {
            if (quantizationAnnotationBuilder_.isEmpty()) {
              quantizationAnnotationBuilder_.dispose();
              quantizationAnnotationBuilder_ = null;
              quantizationAnnotation_ = other.quantizationAnnotation_;
              bitField0_ = (bitField0_ & ~0x00000100);
              quantizationAnnotationBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getQuantizationAnnotationFieldBuilder()
                      : null;
            } else {
              quantizationAnnotationBuilder_.addAllMessages(other.quantizationAnnotation_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.GraphProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.GraphProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private java.util.List<OnnxMl.NodeProto> node_ = java.util.Collections.emptyList();

      private void ensureNodeIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          node_ = new java.util.ArrayList<OnnxMl.NodeProto>(node_);
          bitField0_ |= 0x00000001;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.NodeProto, OnnxMl.NodeProto.Builder, OnnxMl.NodeProtoOrBuilder>
          nodeBuilder_;

      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public java.util.List<OnnxMl.NodeProto> getNodeList() {
        if (nodeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(node_);
        } else {
          return nodeBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public int getNodeCount() {
        if (nodeBuilder_ == null) {
          return node_.size();
        } else {
          return nodeBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public OnnxMl.NodeProto getNode(int index) {
        if (nodeBuilder_ == null) {
          return node_.get(index);
        } else {
          return nodeBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder setNode(int index, OnnxMl.NodeProto value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodeIsMutable();
          node_.set(index, value);
          onChanged();
        } else {
          nodeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder setNode(int index, OnnxMl.NodeProto.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.set(index, builderForValue.build());
          onChanged();
        } else {
          nodeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder addNode(OnnxMl.NodeProto value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodeIsMutable();
          node_.add(value);
          onChanged();
        } else {
          nodeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder addNode(int index, OnnxMl.NodeProto value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodeIsMutable();
          node_.add(index, value);
          onChanged();
        } else {
          nodeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder addNode(OnnxMl.NodeProto.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.add(builderForValue.build());
          onChanged();
        } else {
          nodeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder addNode(int index, OnnxMl.NodeProto.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.add(index, builderForValue.build());
          onChanged();
        } else {
          nodeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder addAllNode(java.lang.Iterable<? extends OnnxMl.NodeProto> values) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, node_);
          onChanged();
        } else {
          nodeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder clearNode() {
        if (nodeBuilder_ == null) {
          node_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          nodeBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public Builder removeNode(int index) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.remove(index);
          onChanged();
        } else {
          nodeBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public OnnxMl.NodeProto.Builder getNodeBuilder(int index) {
        return getNodeFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public OnnxMl.NodeProtoOrBuilder getNodeOrBuilder(int index) {
        if (nodeBuilder_ == null) {
          return node_.get(index);
        } else {
          return nodeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public java.util.List<? extends OnnxMl.NodeProtoOrBuilder> getNodeOrBuilderList() {
        if (nodeBuilder_ != null) {
          return nodeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(node_);
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public OnnxMl.NodeProto.Builder addNodeBuilder() {
        return getNodeFieldBuilder().addBuilder(OnnxMl.NodeProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public OnnxMl.NodeProto.Builder addNodeBuilder(int index) {
        return getNodeFieldBuilder().addBuilder(index, OnnxMl.NodeProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The nodes in the graph, sorted topologically.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 1;</code>
       */
      public java.util.List<OnnxMl.NodeProto.Builder> getNodeBuilderList() {
        return getNodeFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.NodeProto, OnnxMl.NodeProto.Builder, OnnxMl.NodeProtoOrBuilder>
          getNodeFieldBuilder() {
        if (nodeBuilder_ == null) {
          nodeBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.NodeProto, OnnxMl.NodeProto.Builder, OnnxMl.NodeProtoOrBuilder>(
                  node_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          node_ = null;
        }
        return nodeBuilder_;
      }

      private java.lang.Object name_ = "";
      /**
       *
       *
       * <pre>
       * The name of the graph.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name of the graph.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name of the graph.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public Builder setName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        name_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name of the graph.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public Builder clearName() {

        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name of the graph.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public Builder setNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        name_ = value;
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.TensorProto> initializer_ = java.util.Collections.emptyList();

      private void ensureInitializerIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          initializer_ = new java.util.ArrayList<OnnxMl.TensorProto>(initializer_);
          bitField0_ |= 0x00000004;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          initializerBuilder_;

      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public java.util.List<OnnxMl.TensorProto> getInitializerList() {
        if (initializerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(initializer_);
        } else {
          return initializerBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public int getInitializerCount() {
        if (initializerBuilder_ == null) {
          return initializer_.size();
        } else {
          return initializerBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public OnnxMl.TensorProto getInitializer(int index) {
        if (initializerBuilder_ == null) {
          return initializer_.get(index);
        } else {
          return initializerBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder setInitializer(int index, OnnxMl.TensorProto value) {
        if (initializerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInitializerIsMutable();
          initializer_.set(index, value);
          onChanged();
        } else {
          initializerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder setInitializer(int index, OnnxMl.TensorProto.Builder builderForValue) {
        if (initializerBuilder_ == null) {
          ensureInitializerIsMutable();
          initializer_.set(index, builderForValue.build());
          onChanged();
        } else {
          initializerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder addInitializer(OnnxMl.TensorProto value) {
        if (initializerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInitializerIsMutable();
          initializer_.add(value);
          onChanged();
        } else {
          initializerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder addInitializer(int index, OnnxMl.TensorProto value) {
        if (initializerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInitializerIsMutable();
          initializer_.add(index, value);
          onChanged();
        } else {
          initializerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder addInitializer(OnnxMl.TensorProto.Builder builderForValue) {
        if (initializerBuilder_ == null) {
          ensureInitializerIsMutable();
          initializer_.add(builderForValue.build());
          onChanged();
        } else {
          initializerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder addInitializer(int index, OnnxMl.TensorProto.Builder builderForValue) {
        if (initializerBuilder_ == null) {
          ensureInitializerIsMutable();
          initializer_.add(index, builderForValue.build());
          onChanged();
        } else {
          initializerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder addAllInitializer(java.lang.Iterable<? extends OnnxMl.TensorProto> values) {
        if (initializerBuilder_ == null) {
          ensureInitializerIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, initializer_);
          onChanged();
        } else {
          initializerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder clearInitializer() {
        if (initializerBuilder_ == null) {
          initializer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          initializerBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public Builder removeInitializer(int index) {
        if (initializerBuilder_ == null) {
          ensureInitializerIsMutable();
          initializer_.remove(index);
          onChanged();
        } else {
          initializerBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public OnnxMl.TensorProto.Builder getInitializerBuilder(int index) {
        return getInitializerFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public OnnxMl.TensorProtoOrBuilder getInitializerOrBuilder(int index) {
        if (initializerBuilder_ == null) {
          return initializer_.get(index);
        } else {
          return initializerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public java.util.List<? extends OnnxMl.TensorProtoOrBuilder> getInitializerOrBuilderList() {
        if (initializerBuilder_ != null) {
          return initializerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(initializer_);
        }
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public OnnxMl.TensorProto.Builder addInitializerBuilder() {
        return getInitializerFieldBuilder().addBuilder(OnnxMl.TensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public OnnxMl.TensorProto.Builder addInitializerBuilder(int index) {
        return getInitializerFieldBuilder()
            .addBuilder(index, OnnxMl.TensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * A list of named tensor values, used to specify constant inputs of the graph.
       * Each TensorProto entry must have a distinct name (within the list) that
       * MAY also appear in the input list.
       * </pre>
       *
       * <code>repeated .onnx.TensorProto initializer = 5;</code>
       */
      public java.util.List<OnnxMl.TensorProto.Builder> getInitializerBuilderList() {
        return getInitializerFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          getInitializerFieldBuilder() {
        if (initializerBuilder_ == null) {
          initializerBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>(
                  initializer_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          initializer_ = null;
        }
        return initializerBuilder_;
      }

      private java.util.List<OnnxMl.SparseTensorProto> sparseInitializer_ =
          java.util.Collections.emptyList();

      private void ensureSparseInitializerIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          sparseInitializer_ =
              new java.util.ArrayList<OnnxMl.SparseTensorProto>(sparseInitializer_);
          bitField0_ |= 0x00000008;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.SparseTensorProto,
              OnnxMl.SparseTensorProto.Builder,
              OnnxMl.SparseTensorProtoOrBuilder>
          sparseInitializerBuilder_;

      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public java.util.List<OnnxMl.SparseTensorProto> getSparseInitializerList() {
        if (sparseInitializerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sparseInitializer_);
        } else {
          return sparseInitializerBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public int getSparseInitializerCount() {
        if (sparseInitializerBuilder_ == null) {
          return sparseInitializer_.size();
        } else {
          return sparseInitializerBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public OnnxMl.SparseTensorProto getSparseInitializer(int index) {
        if (sparseInitializerBuilder_ == null) {
          return sparseInitializer_.get(index);
        } else {
          return sparseInitializerBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder setSparseInitializer(int index, OnnxMl.SparseTensorProto value) {
        if (sparseInitializerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseInitializerIsMutable();
          sparseInitializer_.set(index, value);
          onChanged();
        } else {
          sparseInitializerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder setSparseInitializer(
          int index, OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseInitializerBuilder_ == null) {
          ensureSparseInitializerIsMutable();
          sparseInitializer_.set(index, builderForValue.build());
          onChanged();
        } else {
          sparseInitializerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder addSparseInitializer(OnnxMl.SparseTensorProto value) {
        if (sparseInitializerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseInitializerIsMutable();
          sparseInitializer_.add(value);
          onChanged();
        } else {
          sparseInitializerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder addSparseInitializer(int index, OnnxMl.SparseTensorProto value) {
        if (sparseInitializerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseInitializerIsMutable();
          sparseInitializer_.add(index, value);
          onChanged();
        } else {
          sparseInitializerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder addSparseInitializer(OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseInitializerBuilder_ == null) {
          ensureSparseInitializerIsMutable();
          sparseInitializer_.add(builderForValue.build());
          onChanged();
        } else {
          sparseInitializerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder addSparseInitializer(
          int index, OnnxMl.SparseTensorProto.Builder builderForValue) {
        if (sparseInitializerBuilder_ == null) {
          ensureSparseInitializerIsMutable();
          sparseInitializer_.add(index, builderForValue.build());
          onChanged();
        } else {
          sparseInitializerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder addAllSparseInitializer(
          java.lang.Iterable<? extends OnnxMl.SparseTensorProto> values) {
        if (sparseInitializerBuilder_ == null) {
          ensureSparseInitializerIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, sparseInitializer_);
          onChanged();
        } else {
          sparseInitializerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder clearSparseInitializer() {
        if (sparseInitializerBuilder_ == null) {
          sparseInitializer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          sparseInitializerBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public Builder removeSparseInitializer(int index) {
        if (sparseInitializerBuilder_ == null) {
          ensureSparseInitializerIsMutable();
          sparseInitializer_.remove(index);
          onChanged();
        } else {
          sparseInitializerBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public OnnxMl.SparseTensorProto.Builder getSparseInitializerBuilder(int index) {
        return getSparseInitializerFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public OnnxMl.SparseTensorProtoOrBuilder getSparseInitializerOrBuilder(int index) {
        if (sparseInitializerBuilder_ == null) {
          return sparseInitializer_.get(index);
        } else {
          return sparseInitializerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public java.util.List<? extends OnnxMl.SparseTensorProtoOrBuilder>
          getSparseInitializerOrBuilderList() {
        if (sparseInitializerBuilder_ != null) {
          return sparseInitializerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sparseInitializer_);
        }
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public OnnxMl.SparseTensorProto.Builder addSparseInitializerBuilder() {
        return getSparseInitializerFieldBuilder()
            .addBuilder(OnnxMl.SparseTensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public OnnxMl.SparseTensorProto.Builder addSparseInitializerBuilder(int index) {
        return getSparseInitializerFieldBuilder()
            .addBuilder(index, OnnxMl.SparseTensorProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Initializers (see above) stored in sparse format.
       * </pre>
       *
       * <code>repeated .onnx.SparseTensorProto sparse_initializer = 15;</code>
       */
      public java.util.List<OnnxMl.SparseTensorProto.Builder> getSparseInitializerBuilderList() {
        return getSparseInitializerFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.SparseTensorProto,
              OnnxMl.SparseTensorProto.Builder,
              OnnxMl.SparseTensorProtoOrBuilder>
          getSparseInitializerFieldBuilder() {
        if (sparseInitializerBuilder_ == null) {
          sparseInitializerBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.SparseTensorProto,
                  OnnxMl.SparseTensorProto.Builder,
                  OnnxMl.SparseTensorProtoOrBuilder>(
                  sparseInitializer_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          sparseInitializer_ = null;
        }
        return sparseInitializerBuilder_;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this graph. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 10;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this graph. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 10;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this graph. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 10;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this graph. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 10;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this graph. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 10;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.ValueInfoProto> input_ = java.util.Collections.emptyList();

      private void ensureInputIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          input_ = new java.util.ArrayList<OnnxMl.ValueInfoProto>(input_);
          bitField0_ |= 0x00000020;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.ValueInfoProto, OnnxMl.ValueInfoProto.Builder, OnnxMl.ValueInfoProtoOrBuilder>
          inputBuilder_;

      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public java.util.List<OnnxMl.ValueInfoProto> getInputList() {
        if (inputBuilder_ == null) {
          return java.util.Collections.unmodifiableList(input_);
        } else {
          return inputBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public int getInputCount() {
        if (inputBuilder_ == null) {
          return input_.size();
        } else {
          return inputBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public OnnxMl.ValueInfoProto getInput(int index) {
        if (inputBuilder_ == null) {
          return input_.get(index);
        } else {
          return inputBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder setInput(int index, OnnxMl.ValueInfoProto value) {
        if (inputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInputIsMutable();
          input_.set(index, value);
          onChanged();
        } else {
          inputBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder setInput(int index, OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (inputBuilder_ == null) {
          ensureInputIsMutable();
          input_.set(index, builderForValue.build());
          onChanged();
        } else {
          inputBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder addInput(OnnxMl.ValueInfoProto value) {
        if (inputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInputIsMutable();
          input_.add(value);
          onChanged();
        } else {
          inputBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder addInput(int index, OnnxMl.ValueInfoProto value) {
        if (inputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInputIsMutable();
          input_.add(index, value);
          onChanged();
        } else {
          inputBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder addInput(OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (inputBuilder_ == null) {
          ensureInputIsMutable();
          input_.add(builderForValue.build());
          onChanged();
        } else {
          inputBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder addInput(int index, OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (inputBuilder_ == null) {
          ensureInputIsMutable();
          input_.add(index, builderForValue.build());
          onChanged();
        } else {
          inputBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder addAllInput(java.lang.Iterable<? extends OnnxMl.ValueInfoProto> values) {
        if (inputBuilder_ == null) {
          ensureInputIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, input_);
          onChanged();
        } else {
          inputBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder clearInput() {
        if (inputBuilder_ == null) {
          input_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          inputBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public Builder removeInput(int index) {
        if (inputBuilder_ == null) {
          ensureInputIsMutable();
          input_.remove(index);
          onChanged();
        } else {
          inputBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public OnnxMl.ValueInfoProto.Builder getInputBuilder(int index) {
        return getInputFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public OnnxMl.ValueInfoProtoOrBuilder getInputOrBuilder(int index) {
        if (inputBuilder_ == null) {
          return input_.get(index);
        } else {
          return inputBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getInputOrBuilderList() {
        if (inputBuilder_ != null) {
          return inputBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(input_);
        }
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public OnnxMl.ValueInfoProto.Builder addInputBuilder() {
        return getInputFieldBuilder().addBuilder(OnnxMl.ValueInfoProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public OnnxMl.ValueInfoProto.Builder addInputBuilder(int index) {
        return getInputFieldBuilder().addBuilder(index, OnnxMl.ValueInfoProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the graph.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto input = 11;</code>
       */
      public java.util.List<OnnxMl.ValueInfoProto.Builder> getInputBuilderList() {
        return getInputFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.ValueInfoProto, OnnxMl.ValueInfoProto.Builder, OnnxMl.ValueInfoProtoOrBuilder>
          getInputFieldBuilder() {
        if (inputBuilder_ == null) {
          inputBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.ValueInfoProto,
                  OnnxMl.ValueInfoProto.Builder,
                  OnnxMl.ValueInfoProtoOrBuilder>(
                  input_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          input_ = null;
        }
        return inputBuilder_;
      }

      private java.util.List<OnnxMl.ValueInfoProto> output_ = java.util.Collections.emptyList();

      private void ensureOutputIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          output_ = new java.util.ArrayList<OnnxMl.ValueInfoProto>(output_);
          bitField0_ |= 0x00000040;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.ValueInfoProto, OnnxMl.ValueInfoProto.Builder, OnnxMl.ValueInfoProtoOrBuilder>
          outputBuilder_;

      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public java.util.List<OnnxMl.ValueInfoProto> getOutputList() {
        if (outputBuilder_ == null) {
          return java.util.Collections.unmodifiableList(output_);
        } else {
          return outputBuilder_.getMessageList();
        }
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public int getOutputCount() {
        if (outputBuilder_ == null) {
          return output_.size();
        } else {
          return outputBuilder_.getCount();
        }
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public OnnxMl.ValueInfoProto getOutput(int index) {
        if (outputBuilder_ == null) {
          return output_.get(index);
        } else {
          return outputBuilder_.getMessage(index);
        }
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder setOutput(int index, OnnxMl.ValueInfoProto value) {
        if (outputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputIsMutable();
          output_.set(index, value);
          onChanged();
        } else {
          outputBuilder_.setMessage(index, value);
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder setOutput(int index, OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.set(index, builderForValue.build());
          onChanged();
        } else {
          outputBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder addOutput(OnnxMl.ValueInfoProto value) {
        if (outputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputIsMutable();
          output_.add(value);
          onChanged();
        } else {
          outputBuilder_.addMessage(value);
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder addOutput(int index, OnnxMl.ValueInfoProto value) {
        if (outputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputIsMutable();
          output_.add(index, value);
          onChanged();
        } else {
          outputBuilder_.addMessage(index, value);
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder addOutput(OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.add(builderForValue.build());
          onChanged();
        } else {
          outputBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder addOutput(int index, OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.add(index, builderForValue.build());
          onChanged();
        } else {
          outputBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder addAllOutput(java.lang.Iterable<? extends OnnxMl.ValueInfoProto> values) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, output_);
          onChanged();
        } else {
          outputBuilder_.addAllMessages(values);
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder clearOutput() {
        if (outputBuilder_ == null) {
          output_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          outputBuilder_.clear();
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public Builder removeOutput(int index) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.remove(index);
          onChanged();
        } else {
          outputBuilder_.remove(index);
        }
        return this;
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public OnnxMl.ValueInfoProto.Builder getOutputBuilder(int index) {
        return getOutputFieldBuilder().getBuilder(index);
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public OnnxMl.ValueInfoProtoOrBuilder getOutputOrBuilder(int index) {
        if (outputBuilder_ == null) {
          return output_.get(index);
        } else {
          return outputBuilder_.getMessageOrBuilder(index);
        }
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getOutputOrBuilderList() {
        if (outputBuilder_ != null) {
          return outputBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(output_);
        }
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public OnnxMl.ValueInfoProto.Builder addOutputBuilder() {
        return getOutputFieldBuilder().addBuilder(OnnxMl.ValueInfoProto.getDefaultInstance());
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public OnnxMl.ValueInfoProto.Builder addOutputBuilder(int index) {
        return getOutputFieldBuilder()
            .addBuilder(index, OnnxMl.ValueInfoProto.getDefaultInstance());
      }
      /** <code>repeated .onnx.ValueInfoProto output = 12;</code> */
      public java.util.List<OnnxMl.ValueInfoProto.Builder> getOutputBuilderList() {
        return getOutputFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.ValueInfoProto, OnnxMl.ValueInfoProto.Builder, OnnxMl.ValueInfoProtoOrBuilder>
          getOutputFieldBuilder() {
        if (outputBuilder_ == null) {
          outputBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.ValueInfoProto,
                  OnnxMl.ValueInfoProto.Builder,
                  OnnxMl.ValueInfoProtoOrBuilder>(
                  output_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          output_ = null;
        }
        return outputBuilder_;
      }

      private java.util.List<OnnxMl.ValueInfoProto> valueInfo_ = java.util.Collections.emptyList();

      private void ensureValueInfoIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          valueInfo_ = new java.util.ArrayList<OnnxMl.ValueInfoProto>(valueInfo_);
          bitField0_ |= 0x00000080;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.ValueInfoProto, OnnxMl.ValueInfoProto.Builder, OnnxMl.ValueInfoProtoOrBuilder>
          valueInfoBuilder_;

      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public java.util.List<OnnxMl.ValueInfoProto> getValueInfoList() {
        if (valueInfoBuilder_ == null) {
          return java.util.Collections.unmodifiableList(valueInfo_);
        } else {
          return valueInfoBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public int getValueInfoCount() {
        if (valueInfoBuilder_ == null) {
          return valueInfo_.size();
        } else {
          return valueInfoBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public OnnxMl.ValueInfoProto getValueInfo(int index) {
        if (valueInfoBuilder_ == null) {
          return valueInfo_.get(index);
        } else {
          return valueInfoBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder setValueInfo(int index, OnnxMl.ValueInfoProto value) {
        if (valueInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueInfoIsMutable();
          valueInfo_.set(index, value);
          onChanged();
        } else {
          valueInfoBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder setValueInfo(int index, OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (valueInfoBuilder_ == null) {
          ensureValueInfoIsMutable();
          valueInfo_.set(index, builderForValue.build());
          onChanged();
        } else {
          valueInfoBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder addValueInfo(OnnxMl.ValueInfoProto value) {
        if (valueInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueInfoIsMutable();
          valueInfo_.add(value);
          onChanged();
        } else {
          valueInfoBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder addValueInfo(int index, OnnxMl.ValueInfoProto value) {
        if (valueInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueInfoIsMutable();
          valueInfo_.add(index, value);
          onChanged();
        } else {
          valueInfoBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder addValueInfo(OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (valueInfoBuilder_ == null) {
          ensureValueInfoIsMutable();
          valueInfo_.add(builderForValue.build());
          onChanged();
        } else {
          valueInfoBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder addValueInfo(int index, OnnxMl.ValueInfoProto.Builder builderForValue) {
        if (valueInfoBuilder_ == null) {
          ensureValueInfoIsMutable();
          valueInfo_.add(index, builderForValue.build());
          onChanged();
        } else {
          valueInfoBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder addAllValueInfo(java.lang.Iterable<? extends OnnxMl.ValueInfoProto> values) {
        if (valueInfoBuilder_ == null) {
          ensureValueInfoIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, valueInfo_);
          onChanged();
        } else {
          valueInfoBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder clearValueInfo() {
        if (valueInfoBuilder_ == null) {
          valueInfo_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          valueInfoBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public Builder removeValueInfo(int index) {
        if (valueInfoBuilder_ == null) {
          ensureValueInfoIsMutable();
          valueInfo_.remove(index);
          onChanged();
        } else {
          valueInfoBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public OnnxMl.ValueInfoProto.Builder getValueInfoBuilder(int index) {
        return getValueInfoFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public OnnxMl.ValueInfoProtoOrBuilder getValueInfoOrBuilder(int index) {
        if (valueInfoBuilder_ == null) {
          return valueInfo_.get(index);
        } else {
          return valueInfoBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public java.util.List<? extends OnnxMl.ValueInfoProtoOrBuilder> getValueInfoOrBuilderList() {
        if (valueInfoBuilder_ != null) {
          return valueInfoBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(valueInfo_);
        }
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public OnnxMl.ValueInfoProto.Builder addValueInfoBuilder() {
        return getValueInfoFieldBuilder().addBuilder(OnnxMl.ValueInfoProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public OnnxMl.ValueInfoProto.Builder addValueInfoBuilder(int index) {
        return getValueInfoFieldBuilder()
            .addBuilder(index, OnnxMl.ValueInfoProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Information for the values in the graph. The ValueInfoProto.name's
       * must be distinct. It is optional for a value to appear in value_info list.
       * </pre>
       *
       * <code>repeated .onnx.ValueInfoProto value_info = 13;</code>
       */
      public java.util.List<OnnxMl.ValueInfoProto.Builder> getValueInfoBuilderList() {
        return getValueInfoFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.ValueInfoProto, OnnxMl.ValueInfoProto.Builder, OnnxMl.ValueInfoProtoOrBuilder>
          getValueInfoFieldBuilder() {
        if (valueInfoBuilder_ == null) {
          valueInfoBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.ValueInfoProto,
                  OnnxMl.ValueInfoProto.Builder,
                  OnnxMl.ValueInfoProtoOrBuilder>(
                  valueInfo_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          valueInfo_ = null;
        }
        return valueInfoBuilder_;
      }

      private java.util.List<OnnxMl.TensorAnnotation> quantizationAnnotation_ =
          java.util.Collections.emptyList();

      private void ensureQuantizationAnnotationIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          quantizationAnnotation_ =
              new java.util.ArrayList<OnnxMl.TensorAnnotation>(quantizationAnnotation_);
          bitField0_ |= 0x00000100;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorAnnotation,
              OnnxMl.TensorAnnotation.Builder,
              OnnxMl.TensorAnnotationOrBuilder>
          quantizationAnnotationBuilder_;

      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public java.util.List<OnnxMl.TensorAnnotation> getQuantizationAnnotationList() {
        if (quantizationAnnotationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(quantizationAnnotation_);
        } else {
          return quantizationAnnotationBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public int getQuantizationAnnotationCount() {
        if (quantizationAnnotationBuilder_ == null) {
          return quantizationAnnotation_.size();
        } else {
          return quantizationAnnotationBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public OnnxMl.TensorAnnotation getQuantizationAnnotation(int index) {
        if (quantizationAnnotationBuilder_ == null) {
          return quantizationAnnotation_.get(index);
        } else {
          return quantizationAnnotationBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder setQuantizationAnnotation(int index, OnnxMl.TensorAnnotation value) {
        if (quantizationAnnotationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.set(index, value);
          onChanged();
        } else {
          quantizationAnnotationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder setQuantizationAnnotation(
          int index, OnnxMl.TensorAnnotation.Builder builderForValue) {
        if (quantizationAnnotationBuilder_ == null) {
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.set(index, builderForValue.build());
          onChanged();
        } else {
          quantizationAnnotationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder addQuantizationAnnotation(OnnxMl.TensorAnnotation value) {
        if (quantizationAnnotationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.add(value);
          onChanged();
        } else {
          quantizationAnnotationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder addQuantizationAnnotation(int index, OnnxMl.TensorAnnotation value) {
        if (quantizationAnnotationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.add(index, value);
          onChanged();
        } else {
          quantizationAnnotationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder addQuantizationAnnotation(OnnxMl.TensorAnnotation.Builder builderForValue) {
        if (quantizationAnnotationBuilder_ == null) {
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.add(builderForValue.build());
          onChanged();
        } else {
          quantizationAnnotationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder addQuantizationAnnotation(
          int index, OnnxMl.TensorAnnotation.Builder builderForValue) {
        if (quantizationAnnotationBuilder_ == null) {
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.add(index, builderForValue.build());
          onChanged();
        } else {
          quantizationAnnotationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder addAllQuantizationAnnotation(
          java.lang.Iterable<? extends OnnxMl.TensorAnnotation> values) {
        if (quantizationAnnotationBuilder_ == null) {
          ensureQuantizationAnnotationIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, quantizationAnnotation_);
          onChanged();
        } else {
          quantizationAnnotationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder clearQuantizationAnnotation() {
        if (quantizationAnnotationBuilder_ == null) {
          quantizationAnnotation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          quantizationAnnotationBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public Builder removeQuantizationAnnotation(int index) {
        if (quantizationAnnotationBuilder_ == null) {
          ensureQuantizationAnnotationIsMutable();
          quantizationAnnotation_.remove(index);
          onChanged();
        } else {
          quantizationAnnotationBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public OnnxMl.TensorAnnotation.Builder getQuantizationAnnotationBuilder(int index) {
        return getQuantizationAnnotationFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public OnnxMl.TensorAnnotationOrBuilder getQuantizationAnnotationOrBuilder(int index) {
        if (quantizationAnnotationBuilder_ == null) {
          return quantizationAnnotation_.get(index);
        } else {
          return quantizationAnnotationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public java.util.List<? extends OnnxMl.TensorAnnotationOrBuilder>
          getQuantizationAnnotationOrBuilderList() {
        if (quantizationAnnotationBuilder_ != null) {
          return quantizationAnnotationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(quantizationAnnotation_);
        }
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public OnnxMl.TensorAnnotation.Builder addQuantizationAnnotationBuilder() {
        return getQuantizationAnnotationFieldBuilder()
            .addBuilder(OnnxMl.TensorAnnotation.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public OnnxMl.TensorAnnotation.Builder addQuantizationAnnotationBuilder(int index) {
        return getQuantizationAnnotationFieldBuilder()
            .addBuilder(index, OnnxMl.TensorAnnotation.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * This field carries information to indicate the mapping among a tensor and its
       * quantization parameter tensors. For example:
       * For tensor 'a', it may have {'SCALE_TENSOR', 'a_scale'} and {'ZERO_POINT_TENSOR', 'a_zero_point'} annotated,
       * which means, tensor 'a_scale' and tensor 'a_zero_point' are scale and zero point of tensor 'a' in the model.
       * </pre>
       *
       * <code>repeated .onnx.TensorAnnotation quantization_annotation = 14;</code>
       */
      public java.util.List<OnnxMl.TensorAnnotation.Builder>
          getQuantizationAnnotationBuilderList() {
        return getQuantizationAnnotationFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorAnnotation,
              OnnxMl.TensorAnnotation.Builder,
              OnnxMl.TensorAnnotationOrBuilder>
          getQuantizationAnnotationFieldBuilder() {
        if (quantizationAnnotationBuilder_ == null) {
          quantizationAnnotationBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.TensorAnnotation,
                  OnnxMl.TensorAnnotation.Builder,
                  OnnxMl.TensorAnnotationOrBuilder>(
                  quantizationAnnotation_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          quantizationAnnotation_ = null;
        }
        return quantizationAnnotationBuilder_;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.GraphProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.GraphProto)
    private static final OnnxMl.GraphProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.GraphProto();
    }

    public static OnnxMl.GraphProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GraphProto> PARSER =
        new com.google.protobuf.AbstractParser<GraphProto>() {
          @java.lang.Override
          public GraphProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new GraphProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<GraphProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GraphProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.GraphProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface TensorProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.TensorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The shape of the tensor.
     * </pre>
     *
     * <code>repeated int64 dims = 1;</code>
     */
    java.util.List<java.lang.Long> getDimsList();
    /**
     *
     *
     * <pre>
     * The shape of the tensor.
     * </pre>
     *
     * <code>repeated int64 dims = 1;</code>
     */
    int getDimsCount();
    /**
     *
     *
     * <pre>
     * The shape of the tensor.
     * </pre>
     *
     * <code>repeated int64 dims = 1;</code>
     */
    long getDims(int index);

    /**
     *
     *
     * <pre>
     * The data type of the tensor.
     * This field MUST have a valid TensorProto.DataType value
     * </pre>
     *
     * <code>int32 data_type = 2;</code>
     */
    int getDataType();

    /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
    boolean hasSegment();
    /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
    OnnxMl.TensorProto.Segment getSegment();
    /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
    OnnxMl.TensorProto.SegmentOrBuilder getSegmentOrBuilder();

    /**
     *
     *
     * <pre>
     * For float and complex64 values
     * Complex64 tensors are encoded as a single array of floats,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
     * </pre>
     *
     * <code>repeated float float_data = 4 [packed = true];</code>
     */
    java.util.List<java.lang.Float> getFloatDataList();
    /**
     *
     *
     * <pre>
     * For float and complex64 values
     * Complex64 tensors are encoded as a single array of floats,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
     * </pre>
     *
     * <code>repeated float float_data = 4 [packed = true];</code>
     */
    int getFloatDataCount();
    /**
     *
     *
     * <pre>
     * For float and complex64 values
     * Complex64 tensors are encoded as a single array of floats,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
     * </pre>
     *
     * <code>repeated float float_data = 4 [packed = true];</code>
     */
    float getFloatData(int index);

    /**
     *
     *
     * <pre>
     * For int32, uint8, int8, uint16, int16, bool, and float16 values
     * float16 values must be bit-wise converted to an uint16_t prior
     * to writing to the buffer.
     * When this field is present, the data_type field MUST be
     * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
     * </pre>
     *
     * <code>repeated int32 int32_data = 5 [packed = true];</code>
     */
    java.util.List<java.lang.Integer> getInt32DataList();
    /**
     *
     *
     * <pre>
     * For int32, uint8, int8, uint16, int16, bool, and float16 values
     * float16 values must be bit-wise converted to an uint16_t prior
     * to writing to the buffer.
     * When this field is present, the data_type field MUST be
     * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
     * </pre>
     *
     * <code>repeated int32 int32_data = 5 [packed = true];</code>
     */
    int getInt32DataCount();
    /**
     *
     *
     * <pre>
     * For int32, uint8, int8, uint16, int16, bool, and float16 values
     * float16 values must be bit-wise converted to an uint16_t prior
     * to writing to the buffer.
     * When this field is present, the data_type field MUST be
     * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
     * </pre>
     *
     * <code>repeated int32 int32_data = 5 [packed = true];</code>
     */
    int getInt32Data(int index);

    /**
     *
     *
     * <pre>
     * For strings.
     * Each element of string_data is a UTF-8 encoded Unicode
     * string. No trailing null, no leading BOM. The protobuf "string"
     * scalar type is not used to match ML community conventions.
     * When this field is present, the data_type field MUST be STRING
     * </pre>
     *
     * <code>repeated bytes string_data = 6;</code>
     */
    java.util.List<com.google.protobuf.ByteString> getStringDataList();
    /**
     *
     *
     * <pre>
     * For strings.
     * Each element of string_data is a UTF-8 encoded Unicode
     * string. No trailing null, no leading BOM. The protobuf "string"
     * scalar type is not used to match ML community conventions.
     * When this field is present, the data_type field MUST be STRING
     * </pre>
     *
     * <code>repeated bytes string_data = 6;</code>
     */
    int getStringDataCount();
    /**
     *
     *
     * <pre>
     * For strings.
     * Each element of string_data is a UTF-8 encoded Unicode
     * string. No trailing null, no leading BOM. The protobuf "string"
     * scalar type is not used to match ML community conventions.
     * When this field is present, the data_type field MUST be STRING
     * </pre>
     *
     * <code>repeated bytes string_data = 6;</code>
     */
    com.google.protobuf.ByteString getStringData(int index);

    /**
     *
     *
     * <pre>
     * For int64.
     * When this field is present, the data_type field MUST be INT64
     * </pre>
     *
     * <code>repeated int64 int64_data = 7 [packed = true];</code>
     */
    java.util.List<java.lang.Long> getInt64DataList();
    /**
     *
     *
     * <pre>
     * For int64.
     * When this field is present, the data_type field MUST be INT64
     * </pre>
     *
     * <code>repeated int64 int64_data = 7 [packed = true];</code>
     */
    int getInt64DataCount();
    /**
     *
     *
     * <pre>
     * For int64.
     * When this field is present, the data_type field MUST be INT64
     * </pre>
     *
     * <code>repeated int64 int64_data = 7 [packed = true];</code>
     */
    long getInt64Data(int index);

    /**
     *
     *
     * <pre>
     * Optionally, a name for the tensor.
     * </pre>
     *
     * <code>string name = 8;</code>
     */
    java.lang.String getName();
    /**
     *
     *
     * <pre>
     * Optionally, a name for the tensor.
     * </pre>
     *
     * <code>string name = 8;</code>
     */
    com.google.protobuf.ByteString getNameBytes();

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this tensor. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 12;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this tensor. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 12;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();

    /**
     *
     *
     * <pre>
     * Serializations can either use one of the fields above, or use this
     * raw bytes field. The only exception is the string case, where one is
     * required to store the content in the repeated bytes string_data field.
     * When this raw_data field is used to store tensor value, elements MUST
     * be stored in as fixed-width, little-endian order.
     * Floating-point data types MUST be stored in IEEE 754 format.
     * Complex64 elements must be written as two consecutive FLOAT values, real component first.
     * Complex128 elements must be written as two consecutive DOUBLE values, real component first.
     * Boolean type MUST be written one byte per tensor element (00000001 for true, 00000000 for false).
     * Note: the advantage of specific field rather than the raw_data field is
     * that in some cases (e.g. int data), protobuf does a better packing via
     * variable length storage, and may lead to smaller binary footprint.
     * When this field is present, the data_type field MUST NOT be STRING or UNDEFINED
     * </pre>
     *
     * <code>bytes raw_data = 9;</code>
     */
    com.google.protobuf.ByteString getRawData();

    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    java.util.List<OnnxMl.StringStringEntryProto> getExternalDataList();
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    OnnxMl.StringStringEntryProto getExternalData(int index);
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    int getExternalDataCount();
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder> getExternalDataOrBuilderList();
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    OnnxMl.StringStringEntryProtoOrBuilder getExternalDataOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
     * </pre>
     *
     * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
     */
    int getDataLocationValue();
    /**
     *
     *
     * <pre>
     * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
     * </pre>
     *
     * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
     */
    OnnxMl.TensorProto.DataLocation getDataLocation();

    /**
     *
     *
     * <pre>
     * For double
     * Complex128 tensors are encoded as a single array of doubles,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
     * </pre>
     *
     * <code>repeated double double_data = 10 [packed = true];</code>
     */
    java.util.List<java.lang.Double> getDoubleDataList();
    /**
     *
     *
     * <pre>
     * For double
     * Complex128 tensors are encoded as a single array of doubles,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
     * </pre>
     *
     * <code>repeated double double_data = 10 [packed = true];</code>
     */
    int getDoubleDataCount();
    /**
     *
     *
     * <pre>
     * For double
     * Complex128 tensors are encoded as a single array of doubles,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
     * </pre>
     *
     * <code>repeated double double_data = 10 [packed = true];</code>
     */
    double getDoubleData(int index);

    /**
     *
     *
     * <pre>
     * For uint64 and uint32 values
     * When this field is present, the data_type field MUST be
     * UINT32 or UINT64
     * </pre>
     *
     * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
     */
    java.util.List<java.lang.Long> getUint64DataList();
    /**
     *
     *
     * <pre>
     * For uint64 and uint32 values
     * When this field is present, the data_type field MUST be
     * UINT32 or UINT64
     * </pre>
     *
     * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
     */
    int getUint64DataCount();
    /**
     *
     *
     * <pre>
     * For uint64 and uint32 values
     * When this field is present, the data_type field MUST be
     * UINT32 or UINT64
     * </pre>
     *
     * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
     */
    long getUint64Data(int index);
  }
  /**
   *
   *
   * <pre>
   * Tensors
   * A serialized tensor value.
   * </pre>
   *
   * Protobuf type {@code onnx.TensorProto}
   */
  public static final class TensorProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.TensorProto)
      TensorProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use TensorProto.newBuilder() to construct.
    private TensorProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private TensorProto() {
      dims_ = java.util.Collections.emptyList();
      dataType_ = 0;
      floatData_ = java.util.Collections.emptyList();
      int32Data_ = java.util.Collections.emptyList();
      stringData_ = java.util.Collections.emptyList();
      int64Data_ = java.util.Collections.emptyList();
      name_ = "";
      docString_ = "";
      rawData_ = com.google.protobuf.ByteString.EMPTY;
      externalData_ = java.util.Collections.emptyList();
      dataLocation_ = 0;
      doubleData_ = java.util.Collections.emptyList();
      uint64Data_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private TensorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8:
              {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  dims_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000001;
                }
                dims_.add(input.readInt64());
                break;
              }
            case 10:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)
                    && input.getBytesUntilLimit() > 0) {
                  dims_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000001;
                }
                while (input.getBytesUntilLimit() > 0) {
                  dims_.add(input.readInt64());
                }
                input.popLimit(limit);
                break;
              }
            case 16:
              {
                dataType_ = input.readInt32();
                break;
              }
            case 26:
              {
                OnnxMl.TensorProto.Segment.Builder subBuilder = null;
                if (segment_ != null) {
                  subBuilder = segment_.toBuilder();
                }
                segment_ =
                    input.readMessage(OnnxMl.TensorProto.Segment.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(segment_);
                  segment_ = subBuilder.buildPartial();
                }

                break;
              }
            case 37:
              {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  floatData_ = new java.util.ArrayList<java.lang.Float>();
                  mutable_bitField0_ |= 0x00000008;
                }
                floatData_.add(input.readFloat());
                break;
              }
            case 34:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)
                    && input.getBytesUntilLimit() > 0) {
                  floatData_ = new java.util.ArrayList<java.lang.Float>();
                  mutable_bitField0_ |= 0x00000008;
                }
                while (input.getBytesUntilLimit() > 0) {
                  floatData_.add(input.readFloat());
                }
                input.popLimit(limit);
                break;
              }
            case 40:
              {
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  int32Data_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000010;
                }
                int32Data_.add(input.readInt32());
                break;
              }
            case 42:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)
                    && input.getBytesUntilLimit() > 0) {
                  int32Data_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000010;
                }
                while (input.getBytesUntilLimit() > 0) {
                  int32Data_.add(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
            case 50:
              {
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  stringData_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00000020;
                }
                stringData_.add(input.readBytes());
                break;
              }
            case 56:
              {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  int64Data_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000040;
                }
                int64Data_.add(input.readInt64());
                break;
              }
            case 58:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)
                    && input.getBytesUntilLimit() > 0) {
                  int64Data_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000040;
                }
                while (input.getBytesUntilLimit() > 0) {
                  int64Data_.add(input.readInt64());
                }
                input.popLimit(limit);
                break;
              }
            case 66:
              {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
            case 74:
              {
                rawData_ = input.readBytes();
                break;
              }
            case 81:
              {
                if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
                  doubleData_ = new java.util.ArrayList<java.lang.Double>();
                  mutable_bitField0_ |= 0x00001000;
                }
                doubleData_.add(input.readDouble());
                break;
              }
            case 82:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)
                    && input.getBytesUntilLimit() > 0) {
                  doubleData_ = new java.util.ArrayList<java.lang.Double>();
                  mutable_bitField0_ |= 0x00001000;
                }
                while (input.getBytesUntilLimit() > 0) {
                  doubleData_.add(input.readDouble());
                }
                input.popLimit(limit);
                break;
              }
            case 88:
              {
                if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
                  uint64Data_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00002000;
                }
                uint64Data_.add(input.readUInt64());
                break;
              }
            case 90:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)
                    && input.getBytesUntilLimit() > 0) {
                  uint64Data_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00002000;
                }
                while (input.getBytesUntilLimit() > 0) {
                  uint64Data_.add(input.readUInt64());
                }
                input.popLimit(limit);
                break;
              }
            case 98:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            case 106:
              {
                if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                  externalData_ = new java.util.ArrayList<OnnxMl.StringStringEntryProto>();
                  mutable_bitField0_ |= 0x00000400;
                }
                externalData_.add(
                    input.readMessage(OnnxMl.StringStringEntryProto.parser(), extensionRegistry));
                break;
              }
            case 112:
              {
                int rawValue = input.readEnum();

                dataLocation_ = rawValue;
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          dims_ = java.util.Collections.unmodifiableList(dims_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          floatData_ = java.util.Collections.unmodifiableList(floatData_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          int32Data_ = java.util.Collections.unmodifiableList(int32Data_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          stringData_ = java.util.Collections.unmodifiableList(stringData_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          int64Data_ = java.util.Collections.unmodifiableList(int64Data_);
        }
        if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
          doubleData_ = java.util.Collections.unmodifiableList(doubleData_);
        }
        if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
          uint64Data_ = java.util.Collections.unmodifiableList(uint64Data_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          externalData_ = java.util.Collections.unmodifiableList(externalData_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_TensorProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_TensorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.TensorProto.class, OnnxMl.TensorProto.Builder.class);
    }

    /** Protobuf enum {@code onnx.TensorProto.DataType} */
    public enum DataType implements com.google.protobuf.ProtocolMessageEnum {
      /** <code>UNDEFINED = 0;</code> */
      UNDEFINED(0),
      /**
       *
       *
       * <pre>
       * Basic types.
       * </pre>
       *
       * <code>FLOAT = 1;</code>
       */
      FLOAT(1),
      /**
       *
       *
       * <pre>
       * uint8_t
       * </pre>
       *
       * <code>UINT8 = 2;</code>
       */
      UINT8(2),
      /**
       *
       *
       * <pre>
       * int8_t
       * </pre>
       *
       * <code>INT8 = 3;</code>
       */
      INT8(3),
      /**
       *
       *
       * <pre>
       * uint16_t
       * </pre>
       *
       * <code>UINT16 = 4;</code>
       */
      UINT16(4),
      /**
       *
       *
       * <pre>
       * int16_t
       * </pre>
       *
       * <code>INT16 = 5;</code>
       */
      INT16(5),
      /**
       *
       *
       * <pre>
       * int32_t
       * </pre>
       *
       * <code>INT32 = 6;</code>
       */
      INT32(6),
      /**
       *
       *
       * <pre>
       * int64_t
       * </pre>
       *
       * <code>INT64 = 7;</code>
       */
      INT64(7),
      /**
       *
       *
       * <pre>
       * string
       * </pre>
       *
       * <code>STRING = 8;</code>
       */
      STRING(8),
      /**
       *
       *
       * <pre>
       * bool
       * </pre>
       *
       * <code>BOOL = 9;</code>
       */
      BOOL(9),
      /**
       *
       *
       * <pre>
       * IEEE754 half-precision floating-point format (16 bits wide).
       * This format has 1 sign bit, 5 exponent bits, and 10 mantissa bits.
       * </pre>
       *
       * <code>FLOAT16 = 10;</code>
       */
      FLOAT16(10),
      /** <code>DOUBLE = 11;</code> */
      DOUBLE(11),
      /** <code>UINT32 = 12;</code> */
      UINT32(12),
      /** <code>UINT64 = 13;</code> */
      UINT64(13),
      /**
       *
       *
       * <pre>
       * complex with float32 real and imaginary components
       * </pre>
       *
       * <code>COMPLEX64 = 14;</code>
       */
      COMPLEX64(14),
      /**
       *
       *
       * <pre>
       * complex with float64 real and imaginary components
       * </pre>
       *
       * <code>COMPLEX128 = 15;</code>
       */
      COMPLEX128(15),
      /**
       *
       *
       * <pre>
       * Non-IEEE floating-point format based on IEEE754 single-precision
       * floating-point number truncated to 16 bits.
       * This format has 1 sign bit, 8 exponent bits, and 7 mantissa bits.
       * </pre>
       *
       * <code>BFLOAT16 = 16;</code>
       */
      BFLOAT16(16),
      UNRECOGNIZED(-1),
      ;

      /** <code>UNDEFINED = 0;</code> */
      public static final int UNDEFINED_VALUE = 0;
      /**
       *
       *
       * <pre>
       * Basic types.
       * </pre>
       *
       * <code>FLOAT = 1;</code>
       */
      public static final int FLOAT_VALUE = 1;
      /**
       *
       *
       * <pre>
       * uint8_t
       * </pre>
       *
       * <code>UINT8 = 2;</code>
       */
      public static final int UINT8_VALUE = 2;
      /**
       *
       *
       * <pre>
       * int8_t
       * </pre>
       *
       * <code>INT8 = 3;</code>
       */
      public static final int INT8_VALUE = 3;
      /**
       *
       *
       * <pre>
       * uint16_t
       * </pre>
       *
       * <code>UINT16 = 4;</code>
       */
      public static final int UINT16_VALUE = 4;
      /**
       *
       *
       * <pre>
       * int16_t
       * </pre>
       *
       * <code>INT16 = 5;</code>
       */
      public static final int INT16_VALUE = 5;
      /**
       *
       *
       * <pre>
       * int32_t
       * </pre>
       *
       * <code>INT32 = 6;</code>
       */
      public static final int INT32_VALUE = 6;
      /**
       *
       *
       * <pre>
       * int64_t
       * </pre>
       *
       * <code>INT64 = 7;</code>
       */
      public static final int INT64_VALUE = 7;
      /**
       *
       *
       * <pre>
       * string
       * </pre>
       *
       * <code>STRING = 8;</code>
       */
      public static final int STRING_VALUE = 8;
      /**
       *
       *
       * <pre>
       * bool
       * </pre>
       *
       * <code>BOOL = 9;</code>
       */
      public static final int BOOL_VALUE = 9;
      /**
       *
       *
       * <pre>
       * IEEE754 half-precision floating-point format (16 bits wide).
       * This format has 1 sign bit, 5 exponent bits, and 10 mantissa bits.
       * </pre>
       *
       * <code>FLOAT16 = 10;</code>
       */
      public static final int FLOAT16_VALUE = 10;
      /** <code>DOUBLE = 11;</code> */
      public static final int DOUBLE_VALUE = 11;
      /** <code>UINT32 = 12;</code> */
      public static final int UINT32_VALUE = 12;
      /** <code>UINT64 = 13;</code> */
      public static final int UINT64_VALUE = 13;
      /**
       *
       *
       * <pre>
       * complex with float32 real and imaginary components
       * </pre>
       *
       * <code>COMPLEX64 = 14;</code>
       */
      public static final int COMPLEX64_VALUE = 14;
      /**
       *
       *
       * <pre>
       * complex with float64 real and imaginary components
       * </pre>
       *
       * <code>COMPLEX128 = 15;</code>
       */
      public static final int COMPLEX128_VALUE = 15;
      /**
       *
       *
       * <pre>
       * Non-IEEE floating-point format based on IEEE754 single-precision
       * floating-point number truncated to 16 bits.
       * This format has 1 sign bit, 8 exponent bits, and 7 mantissa bits.
       * </pre>
       *
       * <code>BFLOAT16 = 16;</code>
       */
      public static final int BFLOAT16_VALUE = 16;

      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /** @deprecated Use {@link #forNumber(int)} instead. */
      @java.lang.Deprecated
      public static DataType valueOf(int value) {
        return forNumber(value);
      }

      public static DataType forNumber(int value) {
        switch (value) {
          case 0:
            return UNDEFINED;
          case 1:
            return FLOAT;
          case 2:
            return UINT8;
          case 3:
            return INT8;
          case 4:
            return UINT16;
          case 5:
            return INT16;
          case 6:
            return INT32;
          case 7:
            return INT64;
          case 8:
            return STRING;
          case 9:
            return BOOL;
          case 10:
            return FLOAT16;
          case 11:
            return DOUBLE;
          case 12:
            return UINT32;
          case 13:
            return UINT64;
          case 14:
            return COMPLEX64;
          case 15:
            return COMPLEX128;
          case 16:
            return BFLOAT16;
          default:
            return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<DataType> internalGetValueMap() {
        return internalValueMap;
      }

      private static final com.google.protobuf.Internal.EnumLiteMap<DataType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DataType>() {
            public DataType findValueByNumber(int number) {
              return DataType.forNumber(number);
            }
          };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }

      public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
        return getDescriptor();
      }

      public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
        return OnnxMl.TensorProto.getDescriptor().getEnumTypes().get(0);
      }

      private static final DataType[] VALUES = values();

      public static DataType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private DataType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:onnx.TensorProto.DataType)
    }

    /**
     *
     *
     * <pre>
     * Location of the data for this tensor. MUST be one of:
     * - DEFAULT - data stored inside the protobuf message. Data is stored in raw_data (if set) otherwise in type-specified field.
     * - EXTERNAL - data stored in an external location as described by external_data field.
     * </pre>
     *
     * Protobuf enum {@code onnx.TensorProto.DataLocation}
     */
    public enum DataLocation implements com.google.protobuf.ProtocolMessageEnum {
      /** <code>DEFAULT = 0;</code> */
      DEFAULT(0),
      /** <code>EXTERNAL = 1;</code> */
      EXTERNAL(1),
      UNRECOGNIZED(-1),
      ;

      /** <code>DEFAULT = 0;</code> */
      public static final int DEFAULT_VALUE = 0;
      /** <code>EXTERNAL = 1;</code> */
      public static final int EXTERNAL_VALUE = 1;

      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /** @deprecated Use {@link #forNumber(int)} instead. */
      @java.lang.Deprecated
      public static DataLocation valueOf(int value) {
        return forNumber(value);
      }

      public static DataLocation forNumber(int value) {
        switch (value) {
          case 0:
            return DEFAULT;
          case 1:
            return EXTERNAL;
          default:
            return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<DataLocation> internalGetValueMap() {
        return internalValueMap;
      }

      private static final com.google.protobuf.Internal.EnumLiteMap<DataLocation> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DataLocation>() {
            public DataLocation findValueByNumber(int number) {
              return DataLocation.forNumber(number);
            }
          };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }

      public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() {
        return getDescriptor();
      }

      public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
        return OnnxMl.TensorProto.getDescriptor().getEnumTypes().get(1);
      }

      private static final DataLocation[] VALUES = values();

      public static DataLocation valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

      private DataLocation(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:onnx.TensorProto.DataLocation)
    }

    public interface SegmentOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TensorProto.Segment)
        com.google.protobuf.MessageOrBuilder {

      /** <code>int64 begin = 1;</code> */
      long getBegin();

      /** <code>int64 end = 2;</code> */
      long getEnd();
    }
    /**
     *
     *
     * <pre>
     * For very large tensors, we may want to store them in chunks, in which
     * case the following fields will specify the segment that is stored in
     * the current TensorProto.
     * </pre>
     *
     * Protobuf type {@code onnx.TensorProto.Segment}
     */
    public static final class Segment extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TensorProto.Segment)
        SegmentOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use Segment.newBuilder() to construct.
      private Segment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private Segment() {
        begin_ = 0L;
        end_ = 0L;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private Segment(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  begin_ = input.readInt64();
                  break;
                }
              case 16:
                {
                  end_ = input.readInt64();
                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TensorProto_Segment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TensorProto_Segment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TensorProto.Segment.class, OnnxMl.TensorProto.Segment.Builder.class);
      }

      public static final int BEGIN_FIELD_NUMBER = 1;
      private long begin_;
      /** <code>int64 begin = 1;</code> */
      public long getBegin() {
        return begin_;
      }

      public static final int END_FIELD_NUMBER = 2;
      private long end_;
      /** <code>int64 end = 2;</code> */
      public long getEnd() {
        return end_;
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (begin_ != 0L) {
          output.writeInt64(1, begin_);
        }
        if (end_ != 0L) {
          output.writeInt64(2, end_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (begin_ != 0L) {
          size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, begin_);
        }
        if (end_ != 0L) {
          size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, end_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TensorProto.Segment)) {
          return super.equals(obj);
        }
        OnnxMl.TensorProto.Segment other = (OnnxMl.TensorProto.Segment) obj;

        boolean result = true;
        result = result && (getBegin() == other.getBegin());
        result = result && (getEnd() == other.getEnd());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + BEGIN_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getBegin());
        hash = (37 * hash) + END_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getEnd());
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TensorProto.Segment parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TensorProto.Segment parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TensorProto.Segment parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TensorProto.Segment parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TensorProto.Segment prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       *
       *
       * <pre>
       * For very large tensors, we may want to store them in chunks, in which
       * case the following fields will specify the segment that is stored in
       * the current TensorProto.
       * </pre>
       *
       * Protobuf type {@code onnx.TensorProto.Segment}
       */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TensorProto.Segment)
          OnnxMl.TensorProto.SegmentOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TensorProto_Segment_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TensorProto_Segment_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TensorProto.Segment.class, OnnxMl.TensorProto.Segment.Builder.class);
        }

        // Construct using OnnxMlProto3.TensorProto.Segment.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          begin_ = 0L;

          end_ = 0L;

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TensorProto_Segment_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TensorProto.Segment getDefaultInstanceForType() {
          return OnnxMl.TensorProto.Segment.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TensorProto.Segment build() {
          OnnxMl.TensorProto.Segment result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TensorProto.Segment buildPartial() {
          OnnxMl.TensorProto.Segment result = new OnnxMl.TensorProto.Segment(this);
          result.begin_ = begin_;
          result.end_ = end_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TensorProto.Segment) {
            return mergeFrom((OnnxMl.TensorProto.Segment) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TensorProto.Segment other) {
          if (other == OnnxMl.TensorProto.Segment.getDefaultInstance()) return this;
          if (other.getBegin() != 0L) {
            setBegin(other.getBegin());
          }
          if (other.getEnd() != 0L) {
            setEnd(other.getEnd());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TensorProto.Segment parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TensorProto.Segment) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private long begin_;
        /** <code>int64 begin = 1;</code> */
        public long getBegin() {
          return begin_;
        }
        /** <code>int64 begin = 1;</code> */
        public Builder setBegin(long value) {

          begin_ = value;
          onChanged();
          return this;
        }
        /** <code>int64 begin = 1;</code> */
        public Builder clearBegin() {

          begin_ = 0L;
          onChanged();
          return this;
        }

        private long end_;
        /** <code>int64 end = 2;</code> */
        public long getEnd() {
          return end_;
        }
        /** <code>int64 end = 2;</code> */
        public Builder setEnd(long value) {

          end_ = value;
          onChanged();
          return this;
        }
        /** <code>int64 end = 2;</code> */
        public Builder clearEnd() {

          end_ = 0L;
          onChanged();
          return this;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TensorProto.Segment)
      }

      // @@protoc_insertion_point(class_scope:onnx.TensorProto.Segment)
      private static final OnnxMl.TensorProto.Segment DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TensorProto.Segment();
      }

      public static OnnxMl.TensorProto.Segment getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Segment> PARSER =
          new com.google.protobuf.AbstractParser<Segment>() {
            @java.lang.Override
            public Segment parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new Segment(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<Segment> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Segment> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TensorProto.Segment getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    private int bitField0_;
    public static final int DIMS_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Long> dims_;
    /**
     *
     *
     * <pre>
     * The shape of the tensor.
     * </pre>
     *
     * <code>repeated int64 dims = 1;</code>
     */
    public java.util.List<java.lang.Long> getDimsList() {
      return dims_;
    }
    /**
     *
     *
     * <pre>
     * The shape of the tensor.
     * </pre>
     *
     * <code>repeated int64 dims = 1;</code>
     */
    public int getDimsCount() {
      return dims_.size();
    }
    /**
     *
     *
     * <pre>
     * The shape of the tensor.
     * </pre>
     *
     * <code>repeated int64 dims = 1;</code>
     */
    public long getDims(int index) {
      return dims_.get(index);
    }

    private int dimsMemoizedSerializedSize = -1;

    public static final int DATA_TYPE_FIELD_NUMBER = 2;
    private int dataType_;
    /**
     *
     *
     * <pre>
     * The data type of the tensor.
     * This field MUST have a valid TensorProto.DataType value
     * </pre>
     *
     * <code>int32 data_type = 2;</code>
     */
    public int getDataType() {
      return dataType_;
    }

    public static final int SEGMENT_FIELD_NUMBER = 3;
    private OnnxMl.TensorProto.Segment segment_;
    /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
    public boolean hasSegment() {
      return segment_ != null;
    }
    /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
    public OnnxMl.TensorProto.Segment getSegment() {
      return segment_ == null ? OnnxMl.TensorProto.Segment.getDefaultInstance() : segment_;
    }
    /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
    public OnnxMl.TensorProto.SegmentOrBuilder getSegmentOrBuilder() {
      return getSegment();
    }

    public static final int FLOAT_DATA_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Float> floatData_;
    /**
     *
     *
     * <pre>
     * For float and complex64 values
     * Complex64 tensors are encoded as a single array of floats,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
     * </pre>
     *
     * <code>repeated float float_data = 4 [packed = true];</code>
     */
    public java.util.List<java.lang.Float> getFloatDataList() {
      return floatData_;
    }
    /**
     *
     *
     * <pre>
     * For float and complex64 values
     * Complex64 tensors are encoded as a single array of floats,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
     * </pre>
     *
     * <code>repeated float float_data = 4 [packed = true];</code>
     */
    public int getFloatDataCount() {
      return floatData_.size();
    }
    /**
     *
     *
     * <pre>
     * For float and complex64 values
     * Complex64 tensors are encoded as a single array of floats,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
     * </pre>
     *
     * <code>repeated float float_data = 4 [packed = true];</code>
     */
    public float getFloatData(int index) {
      return floatData_.get(index);
    }

    private int floatDataMemoizedSerializedSize = -1;

    public static final int INT32_DATA_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Integer> int32Data_;
    /**
     *
     *
     * <pre>
     * For int32, uint8, int8, uint16, int16, bool, and float16 values
     * float16 values must be bit-wise converted to an uint16_t prior
     * to writing to the buffer.
     * When this field is present, the data_type field MUST be
     * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
     * </pre>
     *
     * <code>repeated int32 int32_data = 5 [packed = true];</code>
     */
    public java.util.List<java.lang.Integer> getInt32DataList() {
      return int32Data_;
    }
    /**
     *
     *
     * <pre>
     * For int32, uint8, int8, uint16, int16, bool, and float16 values
     * float16 values must be bit-wise converted to an uint16_t prior
     * to writing to the buffer.
     * When this field is present, the data_type field MUST be
     * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
     * </pre>
     *
     * <code>repeated int32 int32_data = 5 [packed = true];</code>
     */
    public int getInt32DataCount() {
      return int32Data_.size();
    }
    /**
     *
     *
     * <pre>
     * For int32, uint8, int8, uint16, int16, bool, and float16 values
     * float16 values must be bit-wise converted to an uint16_t prior
     * to writing to the buffer.
     * When this field is present, the data_type field MUST be
     * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
     * </pre>
     *
     * <code>repeated int32 int32_data = 5 [packed = true];</code>
     */
    public int getInt32Data(int index) {
      return int32Data_.get(index);
    }

    private int int32DataMemoizedSerializedSize = -1;

    public static final int STRING_DATA_FIELD_NUMBER = 6;
    private java.util.List<com.google.protobuf.ByteString> stringData_;
    /**
     *
     *
     * <pre>
     * For strings.
     * Each element of string_data is a UTF-8 encoded Unicode
     * string. No trailing null, no leading BOM. The protobuf "string"
     * scalar type is not used to match ML community conventions.
     * When this field is present, the data_type field MUST be STRING
     * </pre>
     *
     * <code>repeated bytes string_data = 6;</code>
     */
    public java.util.List<com.google.protobuf.ByteString> getStringDataList() {
      return stringData_;
    }
    /**
     *
     *
     * <pre>
     * For strings.
     * Each element of string_data is a UTF-8 encoded Unicode
     * string. No trailing null, no leading BOM. The protobuf "string"
     * scalar type is not used to match ML community conventions.
     * When this field is present, the data_type field MUST be STRING
     * </pre>
     *
     * <code>repeated bytes string_data = 6;</code>
     */
    public int getStringDataCount() {
      return stringData_.size();
    }
    /**
     *
     *
     * <pre>
     * For strings.
     * Each element of string_data is a UTF-8 encoded Unicode
     * string. No trailing null, no leading BOM. The protobuf "string"
     * scalar type is not used to match ML community conventions.
     * When this field is present, the data_type field MUST be STRING
     * </pre>
     *
     * <code>repeated bytes string_data = 6;</code>
     */
    public com.google.protobuf.ByteString getStringData(int index) {
      return stringData_.get(index);
    }

    public static final int INT64_DATA_FIELD_NUMBER = 7;
    private java.util.List<java.lang.Long> int64Data_;
    /**
     *
     *
     * <pre>
     * For int64.
     * When this field is present, the data_type field MUST be INT64
     * </pre>
     *
     * <code>repeated int64 int64_data = 7 [packed = true];</code>
     */
    public java.util.List<java.lang.Long> getInt64DataList() {
      return int64Data_;
    }
    /**
     *
     *
     * <pre>
     * For int64.
     * When this field is present, the data_type field MUST be INT64
     * </pre>
     *
     * <code>repeated int64 int64_data = 7 [packed = true];</code>
     */
    public int getInt64DataCount() {
      return int64Data_.size();
    }
    /**
     *
     *
     * <pre>
     * For int64.
     * When this field is present, the data_type field MUST be INT64
     * </pre>
     *
     * <code>repeated int64 int64_data = 7 [packed = true];</code>
     */
    public long getInt64Data(int index) {
      return int64Data_.get(index);
    }

    private int int64DataMemoizedSerializedSize = -1;

    public static final int NAME_FIELD_NUMBER = 8;
    private volatile java.lang.Object name_;
    /**
     *
     *
     * <pre>
     * Optionally, a name for the tensor.
     * </pre>
     *
     * <code>string name = 8;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * Optionally, a name for the tensor.
     * </pre>
     *
     * <code>string name = 8;</code>
     */
    public com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DOC_STRING_FIELD_NUMBER = 12;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this tensor. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 12;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this tensor. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 12;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RAW_DATA_FIELD_NUMBER = 9;
    private com.google.protobuf.ByteString rawData_;
    /**
     *
     *
     * <pre>
     * Serializations can either use one of the fields above, or use this
     * raw bytes field. The only exception is the string case, where one is
     * required to store the content in the repeated bytes string_data field.
     * When this raw_data field is used to store tensor value, elements MUST
     * be stored in as fixed-width, little-endian order.
     * Floating-point data types MUST be stored in IEEE 754 format.
     * Complex64 elements must be written as two consecutive FLOAT values, real component first.
     * Complex128 elements must be written as two consecutive DOUBLE values, real component first.
     * Boolean type MUST be written one byte per tensor element (00000001 for true, 00000000 for false).
     * Note: the advantage of specific field rather than the raw_data field is
     * that in some cases (e.g. int data), protobuf does a better packing via
     * variable length storage, and may lead to smaller binary footprint.
     * When this field is present, the data_type field MUST NOT be STRING or UNDEFINED
     * </pre>
     *
     * <code>bytes raw_data = 9;</code>
     */
    public com.google.protobuf.ByteString getRawData() {
      return rawData_;
    }

    public static final int EXTERNAL_DATA_FIELD_NUMBER = 13;
    private java.util.List<OnnxMl.StringStringEntryProto> externalData_;
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    public java.util.List<OnnxMl.StringStringEntryProto> getExternalDataList() {
      return externalData_;
    }
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    public java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
        getExternalDataOrBuilderList() {
      return externalData_;
    }
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    public int getExternalDataCount() {
      return externalData_.size();
    }
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    public OnnxMl.StringStringEntryProto getExternalData(int index) {
      return externalData_.get(index);
    }
    /**
     *
     *
     * <pre>
     * Data can be stored inside the protobuf file using type-specific fields or raw_data.
     * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
     * external_data stores key-value pairs describing data location. Recognized keys are:
     * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
     *                           protobuf model was stored
     * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
     *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
     * - "length" (optional) - number of bytes containing data. Integer stored as string.
     * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
     * </pre>
     *
     * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
     */
    public OnnxMl.StringStringEntryProtoOrBuilder getExternalDataOrBuilder(int index) {
      return externalData_.get(index);
    }

    public static final int DATA_LOCATION_FIELD_NUMBER = 14;
    private int dataLocation_;
    /**
     *
     *
     * <pre>
     * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
     * </pre>
     *
     * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
     */
    public int getDataLocationValue() {
      return dataLocation_;
    }
    /**
     *
     *
     * <pre>
     * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
     * </pre>
     *
     * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
     */
    public OnnxMl.TensorProto.DataLocation getDataLocation() {
      @SuppressWarnings("deprecation")
      OnnxMl.TensorProto.DataLocation result =
          OnnxMl.TensorProto.DataLocation.valueOf(dataLocation_);
      return result == null ? OnnxMl.TensorProto.DataLocation.UNRECOGNIZED : result;
    }

    public static final int DOUBLE_DATA_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Double> doubleData_;
    /**
     *
     *
     * <pre>
     * For double
     * Complex128 tensors are encoded as a single array of doubles,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
     * </pre>
     *
     * <code>repeated double double_data = 10 [packed = true];</code>
     */
    public java.util.List<java.lang.Double> getDoubleDataList() {
      return doubleData_;
    }
    /**
     *
     *
     * <pre>
     * For double
     * Complex128 tensors are encoded as a single array of doubles,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
     * </pre>
     *
     * <code>repeated double double_data = 10 [packed = true];</code>
     */
    public int getDoubleDataCount() {
      return doubleData_.size();
    }
    /**
     *
     *
     * <pre>
     * For double
     * Complex128 tensors are encoded as a single array of doubles,
     * with the real components appearing in odd numbered positions,
     * and the corresponding imaginary component apparing in the
     * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
     * is encoded as [1.0, 2.0 ,3.0 ,4.0]
     * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
     * </pre>
     *
     * <code>repeated double double_data = 10 [packed = true];</code>
     */
    public double getDoubleData(int index) {
      return doubleData_.get(index);
    }

    private int doubleDataMemoizedSerializedSize = -1;

    public static final int UINT64_DATA_FIELD_NUMBER = 11;
    private java.util.List<java.lang.Long> uint64Data_;
    /**
     *
     *
     * <pre>
     * For uint64 and uint32 values
     * When this field is present, the data_type field MUST be
     * UINT32 or UINT64
     * </pre>
     *
     * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
     */
    public java.util.List<java.lang.Long> getUint64DataList() {
      return uint64Data_;
    }
    /**
     *
     *
     * <pre>
     * For uint64 and uint32 values
     * When this field is present, the data_type field MUST be
     * UINT32 or UINT64
     * </pre>
     *
     * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
     */
    public int getUint64DataCount() {
      return uint64Data_.size();
    }
    /**
     *
     *
     * <pre>
     * For uint64 and uint32 values
     * When this field is present, the data_type field MUST be
     * UINT32 or UINT64
     * </pre>
     *
     * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
     */
    public long getUint64Data(int index) {
      return uint64Data_.get(index);
    }

    private int uint64DataMemoizedSerializedSize = -1;

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      getSerializedSize();
      if (getDimsList().size() > 0) {
        output.writeUInt32NoTag(10);
        output.writeUInt32NoTag(dimsMemoizedSerializedSize);
      }
      for (int i = 0; i < dims_.size(); i++) {
        output.writeInt64NoTag(dims_.get(i));
      }
      if (dataType_ != 0) {
        output.writeInt32(2, dataType_);
      }
      if (segment_ != null) {
        output.writeMessage(3, getSegment());
      }
      if (getFloatDataList().size() > 0) {
        output.writeUInt32NoTag(34);
        output.writeUInt32NoTag(floatDataMemoizedSerializedSize);
      }
      for (int i = 0; i < floatData_.size(); i++) {
        output.writeFloatNoTag(floatData_.get(i));
      }
      if (getInt32DataList().size() > 0) {
        output.writeUInt32NoTag(42);
        output.writeUInt32NoTag(int32DataMemoizedSerializedSize);
      }
      for (int i = 0; i < int32Data_.size(); i++) {
        output.writeInt32NoTag(int32Data_.get(i));
      }
      for (int i = 0; i < stringData_.size(); i++) {
        output.writeBytes(6, stringData_.get(i));
      }
      if (getInt64DataList().size() > 0) {
        output.writeUInt32NoTag(58);
        output.writeUInt32NoTag(int64DataMemoizedSerializedSize);
      }
      for (int i = 0; i < int64Data_.size(); i++) {
        output.writeInt64NoTag(int64Data_.get(i));
      }
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, name_);
      }
      if (!rawData_.isEmpty()) {
        output.writeBytes(9, rawData_);
      }
      if (getDoubleDataList().size() > 0) {
        output.writeUInt32NoTag(82);
        output.writeUInt32NoTag(doubleDataMemoizedSerializedSize);
      }
      for (int i = 0; i < doubleData_.size(); i++) {
        output.writeDoubleNoTag(doubleData_.get(i));
      }
      if (getUint64DataList().size() > 0) {
        output.writeUInt32NoTag(90);
        output.writeUInt32NoTag(uint64DataMemoizedSerializedSize);
      }
      for (int i = 0; i < uint64Data_.size(); i++) {
        output.writeUInt64NoTag(uint64Data_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 12, docString_);
      }
      for (int i = 0; i < externalData_.size(); i++) {
        output.writeMessage(13, externalData_.get(i));
      }
      if (dataLocation_ != OnnxMl.TensorProto.DataLocation.DEFAULT.getNumber()) {
        output.writeEnum(14, dataLocation_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < dims_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream.computeInt64SizeNoTag(dims_.get(i));
        }
        size += dataSize;
        if (!getDimsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        dimsMemoizedSerializedSize = dataSize;
      }
      if (dataType_ != 0) {
        size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, dataType_);
      }
      if (segment_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getSegment());
      }
      {
        int dataSize = 0;
        dataSize = 4 * getFloatDataList().size();
        size += dataSize;
        if (!getFloatDataList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        floatDataMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < int32Data_.size(); i++) {
          dataSize +=
              com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(int32Data_.get(i));
        }
        size += dataSize;
        if (!getInt32DataList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        int32DataMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < stringData_.size(); i++) {
          dataSize +=
              com.google.protobuf.CodedOutputStream.computeBytesSizeNoTag(stringData_.get(i));
        }
        size += dataSize;
        size += 1 * getStringDataList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < int64Data_.size(); i++) {
          dataSize +=
              com.google.protobuf.CodedOutputStream.computeInt64SizeNoTag(int64Data_.get(i));
        }
        size += dataSize;
        if (!getInt64DataList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        int64DataMemoizedSerializedSize = dataSize;
      }
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, name_);
      }
      if (!rawData_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream.computeBytesSize(9, rawData_);
      }
      {
        int dataSize = 0;
        dataSize = 8 * getDoubleDataList().size();
        size += dataSize;
        if (!getDoubleDataList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        doubleDataMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < uint64Data_.size(); i++) {
          dataSize +=
              com.google.protobuf.CodedOutputStream.computeUInt64SizeNoTag(uint64Data_.get(i));
        }
        size += dataSize;
        if (!getUint64DataList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        uint64DataMemoizedSerializedSize = dataSize;
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, docString_);
      }
      for (int i = 0; i < externalData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(13, externalData_.get(i));
      }
      if (dataLocation_ != OnnxMl.TensorProto.DataLocation.DEFAULT.getNumber()) {
        size += com.google.protobuf.CodedOutputStream.computeEnumSize(14, dataLocation_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.TensorProto)) {
        return super.equals(obj);
      }
      OnnxMl.TensorProto other = (OnnxMl.TensorProto) obj;

      boolean result = true;
      result = result && getDimsList().equals(other.getDimsList());
      result = result && (getDataType() == other.getDataType());
      result = result && (hasSegment() == other.hasSegment());
      if (hasSegment()) {
        result = result && getSegment().equals(other.getSegment());
      }
      result = result && getFloatDataList().equals(other.getFloatDataList());
      result = result && getInt32DataList().equals(other.getInt32DataList());
      result = result && getStringDataList().equals(other.getStringDataList());
      result = result && getInt64DataList().equals(other.getInt64DataList());
      result = result && getName().equals(other.getName());
      result = result && getDocString().equals(other.getDocString());
      result = result && getRawData().equals(other.getRawData());
      result = result && getExternalDataList().equals(other.getExternalDataList());
      result = result && dataLocation_ == other.dataLocation_;
      result = result && getDoubleDataList().equals(other.getDoubleDataList());
      result = result && getUint64DataList().equals(other.getUint64DataList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getDimsCount() > 0) {
        hash = (37 * hash) + DIMS_FIELD_NUMBER;
        hash = (53 * hash) + getDimsList().hashCode();
      }
      hash = (37 * hash) + DATA_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getDataType();
      if (hasSegment()) {
        hash = (37 * hash) + SEGMENT_FIELD_NUMBER;
        hash = (53 * hash) + getSegment().hashCode();
      }
      if (getFloatDataCount() > 0) {
        hash = (37 * hash) + FLOAT_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getFloatDataList().hashCode();
      }
      if (getInt32DataCount() > 0) {
        hash = (37 * hash) + INT32_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getInt32DataList().hashCode();
      }
      if (getStringDataCount() > 0) {
        hash = (37 * hash) + STRING_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getStringDataList().hashCode();
      }
      if (getInt64DataCount() > 0) {
        hash = (37 * hash) + INT64_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getInt64DataList().hashCode();
      }
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      hash = (37 * hash) + RAW_DATA_FIELD_NUMBER;
      hash = (53 * hash) + getRawData().hashCode();
      if (getExternalDataCount() > 0) {
        hash = (37 * hash) + EXTERNAL_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getExternalDataList().hashCode();
      }
      hash = (37 * hash) + DATA_LOCATION_FIELD_NUMBER;
      hash = (53 * hash) + dataLocation_;
      if (getDoubleDataCount() > 0) {
        hash = (37 * hash) + DOUBLE_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getDoubleDataList().hashCode();
      }
      if (getUint64DataCount() > 0) {
        hash = (37 * hash) + UINT64_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getUint64DataList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.TensorProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TensorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TensorProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.TensorProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Tensors
     * A serialized tensor value.
     * </pre>
     *
     * Protobuf type {@code onnx.TensorProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.TensorProto)
        OnnxMl.TensorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TensorProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TensorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TensorProto.class, OnnxMl.TensorProto.Builder.class);
      }

      // Construct using OnnxMlProto3.TensorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getExternalDataFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        dims_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        dataType_ = 0;

        if (segmentBuilder_ == null) {
          segment_ = null;
        } else {
          segment_ = null;
          segmentBuilder_ = null;
        }
        floatData_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        int32Data_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        stringData_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        int64Data_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        name_ = "";

        docString_ = "";

        rawData_ = com.google.protobuf.ByteString.EMPTY;

        if (externalDataBuilder_ == null) {
          externalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          externalDataBuilder_.clear();
        }
        dataLocation_ = 0;

        doubleData_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00001000);
        uint64Data_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_TensorProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.TensorProto getDefaultInstanceForType() {
        return OnnxMl.TensorProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.TensorProto build() {
        OnnxMl.TensorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.TensorProto buildPartial() {
        OnnxMl.TensorProto result = new OnnxMl.TensorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          dims_ = java.util.Collections.unmodifiableList(dims_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.dims_ = dims_;
        result.dataType_ = dataType_;
        if (segmentBuilder_ == null) {
          result.segment_ = segment_;
        } else {
          result.segment_ = segmentBuilder_.build();
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          floatData_ = java.util.Collections.unmodifiableList(floatData_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.floatData_ = floatData_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          int32Data_ = java.util.Collections.unmodifiableList(int32Data_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.int32Data_ = int32Data_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          stringData_ = java.util.Collections.unmodifiableList(stringData_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.stringData_ = stringData_;
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          int64Data_ = java.util.Collections.unmodifiableList(int64Data_);
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.int64Data_ = int64Data_;
        result.name_ = name_;
        result.docString_ = docString_;
        result.rawData_ = rawData_;
        if (externalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400)) {
            externalData_ = java.util.Collections.unmodifiableList(externalData_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.externalData_ = externalData_;
        } else {
          result.externalData_ = externalDataBuilder_.build();
        }
        result.dataLocation_ = dataLocation_;
        if (((bitField0_ & 0x00001000) == 0x00001000)) {
          doubleData_ = java.util.Collections.unmodifiableList(doubleData_);
          bitField0_ = (bitField0_ & ~0x00001000);
        }
        result.doubleData_ = doubleData_;
        if (((bitField0_ & 0x00002000) == 0x00002000)) {
          uint64Data_ = java.util.Collections.unmodifiableList(uint64Data_);
          bitField0_ = (bitField0_ & ~0x00002000);
        }
        result.uint64Data_ = uint64Data_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.TensorProto) {
          return mergeFrom((OnnxMl.TensorProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.TensorProto other) {
        if (other == OnnxMl.TensorProto.getDefaultInstance()) return this;
        if (!other.dims_.isEmpty()) {
          if (dims_.isEmpty()) {
            dims_ = other.dims_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureDimsIsMutable();
            dims_.addAll(other.dims_);
          }
          onChanged();
        }
        if (other.getDataType() != 0) {
          setDataType(other.getDataType());
        }
        if (other.hasSegment()) {
          mergeSegment(other.getSegment());
        }
        if (!other.floatData_.isEmpty()) {
          if (floatData_.isEmpty()) {
            floatData_ = other.floatData_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureFloatDataIsMutable();
            floatData_.addAll(other.floatData_);
          }
          onChanged();
        }
        if (!other.int32Data_.isEmpty()) {
          if (int32Data_.isEmpty()) {
            int32Data_ = other.int32Data_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureInt32DataIsMutable();
            int32Data_.addAll(other.int32Data_);
          }
          onChanged();
        }
        if (!other.stringData_.isEmpty()) {
          if (stringData_.isEmpty()) {
            stringData_ = other.stringData_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureStringDataIsMutable();
            stringData_.addAll(other.stringData_);
          }
          onChanged();
        }
        if (!other.int64Data_.isEmpty()) {
          if (int64Data_.isEmpty()) {
            int64Data_ = other.int64Data_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureInt64DataIsMutable();
            int64Data_.addAll(other.int64Data_);
          }
          onChanged();
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        if (other.getRawData() != com.google.protobuf.ByteString.EMPTY) {
          setRawData(other.getRawData());
        }
        if (externalDataBuilder_ == null) {
          if (!other.externalData_.isEmpty()) {
            if (externalData_.isEmpty()) {
              externalData_ = other.externalData_;
              bitField0_ = (bitField0_ & ~0x00000400);
            } else {
              ensureExternalDataIsMutable();
              externalData_.addAll(other.externalData_);
            }
            onChanged();
          }
        } else {
          if (!other.externalData_.isEmpty()) {
            if (externalDataBuilder_.isEmpty()) {
              externalDataBuilder_.dispose();
              externalDataBuilder_ = null;
              externalData_ = other.externalData_;
              bitField0_ = (bitField0_ & ~0x00000400);
              externalDataBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getExternalDataFieldBuilder()
                      : null;
            } else {
              externalDataBuilder_.addAllMessages(other.externalData_);
            }
          }
        }
        if (other.dataLocation_ != 0) {
          setDataLocationValue(other.getDataLocationValue());
        }
        if (!other.doubleData_.isEmpty()) {
          if (doubleData_.isEmpty()) {
            doubleData_ = other.doubleData_;
            bitField0_ = (bitField0_ & ~0x00001000);
          } else {
            ensureDoubleDataIsMutable();
            doubleData_.addAll(other.doubleData_);
          }
          onChanged();
        }
        if (!other.uint64Data_.isEmpty()) {
          if (uint64Data_.isEmpty()) {
            uint64Data_ = other.uint64Data_;
            bitField0_ = (bitField0_ & ~0x00002000);
          } else {
            ensureUint64DataIsMutable();
            uint64Data_.addAll(other.uint64Data_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.TensorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.TensorProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private java.util.List<java.lang.Long> dims_ = java.util.Collections.emptyList();

      private void ensureDimsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          dims_ = new java.util.ArrayList<java.lang.Long>(dims_);
          bitField0_ |= 0x00000001;
        }
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public java.util.List<java.lang.Long> getDimsList() {
        return java.util.Collections.unmodifiableList(dims_);
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public int getDimsCount() {
        return dims_.size();
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public long getDims(int index) {
        return dims_.get(index);
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public Builder setDims(int index, long value) {
        ensureDimsIsMutable();
        dims_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public Builder addDims(long value) {
        ensureDimsIsMutable();
        dims_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public Builder addAllDims(java.lang.Iterable<? extends java.lang.Long> values) {
        ensureDimsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, dims_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The shape of the tensor.
       * </pre>
       *
       * <code>repeated int64 dims = 1;</code>
       */
      public Builder clearDims() {
        dims_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private int dataType_;
      /**
       *
       *
       * <pre>
       * The data type of the tensor.
       * This field MUST have a valid TensorProto.DataType value
       * </pre>
       *
       * <code>int32 data_type = 2;</code>
       */
      public int getDataType() {
        return dataType_;
      }
      /**
       *
       *
       * <pre>
       * The data type of the tensor.
       * This field MUST have a valid TensorProto.DataType value
       * </pre>
       *
       * <code>int32 data_type = 2;</code>
       */
      public Builder setDataType(int value) {

        dataType_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The data type of the tensor.
       * This field MUST have a valid TensorProto.DataType value
       * </pre>
       *
       * <code>int32 data_type = 2;</code>
       */
      public Builder clearDataType() {

        dataType_ = 0;
        onChanged();
        return this;
      }

      private OnnxMl.TensorProto.Segment segment_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto.Segment,
              OnnxMl.TensorProto.Segment.Builder,
              OnnxMl.TensorProto.SegmentOrBuilder>
          segmentBuilder_;
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public boolean hasSegment() {
        return segmentBuilder_ != null || segment_ != null;
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public OnnxMl.TensorProto.Segment getSegment() {
        if (segmentBuilder_ == null) {
          return segment_ == null ? OnnxMl.TensorProto.Segment.getDefaultInstance() : segment_;
        } else {
          return segmentBuilder_.getMessage();
        }
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public Builder setSegment(OnnxMl.TensorProto.Segment value) {
        if (segmentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          segment_ = value;
          onChanged();
        } else {
          segmentBuilder_.setMessage(value);
        }

        return this;
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public Builder setSegment(OnnxMl.TensorProto.Segment.Builder builderForValue) {
        if (segmentBuilder_ == null) {
          segment_ = builderForValue.build();
          onChanged();
        } else {
          segmentBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public Builder mergeSegment(OnnxMl.TensorProto.Segment value) {
        if (segmentBuilder_ == null) {
          if (segment_ != null) {
            segment_ =
                OnnxMl.TensorProto.Segment.newBuilder(segment_).mergeFrom(value).buildPartial();
          } else {
            segment_ = value;
          }
          onChanged();
        } else {
          segmentBuilder_.mergeFrom(value);
        }

        return this;
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public Builder clearSegment() {
        if (segmentBuilder_ == null) {
          segment_ = null;
          onChanged();
        } else {
          segment_ = null;
          segmentBuilder_ = null;
        }

        return this;
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public OnnxMl.TensorProto.Segment.Builder getSegmentBuilder() {

        onChanged();
        return getSegmentFieldBuilder().getBuilder();
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      public OnnxMl.TensorProto.SegmentOrBuilder getSegmentOrBuilder() {
        if (segmentBuilder_ != null) {
          return segmentBuilder_.getMessageOrBuilder();
        } else {
          return segment_ == null ? OnnxMl.TensorProto.Segment.getDefaultInstance() : segment_;
        }
      }
      /** <code>.onnx.TensorProto.Segment segment = 3;</code> */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto.Segment,
              OnnxMl.TensorProto.Segment.Builder,
              OnnxMl.TensorProto.SegmentOrBuilder>
          getSegmentFieldBuilder() {
        if (segmentBuilder_ == null) {
          segmentBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TensorProto.Segment,
                  OnnxMl.TensorProto.Segment.Builder,
                  OnnxMl.TensorProto.SegmentOrBuilder>(
                  getSegment(), getParentForChildren(), isClean());
          segment_ = null;
        }
        return segmentBuilder_;
      }

      private java.util.List<java.lang.Float> floatData_ = java.util.Collections.emptyList();

      private void ensureFloatDataIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          floatData_ = new java.util.ArrayList<java.lang.Float>(floatData_);
          bitField0_ |= 0x00000008;
        }
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public java.util.List<java.lang.Float> getFloatDataList() {
        return java.util.Collections.unmodifiableList(floatData_);
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public int getFloatDataCount() {
        return floatData_.size();
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public float getFloatData(int index) {
        return floatData_.get(index);
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public Builder setFloatData(int index, float value) {
        ensureFloatDataIsMutable();
        floatData_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public Builder addFloatData(float value) {
        ensureFloatDataIsMutable();
        floatData_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public Builder addAllFloatData(java.lang.Iterable<? extends java.lang.Float> values) {
        ensureFloatDataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, floatData_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For float and complex64 values
       * Complex64 tensors are encoded as a single array of floats,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be FLOAT or COMPLEX64.
       * </pre>
       *
       * <code>repeated float float_data = 4 [packed = true];</code>
       */
      public Builder clearFloatData() {
        floatData_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Integer> int32Data_ = java.util.Collections.emptyList();

      private void ensureInt32DataIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          int32Data_ = new java.util.ArrayList<java.lang.Integer>(int32Data_);
          bitField0_ |= 0x00000010;
        }
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public java.util.List<java.lang.Integer> getInt32DataList() {
        return java.util.Collections.unmodifiableList(int32Data_);
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public int getInt32DataCount() {
        return int32Data_.size();
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public int getInt32Data(int index) {
        return int32Data_.get(index);
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public Builder setInt32Data(int index, int value) {
        ensureInt32DataIsMutable();
        int32Data_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public Builder addInt32Data(int value) {
        ensureInt32DataIsMutable();
        int32Data_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public Builder addAllInt32Data(java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureInt32DataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, int32Data_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For int32, uint8, int8, uint16, int16, bool, and float16 values
       * float16 values must be bit-wise converted to an uint16_t prior
       * to writing to the buffer.
       * When this field is present, the data_type field MUST be
       * INT32, INT16, INT8, UINT16, UINT8, BOOL, or FLOAT16
       * </pre>
       *
       * <code>repeated int32 int32_data = 5 [packed = true];</code>
       */
      public Builder clearInt32Data() {
        int32Data_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.ByteString> stringData_ =
          java.util.Collections.emptyList();

      private void ensureStringDataIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          stringData_ = new java.util.ArrayList<com.google.protobuf.ByteString>(stringData_);
          bitField0_ |= 0x00000020;
        }
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public java.util.List<com.google.protobuf.ByteString> getStringDataList() {
        return java.util.Collections.unmodifiableList(stringData_);
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public int getStringDataCount() {
        return stringData_.size();
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public com.google.protobuf.ByteString getStringData(int index) {
        return stringData_.get(index);
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public Builder setStringData(int index, com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureStringDataIsMutable();
        stringData_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public Builder addStringData(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureStringDataIsMutable();
        stringData_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public Builder addAllStringData(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureStringDataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, stringData_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For strings.
       * Each element of string_data is a UTF-8 encoded Unicode
       * string. No trailing null, no leading BOM. The protobuf "string"
       * scalar type is not used to match ML community conventions.
       * When this field is present, the data_type field MUST be STRING
       * </pre>
       *
       * <code>repeated bytes string_data = 6;</code>
       */
      public Builder clearStringData() {
        stringData_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Long> int64Data_ = java.util.Collections.emptyList();

      private void ensureInt64DataIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          int64Data_ = new java.util.ArrayList<java.lang.Long>(int64Data_);
          bitField0_ |= 0x00000040;
        }
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public java.util.List<java.lang.Long> getInt64DataList() {
        return java.util.Collections.unmodifiableList(int64Data_);
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public int getInt64DataCount() {
        return int64Data_.size();
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public long getInt64Data(int index) {
        return int64Data_.get(index);
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public Builder setInt64Data(int index, long value) {
        ensureInt64DataIsMutable();
        int64Data_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public Builder addInt64Data(long value) {
        ensureInt64DataIsMutable();
        int64Data_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public Builder addAllInt64Data(java.lang.Iterable<? extends java.lang.Long> values) {
        ensureInt64DataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, int64Data_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For int64.
       * When this field is present, the data_type field MUST be INT64
       * </pre>
       *
       * <code>repeated int64 int64_data = 7 [packed = true];</code>
       */
      public Builder clearInt64Data() {
        int64Data_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       *
       *
       * <pre>
       * Optionally, a name for the tensor.
       * </pre>
       *
       * <code>string name = 8;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Optionally, a name for the tensor.
       * </pre>
       *
       * <code>string name = 8;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * Optionally, a name for the tensor.
       * </pre>
       *
       * <code>string name = 8;</code>
       */
      public Builder setName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        name_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optionally, a name for the tensor.
       * </pre>
       *
       * <code>string name = 8;</code>
       */
      public Builder clearName() {

        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Optionally, a name for the tensor.
       * </pre>
       *
       * <code>string name = 8;</code>
       */
      public Builder setNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this tensor. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 12;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this tensor. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 12;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this tensor. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 12;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this tensor. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 12;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this tensor. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 12;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString rawData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       *
       * <pre>
       * Serializations can either use one of the fields above, or use this
       * raw bytes field. The only exception is the string case, where one is
       * required to store the content in the repeated bytes string_data field.
       * When this raw_data field is used to store tensor value, elements MUST
       * be stored in as fixed-width, little-endian order.
       * Floating-point data types MUST be stored in IEEE 754 format.
       * Complex64 elements must be written as two consecutive FLOAT values, real component first.
       * Complex128 elements must be written as two consecutive DOUBLE values, real component first.
       * Boolean type MUST be written one byte per tensor element (00000001 for true, 00000000 for false).
       * Note: the advantage of specific field rather than the raw_data field is
       * that in some cases (e.g. int data), protobuf does a better packing via
       * variable length storage, and may lead to smaller binary footprint.
       * When this field is present, the data_type field MUST NOT be STRING or UNDEFINED
       * </pre>
       *
       * <code>bytes raw_data = 9;</code>
       */
      public com.google.protobuf.ByteString getRawData() {
        return rawData_;
      }
      /**
       *
       *
       * <pre>
       * Serializations can either use one of the fields above, or use this
       * raw bytes field. The only exception is the string case, where one is
       * required to store the content in the repeated bytes string_data field.
       * When this raw_data field is used to store tensor value, elements MUST
       * be stored in as fixed-width, little-endian order.
       * Floating-point data types MUST be stored in IEEE 754 format.
       * Complex64 elements must be written as two consecutive FLOAT values, real component first.
       * Complex128 elements must be written as two consecutive DOUBLE values, real component first.
       * Boolean type MUST be written one byte per tensor element (00000001 for true, 00000000 for false).
       * Note: the advantage of specific field rather than the raw_data field is
       * that in some cases (e.g. int data), protobuf does a better packing via
       * variable length storage, and may lead to smaller binary footprint.
       * When this field is present, the data_type field MUST NOT be STRING or UNDEFINED
       * </pre>
       *
       * <code>bytes raw_data = 9;</code>
       */
      public Builder setRawData(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }

        rawData_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * Serializations can either use one of the fields above, or use this
       * raw bytes field. The only exception is the string case, where one is
       * required to store the content in the repeated bytes string_data field.
       * When this raw_data field is used to store tensor value, elements MUST
       * be stored in as fixed-width, little-endian order.
       * Floating-point data types MUST be stored in IEEE 754 format.
       * Complex64 elements must be written as two consecutive FLOAT values, real component first.
       * Complex128 elements must be written as two consecutive DOUBLE values, real component first.
       * Boolean type MUST be written one byte per tensor element (00000001 for true, 00000000 for false).
       * Note: the advantage of specific field rather than the raw_data field is
       * that in some cases (e.g. int data), protobuf does a better packing via
       * variable length storage, and may lead to smaller binary footprint.
       * When this field is present, the data_type field MUST NOT be STRING or UNDEFINED
       * </pre>
       *
       * <code>bytes raw_data = 9;</code>
       */
      public Builder clearRawData() {

        rawData_ = getDefaultInstance().getRawData();
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.StringStringEntryProto> externalData_ =
          java.util.Collections.emptyList();

      private void ensureExternalDataIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          externalData_ = new java.util.ArrayList<OnnxMl.StringStringEntryProto>(externalData_);
          bitField0_ |= 0x00000400;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.StringStringEntryProto,
              OnnxMl.StringStringEntryProto.Builder,
              OnnxMl.StringStringEntryProtoOrBuilder>
          externalDataBuilder_;

      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public java.util.List<OnnxMl.StringStringEntryProto> getExternalDataList() {
        if (externalDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(externalData_);
        } else {
          return externalDataBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public int getExternalDataCount() {
        if (externalDataBuilder_ == null) {
          return externalData_.size();
        } else {
          return externalDataBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public OnnxMl.StringStringEntryProto getExternalData(int index) {
        if (externalDataBuilder_ == null) {
          return externalData_.get(index);
        } else {
          return externalDataBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder setExternalData(int index, OnnxMl.StringStringEntryProto value) {
        if (externalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalDataIsMutable();
          externalData_.set(index, value);
          onChanged();
        } else {
          externalDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder setExternalData(
          int index, OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (externalDataBuilder_ == null) {
          ensureExternalDataIsMutable();
          externalData_.set(index, builderForValue.build());
          onChanged();
        } else {
          externalDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder addExternalData(OnnxMl.StringStringEntryProto value) {
        if (externalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalDataIsMutable();
          externalData_.add(value);
          onChanged();
        } else {
          externalDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder addExternalData(int index, OnnxMl.StringStringEntryProto value) {
        if (externalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExternalDataIsMutable();
          externalData_.add(index, value);
          onChanged();
        } else {
          externalDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder addExternalData(OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (externalDataBuilder_ == null) {
          ensureExternalDataIsMutable();
          externalData_.add(builderForValue.build());
          onChanged();
        } else {
          externalDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder addExternalData(
          int index, OnnxMl.StringStringEntryProto.Builder builderForValue) {
        if (externalDataBuilder_ == null) {
          ensureExternalDataIsMutable();
          externalData_.add(index, builderForValue.build());
          onChanged();
        } else {
          externalDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder addAllExternalData(
          java.lang.Iterable<? extends OnnxMl.StringStringEntryProto> values) {
        if (externalDataBuilder_ == null) {
          ensureExternalDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, externalData_);
          onChanged();
        } else {
          externalDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder clearExternalData() {
        if (externalDataBuilder_ == null) {
          externalData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          externalDataBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public Builder removeExternalData(int index) {
        if (externalDataBuilder_ == null) {
          ensureExternalDataIsMutable();
          externalData_.remove(index);
          onChanged();
        } else {
          externalDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder getExternalDataBuilder(int index) {
        return getExternalDataFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public OnnxMl.StringStringEntryProtoOrBuilder getExternalDataOrBuilder(int index) {
        if (externalDataBuilder_ == null) {
          return externalData_.get(index);
        } else {
          return externalDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public java.util.List<? extends OnnxMl.StringStringEntryProtoOrBuilder>
          getExternalDataOrBuilderList() {
        if (externalDataBuilder_ != null) {
          return externalDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(externalData_);
        }
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder addExternalDataBuilder() {
        return getExternalDataFieldBuilder()
            .addBuilder(OnnxMl.StringStringEntryProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public OnnxMl.StringStringEntryProto.Builder addExternalDataBuilder(int index) {
        return getExternalDataFieldBuilder()
            .addBuilder(index, OnnxMl.StringStringEntryProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * Data can be stored inside the protobuf file using type-specific fields or raw_data.
       * Alternatively, raw bytes data can be stored in an external file, using the external_data field.
       * external_data stores key-value pairs describing data location. Recognized keys are:
       * - "location" (required) - POSIX filesystem path relative to the directory where the ONNX
       *                           protobuf model was stored
       * - "offset" (optional) - position of byte at which stored data begins. Integer stored as string.
       *                         Offset values SHOULD be multiples 4096 (page size) to enable mmap support.
       * - "length" (optional) - number of bytes containing data. Integer stored as string.
       * - "checksum" (optional) - SHA1 digest of file specified in under 'location' key.
       * </pre>
       *
       * <code>repeated .onnx.StringStringEntryProto external_data = 13;</code>
       */
      public java.util.List<OnnxMl.StringStringEntryProto.Builder> getExternalDataBuilderList() {
        return getExternalDataFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.StringStringEntryProto,
              OnnxMl.StringStringEntryProto.Builder,
              OnnxMl.StringStringEntryProtoOrBuilder>
          getExternalDataFieldBuilder() {
        if (externalDataBuilder_ == null) {
          externalDataBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.StringStringEntryProto,
                  OnnxMl.StringStringEntryProto.Builder,
                  OnnxMl.StringStringEntryProtoOrBuilder>(
                  externalData_,
                  ((bitField0_ & 0x00000400) == 0x00000400),
                  getParentForChildren(),
                  isClean());
          externalData_ = null;
        }
        return externalDataBuilder_;
      }

      private int dataLocation_ = 0;
      /**
       *
       *
       * <pre>
       * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
       * </pre>
       *
       * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
       */
      public int getDataLocationValue() {
        return dataLocation_;
      }
      /**
       *
       *
       * <pre>
       * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
       * </pre>
       *
       * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
       */
      public Builder setDataLocationValue(int value) {
        dataLocation_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
       * </pre>
       *
       * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
       */
      public OnnxMl.TensorProto.DataLocation getDataLocation() {
        @SuppressWarnings("deprecation")
        OnnxMl.TensorProto.DataLocation result =
            OnnxMl.TensorProto.DataLocation.valueOf(dataLocation_);
        return result == null ? OnnxMl.TensorProto.DataLocation.UNRECOGNIZED : result;
      }
      /**
       *
       *
       * <pre>
       * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
       * </pre>
       *
       * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
       */
      public Builder setDataLocation(OnnxMl.TensorProto.DataLocation value) {
        if (value == null) {
          throw new NullPointerException();
        }

        dataLocation_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * If value not set, data is stored in raw_data (if set) otherwise in type-specified field.
       * </pre>
       *
       * <code>.onnx.TensorProto.DataLocation data_location = 14;</code>
       */
      public Builder clearDataLocation() {

        dataLocation_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Double> doubleData_ = java.util.Collections.emptyList();

      private void ensureDoubleDataIsMutable() {
        if (!((bitField0_ & 0x00001000) == 0x00001000)) {
          doubleData_ = new java.util.ArrayList<java.lang.Double>(doubleData_);
          bitField0_ |= 0x00001000;
        }
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public java.util.List<java.lang.Double> getDoubleDataList() {
        return java.util.Collections.unmodifiableList(doubleData_);
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public int getDoubleDataCount() {
        return doubleData_.size();
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public double getDoubleData(int index) {
        return doubleData_.get(index);
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public Builder setDoubleData(int index, double value) {
        ensureDoubleDataIsMutable();
        doubleData_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public Builder addDoubleData(double value) {
        ensureDoubleDataIsMutable();
        doubleData_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public Builder addAllDoubleData(java.lang.Iterable<? extends java.lang.Double> values) {
        ensureDoubleDataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, doubleData_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For double
       * Complex128 tensors are encoded as a single array of doubles,
       * with the real components appearing in odd numbered positions,
       * and the corresponding imaginary component apparing in the
       * subsequent even numbered position. (e.g., [1.0 + 2.0i, 3.0 + 4.0i]
       * is encoded as [1.0, 2.0 ,3.0 ,4.0]
       * When this field is present, the data_type field MUST be DOUBLE or COMPLEX128
       * </pre>
       *
       * <code>repeated double double_data = 10 [packed = true];</code>
       */
      public Builder clearDoubleData() {
        doubleData_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00001000);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Long> uint64Data_ = java.util.Collections.emptyList();

      private void ensureUint64DataIsMutable() {
        if (!((bitField0_ & 0x00002000) == 0x00002000)) {
          uint64Data_ = new java.util.ArrayList<java.lang.Long>(uint64Data_);
          bitField0_ |= 0x00002000;
        }
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public java.util.List<java.lang.Long> getUint64DataList() {
        return java.util.Collections.unmodifiableList(uint64Data_);
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public int getUint64DataCount() {
        return uint64Data_.size();
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public long getUint64Data(int index) {
        return uint64Data_.get(index);
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public Builder setUint64Data(int index, long value) {
        ensureUint64DataIsMutable();
        uint64Data_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public Builder addUint64Data(long value) {
        ensureUint64DataIsMutable();
        uint64Data_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public Builder addAllUint64Data(java.lang.Iterable<? extends java.lang.Long> values) {
        ensureUint64DataIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, uint64Data_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * For uint64 and uint32 values
       * When this field is present, the data_type field MUST be
       * UINT32 or UINT64
       * </pre>
       *
       * <code>repeated uint64 uint64_data = 11 [packed = true];</code>
       */
      public Builder clearUint64Data() {
        uint64Data_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00002000);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.TensorProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.TensorProto)
    private static final OnnxMl.TensorProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.TensorProto();
    }

    public static OnnxMl.TensorProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TensorProto> PARSER =
        new com.google.protobuf.AbstractParser<TensorProto>() {
          @java.lang.Override
          public TensorProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new TensorProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<TensorProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<TensorProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.TensorProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface SparseTensorProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.SparseTensorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The sequence of non-default values are encoded as a tensor of shape [NNZ].
     * The default-value is zero for numeric tensors, and empty-string for string tensors.
     * </pre>
     *
     * <code>.onnx.TensorProto values = 1;</code>
     */
    boolean hasValues();
    /**
     *
     *
     * <pre>
     * The sequence of non-default values are encoded as a tensor of shape [NNZ].
     * The default-value is zero for numeric tensors, and empty-string for string tensors.
     * </pre>
     *
     * <code>.onnx.TensorProto values = 1;</code>
     */
    OnnxMl.TensorProto getValues();
    /**
     *
     *
     * <pre>
     * The sequence of non-default values are encoded as a tensor of shape [NNZ].
     * The default-value is zero for numeric tensors, and empty-string for string tensors.
     * </pre>
     *
     * <code>.onnx.TensorProto values = 1;</code>
     */
    OnnxMl.TensorProtoOrBuilder getValuesOrBuilder();

    /**
     *
     *
     * <pre>
     * The indices of the non-default values, which may be stored in one of two formats.
     * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
     * corresponding to the j-th index of the i-th value (in the values tensor).
     * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
     * must be the linearized-index of the i-th value (in the values tensor).
     * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
     * using the shape provided below.
     * The indices must appear in ascending order without duplication.
     * In the first format, the ordering is lexicographic-ordering:
     * e.g., index-value [1,4] must appear before [2,1]
     * </pre>
     *
     * <code>.onnx.TensorProto indices = 2;</code>
     */
    boolean hasIndices();
    /**
     *
     *
     * <pre>
     * The indices of the non-default values, which may be stored in one of two formats.
     * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
     * corresponding to the j-th index of the i-th value (in the values tensor).
     * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
     * must be the linearized-index of the i-th value (in the values tensor).
     * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
     * using the shape provided below.
     * The indices must appear in ascending order without duplication.
     * In the first format, the ordering is lexicographic-ordering:
     * e.g., index-value [1,4] must appear before [2,1]
     * </pre>
     *
     * <code>.onnx.TensorProto indices = 2;</code>
     */
    OnnxMl.TensorProto getIndices();
    /**
     *
     *
     * <pre>
     * The indices of the non-default values, which may be stored in one of two formats.
     * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
     * corresponding to the j-th index of the i-th value (in the values tensor).
     * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
     * must be the linearized-index of the i-th value (in the values tensor).
     * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
     * using the shape provided below.
     * The indices must appear in ascending order without duplication.
     * In the first format, the ordering is lexicographic-ordering:
     * e.g., index-value [1,4] must appear before [2,1]
     * </pre>
     *
     * <code>.onnx.TensorProto indices = 2;</code>
     */
    OnnxMl.TensorProtoOrBuilder getIndicesOrBuilder();

    /**
     *
     *
     * <pre>
     * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
     * </pre>
     *
     * <code>repeated int64 dims = 3;</code>
     */
    java.util.List<java.lang.Long> getDimsList();
    /**
     *
     *
     * <pre>
     * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
     * </pre>
     *
     * <code>repeated int64 dims = 3;</code>
     */
    int getDimsCount();
    /**
     *
     *
     * <pre>
     * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
     * </pre>
     *
     * <code>repeated int64 dims = 3;</code>
     */
    long getDims(int index);
  }
  /**
   *
   *
   * <pre>
   * A serialized sparse-tensor value
   * </pre>
   *
   * Protobuf type {@code onnx.SparseTensorProto}
   */
  public static final class SparseTensorProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.SparseTensorProto)
      SparseTensorProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use SparseTensorProto.newBuilder() to construct.
    private SparseTensorProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private SparseTensorProto() {
      dims_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private SparseTensorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                OnnxMl.TensorProto.Builder subBuilder = null;
                if (values_ != null) {
                  subBuilder = values_.toBuilder();
                }
                values_ = input.readMessage(OnnxMl.TensorProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(values_);
                  values_ = subBuilder.buildPartial();
                }

                break;
              }
            case 18:
              {
                OnnxMl.TensorProto.Builder subBuilder = null;
                if (indices_ != null) {
                  subBuilder = indices_.toBuilder();
                }
                indices_ = input.readMessage(OnnxMl.TensorProto.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(indices_);
                  indices_ = subBuilder.buildPartial();
                }

                break;
              }
            case 24:
              {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  dims_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000004;
                }
                dims_.add(input.readInt64());
                break;
              }
            case 26:
              {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)
                    && input.getBytesUntilLimit() > 0) {
                  dims_ = new java.util.ArrayList<java.lang.Long>();
                  mutable_bitField0_ |= 0x00000004;
                }
                while (input.getBytesUntilLimit() > 0) {
                  dims_.add(input.readInt64());
                }
                input.popLimit(limit);
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          dims_ = java.util.Collections.unmodifiableList(dims_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_SparseTensorProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_SparseTensorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.SparseTensorProto.class, OnnxMl.SparseTensorProto.Builder.class);
    }

    private int bitField0_;
    public static final int VALUES_FIELD_NUMBER = 1;
    private OnnxMl.TensorProto values_;
    /**
     *
     *
     * <pre>
     * The sequence of non-default values are encoded as a tensor of shape [NNZ].
     * The default-value is zero for numeric tensors, and empty-string for string tensors.
     * </pre>
     *
     * <code>.onnx.TensorProto values = 1;</code>
     */
    public boolean hasValues() {
      return values_ != null;
    }
    /**
     *
     *
     * <pre>
     * The sequence of non-default values are encoded as a tensor of shape [NNZ].
     * The default-value is zero for numeric tensors, and empty-string for string tensors.
     * </pre>
     *
     * <code>.onnx.TensorProto values = 1;</code>
     */
    public OnnxMl.TensorProto getValues() {
      return values_ == null ? OnnxMl.TensorProto.getDefaultInstance() : values_;
    }
    /**
     *
     *
     * <pre>
     * The sequence of non-default values are encoded as a tensor of shape [NNZ].
     * The default-value is zero for numeric tensors, and empty-string for string tensors.
     * </pre>
     *
     * <code>.onnx.TensorProto values = 1;</code>
     */
    public OnnxMl.TensorProtoOrBuilder getValuesOrBuilder() {
      return getValues();
    }

    public static final int INDICES_FIELD_NUMBER = 2;
    private OnnxMl.TensorProto indices_;
    /**
     *
     *
     * <pre>
     * The indices of the non-default values, which may be stored in one of two formats.
     * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
     * corresponding to the j-th index of the i-th value (in the values tensor).
     * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
     * must be the linearized-index of the i-th value (in the values tensor).
     * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
     * using the shape provided below.
     * The indices must appear in ascending order without duplication.
     * In the first format, the ordering is lexicographic-ordering:
     * e.g., index-value [1,4] must appear before [2,1]
     * </pre>
     *
     * <code>.onnx.TensorProto indices = 2;</code>
     */
    public boolean hasIndices() {
      return indices_ != null;
    }
    /**
     *
     *
     * <pre>
     * The indices of the non-default values, which may be stored in one of two formats.
     * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
     * corresponding to the j-th index of the i-th value (in the values tensor).
     * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
     * must be the linearized-index of the i-th value (in the values tensor).
     * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
     * using the shape provided below.
     * The indices must appear in ascending order without duplication.
     * In the first format, the ordering is lexicographic-ordering:
     * e.g., index-value [1,4] must appear before [2,1]
     * </pre>
     *
     * <code>.onnx.TensorProto indices = 2;</code>
     */
    public OnnxMl.TensorProto getIndices() {
      return indices_ == null ? OnnxMl.TensorProto.getDefaultInstance() : indices_;
    }
    /**
     *
     *
     * <pre>
     * The indices of the non-default values, which may be stored in one of two formats.
     * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
     * corresponding to the j-th index of the i-th value (in the values tensor).
     * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
     * must be the linearized-index of the i-th value (in the values tensor).
     * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
     * using the shape provided below.
     * The indices must appear in ascending order without duplication.
     * In the first format, the ordering is lexicographic-ordering:
     * e.g., index-value [1,4] must appear before [2,1]
     * </pre>
     *
     * <code>.onnx.TensorProto indices = 2;</code>
     */
    public OnnxMl.TensorProtoOrBuilder getIndicesOrBuilder() {
      return getIndices();
    }

    public static final int DIMS_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Long> dims_;
    /**
     *
     *
     * <pre>
     * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
     * </pre>
     *
     * <code>repeated int64 dims = 3;</code>
     */
    public java.util.List<java.lang.Long> getDimsList() {
      return dims_;
    }
    /**
     *
     *
     * <pre>
     * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
     * </pre>
     *
     * <code>repeated int64 dims = 3;</code>
     */
    public int getDimsCount() {
      return dims_.size();
    }
    /**
     *
     *
     * <pre>
     * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
     * </pre>
     *
     * <code>repeated int64 dims = 3;</code>
     */
    public long getDims(int index) {
      return dims_.get(index);
    }

    private int dimsMemoizedSerializedSize = -1;

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      getSerializedSize();
      if (values_ != null) {
        output.writeMessage(1, getValues());
      }
      if (indices_ != null) {
        output.writeMessage(2, getIndices());
      }
      if (getDimsList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(dimsMemoizedSerializedSize);
      }
      for (int i = 0; i < dims_.size(); i++) {
        output.writeInt64NoTag(dims_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (values_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getValues());
      }
      if (indices_ != null) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getIndices());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < dims_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream.computeInt64SizeNoTag(dims_.get(i));
        }
        size += dataSize;
        if (!getDimsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
        }
        dimsMemoizedSerializedSize = dataSize;
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.SparseTensorProto)) {
        return super.equals(obj);
      }
      OnnxMl.SparseTensorProto other = (OnnxMl.SparseTensorProto) obj;

      boolean result = true;
      result = result && (hasValues() == other.hasValues());
      if (hasValues()) {
        result = result && getValues().equals(other.getValues());
      }
      result = result && (hasIndices() == other.hasIndices());
      if (hasIndices()) {
        result = result && getIndices().equals(other.getIndices());
      }
      result = result && getDimsList().equals(other.getDimsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasValues()) {
        hash = (37 * hash) + VALUES_FIELD_NUMBER;
        hash = (53 * hash) + getValues().hashCode();
      }
      if (hasIndices()) {
        hash = (37 * hash) + INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getIndices().hashCode();
      }
      if (getDimsCount() > 0) {
        hash = (37 * hash) + DIMS_FIELD_NUMBER;
        hash = (53 * hash) + getDimsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.SparseTensorProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.SparseTensorProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.SparseTensorProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.SparseTensorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.SparseTensorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.SparseTensorProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.SparseTensorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.SparseTensorProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.SparseTensorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.SparseTensorProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.SparseTensorProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.SparseTensorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.SparseTensorProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * A serialized sparse-tensor value
     * </pre>
     *
     * Protobuf type {@code onnx.SparseTensorProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.SparseTensorProto)
        OnnxMl.SparseTensorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_SparseTensorProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_SparseTensorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.SparseTensorProto.class, OnnxMl.SparseTensorProto.Builder.class);
      }

      // Construct using OnnxMlProto3.SparseTensorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (valuesBuilder_ == null) {
          values_ = null;
        } else {
          values_ = null;
          valuesBuilder_ = null;
        }
        if (indicesBuilder_ == null) {
          indices_ = null;
        } else {
          indices_ = null;
          indicesBuilder_ = null;
        }
        dims_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_SparseTensorProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.SparseTensorProto getDefaultInstanceForType() {
        return OnnxMl.SparseTensorProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.SparseTensorProto build() {
        OnnxMl.SparseTensorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.SparseTensorProto buildPartial() {
        OnnxMl.SparseTensorProto result = new OnnxMl.SparseTensorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (valuesBuilder_ == null) {
          result.values_ = values_;
        } else {
          result.values_ = valuesBuilder_.build();
        }
        if (indicesBuilder_ == null) {
          result.indices_ = indices_;
        } else {
          result.indices_ = indicesBuilder_.build();
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          dims_ = java.util.Collections.unmodifiableList(dims_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.dims_ = dims_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.SparseTensorProto) {
          return mergeFrom((OnnxMl.SparseTensorProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.SparseTensorProto other) {
        if (other == OnnxMl.SparseTensorProto.getDefaultInstance()) return this;
        if (other.hasValues()) {
          mergeValues(other.getValues());
        }
        if (other.hasIndices()) {
          mergeIndices(other.getIndices());
        }
        if (!other.dims_.isEmpty()) {
          if (dims_.isEmpty()) {
            dims_ = other.dims_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureDimsIsMutable();
            dims_.addAll(other.dims_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.SparseTensorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.SparseTensorProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private OnnxMl.TensorProto values_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          valuesBuilder_;
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public boolean hasValues() {
        return valuesBuilder_ != null || values_ != null;
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public OnnxMl.TensorProto getValues() {
        if (valuesBuilder_ == null) {
          return values_ == null ? OnnxMl.TensorProto.getDefaultInstance() : values_;
        } else {
          return valuesBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public Builder setValues(OnnxMl.TensorProto value) {
        if (valuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          values_ = value;
          onChanged();
        } else {
          valuesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public Builder setValues(OnnxMl.TensorProto.Builder builderForValue) {
        if (valuesBuilder_ == null) {
          values_ = builderForValue.build();
          onChanged();
        } else {
          valuesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public Builder mergeValues(OnnxMl.TensorProto value) {
        if (valuesBuilder_ == null) {
          if (values_ != null) {
            values_ = OnnxMl.TensorProto.newBuilder(values_).mergeFrom(value).buildPartial();
          } else {
            values_ = value;
          }
          onChanged();
        } else {
          valuesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public Builder clearValues() {
        if (valuesBuilder_ == null) {
          values_ = null;
          onChanged();
        } else {
          values_ = null;
          valuesBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public OnnxMl.TensorProto.Builder getValuesBuilder() {

        onChanged();
        return getValuesFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      public OnnxMl.TensorProtoOrBuilder getValuesOrBuilder() {
        if (valuesBuilder_ != null) {
          return valuesBuilder_.getMessageOrBuilder();
        } else {
          return values_ == null ? OnnxMl.TensorProto.getDefaultInstance() : values_;
        }
      }
      /**
       *
       *
       * <pre>
       * The sequence of non-default values are encoded as a tensor of shape [NNZ].
       * The default-value is zero for numeric tensors, and empty-string for string tensors.
       * </pre>
       *
       * <code>.onnx.TensorProto values = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          getValuesFieldBuilder() {
        if (valuesBuilder_ == null) {
          valuesBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>(
                  getValues(), getParentForChildren(), isClean());
          values_ = null;
        }
        return valuesBuilder_;
      }

      private OnnxMl.TensorProto indices_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          indicesBuilder_;
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public boolean hasIndices() {
        return indicesBuilder_ != null || indices_ != null;
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public OnnxMl.TensorProto getIndices() {
        if (indicesBuilder_ == null) {
          return indices_ == null ? OnnxMl.TensorProto.getDefaultInstance() : indices_;
        } else {
          return indicesBuilder_.getMessage();
        }
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public Builder setIndices(OnnxMl.TensorProto value) {
        if (indicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          indices_ = value;
          onChanged();
        } else {
          indicesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public Builder setIndices(OnnxMl.TensorProto.Builder builderForValue) {
        if (indicesBuilder_ == null) {
          indices_ = builderForValue.build();
          onChanged();
        } else {
          indicesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public Builder mergeIndices(OnnxMl.TensorProto value) {
        if (indicesBuilder_ == null) {
          if (indices_ != null) {
            indices_ = OnnxMl.TensorProto.newBuilder(indices_).mergeFrom(value).buildPartial();
          } else {
            indices_ = value;
          }
          onChanged();
        } else {
          indicesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public Builder clearIndices() {
        if (indicesBuilder_ == null) {
          indices_ = null;
          onChanged();
        } else {
          indices_ = null;
          indicesBuilder_ = null;
        }

        return this;
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public OnnxMl.TensorProto.Builder getIndicesBuilder() {

        onChanged();
        return getIndicesFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      public OnnxMl.TensorProtoOrBuilder getIndicesOrBuilder() {
        if (indicesBuilder_ != null) {
          return indicesBuilder_.getMessageOrBuilder();
        } else {
          return indices_ == null ? OnnxMl.TensorProto.getDefaultInstance() : indices_;
        }
      }
      /**
       *
       *
       * <pre>
       * The indices of the non-default values, which may be stored in one of two formats.
       * (a) Indices can be a tensor of shape [NNZ, rank] with the [i,j]-th value
       * corresponding to the j-th index of the i-th value (in the values tensor).
       * (b) Indices can be a tensor of shape [NNZ], in which case the i-th value
       * must be the linearized-index of the i-th value (in the values tensor).
       * The linearized-index can be converted into an index tuple (k_1,...,k_rank)
       * using the shape provided below.
       * The indices must appear in ascending order without duplication.
       * In the first format, the ordering is lexicographic-ordering:
       * e.g., index-value [1,4] must appear before [2,1]
       * </pre>
       *
       * <code>.onnx.TensorProto indices = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>
          getIndicesFieldBuilder() {
        if (indicesBuilder_ == null) {
          indicesBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TensorProto, OnnxMl.TensorProto.Builder, OnnxMl.TensorProtoOrBuilder>(
                  getIndices(), getParentForChildren(), isClean());
          indices_ = null;
        }
        return indicesBuilder_;
      }

      private java.util.List<java.lang.Long> dims_ = java.util.Collections.emptyList();

      private void ensureDimsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          dims_ = new java.util.ArrayList<java.lang.Long>(dims_);
          bitField0_ |= 0x00000004;
        }
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public java.util.List<java.lang.Long> getDimsList() {
        return java.util.Collections.unmodifiableList(dims_);
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public int getDimsCount() {
        return dims_.size();
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public long getDims(int index) {
        return dims_.get(index);
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public Builder setDims(int index, long value) {
        ensureDimsIsMutable();
        dims_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public Builder addDims(long value) {
        ensureDimsIsMutable();
        dims_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public Builder addAllDims(java.lang.Iterable<? extends java.lang.Long> values) {
        ensureDimsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, dims_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The shape of the underlying dense-tensor: [dim_1, dim_2, ... dim_rank]
       * </pre>
       *
       * <code>repeated int64 dims = 3;</code>
       */
      public Builder clearDims() {
        dims_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.SparseTensorProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.SparseTensorProto)
    private static final OnnxMl.SparseTensorProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.SparseTensorProto();
    }

    public static OnnxMl.SparseTensorProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SparseTensorProto> PARSER =
        new com.google.protobuf.AbstractParser<SparseTensorProto>() {
          @java.lang.Override
          public SparseTensorProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new SparseTensorProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<SparseTensorProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SparseTensorProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.SparseTensorProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface TensorShapeProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.TensorShapeProto)
      com.google.protobuf.MessageOrBuilder {

    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    java.util.List<OnnxMl.TensorShapeProto.Dimension> getDimList();
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    OnnxMl.TensorShapeProto.Dimension getDim(int index);
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    int getDimCount();
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    java.util.List<? extends OnnxMl.TensorShapeProto.DimensionOrBuilder> getDimOrBuilderList();
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    OnnxMl.TensorShapeProto.DimensionOrBuilder getDimOrBuilder(int index);
  }
  /**
   *
   *
   * <pre>
   * Defines a tensor shape. A dimension can be either an integer value
   * or a symbolic variable. A symbolic variable represents an unknown
   * dimension.
   * </pre>
   *
   * Protobuf type {@code onnx.TensorShapeProto}
   */
  public static final class TensorShapeProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.TensorShapeProto)
      TensorShapeProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use TensorShapeProto.newBuilder() to construct.
    private TensorShapeProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private TensorShapeProto() {
      dim_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private TensorShapeProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  dim_ = new java.util.ArrayList<OnnxMl.TensorShapeProto.Dimension>();
                  mutable_bitField0_ |= 0x00000001;
                }
                dim_.add(
                    input.readMessage(
                        OnnxMl.TensorShapeProto.Dimension.parser(), extensionRegistry));
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          dim_ = java.util.Collections.unmodifiableList(dim_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_TensorShapeProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_TensorShapeProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.TensorShapeProto.class, OnnxMl.TensorShapeProto.Builder.class);
    }

    public interface DimensionOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TensorShapeProto.Dimension)
        com.google.protobuf.MessageOrBuilder {

      /** <code>int64 dim_value = 1;</code> */
      long getDimValue();

      /**
       *
       *
       * <pre>
       * namespace Shape
       * </pre>
       *
       * <code>string dim_param = 2;</code>
       */
      java.lang.String getDimParam();
      /**
       *
       *
       * <pre>
       * namespace Shape
       * </pre>
       *
       * <code>string dim_param = 2;</code>
       */
      com.google.protobuf.ByteString getDimParamBytes();

      /**
       *
       *
       * <pre>
       * Standard denotation can optionally be used to denote tensor
       * dimensions with standard semantic descriptions to ensure
       * that operations are applied to the correct axis of a tensor.
       * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
       * for pre-defined dimension denotations.
       * </pre>
       *
       * <code>string denotation = 3;</code>
       */
      java.lang.String getDenotation();
      /**
       *
       *
       * <pre>
       * Standard denotation can optionally be used to denote tensor
       * dimensions with standard semantic descriptions to ensure
       * that operations are applied to the correct axis of a tensor.
       * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
       * for pre-defined dimension denotations.
       * </pre>
       *
       * <code>string denotation = 3;</code>
       */
      com.google.protobuf.ByteString getDenotationBytes();

      public OnnxMl.TensorShapeProto.Dimension.ValueCase getValueCase();
    }
    /** Protobuf type {@code onnx.TensorShapeProto.Dimension} */
    public static final class Dimension extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TensorShapeProto.Dimension)
        DimensionOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use Dimension.newBuilder() to construct.
      private Dimension(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private Dimension() {
        denotation_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private Dimension(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  valueCase_ = 1;
                  value_ = input.readInt64();
                  break;
                }
              case 18:
                {
                  java.lang.String s = input.readStringRequireUtf8();
                  valueCase_ = 2;
                  value_ = s;
                  break;
                }
              case 26:
                {
                  java.lang.String s = input.readStringRequireUtf8();

                  denotation_ = s;
                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TensorShapeProto_Dimension_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TensorShapeProto_Dimension_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TensorShapeProto.Dimension.class,
                OnnxMl.TensorShapeProto.Dimension.Builder.class);
      }

      private int valueCase_ = 0;
      private java.lang.Object value_;

      public enum ValueCase implements com.google.protobuf.Internal.EnumLite {
        DIM_VALUE(1),
        DIM_PARAM(2),
        VALUE_NOT_SET(0);
        private final int value;

        private ValueCase(int value) {
          this.value = value;
        }
        /** @deprecated Use {@link #forNumber(int)} instead. */
        @java.lang.Deprecated
        public static ValueCase valueOf(int value) {
          return forNumber(value);
        }

        public static ValueCase forNumber(int value) {
          switch (value) {
            case 1:
              return DIM_VALUE;
            case 2:
              return DIM_PARAM;
            case 0:
              return VALUE_NOT_SET;
            default:
              return null;
          }
        }

        public int getNumber() {
          return this.value;
        }
      };

      public ValueCase getValueCase() {
        return ValueCase.forNumber(valueCase_);
      }

      public static final int DIM_VALUE_FIELD_NUMBER = 1;
      /** <code>int64 dim_value = 1;</code> */
      public long getDimValue() {
        if (valueCase_ == 1) {
          return (java.lang.Long) value_;
        }
        return 0L;
      }

      public static final int DIM_PARAM_FIELD_NUMBER = 2;
      /**
       *
       *
       * <pre>
       * namespace Shape
       * </pre>
       *
       * <code>string dim_param = 2;</code>
       */
      public java.lang.String getDimParam() {
        java.lang.Object ref = "";
        if (valueCase_ == 2) {
          ref = value_;
        }
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (valueCase_ == 2) {
            value_ = s;
          }
          return s;
        }
      }
      /**
       *
       *
       * <pre>
       * namespace Shape
       * </pre>
       *
       * <code>string dim_param = 2;</code>
       */
      public com.google.protobuf.ByteString getDimParamBytes() {
        java.lang.Object ref = "";
        if (valueCase_ == 2) {
          ref = value_;
        }
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          if (valueCase_ == 2) {
            value_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int DENOTATION_FIELD_NUMBER = 3;
      private volatile java.lang.Object denotation_;
      /**
       *
       *
       * <pre>
       * Standard denotation can optionally be used to denote tensor
       * dimensions with standard semantic descriptions to ensure
       * that operations are applied to the correct axis of a tensor.
       * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
       * for pre-defined dimension denotations.
       * </pre>
       *
       * <code>string denotation = 3;</code>
       */
      public java.lang.String getDenotation() {
        java.lang.Object ref = denotation_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          denotation_ = s;
          return s;
        }
      }
      /**
       *
       *
       * <pre>
       * Standard denotation can optionally be used to denote tensor
       * dimensions with standard semantic descriptions to ensure
       * that operations are applied to the correct axis of a tensor.
       * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
       * for pre-defined dimension denotations.
       * </pre>
       *
       * <code>string denotation = 3;</code>
       */
      public com.google.protobuf.ByteString getDenotationBytes() {
        java.lang.Object ref = denotation_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          denotation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (valueCase_ == 1) {
          output.writeInt64(1, (long) ((java.lang.Long) value_));
        }
        if (valueCase_ == 2) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
        }
        if (!getDenotationBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, denotation_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (valueCase_ == 1) {
          size +=
              com.google.protobuf.CodedOutputStream.computeInt64Size(
                  1, (long) ((java.lang.Long) value_));
        }
        if (valueCase_ == 2) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
        }
        if (!getDenotationBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, denotation_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TensorShapeProto.Dimension)) {
          return super.equals(obj);
        }
        OnnxMl.TensorShapeProto.Dimension other = (OnnxMl.TensorShapeProto.Dimension) obj;

        boolean result = true;
        result = result && getDenotation().equals(other.getDenotation());
        result = result && getValueCase().equals(other.getValueCase());
        if (!result) return false;
        switch (valueCase_) {
          case 1:
            result = result && (getDimValue() == other.getDimValue());
            break;
          case 2:
            result = result && getDimParam().equals(other.getDimParam());
            break;
          case 0:
          default:
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + DENOTATION_FIELD_NUMBER;
        hash = (53 * hash) + getDenotation().hashCode();
        switch (valueCase_) {
          case 1:
            hash = (37 * hash) + DIM_VALUE_FIELD_NUMBER;
            hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getDimValue());
            break;
          case 2:
            hash = (37 * hash) + DIM_PARAM_FIELD_NUMBER;
            hash = (53 * hash) + getDimParam().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(
          com.google.protobuf.CodedInputStream input) throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TensorShapeProto.Dimension parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TensorShapeProto.Dimension prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /** Protobuf type {@code onnx.TensorShapeProto.Dimension} */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TensorShapeProto.Dimension)
          OnnxMl.TensorShapeProto.DimensionOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TensorShapeProto_Dimension_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TensorShapeProto_Dimension_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TensorShapeProto.Dimension.class,
                  OnnxMl.TensorShapeProto.Dimension.Builder.class);
        }

        // Construct using OnnxMlProto3.TensorShapeProto.Dimension.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          denotation_ = "";

          valueCase_ = 0;
          value_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TensorShapeProto_Dimension_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TensorShapeProto.Dimension getDefaultInstanceForType() {
          return OnnxMl.TensorShapeProto.Dimension.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TensorShapeProto.Dimension build() {
          OnnxMl.TensorShapeProto.Dimension result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TensorShapeProto.Dimension buildPartial() {
          OnnxMl.TensorShapeProto.Dimension result = new OnnxMl.TensorShapeProto.Dimension(this);
          if (valueCase_ == 1) {
            result.value_ = value_;
          }
          if (valueCase_ == 2) {
            result.value_ = value_;
          }
          result.denotation_ = denotation_;
          result.valueCase_ = valueCase_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TensorShapeProto.Dimension) {
            return mergeFrom((OnnxMl.TensorShapeProto.Dimension) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TensorShapeProto.Dimension other) {
          if (other == OnnxMl.TensorShapeProto.Dimension.getDefaultInstance()) return this;
          if (!other.getDenotation().isEmpty()) {
            denotation_ = other.denotation_;
            onChanged();
          }
          switch (other.getValueCase()) {
            case DIM_VALUE:
              {
                setDimValue(other.getDimValue());
                break;
              }
            case DIM_PARAM:
              {
                valueCase_ = 2;
                value_ = other.value_;
                onChanged();
                break;
              }
            case VALUE_NOT_SET:
              {
                break;
              }
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TensorShapeProto.Dimension parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TensorShapeProto.Dimension) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int valueCase_ = 0;
        private java.lang.Object value_;

        public ValueCase getValueCase() {
          return ValueCase.forNumber(valueCase_);
        }

        public Builder clearValue() {
          valueCase_ = 0;
          value_ = null;
          onChanged();
          return this;
        }

        /** <code>int64 dim_value = 1;</code> */
        public long getDimValue() {
          if (valueCase_ == 1) {
            return (java.lang.Long) value_;
          }
          return 0L;
        }
        /** <code>int64 dim_value = 1;</code> */
        public Builder setDimValue(long value) {
          valueCase_ = 1;
          value_ = value;
          onChanged();
          return this;
        }
        /** <code>int64 dim_value = 1;</code> */
        public Builder clearDimValue() {
          if (valueCase_ == 1) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
          return this;
        }

        /**
         *
         *
         * <pre>
         * namespace Shape
         * </pre>
         *
         * <code>string dim_param = 2;</code>
         */
        public java.lang.String getDimParam() {
          java.lang.Object ref = "";
          if (valueCase_ == 2) {
            ref = value_;
          }
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (valueCase_ == 2) {
              value_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * namespace Shape
         * </pre>
         *
         * <code>string dim_param = 2;</code>
         */
        public com.google.protobuf.ByteString getDimParamBytes() {
          java.lang.Object ref = "";
          if (valueCase_ == 2) {
            ref = value_;
          }
          if (ref instanceof String) {
            com.google.protobuf.ByteString b =
                com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
            if (valueCase_ == 2) {
              value_ = b;
            }
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * namespace Shape
         * </pre>
         *
         * <code>string dim_param = 2;</code>
         */
        public Builder setDimParam(java.lang.String value) {
          if (value == null) {
            throw new NullPointerException();
          }
          valueCase_ = 2;
          value_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * namespace Shape
         * </pre>
         *
         * <code>string dim_param = 2;</code>
         */
        public Builder clearDimParam() {
          if (valueCase_ == 2) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
          return this;
        }
        /**
         *
         *
         * <pre>
         * namespace Shape
         * </pre>
         *
         * <code>string dim_param = 2;</code>
         */
        public Builder setDimParamBytes(com.google.protobuf.ByteString value) {
          if (value == null) {
            throw new NullPointerException();
          }
          checkByteStringIsUtf8(value);
          valueCase_ = 2;
          value_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object denotation_ = "";
        /**
         *
         *
         * <pre>
         * Standard denotation can optionally be used to denote tensor
         * dimensions with standard semantic descriptions to ensure
         * that operations are applied to the correct axis of a tensor.
         * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
         * for pre-defined dimension denotations.
         * </pre>
         *
         * <code>string denotation = 3;</code>
         */
        public java.lang.String getDenotation() {
          java.lang.Object ref = denotation_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            denotation_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * Standard denotation can optionally be used to denote tensor
         * dimensions with standard semantic descriptions to ensure
         * that operations are applied to the correct axis of a tensor.
         * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
         * for pre-defined dimension denotations.
         * </pre>
         *
         * <code>string denotation = 3;</code>
         */
        public com.google.protobuf.ByteString getDenotationBytes() {
          java.lang.Object ref = denotation_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b =
                com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
            denotation_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * Standard denotation can optionally be used to denote tensor
         * dimensions with standard semantic descriptions to ensure
         * that operations are applied to the correct axis of a tensor.
         * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
         * for pre-defined dimension denotations.
         * </pre>
         *
         * <code>string denotation = 3;</code>
         */
        public Builder setDenotation(java.lang.String value) {
          if (value == null) {
            throw new NullPointerException();
          }

          denotation_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * Standard denotation can optionally be used to denote tensor
         * dimensions with standard semantic descriptions to ensure
         * that operations are applied to the correct axis of a tensor.
         * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
         * for pre-defined dimension denotations.
         * </pre>
         *
         * <code>string denotation = 3;</code>
         */
        public Builder clearDenotation() {

          denotation_ = getDefaultInstance().getDenotation();
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * Standard denotation can optionally be used to denote tensor
         * dimensions with standard semantic descriptions to ensure
         * that operations are applied to the correct axis of a tensor.
         * Refer to https://github.com/onnx/onnx/blob/main/docs/DimensionDenotation.md#denotation-definition
         * for pre-defined dimension denotations.
         * </pre>
         *
         * <code>string denotation = 3;</code>
         */
        public Builder setDenotationBytes(com.google.protobuf.ByteString value) {
          if (value == null) {
            throw new NullPointerException();
          }
          checkByteStringIsUtf8(value);

          denotation_ = value;
          onChanged();
          return this;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TensorShapeProto.Dimension)
      }

      // @@protoc_insertion_point(class_scope:onnx.TensorShapeProto.Dimension)
      private static final OnnxMl.TensorShapeProto.Dimension DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TensorShapeProto.Dimension();
      }

      public static OnnxMl.TensorShapeProto.Dimension getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Dimension> PARSER =
          new com.google.protobuf.AbstractParser<Dimension>() {
            @java.lang.Override
            public Dimension parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new Dimension(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<Dimension> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Dimension> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TensorShapeProto.Dimension getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    public static final int DIM_FIELD_NUMBER = 1;
    private java.util.List<OnnxMl.TensorShapeProto.Dimension> dim_;
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    public java.util.List<OnnxMl.TensorShapeProto.Dimension> getDimList() {
      return dim_;
    }
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    public java.util.List<? extends OnnxMl.TensorShapeProto.DimensionOrBuilder>
        getDimOrBuilderList() {
      return dim_;
    }
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    public int getDimCount() {
      return dim_.size();
    }
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    public OnnxMl.TensorShapeProto.Dimension getDim(int index) {
      return dim_.get(index);
    }
    /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
    public OnnxMl.TensorShapeProto.DimensionOrBuilder getDimOrBuilder(int index) {
      return dim_.get(index);
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      for (int i = 0; i < dim_.size(); i++) {
        output.writeMessage(1, dim_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < dim_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, dim_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.TensorShapeProto)) {
        return super.equals(obj);
      }
      OnnxMl.TensorShapeProto other = (OnnxMl.TensorShapeProto) obj;

      boolean result = true;
      result = result && getDimList().equals(other.getDimList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getDimCount() > 0) {
        hash = (37 * hash) + DIM_FIELD_NUMBER;
        hash = (53 * hash) + getDimList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.TensorShapeProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorShapeProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorShapeProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorShapeProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorShapeProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TensorShapeProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TensorShapeProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorShapeProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TensorShapeProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorShapeProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TensorShapeProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TensorShapeProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.TensorShapeProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Defines a tensor shape. A dimension can be either an integer value
     * or a symbolic variable. A symbolic variable represents an unknown
     * dimension.
     * </pre>
     *
     * Protobuf type {@code onnx.TensorShapeProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.TensorShapeProto)
        OnnxMl.TensorShapeProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TensorShapeProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TensorShapeProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TensorShapeProto.class, OnnxMl.TensorShapeProto.Builder.class);
      }

      // Construct using OnnxMlProto3.TensorShapeProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getDimFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (dimBuilder_ == null) {
          dim_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          dimBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_TensorShapeProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.TensorShapeProto getDefaultInstanceForType() {
        return OnnxMl.TensorShapeProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.TensorShapeProto build() {
        OnnxMl.TensorShapeProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.TensorShapeProto buildPartial() {
        OnnxMl.TensorShapeProto result = new OnnxMl.TensorShapeProto(this);
        int from_bitField0_ = bitField0_;
        if (dimBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            dim_ = java.util.Collections.unmodifiableList(dim_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.dim_ = dim_;
        } else {
          result.dim_ = dimBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.TensorShapeProto) {
          return mergeFrom((OnnxMl.TensorShapeProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.TensorShapeProto other) {
        if (other == OnnxMl.TensorShapeProto.getDefaultInstance()) return this;
        if (dimBuilder_ == null) {
          if (!other.dim_.isEmpty()) {
            if (dim_.isEmpty()) {
              dim_ = other.dim_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDimIsMutable();
              dim_.addAll(other.dim_);
            }
            onChanged();
          }
        } else {
          if (!other.dim_.isEmpty()) {
            if (dimBuilder_.isEmpty()) {
              dimBuilder_.dispose();
              dimBuilder_ = null;
              dim_ = other.dim_;
              bitField0_ = (bitField0_ & ~0x00000001);
              dimBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getDimFieldBuilder()
                      : null;
            } else {
              dimBuilder_.addAllMessages(other.dim_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.TensorShapeProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.TensorShapeProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private java.util.List<OnnxMl.TensorShapeProto.Dimension> dim_ =
          java.util.Collections.emptyList();

      private void ensureDimIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          dim_ = new java.util.ArrayList<OnnxMl.TensorShapeProto.Dimension>(dim_);
          bitField0_ |= 0x00000001;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorShapeProto.Dimension,
              OnnxMl.TensorShapeProto.Dimension.Builder,
              OnnxMl.TensorShapeProto.DimensionOrBuilder>
          dimBuilder_;

      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public java.util.List<OnnxMl.TensorShapeProto.Dimension> getDimList() {
        if (dimBuilder_ == null) {
          return java.util.Collections.unmodifiableList(dim_);
        } else {
          return dimBuilder_.getMessageList();
        }
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public int getDimCount() {
        if (dimBuilder_ == null) {
          return dim_.size();
        } else {
          return dimBuilder_.getCount();
        }
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public OnnxMl.TensorShapeProto.Dimension getDim(int index) {
        if (dimBuilder_ == null) {
          return dim_.get(index);
        } else {
          return dimBuilder_.getMessage(index);
        }
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder setDim(int index, OnnxMl.TensorShapeProto.Dimension value) {
        if (dimBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDimIsMutable();
          dim_.set(index, value);
          onChanged();
        } else {
          dimBuilder_.setMessage(index, value);
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder setDim(int index, OnnxMl.TensorShapeProto.Dimension.Builder builderForValue) {
        if (dimBuilder_ == null) {
          ensureDimIsMutable();
          dim_.set(index, builderForValue.build());
          onChanged();
        } else {
          dimBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder addDim(OnnxMl.TensorShapeProto.Dimension value) {
        if (dimBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDimIsMutable();
          dim_.add(value);
          onChanged();
        } else {
          dimBuilder_.addMessage(value);
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder addDim(int index, OnnxMl.TensorShapeProto.Dimension value) {
        if (dimBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDimIsMutable();
          dim_.add(index, value);
          onChanged();
        } else {
          dimBuilder_.addMessage(index, value);
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder addDim(OnnxMl.TensorShapeProto.Dimension.Builder builderForValue) {
        if (dimBuilder_ == null) {
          ensureDimIsMutable();
          dim_.add(builderForValue.build());
          onChanged();
        } else {
          dimBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder addDim(int index, OnnxMl.TensorShapeProto.Dimension.Builder builderForValue) {
        if (dimBuilder_ == null) {
          ensureDimIsMutable();
          dim_.add(index, builderForValue.build());
          onChanged();
        } else {
          dimBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder addAllDim(
          java.lang.Iterable<? extends OnnxMl.TensorShapeProto.Dimension> values) {
        if (dimBuilder_ == null) {
          ensureDimIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, dim_);
          onChanged();
        } else {
          dimBuilder_.addAllMessages(values);
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder clearDim() {
        if (dimBuilder_ == null) {
          dim_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          dimBuilder_.clear();
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public Builder removeDim(int index) {
        if (dimBuilder_ == null) {
          ensureDimIsMutable();
          dim_.remove(index);
          onChanged();
        } else {
          dimBuilder_.remove(index);
        }
        return this;
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public OnnxMl.TensorShapeProto.Dimension.Builder getDimBuilder(int index) {
        return getDimFieldBuilder().getBuilder(index);
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public OnnxMl.TensorShapeProto.DimensionOrBuilder getDimOrBuilder(int index) {
        if (dimBuilder_ == null) {
          return dim_.get(index);
        } else {
          return dimBuilder_.getMessageOrBuilder(index);
        }
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public java.util.List<? extends OnnxMl.TensorShapeProto.DimensionOrBuilder>
          getDimOrBuilderList() {
        if (dimBuilder_ != null) {
          return dimBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(dim_);
        }
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public OnnxMl.TensorShapeProto.Dimension.Builder addDimBuilder() {
        return getDimFieldBuilder()
            .addBuilder(OnnxMl.TensorShapeProto.Dimension.getDefaultInstance());
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public OnnxMl.TensorShapeProto.Dimension.Builder addDimBuilder(int index) {
        return getDimFieldBuilder()
            .addBuilder(index, OnnxMl.TensorShapeProto.Dimension.getDefaultInstance());
      }
      /** <code>repeated .onnx.TensorShapeProto.Dimension dim = 1;</code> */
      public java.util.List<OnnxMl.TensorShapeProto.Dimension.Builder> getDimBuilderList() {
        return getDimFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.TensorShapeProto.Dimension,
              OnnxMl.TensorShapeProto.Dimension.Builder,
              OnnxMl.TensorShapeProto.DimensionOrBuilder>
          getDimFieldBuilder() {
        if (dimBuilder_ == null) {
          dimBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.TensorShapeProto.Dimension,
                  OnnxMl.TensorShapeProto.Dimension.Builder,
                  OnnxMl.TensorShapeProto.DimensionOrBuilder>(
                  dim_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          dim_ = null;
        }
        return dimBuilder_;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.TensorShapeProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.TensorShapeProto)
    private static final OnnxMl.TensorShapeProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.TensorShapeProto();
    }

    public static OnnxMl.TensorShapeProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TensorShapeProto> PARSER =
        new com.google.protobuf.AbstractParser<TensorShapeProto>() {
          @java.lang.Override
          public TensorShapeProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new TensorShapeProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<TensorShapeProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<TensorShapeProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.TensorShapeProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface TypeProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.TypeProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The type of a tensor.
     * </pre>
     *
     * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
     */
    boolean hasTensorType();
    /**
     *
     *
     * <pre>
     * The type of a tensor.
     * </pre>
     *
     * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
     */
    OnnxMl.TypeProto.Tensor getTensorType();
    /**
     *
     *
     * <pre>
     * The type of a tensor.
     * </pre>
     *
     * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
     */
    OnnxMl.TypeProto.TensorOrBuilder getTensorTypeOrBuilder();

    /**
     *
     *
     * <pre>
     * The type of a sequence.
     * </pre>
     *
     * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
     */
    boolean hasSequenceType();
    /**
     *
     *
     * <pre>
     * The type of a sequence.
     * </pre>
     *
     * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
     */
    OnnxMl.TypeProto.Sequence getSequenceType();
    /**
     *
     *
     * <pre>
     * The type of a sequence.
     * </pre>
     *
     * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
     */
    OnnxMl.TypeProto.SequenceOrBuilder getSequenceTypeOrBuilder();

    /**
     *
     *
     * <pre>
     * The type of a map.
     * </pre>
     *
     * <code>.onnx.TypeProto.Map map_type = 5;</code>
     */
    boolean hasMapType();
    /**
     *
     *
     * <pre>
     * The type of a map.
     * </pre>
     *
     * <code>.onnx.TypeProto.Map map_type = 5;</code>
     */
    OnnxMl.TypeProto.Map getMapType();
    /**
     *
     *
     * <pre>
     * The type of a map.
     * </pre>
     *
     * <code>.onnx.TypeProto.Map map_type = 5;</code>
     */
    OnnxMl.TypeProto.MapOrBuilder getMapTypeOrBuilder();

    /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
    boolean hasSparseTensorType();
    /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
    OnnxMl.TypeProto.SparseTensor getSparseTensorType();
    /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
    OnnxMl.TypeProto.SparseTensorOrBuilder getSparseTensorTypeOrBuilder();

    /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
    boolean hasOpaqueType();
    /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
    OnnxMl.TypeProto.Opaque getOpaqueType();
    /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
    OnnxMl.TypeProto.OpaqueOrBuilder getOpaqueTypeOrBuilder();

    /**
     *
     *
     * <pre>
     * An optional denotation can be used to denote the whole
     * type with a standard semantic description as to what is
     * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
     * for pre-defined type denotations.
     * </pre>
     *
     * <code>string denotation = 6;</code>
     */
    java.lang.String getDenotation();
    /**
     *
     *
     * <pre>
     * An optional denotation can be used to denote the whole
     * type with a standard semantic description as to what is
     * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
     * for pre-defined type denotations.
     * </pre>
     *
     * <code>string denotation = 6;</code>
     */
    com.google.protobuf.ByteString getDenotationBytes();

    public OnnxMl.TypeProto.ValueCase getValueCase();
  }
  /**
   *
   *
   * <pre>
   * Types
   * The standard ONNX data types.
   * </pre>
   *
   * Protobuf type {@code onnx.TypeProto}
   */
  public static final class TypeProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.TypeProto)
      TypeProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use TypeProto.newBuilder() to construct.
    private TypeProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private TypeProto() {
      denotation_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private TypeProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                OnnxMl.TypeProto.Tensor.Builder subBuilder = null;
                if (valueCase_ == 1) {
                  subBuilder = ((OnnxMl.TypeProto.Tensor) value_).toBuilder();
                }
                value_ = input.readMessage(OnnxMl.TypeProto.Tensor.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom((OnnxMl.TypeProto.Tensor) value_);
                  value_ = subBuilder.buildPartial();
                }
                valueCase_ = 1;
                break;
              }
            case 34:
              {
                OnnxMl.TypeProto.Sequence.Builder subBuilder = null;
                if (valueCase_ == 4) {
                  subBuilder = ((OnnxMl.TypeProto.Sequence) value_).toBuilder();
                }
                value_ = input.readMessage(OnnxMl.TypeProto.Sequence.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom((OnnxMl.TypeProto.Sequence) value_);
                  value_ = subBuilder.buildPartial();
                }
                valueCase_ = 4;
                break;
              }
            case 42:
              {
                OnnxMl.TypeProto.Map.Builder subBuilder = null;
                if (valueCase_ == 5) {
                  subBuilder = ((OnnxMl.TypeProto.Map) value_).toBuilder();
                }
                value_ = input.readMessage(OnnxMl.TypeProto.Map.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom((OnnxMl.TypeProto.Map) value_);
                  value_ = subBuilder.buildPartial();
                }
                valueCase_ = 5;
                break;
              }
            case 50:
              {
                java.lang.String s = input.readStringRequireUtf8();

                denotation_ = s;
                break;
              }
            case 58:
              {
                OnnxMl.TypeProto.Opaque.Builder subBuilder = null;
                if (valueCase_ == 7) {
                  subBuilder = ((OnnxMl.TypeProto.Opaque) value_).toBuilder();
                }
                value_ = input.readMessage(OnnxMl.TypeProto.Opaque.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom((OnnxMl.TypeProto.Opaque) value_);
                  value_ = subBuilder.buildPartial();
                }
                valueCase_ = 7;
                break;
              }
            case 66:
              {
                OnnxMl.TypeProto.SparseTensor.Builder subBuilder = null;
                if (valueCase_ == 8) {
                  subBuilder = ((OnnxMl.TypeProto.SparseTensor) value_).toBuilder();
                }
                value_ =
                    input.readMessage(OnnxMl.TypeProto.SparseTensor.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom((OnnxMl.TypeProto.SparseTensor) value_);
                  value_ = subBuilder.buildPartial();
                }
                valueCase_ = 8;
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_TypeProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_TypeProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(OnnxMl.TypeProto.class, OnnxMl.TypeProto.Builder.class);
    }

    public interface TensorOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TypeProto.Tensor)
        com.google.protobuf.MessageOrBuilder {

      /**
       *
       *
       * <pre>
       * This field MUST NOT have the value of UNDEFINED
       * This field MUST have a valid TensorProto.DataType value
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>int32 elem_type = 1;</code>
       */
      int getElemType();

      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      boolean hasShape();
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      OnnxMl.TensorShapeProto getShape();
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      OnnxMl.TensorShapeProtoOrBuilder getShapeOrBuilder();
    }
    /** Protobuf type {@code onnx.TypeProto.Tensor} */
    public static final class Tensor extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TypeProto.Tensor)
        TensorOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use Tensor.newBuilder() to construct.
      private Tensor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private Tensor() {
        elemType_ = 0;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private Tensor(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  elemType_ = input.readInt32();
                  break;
                }
              case 18:
                {
                  OnnxMl.TensorShapeProto.Builder subBuilder = null;
                  if (shape_ != null) {
                    subBuilder = shape_.toBuilder();
                  }
                  shape_ = input.readMessage(OnnxMl.TensorShapeProto.parser(), extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(shape_);
                    shape_ = subBuilder.buildPartial();
                  }

                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TypeProto_Tensor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TypeProto_Tensor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TypeProto.Tensor.class, OnnxMl.TypeProto.Tensor.Builder.class);
      }

      public static final int ELEM_TYPE_FIELD_NUMBER = 1;
      private int elemType_;
      /**
       *
       *
       * <pre>
       * This field MUST NOT have the value of UNDEFINED
       * This field MUST have a valid TensorProto.DataType value
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>int32 elem_type = 1;</code>
       */
      public int getElemType() {
        return elemType_;
      }

      public static final int SHAPE_FIELD_NUMBER = 2;
      private OnnxMl.TensorShapeProto shape_;
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      public boolean hasShape() {
        return shape_ != null;
      }
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      public OnnxMl.TensorShapeProto getShape() {
        return shape_ == null ? OnnxMl.TensorShapeProto.getDefaultInstance() : shape_;
      }
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      public OnnxMl.TensorShapeProtoOrBuilder getShapeOrBuilder() {
        return getShape();
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (elemType_ != 0) {
          output.writeInt32(1, elemType_);
        }
        if (shape_ != null) {
          output.writeMessage(2, getShape());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (elemType_ != 0) {
          size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, elemType_);
        }
        if (shape_ != null) {
          size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getShape());
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TypeProto.Tensor)) {
          return super.equals(obj);
        }
        OnnxMl.TypeProto.Tensor other = (OnnxMl.TypeProto.Tensor) obj;

        boolean result = true;
        result = result && (getElemType() == other.getElemType());
        result = result && (hasShape() == other.hasShape());
        if (hasShape()) {
          result = result && getShape().equals(other.getShape());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + ELEM_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getElemType();
        if (hasShape()) {
          hash = (37 * hash) + SHAPE_FIELD_NUMBER;
          hash = (53 * hash) + getShape().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Tensor parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Tensor parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Tensor parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TypeProto.Tensor prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /** Protobuf type {@code onnx.TypeProto.Tensor} */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TypeProto.Tensor)
          OnnxMl.TypeProto.TensorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TypeProto_Tensor_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TypeProto_Tensor_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TypeProto.Tensor.class, OnnxMl.TypeProto.Tensor.Builder.class);
        }

        // Construct using OnnxMlProto3.TypeProto.Tensor.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          elemType_ = 0;

          if (shapeBuilder_ == null) {
            shape_ = null;
          } else {
            shape_ = null;
            shapeBuilder_ = null;
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TypeProto_Tensor_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Tensor getDefaultInstanceForType() {
          return OnnxMl.TypeProto.Tensor.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Tensor build() {
          OnnxMl.TypeProto.Tensor result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Tensor buildPartial() {
          OnnxMl.TypeProto.Tensor result = new OnnxMl.TypeProto.Tensor(this);
          result.elemType_ = elemType_;
          if (shapeBuilder_ == null) {
            result.shape_ = shape_;
          } else {
            result.shape_ = shapeBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TypeProto.Tensor) {
            return mergeFrom((OnnxMl.TypeProto.Tensor) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TypeProto.Tensor other) {
          if (other == OnnxMl.TypeProto.Tensor.getDefaultInstance()) return this;
          if (other.getElemType() != 0) {
            setElemType(other.getElemType());
          }
          if (other.hasShape()) {
            mergeShape(other.getShape());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TypeProto.Tensor parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TypeProto.Tensor) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int elemType_;
        /**
         *
         *
         * <pre>
         * This field MUST NOT have the value of UNDEFINED
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>int32 elem_type = 1;</code>
         */
        public int getElemType() {
          return elemType_;
        }
        /**
         *
         *
         * <pre>
         * This field MUST NOT have the value of UNDEFINED
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>int32 elem_type = 1;</code>
         */
        public Builder setElemType(int value) {

          elemType_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST NOT have the value of UNDEFINED
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>int32 elem_type = 1;</code>
         */
        public Builder clearElemType() {

          elemType_ = 0;
          onChanged();
          return this;
        }

        private OnnxMl.TensorShapeProto shape_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TensorShapeProto,
                OnnxMl.TensorShapeProto.Builder,
                OnnxMl.TensorShapeProtoOrBuilder>
            shapeBuilder_;
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public boolean hasShape() {
          return shapeBuilder_ != null || shape_ != null;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public OnnxMl.TensorShapeProto getShape() {
          if (shapeBuilder_ == null) {
            return shape_ == null ? OnnxMl.TensorShapeProto.getDefaultInstance() : shape_;
          } else {
            return shapeBuilder_.getMessage();
          }
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder setShape(OnnxMl.TensorShapeProto value) {
          if (shapeBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            shape_ = value;
            onChanged();
          } else {
            shapeBuilder_.setMessage(value);
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder setShape(OnnxMl.TensorShapeProto.Builder builderForValue) {
          if (shapeBuilder_ == null) {
            shape_ = builderForValue.build();
            onChanged();
          } else {
            shapeBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder mergeShape(OnnxMl.TensorShapeProto value) {
          if (shapeBuilder_ == null) {
            if (shape_ != null) {
              shape_ = OnnxMl.TensorShapeProto.newBuilder(shape_).mergeFrom(value).buildPartial();
            } else {
              shape_ = value;
            }
            onChanged();
          } else {
            shapeBuilder_.mergeFrom(value);
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder clearShape() {
          if (shapeBuilder_ == null) {
            shape_ = null;
            onChanged();
          } else {
            shape_ = null;
            shapeBuilder_ = null;
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public OnnxMl.TensorShapeProto.Builder getShapeBuilder() {

          onChanged();
          return getShapeFieldBuilder().getBuilder();
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public OnnxMl.TensorShapeProtoOrBuilder getShapeOrBuilder() {
          if (shapeBuilder_ != null) {
            return shapeBuilder_.getMessageOrBuilder();
          } else {
            return shape_ == null ? OnnxMl.TensorShapeProto.getDefaultInstance() : shape_;
          }
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TensorShapeProto,
                OnnxMl.TensorShapeProto.Builder,
                OnnxMl.TensorShapeProtoOrBuilder>
            getShapeFieldBuilder() {
          if (shapeBuilder_ == null) {
            shapeBuilder_ =
                new com.google.protobuf.SingleFieldBuilderV3<
                    OnnxMl.TensorShapeProto,
                    OnnxMl.TensorShapeProto.Builder,
                    OnnxMl.TensorShapeProtoOrBuilder>(
                    getShape(), getParentForChildren(), isClean());
            shape_ = null;
          }
          return shapeBuilder_;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TypeProto.Tensor)
      }

      // @@protoc_insertion_point(class_scope:onnx.TypeProto.Tensor)
      private static final OnnxMl.TypeProto.Tensor DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TypeProto.Tensor();
      }

      public static OnnxMl.TypeProto.Tensor getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Tensor> PARSER =
          new com.google.protobuf.AbstractParser<Tensor>() {
            @java.lang.Override
            public Tensor parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new Tensor(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<Tensor> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Tensor> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TypeProto.Tensor getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    public interface SequenceOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TypeProto.Sequence)
        com.google.protobuf.MessageOrBuilder {

      /**
       *
       *
       * <pre>
       * The type and optional shape of each element of the sequence.
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto elem_type = 1;</code>
       */
      boolean hasElemType();
      /**
       *
       *
       * <pre>
       * The type and optional shape of each element of the sequence.
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto elem_type = 1;</code>
       */
      OnnxMl.TypeProto getElemType();
      /**
       *
       *
       * <pre>
       * The type and optional shape of each element of the sequence.
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto elem_type = 1;</code>
       */
      OnnxMl.TypeProtoOrBuilder getElemTypeOrBuilder();
    }
    /**
     *
     *
     * <pre>
     * repeated T
     * </pre>
     *
     * Protobuf type {@code onnx.TypeProto.Sequence}
     */
    public static final class Sequence extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TypeProto.Sequence)
        SequenceOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use Sequence.newBuilder() to construct.
      private Sequence(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private Sequence() {}

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private Sequence(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10:
                {
                  OnnxMl.TypeProto.Builder subBuilder = null;
                  if (elemType_ != null) {
                    subBuilder = elemType_.toBuilder();
                  }
                  elemType_ = input.readMessage(OnnxMl.TypeProto.parser(), extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(elemType_);
                    elemType_ = subBuilder.buildPartial();
                  }

                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TypeProto_Sequence_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TypeProto_Sequence_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TypeProto.Sequence.class, OnnxMl.TypeProto.Sequence.Builder.class);
      }

      public static final int ELEM_TYPE_FIELD_NUMBER = 1;
      private OnnxMl.TypeProto elemType_;
      /**
       *
       *
       * <pre>
       * The type and optional shape of each element of the sequence.
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto elem_type = 1;</code>
       */
      public boolean hasElemType() {
        return elemType_ != null;
      }
      /**
       *
       *
       * <pre>
       * The type and optional shape of each element of the sequence.
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto elem_type = 1;</code>
       */
      public OnnxMl.TypeProto getElemType() {
        return elemType_ == null ? OnnxMl.TypeProto.getDefaultInstance() : elemType_;
      }
      /**
       *
       *
       * <pre>
       * The type and optional shape of each element of the sequence.
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto elem_type = 1;</code>
       */
      public OnnxMl.TypeProtoOrBuilder getElemTypeOrBuilder() {
        return getElemType();
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (elemType_ != null) {
          output.writeMessage(1, getElemType());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (elemType_ != null) {
          size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getElemType());
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TypeProto.Sequence)) {
          return super.equals(obj);
        }
        OnnxMl.TypeProto.Sequence other = (OnnxMl.TypeProto.Sequence) obj;

        boolean result = true;
        result = result && (hasElemType() == other.hasElemType());
        if (hasElemType()) {
          result = result && getElemType().equals(other.getElemType());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasElemType()) {
          hash = (37 * hash) + ELEM_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getElemType().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Sequence parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Sequence parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Sequence parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TypeProto.Sequence prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       *
       *
       * <pre>
       * repeated T
       * </pre>
       *
       * Protobuf type {@code onnx.TypeProto.Sequence}
       */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TypeProto.Sequence)
          OnnxMl.TypeProto.SequenceOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TypeProto_Sequence_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TypeProto_Sequence_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TypeProto.Sequence.class, OnnxMl.TypeProto.Sequence.Builder.class);
        }

        // Construct using OnnxMlProto3.TypeProto.Sequence.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (elemTypeBuilder_ == null) {
            elemType_ = null;
          } else {
            elemType_ = null;
            elemTypeBuilder_ = null;
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TypeProto_Sequence_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Sequence getDefaultInstanceForType() {
          return OnnxMl.TypeProto.Sequence.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Sequence build() {
          OnnxMl.TypeProto.Sequence result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Sequence buildPartial() {
          OnnxMl.TypeProto.Sequence result = new OnnxMl.TypeProto.Sequence(this);
          if (elemTypeBuilder_ == null) {
            result.elemType_ = elemType_;
          } else {
            result.elemType_ = elemTypeBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TypeProto.Sequence) {
            return mergeFrom((OnnxMl.TypeProto.Sequence) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TypeProto.Sequence other) {
          if (other == OnnxMl.TypeProto.Sequence.getDefaultInstance()) return this;
          if (other.hasElemType()) {
            mergeElemType(other.getElemType());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TypeProto.Sequence parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TypeProto.Sequence) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private OnnxMl.TypeProto elemType_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>
            elemTypeBuilder_;
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public boolean hasElemType() {
          return elemTypeBuilder_ != null || elemType_ != null;
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public OnnxMl.TypeProto getElemType() {
          if (elemTypeBuilder_ == null) {
            return elemType_ == null ? OnnxMl.TypeProto.getDefaultInstance() : elemType_;
          } else {
            return elemTypeBuilder_.getMessage();
          }
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public Builder setElemType(OnnxMl.TypeProto value) {
          if (elemTypeBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            elemType_ = value;
            onChanged();
          } else {
            elemTypeBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public Builder setElemType(OnnxMl.TypeProto.Builder builderForValue) {
          if (elemTypeBuilder_ == null) {
            elemType_ = builderForValue.build();
            onChanged();
          } else {
            elemTypeBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public Builder mergeElemType(OnnxMl.TypeProto value) {
          if (elemTypeBuilder_ == null) {
            if (elemType_ != null) {
              elemType_ = OnnxMl.TypeProto.newBuilder(elemType_).mergeFrom(value).buildPartial();
            } else {
              elemType_ = value;
            }
            onChanged();
          } else {
            elemTypeBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public Builder clearElemType() {
          if (elemTypeBuilder_ == null) {
            elemType_ = null;
            onChanged();
          } else {
            elemType_ = null;
            elemTypeBuilder_ = null;
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public OnnxMl.TypeProto.Builder getElemTypeBuilder() {

          onChanged();
          return getElemTypeFieldBuilder().getBuilder();
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        public OnnxMl.TypeProtoOrBuilder getElemTypeOrBuilder() {
          if (elemTypeBuilder_ != null) {
            return elemTypeBuilder_.getMessageOrBuilder();
          } else {
            return elemType_ == null ? OnnxMl.TypeProto.getDefaultInstance() : elemType_;
          }
        }
        /**
         *
         *
         * <pre>
         * The type and optional shape of each element of the sequence.
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto elem_type = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>
            getElemTypeFieldBuilder() {
          if (elemTypeBuilder_ == null) {
            elemTypeBuilder_ =
                new com.google.protobuf.SingleFieldBuilderV3<
                    OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>(
                    getElemType(), getParentForChildren(), isClean());
            elemType_ = null;
          }
          return elemTypeBuilder_;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TypeProto.Sequence)
      }

      // @@protoc_insertion_point(class_scope:onnx.TypeProto.Sequence)
      private static final OnnxMl.TypeProto.Sequence DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TypeProto.Sequence();
      }

      public static OnnxMl.TypeProto.Sequence getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Sequence> PARSER =
          new com.google.protobuf.AbstractParser<Sequence>() {
            @java.lang.Override
            public Sequence parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new Sequence(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<Sequence> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Sequence> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TypeProto.Sequence getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    public interface MapOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TypeProto.Map)
        com.google.protobuf.MessageOrBuilder {

      /**
       *
       *
       * <pre>
       * This field MUST have a valid TensorProto.DataType value
       * This field MUST be present for this version of the IR.
       * This field MUST refer to an integral type ([U]INT{8|16|32|64}) or STRING
       * </pre>
       *
       * <code>int32 key_type = 1;</code>
       */
      int getKeyType();

      /**
       *
       *
       * <pre>
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto value_type = 2;</code>
       */
      boolean hasValueType();
      /**
       *
       *
       * <pre>
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto value_type = 2;</code>
       */
      OnnxMl.TypeProto getValueType();
      /**
       *
       *
       * <pre>
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto value_type = 2;</code>
       */
      OnnxMl.TypeProtoOrBuilder getValueTypeOrBuilder();
    }
    /**
     *
     *
     * <pre>
     * map&lt;K,V&gt;
     * </pre>
     *
     * Protobuf type {@code onnx.TypeProto.Map}
     */
    public static final class Map extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TypeProto.Map)
        MapOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use Map.newBuilder() to construct.
      private Map(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private Map() {
        keyType_ = 0;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private Map(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  keyType_ = input.readInt32();
                  break;
                }
              case 18:
                {
                  OnnxMl.TypeProto.Builder subBuilder = null;
                  if (valueType_ != null) {
                    subBuilder = valueType_.toBuilder();
                  }
                  valueType_ = input.readMessage(OnnxMl.TypeProto.parser(), extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(valueType_);
                    valueType_ = subBuilder.buildPartial();
                  }

                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TypeProto_Map_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TypeProto_Map_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TypeProto.Map.class, OnnxMl.TypeProto.Map.Builder.class);
      }

      public static final int KEY_TYPE_FIELD_NUMBER = 1;
      private int keyType_;
      /**
       *
       *
       * <pre>
       * This field MUST have a valid TensorProto.DataType value
       * This field MUST be present for this version of the IR.
       * This field MUST refer to an integral type ([U]INT{8|16|32|64}) or STRING
       * </pre>
       *
       * <code>int32 key_type = 1;</code>
       */
      public int getKeyType() {
        return keyType_;
      }

      public static final int VALUE_TYPE_FIELD_NUMBER = 2;
      private OnnxMl.TypeProto valueType_;
      /**
       *
       *
       * <pre>
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto value_type = 2;</code>
       */
      public boolean hasValueType() {
        return valueType_ != null;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto value_type = 2;</code>
       */
      public OnnxMl.TypeProto getValueType() {
        return valueType_ == null ? OnnxMl.TypeProto.getDefaultInstance() : valueType_;
      }
      /**
       *
       *
       * <pre>
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>.onnx.TypeProto value_type = 2;</code>
       */
      public OnnxMl.TypeProtoOrBuilder getValueTypeOrBuilder() {
        return getValueType();
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (keyType_ != 0) {
          output.writeInt32(1, keyType_);
        }
        if (valueType_ != null) {
          output.writeMessage(2, getValueType());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (keyType_ != 0) {
          size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, keyType_);
        }
        if (valueType_ != null) {
          size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getValueType());
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TypeProto.Map)) {
          return super.equals(obj);
        }
        OnnxMl.TypeProto.Map other = (OnnxMl.TypeProto.Map) obj;

        boolean result = true;
        result = result && (getKeyType() == other.getKeyType());
        result = result && (hasValueType() == other.hasValueType());
        if (hasValueType()) {
          result = result && getValueType().equals(other.getValueType());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + KEY_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getKeyType();
        if (hasValueType()) {
          hash = (37 * hash) + VALUE_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getValueType().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TypeProto.Map parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Map parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Map parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Map parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Map parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Map parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Map parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Map parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Map parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Map parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Map parseFrom(com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Map parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TypeProto.Map prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       *
       *
       * <pre>
       * map&lt;K,V&gt;
       * </pre>
       *
       * Protobuf type {@code onnx.TypeProto.Map}
       */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TypeProto.Map)
          OnnxMl.TypeProto.MapOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TypeProto_Map_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TypeProto_Map_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TypeProto.Map.class, OnnxMl.TypeProto.Map.Builder.class);
        }

        // Construct using OnnxMlProto3.TypeProto.Map.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          keyType_ = 0;

          if (valueTypeBuilder_ == null) {
            valueType_ = null;
          } else {
            valueType_ = null;
            valueTypeBuilder_ = null;
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TypeProto_Map_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Map getDefaultInstanceForType() {
          return OnnxMl.TypeProto.Map.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Map build() {
          OnnxMl.TypeProto.Map result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Map buildPartial() {
          OnnxMl.TypeProto.Map result = new OnnxMl.TypeProto.Map(this);
          result.keyType_ = keyType_;
          if (valueTypeBuilder_ == null) {
            result.valueType_ = valueType_;
          } else {
            result.valueType_ = valueTypeBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TypeProto.Map) {
            return mergeFrom((OnnxMl.TypeProto.Map) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TypeProto.Map other) {
          if (other == OnnxMl.TypeProto.Map.getDefaultInstance()) return this;
          if (other.getKeyType() != 0) {
            setKeyType(other.getKeyType());
          }
          if (other.hasValueType()) {
            mergeValueType(other.getValueType());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TypeProto.Map parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TypeProto.Map) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int keyType_;
        /**
         *
         *
         * <pre>
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * This field MUST refer to an integral type ([U]INT{8|16|32|64}) or STRING
         * </pre>
         *
         * <code>int32 key_type = 1;</code>
         */
        public int getKeyType() {
          return keyType_;
        }
        /**
         *
         *
         * <pre>
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * This field MUST refer to an integral type ([U]INT{8|16|32|64}) or STRING
         * </pre>
         *
         * <code>int32 key_type = 1;</code>
         */
        public Builder setKeyType(int value) {

          keyType_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * This field MUST refer to an integral type ([U]INT{8|16|32|64}) or STRING
         * </pre>
         *
         * <code>int32 key_type = 1;</code>
         */
        public Builder clearKeyType() {

          keyType_ = 0;
          onChanged();
          return this;
        }

        private OnnxMl.TypeProto valueType_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>
            valueTypeBuilder_;
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public boolean hasValueType() {
          return valueTypeBuilder_ != null || valueType_ != null;
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public OnnxMl.TypeProto getValueType() {
          if (valueTypeBuilder_ == null) {
            return valueType_ == null ? OnnxMl.TypeProto.getDefaultInstance() : valueType_;
          } else {
            return valueTypeBuilder_.getMessage();
          }
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public Builder setValueType(OnnxMl.TypeProto value) {
          if (valueTypeBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            valueType_ = value;
            onChanged();
          } else {
            valueTypeBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public Builder setValueType(OnnxMl.TypeProto.Builder builderForValue) {
          if (valueTypeBuilder_ == null) {
            valueType_ = builderForValue.build();
            onChanged();
          } else {
            valueTypeBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public Builder mergeValueType(OnnxMl.TypeProto value) {
          if (valueTypeBuilder_ == null) {
            if (valueType_ != null) {
              valueType_ = OnnxMl.TypeProto.newBuilder(valueType_).mergeFrom(value).buildPartial();
            } else {
              valueType_ = value;
            }
            onChanged();
          } else {
            valueTypeBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public Builder clearValueType() {
          if (valueTypeBuilder_ == null) {
            valueType_ = null;
            onChanged();
          } else {
            valueType_ = null;
            valueTypeBuilder_ = null;
          }

          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public OnnxMl.TypeProto.Builder getValueTypeBuilder() {

          onChanged();
          return getValueTypeFieldBuilder().getBuilder();
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        public OnnxMl.TypeProtoOrBuilder getValueTypeOrBuilder() {
          if (valueTypeBuilder_ != null) {
            return valueTypeBuilder_.getMessageOrBuilder();
          } else {
            return valueType_ == null ? OnnxMl.TypeProto.getDefaultInstance() : valueType_;
          }
        }
        /**
         *
         *
         * <pre>
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>.onnx.TypeProto value_type = 2;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>
            getValueTypeFieldBuilder() {
          if (valueTypeBuilder_ == null) {
            valueTypeBuilder_ =
                new com.google.protobuf.SingleFieldBuilderV3<
                    OnnxMl.TypeProto, OnnxMl.TypeProto.Builder, OnnxMl.TypeProtoOrBuilder>(
                    getValueType(), getParentForChildren(), isClean());
            valueType_ = null;
          }
          return valueTypeBuilder_;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TypeProto.Map)
      }

      // @@protoc_insertion_point(class_scope:onnx.TypeProto.Map)
      private static final OnnxMl.TypeProto.Map DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TypeProto.Map();
      }

      public static OnnxMl.TypeProto.Map getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Map> PARSER =
          new com.google.protobuf.AbstractParser<Map>() {
            @java.lang.Override
            public Map parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new Map(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<Map> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Map> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TypeProto.Map getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    public interface SparseTensorOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TypeProto.SparseTensor)
        com.google.protobuf.MessageOrBuilder {

      /**
       *
       *
       * <pre>
       * This field MUST NOT have the value of UNDEFINED
       * This field MUST have a valid TensorProto.DataType value
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>int32 elem_type = 1;</code>
       */
      int getElemType();

      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      boolean hasShape();
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      OnnxMl.TensorShapeProto getShape();
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      OnnxMl.TensorShapeProtoOrBuilder getShapeOrBuilder();
    }
    /** Protobuf type {@code onnx.TypeProto.SparseTensor} */
    public static final class SparseTensor extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TypeProto.SparseTensor)
        SparseTensorOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use SparseTensor.newBuilder() to construct.
      private SparseTensor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private SparseTensor() {
        elemType_ = 0;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private SparseTensor(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  elemType_ = input.readInt32();
                  break;
                }
              case 18:
                {
                  OnnxMl.TensorShapeProto.Builder subBuilder = null;
                  if (shape_ != null) {
                    subBuilder = shape_.toBuilder();
                  }
                  shape_ = input.readMessage(OnnxMl.TensorShapeProto.parser(), extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(shape_);
                    shape_ = subBuilder.buildPartial();
                  }

                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TypeProto_SparseTensor_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TypeProto_SparseTensor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TypeProto.SparseTensor.class, OnnxMl.TypeProto.SparseTensor.Builder.class);
      }

      public static final int ELEM_TYPE_FIELD_NUMBER = 1;
      private int elemType_;
      /**
       *
       *
       * <pre>
       * This field MUST NOT have the value of UNDEFINED
       * This field MUST have a valid TensorProto.DataType value
       * This field MUST be present for this version of the IR.
       * </pre>
       *
       * <code>int32 elem_type = 1;</code>
       */
      public int getElemType() {
        return elemType_;
      }

      public static final int SHAPE_FIELD_NUMBER = 2;
      private OnnxMl.TensorShapeProto shape_;
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      public boolean hasShape() {
        return shape_ != null;
      }
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      public OnnxMl.TensorShapeProto getShape() {
        return shape_ == null ? OnnxMl.TensorShapeProto.getDefaultInstance() : shape_;
      }
      /** <code>.onnx.TensorShapeProto shape = 2;</code> */
      public OnnxMl.TensorShapeProtoOrBuilder getShapeOrBuilder() {
        return getShape();
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (elemType_ != 0) {
          output.writeInt32(1, elemType_);
        }
        if (shape_ != null) {
          output.writeMessage(2, getShape());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (elemType_ != 0) {
          size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, elemType_);
        }
        if (shape_ != null) {
          size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getShape());
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TypeProto.SparseTensor)) {
          return super.equals(obj);
        }
        OnnxMl.TypeProto.SparseTensor other = (OnnxMl.TypeProto.SparseTensor) obj;

        boolean result = true;
        result = result && (getElemType() == other.getElemType());
        result = result && (hasShape() == other.hasShape());
        if (hasShape()) {
          result = result && getShape().equals(other.getShape());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + ELEM_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getElemType();
        if (hasShape()) {
          hash = (37 * hash) + SHAPE_FIELD_NUMBER;
          hash = (53 * hash) + getShape().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.SparseTensor parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.SparseTensor parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(
          com.google.protobuf.CodedInputStream input) throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.SparseTensor parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TypeProto.SparseTensor prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /** Protobuf type {@code onnx.TypeProto.SparseTensor} */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TypeProto.SparseTensor)
          OnnxMl.TypeProto.SparseTensorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TypeProto_SparseTensor_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TypeProto_SparseTensor_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TypeProto.SparseTensor.class, OnnxMl.TypeProto.SparseTensor.Builder.class);
        }

        // Construct using OnnxMlProto3.TypeProto.SparseTensor.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          elemType_ = 0;

          if (shapeBuilder_ == null) {
            shape_ = null;
          } else {
            shape_ = null;
            shapeBuilder_ = null;
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TypeProto_SparseTensor_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.SparseTensor getDefaultInstanceForType() {
          return OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TypeProto.SparseTensor build() {
          OnnxMl.TypeProto.SparseTensor result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.SparseTensor buildPartial() {
          OnnxMl.TypeProto.SparseTensor result = new OnnxMl.TypeProto.SparseTensor(this);
          result.elemType_ = elemType_;
          if (shapeBuilder_ == null) {
            result.shape_ = shape_;
          } else {
            result.shape_ = shapeBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TypeProto.SparseTensor) {
            return mergeFrom((OnnxMl.TypeProto.SparseTensor) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TypeProto.SparseTensor other) {
          if (other == OnnxMl.TypeProto.SparseTensor.getDefaultInstance()) return this;
          if (other.getElemType() != 0) {
            setElemType(other.getElemType());
          }
          if (other.hasShape()) {
            mergeShape(other.getShape());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TypeProto.SparseTensor parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TypeProto.SparseTensor) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int elemType_;
        /**
         *
         *
         * <pre>
         * This field MUST NOT have the value of UNDEFINED
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>int32 elem_type = 1;</code>
         */
        public int getElemType() {
          return elemType_;
        }
        /**
         *
         *
         * <pre>
         * This field MUST NOT have the value of UNDEFINED
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>int32 elem_type = 1;</code>
         */
        public Builder setElemType(int value) {

          elemType_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * This field MUST NOT have the value of UNDEFINED
         * This field MUST have a valid TensorProto.DataType value
         * This field MUST be present for this version of the IR.
         * </pre>
         *
         * <code>int32 elem_type = 1;</code>
         */
        public Builder clearElemType() {

          elemType_ = 0;
          onChanged();
          return this;
        }

        private OnnxMl.TensorShapeProto shape_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TensorShapeProto,
                OnnxMl.TensorShapeProto.Builder,
                OnnxMl.TensorShapeProtoOrBuilder>
            shapeBuilder_;
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public boolean hasShape() {
          return shapeBuilder_ != null || shape_ != null;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public OnnxMl.TensorShapeProto getShape() {
          if (shapeBuilder_ == null) {
            return shape_ == null ? OnnxMl.TensorShapeProto.getDefaultInstance() : shape_;
          } else {
            return shapeBuilder_.getMessage();
          }
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder setShape(OnnxMl.TensorShapeProto value) {
          if (shapeBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            shape_ = value;
            onChanged();
          } else {
            shapeBuilder_.setMessage(value);
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder setShape(OnnxMl.TensorShapeProto.Builder builderForValue) {
          if (shapeBuilder_ == null) {
            shape_ = builderForValue.build();
            onChanged();
          } else {
            shapeBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder mergeShape(OnnxMl.TensorShapeProto value) {
          if (shapeBuilder_ == null) {
            if (shape_ != null) {
              shape_ = OnnxMl.TensorShapeProto.newBuilder(shape_).mergeFrom(value).buildPartial();
            } else {
              shape_ = value;
            }
            onChanged();
          } else {
            shapeBuilder_.mergeFrom(value);
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public Builder clearShape() {
          if (shapeBuilder_ == null) {
            shape_ = null;
            onChanged();
          } else {
            shape_ = null;
            shapeBuilder_ = null;
          }

          return this;
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public OnnxMl.TensorShapeProto.Builder getShapeBuilder() {

          onChanged();
          return getShapeFieldBuilder().getBuilder();
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        public OnnxMl.TensorShapeProtoOrBuilder getShapeOrBuilder() {
          if (shapeBuilder_ != null) {
            return shapeBuilder_.getMessageOrBuilder();
          } else {
            return shape_ == null ? OnnxMl.TensorShapeProto.getDefaultInstance() : shape_;
          }
        }
        /** <code>.onnx.TensorShapeProto shape = 2;</code> */
        private com.google.protobuf.SingleFieldBuilderV3<
                OnnxMl.TensorShapeProto,
                OnnxMl.TensorShapeProto.Builder,
                OnnxMl.TensorShapeProtoOrBuilder>
            getShapeFieldBuilder() {
          if (shapeBuilder_ == null) {
            shapeBuilder_ =
                new com.google.protobuf.SingleFieldBuilderV3<
                    OnnxMl.TensorShapeProto,
                    OnnxMl.TensorShapeProto.Builder,
                    OnnxMl.TensorShapeProtoOrBuilder>(
                    getShape(), getParentForChildren(), isClean());
            shape_ = null;
          }
          return shapeBuilder_;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TypeProto.SparseTensor)
      }

      // @@protoc_insertion_point(class_scope:onnx.TypeProto.SparseTensor)
      private static final OnnxMl.TypeProto.SparseTensor DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TypeProto.SparseTensor();
      }

      public static OnnxMl.TypeProto.SparseTensor getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<SparseTensor> PARSER =
          new com.google.protobuf.AbstractParser<SparseTensor>() {
            @java.lang.Override
            public SparseTensor parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new SparseTensor(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<SparseTensor> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<SparseTensor> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TypeProto.SparseTensor getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    public interface OpaqueOrBuilder
        extends
        // @@protoc_insertion_point(interface_extends:onnx.TypeProto.Opaque)
        com.google.protobuf.MessageOrBuilder {

      /**
       *
       *
       * <pre>
       * When missing, the domain is the same as the model's.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      java.lang.String getDomain();
      /**
       *
       *
       * <pre>
       * When missing, the domain is the same as the model's.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      com.google.protobuf.ByteString getDomainBytes();

      /**
       *
       *
       * <pre>
       * The name is optional but significant when provided.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      java.lang.String getName();
      /**
       *
       *
       * <pre>
       * The name is optional but significant when provided.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      com.google.protobuf.ByteString getNameBytes();
    }
    /** Protobuf type {@code onnx.TypeProto.Opaque} */
    public static final class Opaque extends com.google.protobuf.GeneratedMessageV3
        implements
        // @@protoc_insertion_point(message_implements:onnx.TypeProto.Opaque)
        OpaqueOrBuilder {
      private static final long serialVersionUID = 0L;
      // Use Opaque.newBuilder() to construct.
      private Opaque(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }

      private Opaque() {
        domain_ = "";
        name_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
        return this.unknownFields;
      }

      private Opaque(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10:
                {
                  java.lang.String s = input.readStringRequireUtf8();

                  domain_ = s;
                  break;
                }
              case 18:
                {
                  java.lang.String s = input.readStringRequireUtf8();

                  name_ = s;
                  break;
                }
              default:
                {
                  if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }

      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TypeProto_Opaque_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TypeProto_Opaque_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TypeProto.Opaque.class, OnnxMl.TypeProto.Opaque.Builder.class);
      }

      public static final int DOMAIN_FIELD_NUMBER = 1;
      private volatile java.lang.Object domain_;
      /**
       *
       *
       * <pre>
       * When missing, the domain is the same as the model's.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public java.lang.String getDomain() {
        java.lang.Object ref = domain_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          domain_ = s;
          return s;
        }
      }
      /**
       *
       *
       * <pre>
       * When missing, the domain is the same as the model's.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public com.google.protobuf.ByteString getDomainBytes() {
        java.lang.Object ref = domain_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          domain_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int NAME_FIELD_NUMBER = 2;
      private volatile java.lang.Object name_;
      /**
       *
       *
       * <pre>
       * The name is optional but significant when provided.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        }
      }
      /**
       *
       *
       * <pre>
       * The name is optional but significant when provided.
       * </pre>
       *
       * <code>string name = 2;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;

      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
        if (!getDomainBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, domain_);
        }
        if (!getNameBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getDomainBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, domain_);
        }
        if (!getNameBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
          return true;
        }
        if (!(obj instanceof OnnxMl.TypeProto.Opaque)) {
          return super.equals(obj);
        }
        OnnxMl.TypeProto.Opaque other = (OnnxMl.TypeProto.Opaque) obj;

        boolean result = true;
        result = result && getDomain().equals(other.getDomain());
        result = result && getName().equals(other.getName());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + DOMAIN_FIELD_NUMBER;
        hash = (53 * hash) + getDomain().hashCode();
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(
          java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(
          byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Opaque parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Opaque parseDelimitedFrom(
          java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
            PARSER, input, extensionRegistry);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
      }

      public static OnnxMl.TypeProto.Opaque parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
            PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() {
        return newBuilder();
      }

      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }

      public static Builder newBuilder(OnnxMl.TypeProto.Opaque prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }

      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /** Protobuf type {@code onnx.TypeProto.Opaque} */
      public static final class Builder
          extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
          implements
          // @@protoc_insertion_point(builder_implements:onnx.TypeProto.Opaque)
          OnnxMl.TypeProto.OpaqueOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
          return OnnxMl.internal_static_onnx_TypeProto_Opaque_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return OnnxMl.internal_static_onnx_TypeProto_Opaque_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  OnnxMl.TypeProto.Opaque.class, OnnxMl.TypeProto.Opaque.Builder.class);
        }

        // Construct using OnnxMlProto3.TypeProto.Opaque.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }

        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
        }

        @java.lang.Override
        public Builder clear() {
          super.clear();
          domain_ = "";

          name_ = "";

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
          return OnnxMl.internal_static_onnx_TypeProto_Opaque_descriptor;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Opaque getDefaultInstanceForType() {
          return OnnxMl.TypeProto.Opaque.getDefaultInstance();
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Opaque build() {
          OnnxMl.TypeProto.Opaque result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public OnnxMl.TypeProto.Opaque buildPartial() {
          OnnxMl.TypeProto.Opaque result = new OnnxMl.TypeProto.Opaque(this);
          result.domain_ = domain_;
          result.name_ = name_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }

        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }

        @java.lang.Override
        public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }

        @java.lang.Override
        public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }

        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index,
            java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }

        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof OnnxMl.TypeProto.Opaque) {
            return mergeFrom((OnnxMl.TypeProto.Opaque) other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(OnnxMl.TypeProto.Opaque other) {
          if (other == OnnxMl.TypeProto.Opaque.getDefaultInstance()) return this;
          if (!other.getDomain().isEmpty()) {
            domain_ = other.domain_;
            onChanged();
          }
          if (!other.getName().isEmpty()) {
            name_ = other.name_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          OnnxMl.TypeProto.Opaque parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (OnnxMl.TypeProto.Opaque) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object domain_ = "";
        /**
         *
         *
         * <pre>
         * When missing, the domain is the same as the model's.
         * </pre>
         *
         * <code>string domain = 1;</code>
         */
        public java.lang.String getDomain() {
          java.lang.Object ref = domain_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            domain_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * When missing, the domain is the same as the model's.
         * </pre>
         *
         * <code>string domain = 1;</code>
         */
        public com.google.protobuf.ByteString getDomainBytes() {
          java.lang.Object ref = domain_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b =
                com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
            domain_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * When missing, the domain is the same as the model's.
         * </pre>
         *
         * <code>string domain = 1;</code>
         */
        public Builder setDomain(java.lang.String value) {
          if (value == null) {
            throw new NullPointerException();
          }

          domain_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * When missing, the domain is the same as the model's.
         * </pre>
         *
         * <code>string domain = 1;</code>
         */
        public Builder clearDomain() {

          domain_ = getDefaultInstance().getDomain();
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * When missing, the domain is the same as the model's.
         * </pre>
         *
         * <code>string domain = 1;</code>
         */
        public Builder setDomainBytes(com.google.protobuf.ByteString value) {
          if (value == null) {
            throw new NullPointerException();
          }
          checkByteStringIsUtf8(value);

          domain_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object name_ = "";
        /**
         *
         *
         * <pre>
         * The name is optional but significant when provided.
         * </pre>
         *
         * <code>string name = 2;</code>
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * The name is optional but significant when provided.
         * </pre>
         *
         * <code>string name = 2;</code>
         */
        public com.google.protobuf.ByteString getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b =
                com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         *
         *
         * <pre>
         * The name is optional but significant when provided.
         * </pre>
         *
         * <code>string name = 2;</code>
         */
        public Builder setName(java.lang.String value) {
          if (value == null) {
            throw new NullPointerException();
          }

          name_ = value;
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * The name is optional but significant when provided.
         * </pre>
         *
         * <code>string name = 2;</code>
         */
        public Builder clearName() {

          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         *
         *
         * <pre>
         * The name is optional but significant when provided.
         * </pre>
         *
         * <code>string name = 2;</code>
         */
        public Builder setNameBytes(com.google.protobuf.ByteString value) {
          if (value == null) {
            throw new NullPointerException();
          }
          checkByteStringIsUtf8(value);

          name_ = value;
          onChanged();
          return this;
        }

        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }

        // @@protoc_insertion_point(builder_scope:onnx.TypeProto.Opaque)
      }

      // @@protoc_insertion_point(class_scope:onnx.TypeProto.Opaque)
      private static final OnnxMl.TypeProto.Opaque DEFAULT_INSTANCE;

      static {
        DEFAULT_INSTANCE = new OnnxMl.TypeProto.Opaque();
      }

      public static OnnxMl.TypeProto.Opaque getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Opaque> PARSER =
          new com.google.protobuf.AbstractParser<Opaque>() {
            @java.lang.Override
            public Opaque parsePartialFrom(
                com.google.protobuf.CodedInputStream input,
                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException {
              return new Opaque(input, extensionRegistry);
            }
          };

      public static com.google.protobuf.Parser<Opaque> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Opaque> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public OnnxMl.TypeProto.Opaque getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }

    private int valueCase_ = 0;
    private java.lang.Object value_;

    public enum ValueCase implements com.google.protobuf.Internal.EnumLite {
      TENSOR_TYPE(1),
      SEQUENCE_TYPE(4),
      MAP_TYPE(5),
      SPARSE_TENSOR_TYPE(8),
      OPAQUE_TYPE(7),
      VALUE_NOT_SET(0);
      private final int value;

      private ValueCase(int value) {
        this.value = value;
      }
      /** @deprecated Use {@link #forNumber(int)} instead. */
      @java.lang.Deprecated
      public static ValueCase valueOf(int value) {
        return forNumber(value);
      }

      public static ValueCase forNumber(int value) {
        switch (value) {
          case 1:
            return TENSOR_TYPE;
          case 4:
            return SEQUENCE_TYPE;
          case 5:
            return MAP_TYPE;
          case 8:
            return SPARSE_TENSOR_TYPE;
          case 7:
            return OPAQUE_TYPE;
          case 0:
            return VALUE_NOT_SET;
          default:
            return null;
        }
      }

      public int getNumber() {
        return this.value;
      }
    };

    public ValueCase getValueCase() {
      return ValueCase.forNumber(valueCase_);
    }

    public static final int TENSOR_TYPE_FIELD_NUMBER = 1;
    /**
     *
     *
     * <pre>
     * The type of a tensor.
     * </pre>
     *
     * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
     */
    public boolean hasTensorType() {
      return valueCase_ == 1;
    }
    /**
     *
     *
     * <pre>
     * The type of a tensor.
     * </pre>
     *
     * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
     */
    public OnnxMl.TypeProto.Tensor getTensorType() {
      if (valueCase_ == 1) {
        return (OnnxMl.TypeProto.Tensor) value_;
      }
      return OnnxMl.TypeProto.Tensor.getDefaultInstance();
    }
    /**
     *
     *
     * <pre>
     * The type of a tensor.
     * </pre>
     *
     * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
     */
    public OnnxMl.TypeProto.TensorOrBuilder getTensorTypeOrBuilder() {
      if (valueCase_ == 1) {
        return (OnnxMl.TypeProto.Tensor) value_;
      }
      return OnnxMl.TypeProto.Tensor.getDefaultInstance();
    }

    public static final int SEQUENCE_TYPE_FIELD_NUMBER = 4;
    /**
     *
     *
     * <pre>
     * The type of a sequence.
     * </pre>
     *
     * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
     */
    public boolean hasSequenceType() {
      return valueCase_ == 4;
    }
    /**
     *
     *
     * <pre>
     * The type of a sequence.
     * </pre>
     *
     * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
     */
    public OnnxMl.TypeProto.Sequence getSequenceType() {
      if (valueCase_ == 4) {
        return (OnnxMl.TypeProto.Sequence) value_;
      }
      return OnnxMl.TypeProto.Sequence.getDefaultInstance();
    }
    /**
     *
     *
     * <pre>
     * The type of a sequence.
     * </pre>
     *
     * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
     */
    public OnnxMl.TypeProto.SequenceOrBuilder getSequenceTypeOrBuilder() {
      if (valueCase_ == 4) {
        return (OnnxMl.TypeProto.Sequence) value_;
      }
      return OnnxMl.TypeProto.Sequence.getDefaultInstance();
    }

    public static final int MAP_TYPE_FIELD_NUMBER = 5;
    /**
     *
     *
     * <pre>
     * The type of a map.
     * </pre>
     *
     * <code>.onnx.TypeProto.Map map_type = 5;</code>
     */
    public boolean hasMapType() {
      return valueCase_ == 5;
    }
    /**
     *
     *
     * <pre>
     * The type of a map.
     * </pre>
     *
     * <code>.onnx.TypeProto.Map map_type = 5;</code>
     */
    public OnnxMl.TypeProto.Map getMapType() {
      if (valueCase_ == 5) {
        return (OnnxMl.TypeProto.Map) value_;
      }
      return OnnxMl.TypeProto.Map.getDefaultInstance();
    }
    /**
     *
     *
     * <pre>
     * The type of a map.
     * </pre>
     *
     * <code>.onnx.TypeProto.Map map_type = 5;</code>
     */
    public OnnxMl.TypeProto.MapOrBuilder getMapTypeOrBuilder() {
      if (valueCase_ == 5) {
        return (OnnxMl.TypeProto.Map) value_;
      }
      return OnnxMl.TypeProto.Map.getDefaultInstance();
    }

    public static final int SPARSE_TENSOR_TYPE_FIELD_NUMBER = 8;
    /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
    public boolean hasSparseTensorType() {
      return valueCase_ == 8;
    }
    /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
    public OnnxMl.TypeProto.SparseTensor getSparseTensorType() {
      if (valueCase_ == 8) {
        return (OnnxMl.TypeProto.SparseTensor) value_;
      }
      return OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
    }
    /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
    public OnnxMl.TypeProto.SparseTensorOrBuilder getSparseTensorTypeOrBuilder() {
      if (valueCase_ == 8) {
        return (OnnxMl.TypeProto.SparseTensor) value_;
      }
      return OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
    }

    public static final int OPAQUE_TYPE_FIELD_NUMBER = 7;
    /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
    public boolean hasOpaqueType() {
      return valueCase_ == 7;
    }
    /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
    public OnnxMl.TypeProto.Opaque getOpaqueType() {
      if (valueCase_ == 7) {
        return (OnnxMl.TypeProto.Opaque) value_;
      }
      return OnnxMl.TypeProto.Opaque.getDefaultInstance();
    }
    /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
    public OnnxMl.TypeProto.OpaqueOrBuilder getOpaqueTypeOrBuilder() {
      if (valueCase_ == 7) {
        return (OnnxMl.TypeProto.Opaque) value_;
      }
      return OnnxMl.TypeProto.Opaque.getDefaultInstance();
    }

    public static final int DENOTATION_FIELD_NUMBER = 6;
    private volatile java.lang.Object denotation_;
    /**
     *
     *
     * <pre>
     * An optional denotation can be used to denote the whole
     * type with a standard semantic description as to what is
     * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
     * for pre-defined type denotations.
     * </pre>
     *
     * <code>string denotation = 6;</code>
     */
    public java.lang.String getDenotation() {
      java.lang.Object ref = denotation_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        denotation_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * An optional denotation can be used to denote the whole
     * type with a standard semantic description as to what is
     * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
     * for pre-defined type denotations.
     * </pre>
     *
     * <code>string denotation = 6;</code>
     */
    public com.google.protobuf.ByteString getDenotationBytes() {
      java.lang.Object ref = denotation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        denotation_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (valueCase_ == 1) {
        output.writeMessage(1, (OnnxMl.TypeProto.Tensor) value_);
      }
      if (valueCase_ == 4) {
        output.writeMessage(4, (OnnxMl.TypeProto.Sequence) value_);
      }
      if (valueCase_ == 5) {
        output.writeMessage(5, (OnnxMl.TypeProto.Map) value_);
      }
      if (!getDenotationBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, denotation_);
      }
      if (valueCase_ == 7) {
        output.writeMessage(7, (OnnxMl.TypeProto.Opaque) value_);
      }
      if (valueCase_ == 8) {
        output.writeMessage(8, (OnnxMl.TypeProto.SparseTensor) value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (valueCase_ == 1) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                1, (OnnxMl.TypeProto.Tensor) value_);
      }
      if (valueCase_ == 4) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                4, (OnnxMl.TypeProto.Sequence) value_);
      }
      if (valueCase_ == 5) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                5, (OnnxMl.TypeProto.Map) value_);
      }
      if (!getDenotationBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, denotation_);
      }
      if (valueCase_ == 7) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                7, (OnnxMl.TypeProto.Opaque) value_);
      }
      if (valueCase_ == 8) {
        size +=
            com.google.protobuf.CodedOutputStream.computeMessageSize(
                8, (OnnxMl.TypeProto.SparseTensor) value_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.TypeProto)) {
        return super.equals(obj);
      }
      OnnxMl.TypeProto other = (OnnxMl.TypeProto) obj;

      boolean result = true;
      result = result && getDenotation().equals(other.getDenotation());
      result = result && getValueCase().equals(other.getValueCase());
      if (!result) return false;
      switch (valueCase_) {
        case 1:
          result = result && getTensorType().equals(other.getTensorType());
          break;
        case 4:
          result = result && getSequenceType().equals(other.getSequenceType());
          break;
        case 5:
          result = result && getMapType().equals(other.getMapType());
          break;
        case 8:
          result = result && getSparseTensorType().equals(other.getSparseTensorType());
          break;
        case 7:
          result = result && getOpaqueType().equals(other.getOpaqueType());
          break;
        case 0:
        default:
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + DENOTATION_FIELD_NUMBER;
      hash = (53 * hash) + getDenotation().hashCode();
      switch (valueCase_) {
        case 1:
          hash = (37 * hash) + TENSOR_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getTensorType().hashCode();
          break;
        case 4:
          hash = (37 * hash) + SEQUENCE_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getSequenceType().hashCode();
          break;
        case 5:
          hash = (37 * hash) + MAP_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getMapType().hashCode();
          break;
        case 8:
          hash = (37 * hash) + SPARSE_TENSOR_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getSparseTensorType().hashCode();
          break;
        case 7:
          hash = (37 * hash) + OPAQUE_TYPE_FIELD_NUMBER;
          hash = (53 * hash) + getOpaqueType().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.TypeProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TypeProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TypeProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TypeProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TypeProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.TypeProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.TypeProto parseFrom(java.io.InputStream input) throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TypeProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TypeProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.TypeProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.TypeProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.TypeProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.TypeProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Types
     * The standard ONNX data types.
     * </pre>
     *
     * Protobuf type {@code onnx.TypeProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.TypeProto)
        OnnxMl.TypeProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_TypeProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_TypeProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.TypeProto.class, OnnxMl.TypeProto.Builder.class);
      }

      // Construct using OnnxMlProto3.TypeProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        denotation_ = "";

        valueCase_ = 0;
        value_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_TypeProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.TypeProto getDefaultInstanceForType() {
        return OnnxMl.TypeProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.TypeProto build() {
        OnnxMl.TypeProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.TypeProto buildPartial() {
        OnnxMl.TypeProto result = new OnnxMl.TypeProto(this);
        if (valueCase_ == 1) {
          if (tensorTypeBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = tensorTypeBuilder_.build();
          }
        }
        if (valueCase_ == 4) {
          if (sequenceTypeBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = sequenceTypeBuilder_.build();
          }
        }
        if (valueCase_ == 5) {
          if (mapTypeBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = mapTypeBuilder_.build();
          }
        }
        if (valueCase_ == 8) {
          if (sparseTensorTypeBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = sparseTensorTypeBuilder_.build();
          }
        }
        if (valueCase_ == 7) {
          if (opaqueTypeBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = opaqueTypeBuilder_.build();
          }
        }
        result.denotation_ = denotation_;
        result.valueCase_ = valueCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.TypeProto) {
          return mergeFrom((OnnxMl.TypeProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.TypeProto other) {
        if (other == OnnxMl.TypeProto.getDefaultInstance()) return this;
        if (!other.getDenotation().isEmpty()) {
          denotation_ = other.denotation_;
          onChanged();
        }
        switch (other.getValueCase()) {
          case TENSOR_TYPE:
            {
              mergeTensorType(other.getTensorType());
              break;
            }
          case SEQUENCE_TYPE:
            {
              mergeSequenceType(other.getSequenceType());
              break;
            }
          case MAP_TYPE:
            {
              mergeMapType(other.getMapType());
              break;
            }
          case SPARSE_TENSOR_TYPE:
            {
              mergeSparseTensorType(other.getSparseTensorType());
              break;
            }
          case OPAQUE_TYPE:
            {
              mergeOpaqueType(other.getOpaqueType());
              break;
            }
          case VALUE_NOT_SET:
            {
              break;
            }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.TypeProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.TypeProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int valueCase_ = 0;
      private java.lang.Object value_;

      public ValueCase getValueCase() {
        return ValueCase.forNumber(valueCase_);
      }

      public Builder clearValue() {
        valueCase_ = 0;
        value_ = null;
        onChanged();
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Tensor,
              OnnxMl.TypeProto.Tensor.Builder,
              OnnxMl.TypeProto.TensorOrBuilder>
          tensorTypeBuilder_;
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public boolean hasTensorType() {
        return valueCase_ == 1;
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public OnnxMl.TypeProto.Tensor getTensorType() {
        if (tensorTypeBuilder_ == null) {
          if (valueCase_ == 1) {
            return (OnnxMl.TypeProto.Tensor) value_;
          }
          return OnnxMl.TypeProto.Tensor.getDefaultInstance();
        } else {
          if (valueCase_ == 1) {
            return tensorTypeBuilder_.getMessage();
          }
          return OnnxMl.TypeProto.Tensor.getDefaultInstance();
        }
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public Builder setTensorType(OnnxMl.TypeProto.Tensor value) {
        if (tensorTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          tensorTypeBuilder_.setMessage(value);
        }
        valueCase_ = 1;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public Builder setTensorType(OnnxMl.TypeProto.Tensor.Builder builderForValue) {
        if (tensorTypeBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          tensorTypeBuilder_.setMessage(builderForValue.build());
        }
        valueCase_ = 1;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public Builder mergeTensorType(OnnxMl.TypeProto.Tensor value) {
        if (tensorTypeBuilder_ == null) {
          if (valueCase_ == 1 && value_ != OnnxMl.TypeProto.Tensor.getDefaultInstance()) {
            value_ =
                OnnxMl.TypeProto.Tensor.newBuilder((OnnxMl.TypeProto.Tensor) value_)
                    .mergeFrom(value)
                    .buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          if (valueCase_ == 1) {
            tensorTypeBuilder_.mergeFrom(value);
          }
          tensorTypeBuilder_.setMessage(value);
        }
        valueCase_ = 1;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public Builder clearTensorType() {
        if (tensorTypeBuilder_ == null) {
          if (valueCase_ == 1) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
        } else {
          if (valueCase_ == 1) {
            valueCase_ = 0;
            value_ = null;
          }
          tensorTypeBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public OnnxMl.TypeProto.Tensor.Builder getTensorTypeBuilder() {
        return getTensorTypeFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      public OnnxMl.TypeProto.TensorOrBuilder getTensorTypeOrBuilder() {
        if ((valueCase_ == 1) && (tensorTypeBuilder_ != null)) {
          return tensorTypeBuilder_.getMessageOrBuilder();
        } else {
          if (valueCase_ == 1) {
            return (OnnxMl.TypeProto.Tensor) value_;
          }
          return OnnxMl.TypeProto.Tensor.getDefaultInstance();
        }
      }
      /**
       *
       *
       * <pre>
       * The type of a tensor.
       * </pre>
       *
       * <code>.onnx.TypeProto.Tensor tensor_type = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Tensor,
              OnnxMl.TypeProto.Tensor.Builder,
              OnnxMl.TypeProto.TensorOrBuilder>
          getTensorTypeFieldBuilder() {
        if (tensorTypeBuilder_ == null) {
          if (!(valueCase_ == 1)) {
            value_ = OnnxMl.TypeProto.Tensor.getDefaultInstance();
          }
          tensorTypeBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TypeProto.Tensor,
                  OnnxMl.TypeProto.Tensor.Builder,
                  OnnxMl.TypeProto.TensorOrBuilder>(
                  (OnnxMl.TypeProto.Tensor) value_, getParentForChildren(), isClean());
          value_ = null;
        }
        valueCase_ = 1;
        onChanged();
        ;
        return tensorTypeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Sequence,
              OnnxMl.TypeProto.Sequence.Builder,
              OnnxMl.TypeProto.SequenceOrBuilder>
          sequenceTypeBuilder_;
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public boolean hasSequenceType() {
        return valueCase_ == 4;
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public OnnxMl.TypeProto.Sequence getSequenceType() {
        if (sequenceTypeBuilder_ == null) {
          if (valueCase_ == 4) {
            return (OnnxMl.TypeProto.Sequence) value_;
          }
          return OnnxMl.TypeProto.Sequence.getDefaultInstance();
        } else {
          if (valueCase_ == 4) {
            return sequenceTypeBuilder_.getMessage();
          }
          return OnnxMl.TypeProto.Sequence.getDefaultInstance();
        }
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public Builder setSequenceType(OnnxMl.TypeProto.Sequence value) {
        if (sequenceTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          sequenceTypeBuilder_.setMessage(value);
        }
        valueCase_ = 4;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public Builder setSequenceType(OnnxMl.TypeProto.Sequence.Builder builderForValue) {
        if (sequenceTypeBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          sequenceTypeBuilder_.setMessage(builderForValue.build());
        }
        valueCase_ = 4;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public Builder mergeSequenceType(OnnxMl.TypeProto.Sequence value) {
        if (sequenceTypeBuilder_ == null) {
          if (valueCase_ == 4 && value_ != OnnxMl.TypeProto.Sequence.getDefaultInstance()) {
            value_ =
                OnnxMl.TypeProto.Sequence.newBuilder((OnnxMl.TypeProto.Sequence) value_)
                    .mergeFrom(value)
                    .buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          if (valueCase_ == 4) {
            sequenceTypeBuilder_.mergeFrom(value);
          }
          sequenceTypeBuilder_.setMessage(value);
        }
        valueCase_ = 4;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public Builder clearSequenceType() {
        if (sequenceTypeBuilder_ == null) {
          if (valueCase_ == 4) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
        } else {
          if (valueCase_ == 4) {
            valueCase_ = 0;
            value_ = null;
          }
          sequenceTypeBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public OnnxMl.TypeProto.Sequence.Builder getSequenceTypeBuilder() {
        return getSequenceTypeFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      public OnnxMl.TypeProto.SequenceOrBuilder getSequenceTypeOrBuilder() {
        if ((valueCase_ == 4) && (sequenceTypeBuilder_ != null)) {
          return sequenceTypeBuilder_.getMessageOrBuilder();
        } else {
          if (valueCase_ == 4) {
            return (OnnxMl.TypeProto.Sequence) value_;
          }
          return OnnxMl.TypeProto.Sequence.getDefaultInstance();
        }
      }
      /**
       *
       *
       * <pre>
       * The type of a sequence.
       * </pre>
       *
       * <code>.onnx.TypeProto.Sequence sequence_type = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Sequence,
              OnnxMl.TypeProto.Sequence.Builder,
              OnnxMl.TypeProto.SequenceOrBuilder>
          getSequenceTypeFieldBuilder() {
        if (sequenceTypeBuilder_ == null) {
          if (!(valueCase_ == 4)) {
            value_ = OnnxMl.TypeProto.Sequence.getDefaultInstance();
          }
          sequenceTypeBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TypeProto.Sequence,
                  OnnxMl.TypeProto.Sequence.Builder,
                  OnnxMl.TypeProto.SequenceOrBuilder>(
                  (OnnxMl.TypeProto.Sequence) value_, getParentForChildren(), isClean());
          value_ = null;
        }
        valueCase_ = 4;
        onChanged();
        ;
        return sequenceTypeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Map, OnnxMl.TypeProto.Map.Builder, OnnxMl.TypeProto.MapOrBuilder>
          mapTypeBuilder_;
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public boolean hasMapType() {
        return valueCase_ == 5;
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public OnnxMl.TypeProto.Map getMapType() {
        if (mapTypeBuilder_ == null) {
          if (valueCase_ == 5) {
            return (OnnxMl.TypeProto.Map) value_;
          }
          return OnnxMl.TypeProto.Map.getDefaultInstance();
        } else {
          if (valueCase_ == 5) {
            return mapTypeBuilder_.getMessage();
          }
          return OnnxMl.TypeProto.Map.getDefaultInstance();
        }
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public Builder setMapType(OnnxMl.TypeProto.Map value) {
        if (mapTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          mapTypeBuilder_.setMessage(value);
        }
        valueCase_ = 5;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public Builder setMapType(OnnxMl.TypeProto.Map.Builder builderForValue) {
        if (mapTypeBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          mapTypeBuilder_.setMessage(builderForValue.build());
        }
        valueCase_ = 5;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public Builder mergeMapType(OnnxMl.TypeProto.Map value) {
        if (mapTypeBuilder_ == null) {
          if (valueCase_ == 5 && value_ != OnnxMl.TypeProto.Map.getDefaultInstance()) {
            value_ =
                OnnxMl.TypeProto.Map.newBuilder((OnnxMl.TypeProto.Map) value_)
                    .mergeFrom(value)
                    .buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          if (valueCase_ == 5) {
            mapTypeBuilder_.mergeFrom(value);
          }
          mapTypeBuilder_.setMessage(value);
        }
        valueCase_ = 5;
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public Builder clearMapType() {
        if (mapTypeBuilder_ == null) {
          if (valueCase_ == 5) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
        } else {
          if (valueCase_ == 5) {
            valueCase_ = 0;
            value_ = null;
          }
          mapTypeBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public OnnxMl.TypeProto.Map.Builder getMapTypeBuilder() {
        return getMapTypeFieldBuilder().getBuilder();
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      public OnnxMl.TypeProto.MapOrBuilder getMapTypeOrBuilder() {
        if ((valueCase_ == 5) && (mapTypeBuilder_ != null)) {
          return mapTypeBuilder_.getMessageOrBuilder();
        } else {
          if (valueCase_ == 5) {
            return (OnnxMl.TypeProto.Map) value_;
          }
          return OnnxMl.TypeProto.Map.getDefaultInstance();
        }
      }
      /**
       *
       *
       * <pre>
       * The type of a map.
       * </pre>
       *
       * <code>.onnx.TypeProto.Map map_type = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Map, OnnxMl.TypeProto.Map.Builder, OnnxMl.TypeProto.MapOrBuilder>
          getMapTypeFieldBuilder() {
        if (mapTypeBuilder_ == null) {
          if (!(valueCase_ == 5)) {
            value_ = OnnxMl.TypeProto.Map.getDefaultInstance();
          }
          mapTypeBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TypeProto.Map,
                  OnnxMl.TypeProto.Map.Builder,
                  OnnxMl.TypeProto.MapOrBuilder>(
                  (OnnxMl.TypeProto.Map) value_, getParentForChildren(), isClean());
          value_ = null;
        }
        valueCase_ = 5;
        onChanged();
        ;
        return mapTypeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.SparseTensor,
              OnnxMl.TypeProto.SparseTensor.Builder,
              OnnxMl.TypeProto.SparseTensorOrBuilder>
          sparseTensorTypeBuilder_;
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public boolean hasSparseTensorType() {
        return valueCase_ == 8;
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public OnnxMl.TypeProto.SparseTensor getSparseTensorType() {
        if (sparseTensorTypeBuilder_ == null) {
          if (valueCase_ == 8) {
            return (OnnxMl.TypeProto.SparseTensor) value_;
          }
          return OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
        } else {
          if (valueCase_ == 8) {
            return sparseTensorTypeBuilder_.getMessage();
          }
          return OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
        }
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public Builder setSparseTensorType(OnnxMl.TypeProto.SparseTensor value) {
        if (sparseTensorTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          sparseTensorTypeBuilder_.setMessage(value);
        }
        valueCase_ = 8;
        return this;
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public Builder setSparseTensorType(OnnxMl.TypeProto.SparseTensor.Builder builderForValue) {
        if (sparseTensorTypeBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          sparseTensorTypeBuilder_.setMessage(builderForValue.build());
        }
        valueCase_ = 8;
        return this;
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public Builder mergeSparseTensorType(OnnxMl.TypeProto.SparseTensor value) {
        if (sparseTensorTypeBuilder_ == null) {
          if (valueCase_ == 8 && value_ != OnnxMl.TypeProto.SparseTensor.getDefaultInstance()) {
            value_ =
                OnnxMl.TypeProto.SparseTensor.newBuilder((OnnxMl.TypeProto.SparseTensor) value_)
                    .mergeFrom(value)
                    .buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          if (valueCase_ == 8) {
            sparseTensorTypeBuilder_.mergeFrom(value);
          }
          sparseTensorTypeBuilder_.setMessage(value);
        }
        valueCase_ = 8;
        return this;
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public Builder clearSparseTensorType() {
        if (sparseTensorTypeBuilder_ == null) {
          if (valueCase_ == 8) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
        } else {
          if (valueCase_ == 8) {
            valueCase_ = 0;
            value_ = null;
          }
          sparseTensorTypeBuilder_.clear();
        }
        return this;
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public OnnxMl.TypeProto.SparseTensor.Builder getSparseTensorTypeBuilder() {
        return getSparseTensorTypeFieldBuilder().getBuilder();
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      public OnnxMl.TypeProto.SparseTensorOrBuilder getSparseTensorTypeOrBuilder() {
        if ((valueCase_ == 8) && (sparseTensorTypeBuilder_ != null)) {
          return sparseTensorTypeBuilder_.getMessageOrBuilder();
        } else {
          if (valueCase_ == 8) {
            return (OnnxMl.TypeProto.SparseTensor) value_;
          }
          return OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
        }
      }
      /** <code>.onnx.TypeProto.SparseTensor sparse_tensor_type = 8;</code> */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.SparseTensor,
              OnnxMl.TypeProto.SparseTensor.Builder,
              OnnxMl.TypeProto.SparseTensorOrBuilder>
          getSparseTensorTypeFieldBuilder() {
        if (sparseTensorTypeBuilder_ == null) {
          if (!(valueCase_ == 8)) {
            value_ = OnnxMl.TypeProto.SparseTensor.getDefaultInstance();
          }
          sparseTensorTypeBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TypeProto.SparseTensor,
                  OnnxMl.TypeProto.SparseTensor.Builder,
                  OnnxMl.TypeProto.SparseTensorOrBuilder>(
                  (OnnxMl.TypeProto.SparseTensor) value_, getParentForChildren(), isClean());
          value_ = null;
        }
        valueCase_ = 8;
        onChanged();
        ;
        return sparseTensorTypeBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Opaque,
              OnnxMl.TypeProto.Opaque.Builder,
              OnnxMl.TypeProto.OpaqueOrBuilder>
          opaqueTypeBuilder_;
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public boolean hasOpaqueType() {
        return valueCase_ == 7;
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public OnnxMl.TypeProto.Opaque getOpaqueType() {
        if (opaqueTypeBuilder_ == null) {
          if (valueCase_ == 7) {
            return (OnnxMl.TypeProto.Opaque) value_;
          }
          return OnnxMl.TypeProto.Opaque.getDefaultInstance();
        } else {
          if (valueCase_ == 7) {
            return opaqueTypeBuilder_.getMessage();
          }
          return OnnxMl.TypeProto.Opaque.getDefaultInstance();
        }
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public Builder setOpaqueType(OnnxMl.TypeProto.Opaque value) {
        if (opaqueTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          opaqueTypeBuilder_.setMessage(value);
        }
        valueCase_ = 7;
        return this;
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public Builder setOpaqueType(OnnxMl.TypeProto.Opaque.Builder builderForValue) {
        if (opaqueTypeBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          opaqueTypeBuilder_.setMessage(builderForValue.build());
        }
        valueCase_ = 7;
        return this;
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public Builder mergeOpaqueType(OnnxMl.TypeProto.Opaque value) {
        if (opaqueTypeBuilder_ == null) {
          if (valueCase_ == 7 && value_ != OnnxMl.TypeProto.Opaque.getDefaultInstance()) {
            value_ =
                OnnxMl.TypeProto.Opaque.newBuilder((OnnxMl.TypeProto.Opaque) value_)
                    .mergeFrom(value)
                    .buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          if (valueCase_ == 7) {
            opaqueTypeBuilder_.mergeFrom(value);
          }
          opaqueTypeBuilder_.setMessage(value);
        }
        valueCase_ = 7;
        return this;
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public Builder clearOpaqueType() {
        if (opaqueTypeBuilder_ == null) {
          if (valueCase_ == 7) {
            valueCase_ = 0;
            value_ = null;
            onChanged();
          }
        } else {
          if (valueCase_ == 7) {
            valueCase_ = 0;
            value_ = null;
          }
          opaqueTypeBuilder_.clear();
        }
        return this;
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public OnnxMl.TypeProto.Opaque.Builder getOpaqueTypeBuilder() {
        return getOpaqueTypeFieldBuilder().getBuilder();
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      public OnnxMl.TypeProto.OpaqueOrBuilder getOpaqueTypeOrBuilder() {
        if ((valueCase_ == 7) && (opaqueTypeBuilder_ != null)) {
          return opaqueTypeBuilder_.getMessageOrBuilder();
        } else {
          if (valueCase_ == 7) {
            return (OnnxMl.TypeProto.Opaque) value_;
          }
          return OnnxMl.TypeProto.Opaque.getDefaultInstance();
        }
      }
      /** <code>.onnx.TypeProto.Opaque opaque_type = 7;</code> */
      private com.google.protobuf.SingleFieldBuilderV3<
              OnnxMl.TypeProto.Opaque,
              OnnxMl.TypeProto.Opaque.Builder,
              OnnxMl.TypeProto.OpaqueOrBuilder>
          getOpaqueTypeFieldBuilder() {
        if (opaqueTypeBuilder_ == null) {
          if (!(valueCase_ == 7)) {
            value_ = OnnxMl.TypeProto.Opaque.getDefaultInstance();
          }
          opaqueTypeBuilder_ =
              new com.google.protobuf.SingleFieldBuilderV3<
                  OnnxMl.TypeProto.Opaque,
                  OnnxMl.TypeProto.Opaque.Builder,
                  OnnxMl.TypeProto.OpaqueOrBuilder>(
                  (OnnxMl.TypeProto.Opaque) value_, getParentForChildren(), isClean());
          value_ = null;
        }
        valueCase_ = 7;
        onChanged();
        ;
        return opaqueTypeBuilder_;
      }

      private java.lang.Object denotation_ = "";
      /**
       *
       *
       * <pre>
       * An optional denotation can be used to denote the whole
       * type with a standard semantic description as to what is
       * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
       * for pre-defined type denotations.
       * </pre>
       *
       * <code>string denotation = 6;</code>
       */
      public java.lang.String getDenotation() {
        java.lang.Object ref = denotation_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          denotation_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * An optional denotation can be used to denote the whole
       * type with a standard semantic description as to what is
       * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
       * for pre-defined type denotations.
       * </pre>
       *
       * <code>string denotation = 6;</code>
       */
      public com.google.protobuf.ByteString getDenotationBytes() {
        java.lang.Object ref = denotation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          denotation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * An optional denotation can be used to denote the whole
       * type with a standard semantic description as to what is
       * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
       * for pre-defined type denotations.
       * </pre>
       *
       * <code>string denotation = 6;</code>
       */
      public Builder setDenotation(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        denotation_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * An optional denotation can be used to denote the whole
       * type with a standard semantic description as to what is
       * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
       * for pre-defined type denotations.
       * </pre>
       *
       * <code>string denotation = 6;</code>
       */
      public Builder clearDenotation() {

        denotation_ = getDefaultInstance().getDenotation();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * An optional denotation can be used to denote the whole
       * type with a standard semantic description as to what is
       * stored inside. Refer to https://github.com/onnx/onnx/blob/main/docs/TypeDenotation.md#type-denotation-definition
       * for pre-defined type denotations.
       * </pre>
       *
       * <code>string denotation = 6;</code>
       */
      public Builder setDenotationBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        denotation_ = value;
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.TypeProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.TypeProto)
    private static final OnnxMl.TypeProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.TypeProto();
    }

    public static OnnxMl.TypeProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<TypeProto> PARSER =
        new com.google.protobuf.AbstractParser<TypeProto>() {
          @java.lang.Override
          public TypeProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new TypeProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<TypeProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<TypeProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.TypeProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface OperatorSetIdProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.OperatorSetIdProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The domain of the operator set being identified.
     * The empty string ("") or absence of this field implies the operator
     * set that is defined as part of the ONNX specification.
     * This field MUST be present in this version of the IR when referring to any other operator set.
     * </pre>
     *
     * <code>string domain = 1;</code>
     */
    java.lang.String getDomain();
    /**
     *
     *
     * <pre>
     * The domain of the operator set being identified.
     * The empty string ("") or absence of this field implies the operator
     * set that is defined as part of the ONNX specification.
     * This field MUST be present in this version of the IR when referring to any other operator set.
     * </pre>
     *
     * <code>string domain = 1;</code>
     */
    com.google.protobuf.ByteString getDomainBytes();

    /**
     *
     *
     * <pre>
     * The version of the operator set being identified.
     * This field MUST be present in this version of the IR.
     * </pre>
     *
     * <code>int64 version = 2;</code>
     */
    long getVersion();
  }
  /**
   *
   *
   * <pre>
   * Operator Sets
   * OperatorSets are uniquely identified by a (domain, opset_version) pair.
   * </pre>
   *
   * Protobuf type {@code onnx.OperatorSetIdProto}
   */
  public static final class OperatorSetIdProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.OperatorSetIdProto)
      OperatorSetIdProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use OperatorSetIdProto.newBuilder() to construct.
    private OperatorSetIdProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private OperatorSetIdProto() {
      domain_ = "";
      version_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private OperatorSetIdProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();

                domain_ = s;
                break;
              }
            case 16:
              {
                version_ = input.readInt64();
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_OperatorSetIdProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_OperatorSetIdProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.OperatorSetIdProto.class, OnnxMl.OperatorSetIdProto.Builder.class);
    }

    public static final int DOMAIN_FIELD_NUMBER = 1;
    private volatile java.lang.Object domain_;
    /**
     *
     *
     * <pre>
     * The domain of the operator set being identified.
     * The empty string ("") or absence of this field implies the operator
     * set that is defined as part of the ONNX specification.
     * This field MUST be present in this version of the IR when referring to any other operator set.
     * </pre>
     *
     * <code>string domain = 1;</code>
     */
    public java.lang.String getDomain() {
      java.lang.Object ref = domain_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        domain_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The domain of the operator set being identified.
     * The empty string ("") or absence of this field implies the operator
     * set that is defined as part of the ONNX specification.
     * This field MUST be present in this version of the IR when referring to any other operator set.
     * </pre>
     *
     * <code>string domain = 1;</code>
     */
    public com.google.protobuf.ByteString getDomainBytes() {
      java.lang.Object ref = domain_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        domain_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_FIELD_NUMBER = 2;
    private long version_;
    /**
     *
     *
     * <pre>
     * The version of the operator set being identified.
     * This field MUST be present in this version of the IR.
     * </pre>
     *
     * <code>int64 version = 2;</code>
     */
    public long getVersion() {
      return version_;
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (!getDomainBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, domain_);
      }
      if (version_ != 0L) {
        output.writeInt64(2, version_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDomainBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, domain_);
      }
      if (version_ != 0L) {
        size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, version_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.OperatorSetIdProto)) {
        return super.equals(obj);
      }
      OnnxMl.OperatorSetIdProto other = (OnnxMl.OperatorSetIdProto) obj;

      boolean result = true;
      result = result && getDomain().equals(other.getDomain());
      result = result && (getVersion() == other.getVersion());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + DOMAIN_FIELD_NUMBER;
      hash = (53 * hash) + getDomain().hashCode();
      hash = (37 * hash) + VERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getVersion());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.OperatorSetIdProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.OperatorSetIdProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.OperatorSetIdProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.OperatorSetIdProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     *
     *
     * <pre>
     * Operator Sets
     * OperatorSets are uniquely identified by a (domain, opset_version) pair.
     * </pre>
     *
     * Protobuf type {@code onnx.OperatorSetIdProto}
     */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.OperatorSetIdProto)
        OnnxMl.OperatorSetIdProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_OperatorSetIdProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_OperatorSetIdProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.OperatorSetIdProto.class, OnnxMl.OperatorSetIdProto.Builder.class);
      }

      // Construct using OnnxMlProto3.OperatorSetIdProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {}
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        domain_ = "";

        version_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_OperatorSetIdProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.OperatorSetIdProto getDefaultInstanceForType() {
        return OnnxMl.OperatorSetIdProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.OperatorSetIdProto build() {
        OnnxMl.OperatorSetIdProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.OperatorSetIdProto buildPartial() {
        OnnxMl.OperatorSetIdProto result = new OnnxMl.OperatorSetIdProto(this);
        result.domain_ = domain_;
        result.version_ = version_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.OperatorSetIdProto) {
          return mergeFrom((OnnxMl.OperatorSetIdProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.OperatorSetIdProto other) {
        if (other == OnnxMl.OperatorSetIdProto.getDefaultInstance()) return this;
        if (!other.getDomain().isEmpty()) {
          domain_ = other.domain_;
          onChanged();
        }
        if (other.getVersion() != 0L) {
          setVersion(other.getVersion());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.OperatorSetIdProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.OperatorSetIdProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object domain_ = "";
      /**
       *
       *
       * <pre>
       * The domain of the operator set being identified.
       * The empty string ("") or absence of this field implies the operator
       * set that is defined as part of the ONNX specification.
       * This field MUST be present in this version of the IR when referring to any other operator set.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public java.lang.String getDomain() {
        java.lang.Object ref = domain_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          domain_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The domain of the operator set being identified.
       * The empty string ("") or absence of this field implies the operator
       * set that is defined as part of the ONNX specification.
       * This field MUST be present in this version of the IR when referring to any other operator set.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public com.google.protobuf.ByteString getDomainBytes() {
        java.lang.Object ref = domain_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          domain_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The domain of the operator set being identified.
       * The empty string ("") or absence of this field implies the operator
       * set that is defined as part of the ONNX specification.
       * This field MUST be present in this version of the IR when referring to any other operator set.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public Builder setDomain(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        domain_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The domain of the operator set being identified.
       * The empty string ("") or absence of this field implies the operator
       * set that is defined as part of the ONNX specification.
       * This field MUST be present in this version of the IR when referring to any other operator set.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public Builder clearDomain() {

        domain_ = getDefaultInstance().getDomain();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The domain of the operator set being identified.
       * The empty string ("") or absence of this field implies the operator
       * set that is defined as part of the ONNX specification.
       * This field MUST be present in this version of the IR when referring to any other operator set.
       * </pre>
       *
       * <code>string domain = 1;</code>
       */
      public Builder setDomainBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        domain_ = value;
        onChanged();
        return this;
      }

      private long version_;
      /**
       *
       *
       * <pre>
       * The version of the operator set being identified.
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>int64 version = 2;</code>
       */
      public long getVersion() {
        return version_;
      }
      /**
       *
       *
       * <pre>
       * The version of the operator set being identified.
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>int64 version = 2;</code>
       */
      public Builder setVersion(long value) {

        version_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The version of the operator set being identified.
       * This field MUST be present in this version of the IR.
       * </pre>
       *
       * <code>int64 version = 2;</code>
       */
      public Builder clearVersion() {

        version_ = 0L;
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.OperatorSetIdProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.OperatorSetIdProto)
    private static final OnnxMl.OperatorSetIdProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.OperatorSetIdProto();
    }

    public static OnnxMl.OperatorSetIdProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<OperatorSetIdProto> PARSER =
        new com.google.protobuf.AbstractParser<OperatorSetIdProto>() {
          @java.lang.Override
          public OperatorSetIdProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new OperatorSetIdProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<OperatorSetIdProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<OperatorSetIdProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.OperatorSetIdProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  public interface FunctionProtoOrBuilder
      extends
      // @@protoc_insertion_point(interface_extends:onnx.FunctionProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     *
     *
     * <pre>
     * The name of the function, similar usage of op_type in OperatorProto.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    java.lang.String getName();
    /**
     *
     *
     * <pre>
     * The name of the function, similar usage of op_type in OperatorProto.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    com.google.protobuf.ByteString getNameBytes();

    /**
     *
     *
     * <pre>
     * The first version of a function set which contains this function.
     * When there's any breaking change for this function, the function set
     * contains the function needs to bump its version, and since_version of
     * the updated function will be changed to the updated function set version.
     * </pre>
     *
     * <code>int64 since_version = 2;</code>
     */
    long getSinceVersion();

    /**
     *
     *
     * <pre>
     * This field indicates whether the syntax, semantics, or presence
     * of this function is in an experimental or stable stage. Once an
     * function is published as STABLE, its syntax and semantics MUST NOT
     * change in subsequent versions of the operator set.
     * When a function is published as EXPERIMENTAL, the syntax and semantics
     * of the function MAY change across operator set versions.
     * Functions "become" stable by deprecating the experimental version and
     * introducing a new stable function with the same name.
     * </pre>
     *
     * <code>.onnx.OperatorStatus status = 3;</code>
     */
    int getStatusValue();
    /**
     *
     *
     * <pre>
     * This field indicates whether the syntax, semantics, or presence
     * of this function is in an experimental or stable stage. Once an
     * function is published as STABLE, its syntax and semantics MUST NOT
     * change in subsequent versions of the operator set.
     * When a function is published as EXPERIMENTAL, the syntax and semantics
     * of the function MAY change across operator set versions.
     * Functions "become" stable by deprecating the experimental version and
     * introducing a new stable function with the same name.
     * </pre>
     *
     * <code>.onnx.OperatorStatus status = 3;</code>
     */
    OnnxMl.OperatorStatus getStatus();

    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    java.util.List<java.lang.String> getInputList();
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    int getInputCount();
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    java.lang.String getInput(int index);
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    com.google.protobuf.ByteString getInputBytes(int index);

    /** <code>repeated string output = 5;</code> */
    java.util.List<java.lang.String> getOutputList();
    /** <code>repeated string output = 5;</code> */
    int getOutputCount();
    /** <code>repeated string output = 5;</code> */
    java.lang.String getOutput(int index);
    /** <code>repeated string output = 5;</code> */
    com.google.protobuf.ByteString getOutputBytes(int index);

    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    java.util.List<java.lang.String> getAttributeList();
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    int getAttributeCount();
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    java.lang.String getAttribute(int index);
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    com.google.protobuf.ByteString getAttributeBytes(int index);

    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    java.util.List<OnnxMl.NodeProto> getNodeList();
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    OnnxMl.NodeProto getNode(int index);
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    int getNodeCount();
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    java.util.List<? extends OnnxMl.NodeProtoOrBuilder> getNodeOrBuilderList();
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    OnnxMl.NodeProtoOrBuilder getNodeOrBuilder(int index);

    /**
     *
     *
     * <pre>
     * A human-readable documentation for this function. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 8;</code>
     */
    java.lang.String getDocString();
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this function. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 8;</code>
     */
    com.google.protobuf.ByteString getDocStringBytes();
  }
  /** Protobuf type {@code onnx.FunctionProto} */
  public static final class FunctionProto extends com.google.protobuf.GeneratedMessageV3
      implements
      // @@protoc_insertion_point(message_implements:onnx.FunctionProto)
      FunctionProtoOrBuilder {
    private static final long serialVersionUID = 0L;
    // Use FunctionProto.newBuilder() to construct.
    private FunctionProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }

    private FunctionProto() {
      name_ = "";
      sinceVersion_ = 0L;
      status_ = 0;
      input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      output_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      attribute_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      node_ = java.util.Collections.emptyList();
      docString_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
      return this.unknownFields;
    }

    private FunctionProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
            case 16:
              {
                sinceVersion_ = input.readInt64();
                break;
              }
            case 24:
              {
                int rawValue = input.readEnum();

                status_ = rawValue;
                break;
              }
            case 34:
              {
                java.lang.String s = input.readStringRequireUtf8();
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  input_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000008;
                }
                input_.add(s);
                break;
              }
            case 42:
              {
                java.lang.String s = input.readStringRequireUtf8();
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  output_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000010;
                }
                output_.add(s);
                break;
              }
            case 50:
              {
                java.lang.String s = input.readStringRequireUtf8();
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  attribute_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000020;
                }
                attribute_.add(s);
                break;
              }
            case 58:
              {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  node_ = new java.util.ArrayList<OnnxMl.NodeProto>();
                  mutable_bitField0_ |= 0x00000040;
                }
                node_.add(input.readMessage(OnnxMl.NodeProto.parser(), extensionRegistry));
                break;
              }
            case 66:
              {
                java.lang.String s = input.readStringRequireUtf8();

                docString_ = s;
                break;
              }
            default:
              {
                if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          input_ = input_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          output_ = output_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          attribute_ = attribute_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          node_ = java.util.Collections.unmodifiableList(node_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }

    public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      return OnnxMl.internal_static_onnx_FunctionProto_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return OnnxMl.internal_static_onnx_FunctionProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OnnxMl.FunctionProto.class, OnnxMl.FunctionProto.Builder.class);
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     *
     *
     * <pre>
     * The name of the function, similar usage of op_type in OperatorProto.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * The name of the function, similar usage of op_type in OperatorProto.
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SINCE_VERSION_FIELD_NUMBER = 2;
    private long sinceVersion_;
    /**
     *
     *
     * <pre>
     * The first version of a function set which contains this function.
     * When there's any breaking change for this function, the function set
     * contains the function needs to bump its version, and since_version of
     * the updated function will be changed to the updated function set version.
     * </pre>
     *
     * <code>int64 since_version = 2;</code>
     */
    public long getSinceVersion() {
      return sinceVersion_;
    }

    public static final int STATUS_FIELD_NUMBER = 3;
    private int status_;
    /**
     *
     *
     * <pre>
     * This field indicates whether the syntax, semantics, or presence
     * of this function is in an experimental or stable stage. Once an
     * function is published as STABLE, its syntax and semantics MUST NOT
     * change in subsequent versions of the operator set.
     * When a function is published as EXPERIMENTAL, the syntax and semantics
     * of the function MAY change across operator set versions.
     * Functions "become" stable by deprecating the experimental version and
     * introducing a new stable function with the same name.
     * </pre>
     *
     * <code>.onnx.OperatorStatus status = 3;</code>
     */
    public int getStatusValue() {
      return status_;
    }
    /**
     *
     *
     * <pre>
     * This field indicates whether the syntax, semantics, or presence
     * of this function is in an experimental or stable stage. Once an
     * function is published as STABLE, its syntax and semantics MUST NOT
     * change in subsequent versions of the operator set.
     * When a function is published as EXPERIMENTAL, the syntax and semantics
     * of the function MAY change across operator set versions.
     * Functions "become" stable by deprecating the experimental version and
     * introducing a new stable function with the same name.
     * </pre>
     *
     * <code>.onnx.OperatorStatus status = 3;</code>
     */
    public OnnxMl.OperatorStatus getStatus() {
      @SuppressWarnings("deprecation")
      OnnxMl.OperatorStatus result = OnnxMl.OperatorStatus.valueOf(status_);
      return result == null ? OnnxMl.OperatorStatus.UNRECOGNIZED : result;
    }

    public static final int INPUT_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList input_;
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    public com.google.protobuf.ProtocolStringList getInputList() {
      return input_;
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    public int getInputCount() {
      return input_.size();
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    public java.lang.String getInput(int index) {
      return input_.get(index);
    }
    /**
     *
     *
     * <pre>
     * The inputs and outputs of the function.
     * </pre>
     *
     * <code>repeated string input = 4;</code>
     */
    public com.google.protobuf.ByteString getInputBytes(int index) {
      return input_.getByteString(index);
    }

    public static final int OUTPUT_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList output_;
    /** <code>repeated string output = 5;</code> */
    public com.google.protobuf.ProtocolStringList getOutputList() {
      return output_;
    }
    /** <code>repeated string output = 5;</code> */
    public int getOutputCount() {
      return output_.size();
    }
    /** <code>repeated string output = 5;</code> */
    public java.lang.String getOutput(int index) {
      return output_.get(index);
    }
    /** <code>repeated string output = 5;</code> */
    public com.google.protobuf.ByteString getOutputBytes(int index) {
      return output_.getByteString(index);
    }

    public static final int ATTRIBUTE_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList attribute_;
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    public com.google.protobuf.ProtocolStringList getAttributeList() {
      return attribute_;
    }
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    public int getAttributeCount() {
      return attribute_.size();
    }
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    public java.lang.String getAttribute(int index) {
      return attribute_.get(index);
    }
    /**
     *
     *
     * <pre>
     * The attributes of the function.
     * </pre>
     *
     * <code>repeated string attribute = 6;</code>
     */
    public com.google.protobuf.ByteString getAttributeBytes(int index) {
      return attribute_.getByteString(index);
    }

    public static final int NODE_FIELD_NUMBER = 7;
    private java.util.List<OnnxMl.NodeProto> node_;
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    public java.util.List<OnnxMl.NodeProto> getNodeList() {
      return node_;
    }
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    public java.util.List<? extends OnnxMl.NodeProtoOrBuilder> getNodeOrBuilderList() {
      return node_;
    }
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    public int getNodeCount() {
      return node_.size();
    }
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    public OnnxMl.NodeProto getNode(int index) {
      return node_.get(index);
    }
    /**
     *
     *
     * <pre>
     * The nodes in the function.
     * </pre>
     *
     * <code>repeated .onnx.NodeProto node = 7;</code>
     */
    public OnnxMl.NodeProtoOrBuilder getNodeOrBuilder(int index) {
      return node_.get(index);
    }

    public static final int DOC_STRING_FIELD_NUMBER = 8;
    private volatile java.lang.Object docString_;
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this function. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 8;</code>
     */
    public java.lang.String getDocString() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        docString_ = s;
        return s;
      }
    }
    /**
     *
     *
     * <pre>
     * A human-readable documentation for this function. Markdown is allowed.
     * </pre>
     *
     * <code>string doc_string = 8;</code>
     */
    public com.google.protobuf.ByteString getDocStringBytes() {
      java.lang.Object ref = docString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
        docString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;

    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (sinceVersion_ != 0L) {
        output.writeInt64(2, sinceVersion_);
      }
      if (status_ != OnnxMl.OperatorStatus.EXPERIMENTAL.getNumber()) {
        output.writeEnum(3, status_);
      }
      for (int i = 0; i < input_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, input_.getRaw(i));
      }
      for (int i = 0; i < output_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, output_.getRaw(i));
      }
      for (int i = 0; i < attribute_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, attribute_.getRaw(i));
      }
      for (int i = 0; i < node_.size(); i++) {
        output.writeMessage(7, node_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, docString_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (sinceVersion_ != 0L) {
        size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, sinceVersion_);
      }
      if (status_ != OnnxMl.OperatorStatus.EXPERIMENTAL.getNumber()) {
        size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, status_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < input_.size(); i++) {
          dataSize += computeStringSizeNoTag(input_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getInputList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < output_.size(); i++) {
          dataSize += computeStringSizeNoTag(output_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getOutputList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < attribute_.size(); i++) {
          dataSize += computeStringSizeNoTag(attribute_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getAttributeList().size();
      }
      for (int i = 0; i < node_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, node_.get(i));
      }
      if (!getDocStringBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, docString_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
        return true;
      }
      if (!(obj instanceof OnnxMl.FunctionProto)) {
        return super.equals(obj);
      }
      OnnxMl.FunctionProto other = (OnnxMl.FunctionProto) obj;

      boolean result = true;
      result = result && getName().equals(other.getName());
      result = result && (getSinceVersion() == other.getSinceVersion());
      result = result && status_ == other.status_;
      result = result && getInputList().equals(other.getInputList());
      result = result && getOutputList().equals(other.getOutputList());
      result = result && getAttributeList().equals(other.getAttributeList());
      result = result && getNodeList().equals(other.getNodeList());
      result = result && getDocString().equals(other.getDocString());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + SINCE_VERSION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getSinceVersion());
      hash = (37 * hash) + STATUS_FIELD_NUMBER;
      hash = (53 * hash) + status_;
      if (getInputCount() > 0) {
        hash = (37 * hash) + INPUT_FIELD_NUMBER;
        hash = (53 * hash) + getInputList().hashCode();
      }
      if (getOutputCount() > 0) {
        hash = (37 * hash) + OUTPUT_FIELD_NUMBER;
        hash = (53 * hash) + getOutputList().hashCode();
      }
      if (getAttributeCount() > 0) {
        hash = (37 * hash) + ATTRIBUTE_FIELD_NUMBER;
        hash = (53 * hash) + getAttributeList().hashCode();
      }
      if (getNodeCount() > 0) {
        hash = (37 * hash) + NODE_FIELD_NUMBER;
        hash = (53 * hash) + getNodeList().hashCode();
      }
      hash = (37 * hash) + DOC_STRING_FIELD_NUMBER;
      hash = (53 * hash) + getDocString().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OnnxMl.FunctionProto parseFrom(java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.FunctionProto parseFrom(
        java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.FunctionProto parseFrom(com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.FunctionProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.FunctionProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }

    public static OnnxMl.FunctionProto parseFrom(
        byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }

    public static OnnxMl.FunctionProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.FunctionProto parseFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.FunctionProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
    }

    public static OnnxMl.FunctionProto parseDelimitedFrom(
        java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(
          PARSER, input, extensionRegistry);
    }

    public static OnnxMl.FunctionProto parseFrom(com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
    }

    public static OnnxMl.FunctionProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3.parseWithIOException(
          PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() {
      return newBuilder();
    }

    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }

    public static Builder newBuilder(OnnxMl.FunctionProto prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }

    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /** Protobuf type {@code onnx.FunctionProto} */
    public static final class Builder
        extends com.google.protobuf.GeneratedMessageV3.Builder<Builder>
        implements
        // @@protoc_insertion_point(builder_implements:onnx.FunctionProto)
        OnnxMl.FunctionProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
        return OnnxMl.internal_static_onnx_FunctionProto_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return OnnxMl.internal_static_onnx_FunctionProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OnnxMl.FunctionProto.class, OnnxMl.FunctionProto.Builder.class);
      }

      // Construct using OnnxMlProto3.FunctionProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }

      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) {
          getNodeFieldBuilder();
        }
      }

      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        sinceVersion_ = 0L;

        status_ = 0;

        input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        output_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        attribute_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (nodeBuilder_ == null) {
          node_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          nodeBuilder_.clear();
        }
        docString_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
        return OnnxMl.internal_static_onnx_FunctionProto_descriptor;
      }

      @java.lang.Override
      public OnnxMl.FunctionProto getDefaultInstanceForType() {
        return OnnxMl.FunctionProto.getDefaultInstance();
      }

      @java.lang.Override
      public OnnxMl.FunctionProto build() {
        OnnxMl.FunctionProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public OnnxMl.FunctionProto buildPartial() {
        OnnxMl.FunctionProto result = new OnnxMl.FunctionProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.name_ = name_;
        result.sinceVersion_ = sinceVersion_;
        result.status_ = status_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          input_ = input_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.input_ = input_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output_ = output_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.output_ = output_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          attribute_ = attribute_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.attribute_ = attribute_;
        if (nodeBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            node_ = java.util.Collections.unmodifiableList(node_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.node_ = node_;
        } else {
          result.node_ = nodeBuilder_.build();
        }
        result.docString_ = docString_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }

      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }

      @java.lang.Override
      public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }

      @java.lang.Override
      public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }

      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index,
          java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }

      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OnnxMl.FunctionProto) {
          return mergeFrom((OnnxMl.FunctionProto) other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OnnxMl.FunctionProto other) {
        if (other == OnnxMl.FunctionProto.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.getSinceVersion() != 0L) {
          setSinceVersion(other.getSinceVersion());
        }
        if (other.status_ != 0) {
          setStatusValue(other.getStatusValue());
        }
        if (!other.input_.isEmpty()) {
          if (input_.isEmpty()) {
            input_ = other.input_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureInputIsMutable();
            input_.addAll(other.input_);
          }
          onChanged();
        }
        if (!other.output_.isEmpty()) {
          if (output_.isEmpty()) {
            output_ = other.output_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureOutputIsMutable();
            output_.addAll(other.output_);
          }
          onChanged();
        }
        if (!other.attribute_.isEmpty()) {
          if (attribute_.isEmpty()) {
            attribute_ = other.attribute_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureAttributeIsMutable();
            attribute_.addAll(other.attribute_);
          }
          onChanged();
        }
        if (nodeBuilder_ == null) {
          if (!other.node_.isEmpty()) {
            if (node_.isEmpty()) {
              node_ = other.node_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureNodeIsMutable();
              node_.addAll(other.node_);
            }
            onChanged();
          }
        } else {
          if (!other.node_.isEmpty()) {
            if (nodeBuilder_.isEmpty()) {
              nodeBuilder_.dispose();
              nodeBuilder_ = null;
              node_ = other.node_;
              bitField0_ = (bitField0_ & ~0x00000040);
              nodeBuilder_ =
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders
                      ? getNodeFieldBuilder()
                      : null;
            } else {
              nodeBuilder_.addAllMessages(other.node_);
            }
          }
        }
        if (!other.getDocString().isEmpty()) {
          docString_ = other.docString_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OnnxMl.FunctionProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OnnxMl.FunctionProto) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       *
       *
       * <pre>
       * The name of the function, similar usage of op_type in OperatorProto.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name of the function, similar usage of op_type in OperatorProto.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * The name of the function, similar usage of op_type in OperatorProto.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder setName(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        name_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name of the function, similar usage of op_type in OperatorProto.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder clearName() {

        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The name of the function, similar usage of op_type in OperatorProto.
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder setNameBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        name_ = value;
        onChanged();
        return this;
      }

      private long sinceVersion_;
      /**
       *
       *
       * <pre>
       * The first version of a function set which contains this function.
       * When there's any breaking change for this function, the function set
       * contains the function needs to bump its version, and since_version of
       * the updated function will be changed to the updated function set version.
       * </pre>
       *
       * <code>int64 since_version = 2;</code>
       */
      public long getSinceVersion() {
        return sinceVersion_;
      }
      /**
       *
       *
       * <pre>
       * The first version of a function set which contains this function.
       * When there's any breaking change for this function, the function set
       * contains the function needs to bump its version, and since_version of
       * the updated function will be changed to the updated function set version.
       * </pre>
       *
       * <code>int64 since_version = 2;</code>
       */
      public Builder setSinceVersion(long value) {

        sinceVersion_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The first version of a function set which contains this function.
       * When there's any breaking change for this function, the function set
       * contains the function needs to bump its version, and since_version of
       * the updated function will be changed to the updated function set version.
       * </pre>
       *
       * <code>int64 since_version = 2;</code>
       */
      public Builder clearSinceVersion() {

        sinceVersion_ = 0L;
        onChanged();
        return this;
      }

      private int status_ = 0;
      /**
       *
       *
       * <pre>
       * This field indicates whether the syntax, semantics, or presence
       * of this function is in an experimental or stable stage. Once an
       * function is published as STABLE, its syntax and semantics MUST NOT
       * change in subsequent versions of the operator set.
       * When a function is published as EXPERIMENTAL, the syntax and semantics
       * of the function MAY change across operator set versions.
       * Functions "become" stable by deprecating the experimental version and
       * introducing a new stable function with the same name.
       * </pre>
       *
       * <code>.onnx.OperatorStatus status = 3;</code>
       */
      public int getStatusValue() {
        return status_;
      }
      /**
       *
       *
       * <pre>
       * This field indicates whether the syntax, semantics, or presence
       * of this function is in an experimental or stable stage. Once an
       * function is published as STABLE, its syntax and semantics MUST NOT
       * change in subsequent versions of the operator set.
       * When a function is published as EXPERIMENTAL, the syntax and semantics
       * of the function MAY change across operator set versions.
       * Functions "become" stable by deprecating the experimental version and
       * introducing a new stable function with the same name.
       * </pre>
       *
       * <code>.onnx.OperatorStatus status = 3;</code>
       */
      public Builder setStatusValue(int value) {
        status_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field indicates whether the syntax, semantics, or presence
       * of this function is in an experimental or stable stage. Once an
       * function is published as STABLE, its syntax and semantics MUST NOT
       * change in subsequent versions of the operator set.
       * When a function is published as EXPERIMENTAL, the syntax and semantics
       * of the function MAY change across operator set versions.
       * Functions "become" stable by deprecating the experimental version and
       * introducing a new stable function with the same name.
       * </pre>
       *
       * <code>.onnx.OperatorStatus status = 3;</code>
       */
      public OnnxMl.OperatorStatus getStatus() {
        @SuppressWarnings("deprecation")
        OnnxMl.OperatorStatus result = OnnxMl.OperatorStatus.valueOf(status_);
        return result == null ? OnnxMl.OperatorStatus.UNRECOGNIZED : result;
      }
      /**
       *
       *
       * <pre>
       * This field indicates whether the syntax, semantics, or presence
       * of this function is in an experimental or stable stage. Once an
       * function is published as STABLE, its syntax and semantics MUST NOT
       * change in subsequent versions of the operator set.
       * When a function is published as EXPERIMENTAL, the syntax and semantics
       * of the function MAY change across operator set versions.
       * Functions "become" stable by deprecating the experimental version and
       * introducing a new stable function with the same name.
       * </pre>
       *
       * <code>.onnx.OperatorStatus status = 3;</code>
       */
      public Builder setStatus(OnnxMl.OperatorStatus value) {
        if (value == null) {
          throw new NullPointerException();
        }

        status_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * This field indicates whether the syntax, semantics, or presence
       * of this function is in an experimental or stable stage. Once an
       * function is published as STABLE, its syntax and semantics MUST NOT
       * change in subsequent versions of the operator set.
       * When a function is published as EXPERIMENTAL, the syntax and semantics
       * of the function MAY change across operator set versions.
       * Functions "become" stable by deprecating the experimental version and
       * introducing a new stable function with the same name.
       * </pre>
       *
       * <code>.onnx.OperatorStatus status = 3;</code>
       */
      public Builder clearStatus() {

        status_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList input_ =
          com.google.protobuf.LazyStringArrayList.EMPTY;

      private void ensureInputIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          input_ = new com.google.protobuf.LazyStringArrayList(input_);
          bitField0_ |= 0x00000008;
        }
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList getInputList() {
        return input_.getUnmodifiableView();
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public int getInputCount() {
        return input_.size();
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public java.lang.String getInput(int index) {
        return input_.get(index);
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public com.google.protobuf.ByteString getInputBytes(int index) {
        return input_.getByteString(index);
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public Builder setInput(int index, java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputIsMutable();
        input_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public Builder addInput(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputIsMutable();
        input_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public Builder addAllInput(java.lang.Iterable<java.lang.String> values) {
        ensureInputIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, input_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public Builder clearInput() {
        input_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The inputs and outputs of the function.
       * </pre>
       *
       * <code>repeated string input = 4;</code>
       */
      public Builder addInputBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        ensureInputIsMutable();
        input_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList output_ =
          com.google.protobuf.LazyStringArrayList.EMPTY;

      private void ensureOutputIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          output_ = new com.google.protobuf.LazyStringArrayList(output_);
          bitField0_ |= 0x00000010;
        }
      }
      /** <code>repeated string output = 5;</code> */
      public com.google.protobuf.ProtocolStringList getOutputList() {
        return output_.getUnmodifiableView();
      }
      /** <code>repeated string output = 5;</code> */
      public int getOutputCount() {
        return output_.size();
      }
      /** <code>repeated string output = 5;</code> */
      public java.lang.String getOutput(int index) {
        return output_.get(index);
      }
      /** <code>repeated string output = 5;</code> */
      public com.google.protobuf.ByteString getOutputBytes(int index) {
        return output_.getByteString(index);
      }
      /** <code>repeated string output = 5;</code> */
      public Builder setOutput(int index, java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputIsMutable();
        output_.set(index, value);
        onChanged();
        return this;
      }
      /** <code>repeated string output = 5;</code> */
      public Builder addOutput(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputIsMutable();
        output_.add(value);
        onChanged();
        return this;
      }
      /** <code>repeated string output = 5;</code> */
      public Builder addAllOutput(java.lang.Iterable<java.lang.String> values) {
        ensureOutputIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, output_);
        onChanged();
        return this;
      }
      /** <code>repeated string output = 5;</code> */
      public Builder clearOutput() {
        output_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /** <code>repeated string output = 5;</code> */
      public Builder addOutputBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        ensureOutputIsMutable();
        output_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList attribute_ =
          com.google.protobuf.LazyStringArrayList.EMPTY;

      private void ensureAttributeIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          attribute_ = new com.google.protobuf.LazyStringArrayList(attribute_);
          bitField0_ |= 0x00000020;
        }
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public com.google.protobuf.ProtocolStringList getAttributeList() {
        return attribute_.getUnmodifiableView();
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public int getAttributeCount() {
        return attribute_.size();
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public java.lang.String getAttribute(int index) {
        return attribute_.get(index);
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public com.google.protobuf.ByteString getAttributeBytes(int index) {
        return attribute_.getByteString(index);
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public Builder setAttribute(int index, java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureAttributeIsMutable();
        attribute_.set(index, value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public Builder addAttribute(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureAttributeIsMutable();
        attribute_.add(value);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public Builder addAllAttribute(java.lang.Iterable<java.lang.String> values) {
        ensureAttributeIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(values, attribute_);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public Builder clearAttribute() {
        attribute_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * The attributes of the function.
       * </pre>
       *
       * <code>repeated string attribute = 6;</code>
       */
      public Builder addAttributeBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);
        ensureAttributeIsMutable();
        attribute_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<OnnxMl.NodeProto> node_ = java.util.Collections.emptyList();

      private void ensureNodeIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          node_ = new java.util.ArrayList<OnnxMl.NodeProto>(node_);
          bitField0_ |= 0x00000040;
        }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.NodeProto, OnnxMl.NodeProto.Builder, OnnxMl.NodeProtoOrBuilder>
          nodeBuilder_;

      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public java.util.List<OnnxMl.NodeProto> getNodeList() {
        if (nodeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(node_);
        } else {
          return nodeBuilder_.getMessageList();
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public int getNodeCount() {
        if (nodeBuilder_ == null) {
          return node_.size();
        } else {
          return nodeBuilder_.getCount();
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public OnnxMl.NodeProto getNode(int index) {
        if (nodeBuilder_ == null) {
          return node_.get(index);
        } else {
          return nodeBuilder_.getMessage(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder setNode(int index, OnnxMl.NodeProto value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodeIsMutable();
          node_.set(index, value);
          onChanged();
        } else {
          nodeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder setNode(int index, OnnxMl.NodeProto.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.set(index, builderForValue.build());
          onChanged();
        } else {
          nodeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder addNode(OnnxMl.NodeProto value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodeIsMutable();
          node_.add(value);
          onChanged();
        } else {
          nodeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder addNode(int index, OnnxMl.NodeProto value) {
        if (nodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNodeIsMutable();
          node_.add(index, value);
          onChanged();
        } else {
          nodeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder addNode(OnnxMl.NodeProto.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.add(builderForValue.build());
          onChanged();
        } else {
          nodeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder addNode(int index, OnnxMl.NodeProto.Builder builderForValue) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.add(index, builderForValue.build());
          onChanged();
        } else {
          nodeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder addAllNode(java.lang.Iterable<? extends OnnxMl.NodeProto> values) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(values, node_);
          onChanged();
        } else {
          nodeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder clearNode() {
        if (nodeBuilder_ == null) {
          node_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          nodeBuilder_.clear();
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public Builder removeNode(int index) {
        if (nodeBuilder_ == null) {
          ensureNodeIsMutable();
          node_.remove(index);
          onChanged();
        } else {
          nodeBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public OnnxMl.NodeProto.Builder getNodeBuilder(int index) {
        return getNodeFieldBuilder().getBuilder(index);
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public OnnxMl.NodeProtoOrBuilder getNodeOrBuilder(int index) {
        if (nodeBuilder_ == null) {
          return node_.get(index);
        } else {
          return nodeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public java.util.List<? extends OnnxMl.NodeProtoOrBuilder> getNodeOrBuilderList() {
        if (nodeBuilder_ != null) {
          return nodeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(node_);
        }
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public OnnxMl.NodeProto.Builder addNodeBuilder() {
        return getNodeFieldBuilder().addBuilder(OnnxMl.NodeProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public OnnxMl.NodeProto.Builder addNodeBuilder(int index) {
        return getNodeFieldBuilder().addBuilder(index, OnnxMl.NodeProto.getDefaultInstance());
      }
      /**
       *
       *
       * <pre>
       * The nodes in the function.
       * </pre>
       *
       * <code>repeated .onnx.NodeProto node = 7;</code>
       */
      public java.util.List<OnnxMl.NodeProto.Builder> getNodeBuilderList() {
        return getNodeFieldBuilder().getBuilderList();
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
              OnnxMl.NodeProto, OnnxMl.NodeProto.Builder, OnnxMl.NodeProtoOrBuilder>
          getNodeFieldBuilder() {
        if (nodeBuilder_ == null) {
          nodeBuilder_ =
              new com.google.protobuf.RepeatedFieldBuilderV3<
                  OnnxMl.NodeProto, OnnxMl.NodeProto.Builder, OnnxMl.NodeProtoOrBuilder>(
                  node_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          node_ = null;
        }
        return nodeBuilder_;
      }

      private java.lang.Object docString_ = "";
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this function. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 8;</code>
       */
      public java.lang.String getDocString() {
        java.lang.Object ref = docString_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this function. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 8;</code>
       */
      public com.google.protobuf.ByteString getDocStringBytes() {
        java.lang.Object ref = docString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
          docString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this function. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 8;</code>
       */
      public Builder setDocString(java.lang.String value) {
        if (value == null) {
          throw new NullPointerException();
        }

        docString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this function. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 8;</code>
       */
      public Builder clearDocString() {

        docString_ = getDefaultInstance().getDocString();
        onChanged();
        return this;
      }
      /**
       *
       *
       * <pre>
       * A human-readable documentation for this function. Markdown is allowed.
       * </pre>
       *
       * <code>string doc_string = 8;</code>
       */
      public Builder setDocStringBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
          throw new NullPointerException();
        }
        checkByteStringIsUtf8(value);

        docString_ = value;
        onChanged();
        return this;
      }

      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFieldsProto3(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }

      // @@protoc_insertion_point(builder_scope:onnx.FunctionProto)
    }

    // @@protoc_insertion_point(class_scope:onnx.FunctionProto)
    private static final OnnxMl.FunctionProto DEFAULT_INSTANCE;

    static {
      DEFAULT_INSTANCE = new OnnxMl.FunctionProto();
    }

    public static OnnxMl.FunctionProto getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<FunctionProto> PARSER =
        new com.google.protobuf.AbstractParser<FunctionProto>() {
          @java.lang.Override
          public FunctionProto parsePartialFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws com.google.protobuf.InvalidProtocolBufferException {
            return new FunctionProto(input, extensionRegistry);
          }
        };

    public static com.google.protobuf.Parser<FunctionProto> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<FunctionProto> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public OnnxMl.FunctionProto getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }

  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_AttributeProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_AttributeProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_ValueInfoProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_ValueInfoProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_NodeProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_NodeProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_ModelProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_ModelProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_StringStringEntryProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_StringStringEntryProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TensorAnnotation_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TensorAnnotation_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_GraphProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_GraphProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TensorProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TensorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TensorProto_Segment_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TensorProto_Segment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_SparseTensorProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_SparseTensorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TensorShapeProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TensorShapeProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TensorShapeProto_Dimension_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TensorShapeProto_Dimension_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TypeProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TypeProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TypeProto_Tensor_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TypeProto_Tensor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TypeProto_Sequence_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TypeProto_Sequence_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TypeProto_Map_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TypeProto_Map_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TypeProto_SparseTensor_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TypeProto_SparseTensor_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_TypeProto_Opaque_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_TypeProto_Opaque_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_OperatorSetIdProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_OperatorSetIdProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_onnx_FunctionProto_descriptor;
  private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_onnx_FunctionProto_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
    return descriptor;
  }

  private static com.google.protobuf.Descriptors.FileDescriptor descriptor;

  static {
    java.lang.String[] descriptorData = {
      "\n\016onnx-ml.proto3\022\004onnx\"\350\004\n\016AttributeProt"
          + "o\022\014\n\004name\030\001 \001(\t\022\025\n\rref_attr_name\030\025 \001(\t\022\022"
          + "\n\ndoc_string\030\r \001(\t\0220\n\004type\030\024 \001(\0162\".onnx."
          + "AttributeProto.AttributeType\022\t\n\001f\030\002 \001(\002\022"
          + "\t\n\001i\030\003 \001(\003\022\t\n\001s\030\004 \001(\014\022\034\n\001t\030\005 \001(\0132\021.onnx."
          + "TensorProto\022\033\n\001g\030\006 \001(\0132\020.onnx.GraphProto"
          + "\022.\n\rsparse_tensor\030\026 \001(\0132\027.onnx.SparseTen"
          + "sorProto\022\016\n\006floats\030\007 \003(\002\022\014\n\004ints\030\010 \003(\003\022\017"
          + "\n\007strings\030\t \003(\014\022\"\n\007tensors\030\n \003(\0132\021.onnx."
          + "TensorProto\022 \n\006graphs\030\013 \003(\0132\020.onnx.Graph"
          + "Proto\022/\n\016sparse_tensors\030\027 \003(\0132\027.onnx.Spa"
          + "rseTensorProto\"\270\001\n\rAttributeType\022\r\n\tUNDE"
          + "FINED\020\000\022\t\n\005FLOAT\020\001\022\007\n\003INT\020\002\022\n\n\006STRING\020\003\022"
          + "\n\n\006TENSOR\020\004\022\t\n\005GRAPH\020\005\022\021\n\rSPARSE_TENSOR\020"
          + "\013\022\n\n\006FLOATS\020\006\022\010\n\004INTS\020\007\022\013\n\007STRINGS\020\010\022\013\n\007"
          + "TENSORS\020\t\022\n\n\006GRAPHS\020\n\022\022\n\016SPARSE_TENSORS\020"
          + "\014\"Q\n\016ValueInfoProto\022\014\n\004name\030\001 \001(\t\022\035\n\004typ"
          + "e\030\002 \001(\0132\017.onnx.TypeProto\022\022\n\ndoc_string\030\003"
          + " \001(\t\"\226\001\n\tNodeProto\022\r\n\005input\030\001 \003(\t\022\016\n\006out"
          + "put\030\002 \003(\t\022\014\n\004name\030\003 \001(\t\022\017\n\007op_type\030\004 \001(\t"
          + "\022\016\n\006domain\030\007 \001(\t\022\'\n\tattribute\030\005 \003(\0132\024.on"
          + "nx.AttributeProto\022\022\n\ndoc_string\030\006 \001(\t\"\273\002"
          + "\n\nModelProto\022\022\n\nir_version\030\001 \001(\003\022.\n\014opse"
          + "t_import\030\010 \003(\0132\030.onnx.OperatorSetIdProto"
          + "\022\025\n\rproducer_name\030\002 \001(\t\022\030\n\020producer_vers"
          + "ion\030\003 \001(\t\022\016\n\006domain\030\004 \001(\t\022\025\n\rmodel_versi"
          + "on\030\005 \001(\003\022\022\n\ndoc_string\030\006 \001(\t\022\037\n\005graph\030\007 "
          + "\001(\0132\020.onnx.GraphProto\022&\n\tfunctions\030d \003(\013"
          + "2\023.onnx.FunctionProto\0224\n\016metadata_props\030"
          + "\016 \003(\0132\034.onnx.StringStringEntryProto\"4\n\026S"
          + "tringStringEntryProto\022\013\n\003key\030\001 \001(\t\022\r\n\005va"
          + "lue\030\002 \001(\t\"k\n\020TensorAnnotation\022\023\n\013tensor_"
          + "name\030\001 \001(\t\022B\n\034quant_parameter_tensor_nam"
          + "es\030\002 \003(\0132\034.onnx.StringStringEntryProto\"\330"
          + "\002\n\nGraphProto\022\035\n\004node\030\001 \003(\0132\017.onnx.NodeP"
          + "roto\022\014\n\004name\030\002 \001(\t\022&\n\013initializer\030\005 \003(\0132"
          + "\021.onnx.TensorProto\0223\n\022sparse_initializer"
          + "\030\017 \003(\0132\027.onnx.SparseTensorProto\022\022\n\ndoc_s"
          + "tring\030\n \001(\t\022#\n\005input\030\013 \003(\0132\024.onnx.ValueI"
          + "nfoProto\022$\n\006output\030\014 \003(\0132\024.onnx.ValueInf"
          + "oProto\022(\n\nvalue_info\030\r \003(\0132\024.onnx.ValueI"
          + "nfoProto\0227\n\027quantization_annotation\030\016 \003("
          + "\0132\026.onnx.TensorAnnotation\"\270\005\n\013TensorProt"
          + "o\022\014\n\004dims\030\001 \003(\003\022\021\n\tdata_type\030\002 \001(\005\022*\n\007se"
          + "gment\030\003 \001(\0132\031.onnx.TensorProto.Segment\022\026"
          + "\n\nfloat_data\030\004 \003(\002B\002\020\001\022\026\n\nint32_data\030\005 \003"
          + "(\005B\002\020\001\022\023\n\013string_data\030\006 \003(\014\022\026\n\nint64_dat"
          + "a\030\007 \003(\003B\002\020\001\022\014\n\004name\030\010 \001(\t\022\022\n\ndoc_string\030"
          + "\014 \001(\t\022\020\n\010raw_data\030\t \001(\014\0223\n\rexternal_data"
          + "\030\r \003(\0132\034.onnx.StringStringEntryProto\0225\n\r"
          + "data_location\030\016 \001(\0162\036.onnx.TensorProto.D"
          + "ataLocation\022\027\n\013double_data\030\n \003(\001B\002\020\001\022\027\n\013"
          + "uint64_data\030\013 \003(\004B\002\020\001\032%\n\007Segment\022\r\n\005begi"
          + "n\030\001 \001(\003\022\013\n\003end\030\002 \001(\003\"\332\001\n\010DataType\022\r\n\tUND"
          + "EFINED\020\000\022\t\n\005FLOAT\020\001\022\t\n\005UINT8\020\002\022\010\n\004INT8\020\003"
          + "\022\n\n\006UINT16\020\004\022\t\n\005INT16\020\005\022\t\n\005INT32\020\006\022\t\n\005IN"
          + "T64\020\007\022\n\n\006STRING\020\010\022\010\n\004BOOL\020\t\022\013\n\007FLOAT16\020\n"
          + "\022\n\n\006DOUBLE\020\013\022\n\n\006UINT32\020\014\022\n\n\006UINT64\020\r\022\r\n\t"
          + "COMPLEX64\020\016\022\016\n\nCOMPLEX128\020\017\022\014\n\010BFLOAT16\020"
          + "\020\")\n\014DataLocation\022\013\n\007DEFAULT\020\000\022\014\n\010EXTERN"
          + "AL\020\001\"h\n\021SparseTensorProto\022!\n\006values\030\001 \001("
          + "\0132\021.onnx.TensorProto\022\"\n\007indices\030\002 \001(\0132\021."
          + "onnx.TensorProto\022\014\n\004dims\030\003 \003(\003\"\225\001\n\020Tenso"
          + "rShapeProto\022-\n\003dim\030\001 \003(\0132 .onnx.TensorSh"
          + "apeProto.Dimension\032R\n\tDimension\022\023\n\tdim_v"
          + "alue\030\001 \001(\003H\000\022\023\n\tdim_param\030\002 \001(\tH\000\022\022\n\nden"
          + "otation\030\003 \001(\tB\007\n\005value\"\302\004\n\tTypeProto\022-\n\013"
          + "tensor_type\030\001 \001(\0132\026.onnx.TypeProto.Tenso"
          + "rH\000\0221\n\rsequence_type\030\004 \001(\0132\030.onnx.TypePr"
          + "oto.SequenceH\000\022\'\n\010map_type\030\005 \001(\0132\023.onnx."
          + "TypeProto.MapH\000\022:\n\022sparse_tensor_type\030\010 "
          + "\001(\0132\034.onnx.TypeProto.SparseTensorH\000\022-\n\013o"
          + "paque_type\030\007 \001(\0132\026.onnx.TypeProto.Opaque"
          + "H\000\022\022\n\ndenotation\030\006 \001(\t\032B\n\006Tensor\022\021\n\telem"
          + "_type\030\001 \001(\005\022%\n\005shape\030\002 \001(\0132\026.onnx.Tensor"
          + "ShapeProto\032.\n\010Sequence\022\"\n\telem_type\030\001 \001("
          + "\0132\017.onnx.TypeProto\032<\n\003Map\022\020\n\010key_type\030\001 "
          + "\001(\005\022#\n\nvalue_type\030\002 \001(\0132\017.onnx.TypeProto"
          + "\032H\n\014SparseTensor\022\021\n\telem_type\030\001 \001(\005\022%\n\005s"
          + "hape\030\002 \001(\0132\026.onnx.TensorShapeProto\032&\n\006Op"
          + "aque\022\016\n\006domain\030\001 \001(\t\022\014\n\004name\030\002 \001(\tB\007\n\005va"
          + "lue\"5\n\022OperatorSetIdProto\022\016\n\006domain\030\001 \001("
          + "\t\022\017\n\007version\030\002 \001(\003\"\277\001\n\rFunctionProto\022\014\n\004"
          + "name\030\001 \001(\t\022\025\n\rsince_version\030\002 \001(\003\022$\n\006sta"
          + "tus\030\003 \001(\0162\024.onnx.OperatorStatus\022\r\n\005input"
          + "\030\004 \003(\t\022\016\n\006output\030\005 \003(\t\022\021\n\tattribute\030\006 \003("
          + "\t\022\035\n\004node\030\007 \003(\0132\017.onnx.NodeProto\022\022\n\ndoc_"
          + "string\030\010 \001(\t*\261\001\n\007Version\022\022\n\016_START_VERSI"
          + "ON\020\000\022\031\n\025IR_VERSION_2017_10_10\020\001\022\031\n\025IR_VE"
          + "RSION_2017_10_30\020\002\022\030\n\024IR_VERSION_2017_11"
          + "_3\020\003\022\030\n\024IR_VERSION_2019_1_22\020\004\022\030\n\024IR_VER"
          + "SION_2019_3_18\020\005\022\016\n\nIR_VERSION\020\006*.\n\016Oper"
          + "atorStatus\022\020\n\014EXPERIMENTAL\020\000\022\n\n\006STABLE\020\001"
          + "b\006proto3"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
        descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}, assigner);
    internal_static_onnx_AttributeProto_descriptor = getDescriptor().getMessageTypes().get(0);
    internal_static_onnx_AttributeProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_AttributeProto_descriptor,
            new java.lang.String[] {
              "Name",
              "RefAttrName",
              "DocString",
              "Type",
              "F",
              "I",
              "S",
              "T",
              "G",
              "SparseTensor",
              "Floats",
              "Ints",
              "Strings",
              "Tensors",
              "Graphs",
              "SparseTensors",
            });
    internal_static_onnx_ValueInfoProto_descriptor = getDescriptor().getMessageTypes().get(1);
    internal_static_onnx_ValueInfoProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_ValueInfoProto_descriptor,
            new java.lang.String[] {
              "Name", "Type", "DocString",
            });
    internal_static_onnx_NodeProto_descriptor = getDescriptor().getMessageTypes().get(2);
    internal_static_onnx_NodeProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_NodeProto_descriptor,
            new java.lang.String[] {
              "Input", "Output", "Name", "OpType", "Domain", "Attribute", "DocString",
            });
    internal_static_onnx_ModelProto_descriptor = getDescriptor().getMessageTypes().get(3);
    internal_static_onnx_ModelProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_ModelProto_descriptor,
            new java.lang.String[] {
              "IrVersion",
              "OpsetImport",
              "ProducerName",
              "ProducerVersion",
              "Domain",
              "ModelVersion",
              "DocString",
              "Graph",
              "Functions",
              "MetadataProps",
            });
    internal_static_onnx_StringStringEntryProto_descriptor =
        getDescriptor().getMessageTypes().get(4);
    internal_static_onnx_StringStringEntryProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_StringStringEntryProto_descriptor,
            new java.lang.String[] {
              "Key", "Value",
            });
    internal_static_onnx_TensorAnnotation_descriptor = getDescriptor().getMessageTypes().get(5);
    internal_static_onnx_TensorAnnotation_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TensorAnnotation_descriptor,
            new java.lang.String[] {
              "TensorName", "QuantParameterTensorNames",
            });
    internal_static_onnx_GraphProto_descriptor = getDescriptor().getMessageTypes().get(6);
    internal_static_onnx_GraphProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_GraphProto_descriptor,
            new java.lang.String[] {
              "Node",
              "Name",
              "Initializer",
              "SparseInitializer",
              "DocString",
              "Input",
              "Output",
              "ValueInfo",
              "QuantizationAnnotation",
            });
    internal_static_onnx_TensorProto_descriptor = getDescriptor().getMessageTypes().get(7);
    internal_static_onnx_TensorProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TensorProto_descriptor,
            new java.lang.String[] {
              "Dims",
              "DataType",
              "Segment",
              "FloatData",
              "Int32Data",
              "StringData",
              "Int64Data",
              "Name",
              "DocString",
              "RawData",
              "ExternalData",
              "DataLocation",
              "DoubleData",
              "Uint64Data",
            });
    internal_static_onnx_TensorProto_Segment_descriptor =
        internal_static_onnx_TensorProto_descriptor.getNestedTypes().get(0);
    internal_static_onnx_TensorProto_Segment_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TensorProto_Segment_descriptor,
            new java.lang.String[] {
              "Begin", "End",
            });
    internal_static_onnx_SparseTensorProto_descriptor = getDescriptor().getMessageTypes().get(8);
    internal_static_onnx_SparseTensorProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_SparseTensorProto_descriptor,
            new java.lang.String[] {
              "Values", "Indices", "Dims",
            });
    internal_static_onnx_TensorShapeProto_descriptor = getDescriptor().getMessageTypes().get(9);
    internal_static_onnx_TensorShapeProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TensorShapeProto_descriptor,
            new java.lang.String[] {
              "Dim",
            });
    internal_static_onnx_TensorShapeProto_Dimension_descriptor =
        internal_static_onnx_TensorShapeProto_descriptor.getNestedTypes().get(0);
    internal_static_onnx_TensorShapeProto_Dimension_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TensorShapeProto_Dimension_descriptor,
            new java.lang.String[] {
              "DimValue", "DimParam", "Denotation", "Value",
            });
    internal_static_onnx_TypeProto_descriptor = getDescriptor().getMessageTypes().get(10);
    internal_static_onnx_TypeProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TypeProto_descriptor,
            new java.lang.String[] {
              "TensorType",
              "SequenceType",
              "MapType",
              "SparseTensorType",
              "OpaqueType",
              "Denotation",
              "Value",
            });
    internal_static_onnx_TypeProto_Tensor_descriptor =
        internal_static_onnx_TypeProto_descriptor.getNestedTypes().get(0);
    internal_static_onnx_TypeProto_Tensor_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TypeProto_Tensor_descriptor,
            new java.lang.String[] {
              "ElemType", "Shape",
            });
    internal_static_onnx_TypeProto_Sequence_descriptor =
        internal_static_onnx_TypeProto_descriptor.getNestedTypes().get(1);
    internal_static_onnx_TypeProto_Sequence_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TypeProto_Sequence_descriptor,
            new java.lang.String[] {
              "ElemType",
            });
    internal_static_onnx_TypeProto_Map_descriptor =
        internal_static_onnx_TypeProto_descriptor.getNestedTypes().get(2);
    internal_static_onnx_TypeProto_Map_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TypeProto_Map_descriptor,
            new java.lang.String[] {
              "KeyType", "ValueType",
            });
    internal_static_onnx_TypeProto_SparseTensor_descriptor =
        internal_static_onnx_TypeProto_descriptor.getNestedTypes().get(3);
    internal_static_onnx_TypeProto_SparseTensor_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TypeProto_SparseTensor_descriptor,
            new java.lang.String[] {
              "ElemType", "Shape",
            });
    internal_static_onnx_TypeProto_Opaque_descriptor =
        internal_static_onnx_TypeProto_descriptor.getNestedTypes().get(4);
    internal_static_onnx_TypeProto_Opaque_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_TypeProto_Opaque_descriptor,
            new java.lang.String[] {
              "Domain", "Name",
            });
    internal_static_onnx_OperatorSetIdProto_descriptor = getDescriptor().getMessageTypes().get(11);
    internal_static_onnx_OperatorSetIdProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_OperatorSetIdProto_descriptor,
            new java.lang.String[] {
              "Domain", "Version",
            });
    internal_static_onnx_FunctionProto_descriptor = getDescriptor().getMessageTypes().get(12);
    internal_static_onnx_FunctionProto_fieldAccessorTable =
        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
            internal_static_onnx_FunctionProto_descriptor,
            new java.lang.String[] {
              "Name", "SinceVersion", "Status", "Input", "Output", "Attribute", "Node", "DocString",
            });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
