// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: tensorflow/core/framework/op_def.proto

package org.tensorflow.proto.framework;

/**
 * <pre>
 * Defines an operation. A NodeDef in a GraphDef specifies an Op by
 * using the "op" field which should match the name of a OpDef.
 * LINT.IfChange
 * </pre>
 *
 * Protobuf type {@code tensorflow.OpDef}
 */
public  final class OpDef extends
    com.google.protobuf.GeneratedMessageV3 implements
    // @@protoc_insertion_point(message_implements:tensorflow.OpDef)
    OpDefOrBuilder {
private static final long serialVersionUID = 0L;
  // Use OpDef.newBuilder() to construct.
  private OpDef(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
    super(builder);
  }
  private OpDef() {
    name_ = "";
    inputArg_ = java.util.Collections.emptyList();
    outputArg_ = java.util.Collections.emptyList();
    controlOutput_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    attr_ = java.util.Collections.emptyList();
    summary_ = "";
    description_ = "";
  }

  @java.lang.Override
  @SuppressWarnings({"unused"})
  protected java.lang.Object newInstance(
      UnusedPrivateParameter unused) {
    return new OpDef();
  }

  @java.lang.Override
  public final com.google.protobuf.UnknownFieldSet
  getUnknownFields() {
    return this.unknownFields;
  }
  private OpDef(
      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: {
            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
              inputArg_ = new java.util.ArrayList<org.tensorflow.proto.framework.OpDef.ArgDef>();
              mutable_bitField0_ |= 0x00000001;
            }
            inputArg_.add(
                input.readMessage(org.tensorflow.proto.framework.OpDef.ArgDef.parser(), extensionRegistry));
            break;
          }
          case 26: {
            if (!((mutable_bitField0_ & 0x00000002) != 0)) {
              outputArg_ = new java.util.ArrayList<org.tensorflow.proto.framework.OpDef.ArgDef>();
              mutable_bitField0_ |= 0x00000002;
            }
            outputArg_.add(
                input.readMessage(org.tensorflow.proto.framework.OpDef.ArgDef.parser(), extensionRegistry));
            break;
          }
          case 34: {
            if (!((mutable_bitField0_ & 0x00000008) != 0)) {
              attr_ = new java.util.ArrayList<org.tensorflow.proto.framework.OpDef.AttrDef>();
              mutable_bitField0_ |= 0x00000008;
            }
            attr_.add(
                input.readMessage(org.tensorflow.proto.framework.OpDef.AttrDef.parser(), extensionRegistry));
            break;
          }
          case 42: {
            java.lang.String s = input.readStringRequireUtf8();

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

            description_ = s;
            break;
          }
          case 66: {
            org.tensorflow.proto.framework.OpDeprecation.Builder subBuilder = null;
            if (deprecation_ != null) {
              subBuilder = deprecation_.toBuilder();
            }
            deprecation_ = input.readMessage(org.tensorflow.proto.framework.OpDeprecation.parser(), extensionRegistry);
            if (subBuilder != null) {
              subBuilder.mergeFrom(deprecation_);
              deprecation_ = subBuilder.buildPartial();
            }

            break;
          }
          case 128: {

            isAggregate_ = input.readBool();
            break;
          }
          case 136: {

            isStateful_ = input.readBool();
            break;
          }
          case 144: {

            isCommutative_ = input.readBool();
            break;
          }
          case 152: {

            allowsUninitializedInput_ = input.readBool();
            break;
          }
          case 162: {
            java.lang.String s = input.readStringRequireUtf8();
            if (!((mutable_bitField0_ & 0x00000004) != 0)) {
              controlOutput_ = new com.google.protobuf.LazyStringArrayList();
              mutable_bitField0_ |= 0x00000004;
            }
            controlOutput_.add(s);
            break;
          }
          default: {
            if (!parseUnknownField(
                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) != 0)) {
        inputArg_ = java.util.Collections.unmodifiableList(inputArg_);
      }
      if (((mutable_bitField0_ & 0x00000002) != 0)) {
        outputArg_ = java.util.Collections.unmodifiableList(outputArg_);
      }
      if (((mutable_bitField0_ & 0x00000008) != 0)) {
        attr_ = java.util.Collections.unmodifiableList(attr_);
      }
      if (((mutable_bitField0_ & 0x00000004) != 0)) {
        controlOutput_ = controlOutput_.getUnmodifiableView();
      }
      this.unknownFields = unknownFields.build();
      makeExtensionsImmutable();
    }
  }
  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            org.tensorflow.proto.framework.OpDef.class, org.tensorflow.proto.framework.OpDef.Builder.class);
  }

  public interface ArgDefOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.OpDef.ArgDef)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * Human readable description.
     * </pre>
     *
     * <code>string description = 2;</code>
     */
    java.lang.String getDescription();
    /**
     * <pre>
     * Human readable description.
     * </pre>
     *
     * <code>string description = 2;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    /**
     * <pre>
     * Describes the type of one or more tensors that are accepted/produced
     * by this input/output arg.  The only legal combinations are:
     * * For a single tensor: either the "type" field is set or the
     *   "type_attr" field is set to the name of an attr with type "type".
     * * For a sequence of tensors with the same type: the "number_attr"
     *   field will be set to the name of an attr with type "int", and
     *   either the "type" or "type_attr" field will be set as for
     *   single tensors.
     * * For a sequence of tensors, the "type_list_attr" field will be set
     *   to the name of an attr with type "list(type)".
     * </pre>
     *
     * <code>.tensorflow.DataType type = 3;</code>
     */
    int getTypeValue();
    /**
     * <pre>
     * Describes the type of one or more tensors that are accepted/produced
     * by this input/output arg.  The only legal combinations are:
     * * For a single tensor: either the "type" field is set or the
     *   "type_attr" field is set to the name of an attr with type "type".
     * * For a sequence of tensors with the same type: the "number_attr"
     *   field will be set to the name of an attr with type "int", and
     *   either the "type" or "type_attr" field will be set as for
     *   single tensors.
     * * For a sequence of tensors, the "type_list_attr" field will be set
     *   to the name of an attr with type "list(type)".
     * </pre>
     *
     * <code>.tensorflow.DataType type = 3;</code>
     */
    org.tensorflow.proto.framework.DataType getType();

    /**
     * <pre>
     * if specified, attr must have type "type"
     * </pre>
     *
     * <code>string type_attr = 4;</code>
     */
    java.lang.String getTypeAttr();
    /**
     * <pre>
     * if specified, attr must have type "type"
     * </pre>
     *
     * <code>string type_attr = 4;</code>
     */
    com.google.protobuf.ByteString
        getTypeAttrBytes();

    /**
     * <pre>
     * if specified, attr must have type "int"
     * </pre>
     *
     * <code>string number_attr = 5;</code>
     */
    java.lang.String getNumberAttr();
    /**
     * <pre>
     * if specified, attr must have type "int"
     * </pre>
     *
     * <code>string number_attr = 5;</code>
     */
    com.google.protobuf.ByteString
        getNumberAttrBytes();

    /**
     * <pre>
     * If specified, attr must have type "list(type)", and none of
     * type, type_attr, and number_attr may be specified.
     * </pre>
     *
     * <code>string type_list_attr = 6;</code>
     */
    java.lang.String getTypeListAttr();
    /**
     * <pre>
     * If specified, attr must have type "list(type)", and none of
     * type, type_attr, and number_attr may be specified.
     * </pre>
     *
     * <code>string type_list_attr = 6;</code>
     */
    com.google.protobuf.ByteString
        getTypeListAttrBytes();

    /**
     * <pre>
     * For inputs: if true, the inputs are required to be refs.
     *   By default, inputs can be either refs or non-refs.
     * For outputs: if true, outputs are refs, otherwise they are not.
     * </pre>
     *
     * <code>bool is_ref = 16;</code>
     */
    boolean getIsRef();
  }
  /**
   * <pre>
   * For describing inputs and outputs.
   * </pre>
   *
   * Protobuf type {@code tensorflow.OpDef.ArgDef}
   */
  public  static final class ArgDef extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.OpDef.ArgDef)
      ArgDefOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ArgDef.newBuilder() to construct.
    private ArgDef(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ArgDef() {
      name_ = "";
      description_ = "";
      type_ = 0;
      typeAttr_ = "";
      numberAttr_ = "";
      typeListAttr_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ArgDef();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ArgDef(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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: {
              java.lang.String s = input.readStringRequireUtf8();

              description_ = s;
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

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

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

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

              typeListAttr_ = s;
              break;
            }
            case 128: {

              isRef_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownField(
                  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 org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_ArgDef_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_ArgDef_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.tensorflow.proto.framework.OpDef.ArgDef.class, org.tensorflow.proto.framework.OpDef.ArgDef.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
     * </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>
     * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
     * </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 DESCRIPTION_FIELD_NUMBER = 2;
    private volatile java.lang.Object description_;
    /**
     * <pre>
     * Human readable description.
     * </pre>
     *
     * <code>string description = 2;</code>
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      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();
        description_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Human readable description.
     * </pre>
     *
     * <code>string description = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_FIELD_NUMBER = 3;
    private int type_;
    /**
     * <pre>
     * Describes the type of one or more tensors that are accepted/produced
     * by this input/output arg.  The only legal combinations are:
     * * For a single tensor: either the "type" field is set or the
     *   "type_attr" field is set to the name of an attr with type "type".
     * * For a sequence of tensors with the same type: the "number_attr"
     *   field will be set to the name of an attr with type "int", and
     *   either the "type" or "type_attr" field will be set as for
     *   single tensors.
     * * For a sequence of tensors, the "type_list_attr" field will be set
     *   to the name of an attr with type "list(type)".
     * </pre>
     *
     * <code>.tensorflow.DataType type = 3;</code>
     */
    public int getTypeValue() {
      return type_;
    }
    /**
     * <pre>
     * Describes the type of one or more tensors that are accepted/produced
     * by this input/output arg.  The only legal combinations are:
     * * For a single tensor: either the "type" field is set or the
     *   "type_attr" field is set to the name of an attr with type "type".
     * * For a sequence of tensors with the same type: the "number_attr"
     *   field will be set to the name of an attr with type "int", and
     *   either the "type" or "type_attr" field will be set as for
     *   single tensors.
     * * For a sequence of tensors, the "type_list_attr" field will be set
     *   to the name of an attr with type "list(type)".
     * </pre>
     *
     * <code>.tensorflow.DataType type = 3;</code>
     */
    public org.tensorflow.proto.framework.DataType getType() {
      @SuppressWarnings("deprecation")
      org.tensorflow.proto.framework.DataType result = org.tensorflow.proto.framework.DataType.valueOf(type_);
      return result == null ? org.tensorflow.proto.framework.DataType.UNRECOGNIZED : result;
    }

    public static final int TYPE_ATTR_FIELD_NUMBER = 4;
    private volatile java.lang.Object typeAttr_;
    /**
     * <pre>
     * if specified, attr must have type "type"
     * </pre>
     *
     * <code>string type_attr = 4;</code>
     */
    public java.lang.String getTypeAttr() {
      java.lang.Object ref = typeAttr_;
      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();
        typeAttr_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * if specified, attr must have type "type"
     * </pre>
     *
     * <code>string type_attr = 4;</code>
     */
    public com.google.protobuf.ByteString
        getTypeAttrBytes() {
      java.lang.Object ref = typeAttr_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        typeAttr_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NUMBER_ATTR_FIELD_NUMBER = 5;
    private volatile java.lang.Object numberAttr_;
    /**
     * <pre>
     * if specified, attr must have type "int"
     * </pre>
     *
     * <code>string number_attr = 5;</code>
     */
    public java.lang.String getNumberAttr() {
      java.lang.Object ref = numberAttr_;
      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();
        numberAttr_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * if specified, attr must have type "int"
     * </pre>
     *
     * <code>string number_attr = 5;</code>
     */
    public com.google.protobuf.ByteString
        getNumberAttrBytes() {
      java.lang.Object ref = numberAttr_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        numberAttr_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TYPE_LIST_ATTR_FIELD_NUMBER = 6;
    private volatile java.lang.Object typeListAttr_;
    /**
     * <pre>
     * If specified, attr must have type "list(type)", and none of
     * type, type_attr, and number_attr may be specified.
     * </pre>
     *
     * <code>string type_list_attr = 6;</code>
     */
    public java.lang.String getTypeListAttr() {
      java.lang.Object ref = typeListAttr_;
      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();
        typeListAttr_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * If specified, attr must have type "list(type)", and none of
     * type, type_attr, and number_attr may be specified.
     * </pre>
     *
     * <code>string type_list_attr = 6;</code>
     */
    public com.google.protobuf.ByteString
        getTypeListAttrBytes() {
      java.lang.Object ref = typeListAttr_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        typeListAttr_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int IS_REF_FIELD_NUMBER = 16;
    private boolean isRef_;
    /**
     * <pre>
     * For inputs: if true, the inputs are required to be refs.
     *   By default, inputs can be either refs or non-refs.
     * For outputs: if true, outputs are refs, otherwise they are not.
     * </pre>
     *
     * <code>bool is_ref = 16;</code>
     */
    public boolean getIsRef() {
      return isRef_;
    }

    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 (!getDescriptionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_);
      }
      if (type_ != org.tensorflow.proto.framework.DataType.DT_INVALID.getNumber()) {
        output.writeEnum(3, type_);
      }
      if (!getTypeAttrBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, typeAttr_);
      }
      if (!getNumberAttrBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, numberAttr_);
      }
      if (!getTypeListAttrBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, typeListAttr_);
      }
      if (isRef_ != false) {
        output.writeBool(16, isRef_);
      }
      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 (!getDescriptionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_);
      }
      if (type_ != org.tensorflow.proto.framework.DataType.DT_INVALID.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, type_);
      }
      if (!getTypeAttrBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, typeAttr_);
      }
      if (!getNumberAttrBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, numberAttr_);
      }
      if (!getTypeListAttrBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, typeListAttr_);
      }
      if (isRef_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, isRef_);
      }
      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 org.tensorflow.proto.framework.OpDef.ArgDef)) {
        return super.equals(obj);
      }
      org.tensorflow.proto.framework.OpDef.ArgDef other = (org.tensorflow.proto.framework.OpDef.ArgDef) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (!getDescription()
          .equals(other.getDescription())) return false;
      if (type_ != other.type_) return false;
      if (!getTypeAttr()
          .equals(other.getTypeAttr())) return false;
      if (!getNumberAttr()
          .equals(other.getNumberAttr())) return false;
      if (!getTypeListAttr()
          .equals(other.getTypeListAttr())) return false;
      if (getIsRef()
          != other.getIsRef()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @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) + DESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getDescription().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      hash = (37 * hash) + TYPE_ATTR_FIELD_NUMBER;
      hash = (53 * hash) + getTypeAttr().hashCode();
      hash = (37 * hash) + NUMBER_ATTR_FIELD_NUMBER;
      hash = (53 * hash) + getNumberAttr().hashCode();
      hash = (37 * hash) + TYPE_LIST_ATTR_FIELD_NUMBER;
      hash = (53 * hash) + getTypeListAttr().hashCode();
      hash = (37 * hash) + IS_REF_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getIsRef());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef 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 org.tensorflow.proto.framework.OpDef.ArgDef parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef 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 org.tensorflow.proto.framework.OpDef.ArgDef parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.tensorflow.proto.framework.OpDef.ArgDef 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(org.tensorflow.proto.framework.OpDef.ArgDef 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 describing inputs and outputs.
     * </pre>
     *
     * Protobuf type {@code tensorflow.OpDef.ArgDef}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.OpDef.ArgDef)
        org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_ArgDef_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_ArgDef_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.tensorflow.proto.framework.OpDef.ArgDef.class, org.tensorflow.proto.framework.OpDef.ArgDef.Builder.class);
      }

      // Construct using org.tensorflow.proto.framework.OpDef.ArgDef.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_ = "";

        description_ = "";

        type_ = 0;

        typeAttr_ = "";

        numberAttr_ = "";

        typeListAttr_ = "";

        isRef_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_ArgDef_descriptor;
      }

      @java.lang.Override
      public org.tensorflow.proto.framework.OpDef.ArgDef getDefaultInstanceForType() {
        return org.tensorflow.proto.framework.OpDef.ArgDef.getDefaultInstance();
      }

      @java.lang.Override
      public org.tensorflow.proto.framework.OpDef.ArgDef build() {
        org.tensorflow.proto.framework.OpDef.ArgDef result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.tensorflow.proto.framework.OpDef.ArgDef buildPartial() {
        org.tensorflow.proto.framework.OpDef.ArgDef result = new org.tensorflow.proto.framework.OpDef.ArgDef(this);
        result.name_ = name_;
        result.description_ = description_;
        result.type_ = type_;
        result.typeAttr_ = typeAttr_;
        result.numberAttr_ = numberAttr_;
        result.typeListAttr_ = typeListAttr_;
        result.isRef_ = isRef_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.tensorflow.proto.framework.OpDef.ArgDef) {
          return mergeFrom((org.tensorflow.proto.framework.OpDef.ArgDef)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.tensorflow.proto.framework.OpDef.ArgDef other) {
        if (other == org.tensorflow.proto.framework.OpDef.ArgDef.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getDescription().isEmpty()) {
          description_ = other.description_;
          onChanged();
        }
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (!other.getTypeAttr().isEmpty()) {
          typeAttr_ = other.typeAttr_;
          onChanged();
        }
        if (!other.getNumberAttr().isEmpty()) {
          numberAttr_ = other.numberAttr_;
          onChanged();
        }
        if (!other.getTypeListAttr().isEmpty()) {
          typeListAttr_ = other.typeListAttr_;
          onChanged();
        }
        if (other.getIsRef() != false) {
          setIsRef(other.getIsRef());
        }
        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 {
        org.tensorflow.proto.framework.OpDef.ArgDef parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.tensorflow.proto.framework.OpDef.ArgDef) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
       * </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>
       * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
       * </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>
       * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
       * </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>
       * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name for the input/output.  Should match the regexp "[a-z][a-z0-9_]*".
       * </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 description_ = "";
      /**
       * <pre>
       * Human readable description.
       * </pre>
       *
       * <code>string description = 2;</code>
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Human readable description.
       * </pre>
       *
       * <code>string description = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Human readable description.
       * </pre>
       *
       * <code>string description = 2;</code>
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable description.
       * </pre>
       *
       * <code>string description = 2;</code>
       */
      public Builder clearDescription() {
        
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable description.
       * </pre>
       *
       * <code>string description = 2;</code>
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        description_ = value;
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       * <pre>
       * Describes the type of one or more tensors that are accepted/produced
       * by this input/output arg.  The only legal combinations are:
       * * For a single tensor: either the "type" field is set or the
       *   "type_attr" field is set to the name of an attr with type "type".
       * * For a sequence of tensors with the same type: the "number_attr"
       *   field will be set to the name of an attr with type "int", and
       *   either the "type" or "type_attr" field will be set as for
       *   single tensors.
       * * For a sequence of tensors, the "type_list_attr" field will be set
       *   to the name of an attr with type "list(type)".
       * </pre>
       *
       * <code>.tensorflow.DataType type = 3;</code>
       */
      public int getTypeValue() {
        return type_;
      }
      /**
       * <pre>
       * Describes the type of one or more tensors that are accepted/produced
       * by this input/output arg.  The only legal combinations are:
       * * For a single tensor: either the "type" field is set or the
       *   "type_attr" field is set to the name of an attr with type "type".
       * * For a sequence of tensors with the same type: the "number_attr"
       *   field will be set to the name of an attr with type "int", and
       *   either the "type" or "type_attr" field will be set as for
       *   single tensors.
       * * For a sequence of tensors, the "type_list_attr" field will be set
       *   to the name of an attr with type "list(type)".
       * </pre>
       *
       * <code>.tensorflow.DataType type = 3;</code>
       */
      public Builder setTypeValue(int value) {
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Describes the type of one or more tensors that are accepted/produced
       * by this input/output arg.  The only legal combinations are:
       * * For a single tensor: either the "type" field is set or the
       *   "type_attr" field is set to the name of an attr with type "type".
       * * For a sequence of tensors with the same type: the "number_attr"
       *   field will be set to the name of an attr with type "int", and
       *   either the "type" or "type_attr" field will be set as for
       *   single tensors.
       * * For a sequence of tensors, the "type_list_attr" field will be set
       *   to the name of an attr with type "list(type)".
       * </pre>
       *
       * <code>.tensorflow.DataType type = 3;</code>
       */
      public org.tensorflow.proto.framework.DataType getType() {
        @SuppressWarnings("deprecation")
        org.tensorflow.proto.framework.DataType result = org.tensorflow.proto.framework.DataType.valueOf(type_);
        return result == null ? org.tensorflow.proto.framework.DataType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Describes the type of one or more tensors that are accepted/produced
       * by this input/output arg.  The only legal combinations are:
       * * For a single tensor: either the "type" field is set or the
       *   "type_attr" field is set to the name of an attr with type "type".
       * * For a sequence of tensors with the same type: the "number_attr"
       *   field will be set to the name of an attr with type "int", and
       *   either the "type" or "type_attr" field will be set as for
       *   single tensors.
       * * For a sequence of tensors, the "type_list_attr" field will be set
       *   to the name of an attr with type "list(type)".
       * </pre>
       *
       * <code>.tensorflow.DataType type = 3;</code>
       */
      public Builder setType(org.tensorflow.proto.framework.DataType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Describes the type of one or more tensors that are accepted/produced
       * by this input/output arg.  The only legal combinations are:
       * * For a single tensor: either the "type" field is set or the
       *   "type_attr" field is set to the name of an attr with type "type".
       * * For a sequence of tensors with the same type: the "number_attr"
       *   field will be set to the name of an attr with type "int", and
       *   either the "type" or "type_attr" field will be set as for
       *   single tensors.
       * * For a sequence of tensors, the "type_list_attr" field will be set
       *   to the name of an attr with type "list(type)".
       * </pre>
       *
       * <code>.tensorflow.DataType type = 3;</code>
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object typeAttr_ = "";
      /**
       * <pre>
       * if specified, attr must have type "type"
       * </pre>
       *
       * <code>string type_attr = 4;</code>
       */
      public java.lang.String getTypeAttr() {
        java.lang.Object ref = typeAttr_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          typeAttr_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * if specified, attr must have type "type"
       * </pre>
       *
       * <code>string type_attr = 4;</code>
       */
      public com.google.protobuf.ByteString
          getTypeAttrBytes() {
        java.lang.Object ref = typeAttr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          typeAttr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * if specified, attr must have type "type"
       * </pre>
       *
       * <code>string type_attr = 4;</code>
       */
      public Builder setTypeAttr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        typeAttr_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if specified, attr must have type "type"
       * </pre>
       *
       * <code>string type_attr = 4;</code>
       */
      public Builder clearTypeAttr() {
        
        typeAttr_ = getDefaultInstance().getTypeAttr();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if specified, attr must have type "type"
       * </pre>
       *
       * <code>string type_attr = 4;</code>
       */
      public Builder setTypeAttrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        typeAttr_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object numberAttr_ = "";
      /**
       * <pre>
       * if specified, attr must have type "int"
       * </pre>
       *
       * <code>string number_attr = 5;</code>
       */
      public java.lang.String getNumberAttr() {
        java.lang.Object ref = numberAttr_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          numberAttr_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * if specified, attr must have type "int"
       * </pre>
       *
       * <code>string number_attr = 5;</code>
       */
      public com.google.protobuf.ByteString
          getNumberAttrBytes() {
        java.lang.Object ref = numberAttr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          numberAttr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * if specified, attr must have type "int"
       * </pre>
       *
       * <code>string number_attr = 5;</code>
       */
      public Builder setNumberAttr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        numberAttr_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if specified, attr must have type "int"
       * </pre>
       *
       * <code>string number_attr = 5;</code>
       */
      public Builder clearNumberAttr() {
        
        numberAttr_ = getDefaultInstance().getNumberAttr();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * if specified, attr must have type "int"
       * </pre>
       *
       * <code>string number_attr = 5;</code>
       */
      public Builder setNumberAttrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        numberAttr_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object typeListAttr_ = "";
      /**
       * <pre>
       * If specified, attr must have type "list(type)", and none of
       * type, type_attr, and number_attr may be specified.
       * </pre>
       *
       * <code>string type_list_attr = 6;</code>
       */
      public java.lang.String getTypeListAttr() {
        java.lang.Object ref = typeListAttr_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          typeListAttr_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * If specified, attr must have type "list(type)", and none of
       * type, type_attr, and number_attr may be specified.
       * </pre>
       *
       * <code>string type_list_attr = 6;</code>
       */
      public com.google.protobuf.ByteString
          getTypeListAttrBytes() {
        java.lang.Object ref = typeListAttr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          typeListAttr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * If specified, attr must have type "list(type)", and none of
       * type, type_attr, and number_attr may be specified.
       * </pre>
       *
       * <code>string type_list_attr = 6;</code>
       */
      public Builder setTypeListAttr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        typeListAttr_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * If specified, attr must have type "list(type)", and none of
       * type, type_attr, and number_attr may be specified.
       * </pre>
       *
       * <code>string type_list_attr = 6;</code>
       */
      public Builder clearTypeListAttr() {
        
        typeListAttr_ = getDefaultInstance().getTypeListAttr();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * If specified, attr must have type "list(type)", and none of
       * type, type_attr, and number_attr may be specified.
       * </pre>
       *
       * <code>string type_list_attr = 6;</code>
       */
      public Builder setTypeListAttrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        typeListAttr_ = value;
        onChanged();
        return this;
      }

      private boolean isRef_ ;
      /**
       * <pre>
       * For inputs: if true, the inputs are required to be refs.
       *   By default, inputs can be either refs or non-refs.
       * For outputs: if true, outputs are refs, otherwise they are not.
       * </pre>
       *
       * <code>bool is_ref = 16;</code>
       */
      public boolean getIsRef() {
        return isRef_;
      }
      /**
       * <pre>
       * For inputs: if true, the inputs are required to be refs.
       *   By default, inputs can be either refs or non-refs.
       * For outputs: if true, outputs are refs, otherwise they are not.
       * </pre>
       *
       * <code>bool is_ref = 16;</code>
       */
      public Builder setIsRef(boolean value) {
        
        isRef_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * For inputs: if true, the inputs are required to be refs.
       *   By default, inputs can be either refs or non-refs.
       * For outputs: if true, outputs are refs, otherwise they are not.
       * </pre>
       *
       * <code>bool is_ref = 16;</code>
       */
      public Builder clearIsRef() {
        
        isRef_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:tensorflow.OpDef.ArgDef)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.OpDef.ArgDef)
    private static final org.tensorflow.proto.framework.OpDef.ArgDef DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.tensorflow.proto.framework.OpDef.ArgDef();
    }

    public static org.tensorflow.proto.framework.OpDef.ArgDef getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.tensorflow.proto.framework.OpDef.ArgDef getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AttrDefOrBuilder extends
      // @@protoc_insertion_point(interface_extends:tensorflow.OpDef.AttrDef)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A descriptive name for the argument.  May be used, e.g. by the
     * Python client, as a keyword argument name, and so should match
     * the regexp "[a-z][a-z0-9_]+".
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * A descriptive name for the argument.  May be used, e.g. by the
     * Python client, as a keyword argument name, and so should match
     * the regexp "[a-z][a-z0-9_]+".
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * One of the type names from attr_value.proto ("string", "list(string)",
     * "int", etc.).
     * </pre>
     *
     * <code>string type = 2;</code>
     */
    java.lang.String getType();
    /**
     * <pre>
     * One of the type names from attr_value.proto ("string", "list(string)",
     * "int", etc.).
     * </pre>
     *
     * <code>string type = 2;</code>
     */
    com.google.protobuf.ByteString
        getTypeBytes();

    /**
     * <pre>
     * A reasonable default for this attribute if the user does not supply
     * a value.  If not specified, the user must supply a value.
     * </pre>
     *
     * <code>.tensorflow.AttrValue default_value = 3;</code>
     */
    boolean hasDefaultValue();
    /**
     * <pre>
     * A reasonable default for this attribute if the user does not supply
     * a value.  If not specified, the user must supply a value.
     * </pre>
     *
     * <code>.tensorflow.AttrValue default_value = 3;</code>
     */
    org.tensorflow.proto.framework.AttrValue getDefaultValue();
    /**
     * <pre>
     * A reasonable default for this attribute if the user does not supply
     * a value.  If not specified, the user must supply a value.
     * </pre>
     *
     * <code>.tensorflow.AttrValue default_value = 3;</code>
     */
    org.tensorflow.proto.framework.AttrValueOrBuilder getDefaultValueOrBuilder();

    /**
     * <pre>
     * Human-readable description.
     * </pre>
     *
     * <code>string description = 4;</code>
     */
    java.lang.String getDescription();
    /**
     * <pre>
     * Human-readable description.
     * </pre>
     *
     * <code>string description = 4;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    /**
     * <pre>
     * For type == "int", this is a minimum value.  For "list(___)"
     * types, this is the minimum length.
     * </pre>
     *
     * <code>bool has_minimum = 5;</code>
     */
    boolean getHasMinimum();

    /**
     * <code>int64 minimum = 6;</code>
     */
    long getMinimum();

    /**
     * <pre>
     * The set of allowed values.  Has type that is the "list" version
     * of the "type" field above (uses the "list" field of AttrValue).
     * If type == "type" or "list(type)" above, then the "type" field
     * of "allowed_values.list" has the set of allowed DataTypes.
     * If type == "string" or "list(string)", then the "s" field of
     * "allowed_values.list" has the set of allowed strings.
     * </pre>
     *
     * <code>.tensorflow.AttrValue allowed_values = 7;</code>
     */
    boolean hasAllowedValues();
    /**
     * <pre>
     * The set of allowed values.  Has type that is the "list" version
     * of the "type" field above (uses the "list" field of AttrValue).
     * If type == "type" or "list(type)" above, then the "type" field
     * of "allowed_values.list" has the set of allowed DataTypes.
     * If type == "string" or "list(string)", then the "s" field of
     * "allowed_values.list" has the set of allowed strings.
     * </pre>
     *
     * <code>.tensorflow.AttrValue allowed_values = 7;</code>
     */
    org.tensorflow.proto.framework.AttrValue getAllowedValues();
    /**
     * <pre>
     * The set of allowed values.  Has type that is the "list" version
     * of the "type" field above (uses the "list" field of AttrValue).
     * If type == "type" or "list(type)" above, then the "type" field
     * of "allowed_values.list" has the set of allowed DataTypes.
     * If type == "string" or "list(string)", then the "s" field of
     * "allowed_values.list" has the set of allowed strings.
     * </pre>
     *
     * <code>.tensorflow.AttrValue allowed_values = 7;</code>
     */
    org.tensorflow.proto.framework.AttrValueOrBuilder getAllowedValuesOrBuilder();
  }
  /**
   * <pre>
   * Description of the graph-construction-time configuration of this
   * Op.  That is to say, this describes the attr fields that will
   * be specified in the NodeDef.
   * </pre>
   *
   * Protobuf type {@code tensorflow.OpDef.AttrDef}
   */
  public  static final class AttrDef extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:tensorflow.OpDef.AttrDef)
      AttrDefOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AttrDef.newBuilder() to construct.
    private AttrDef(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AttrDef() {
      name_ = "";
      type_ = "";
      description_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AttrDef();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AttrDef(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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: {
              java.lang.String s = input.readStringRequireUtf8();

              type_ = s;
              break;
            }
            case 26: {
              org.tensorflow.proto.framework.AttrValue.Builder subBuilder = null;
              if (defaultValue_ != null) {
                subBuilder = defaultValue_.toBuilder();
              }
              defaultValue_ = input.readMessage(org.tensorflow.proto.framework.AttrValue.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(defaultValue_);
                defaultValue_ = subBuilder.buildPartial();
              }

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

              description_ = s;
              break;
            }
            case 40: {

              hasMinimum_ = input.readBool();
              break;
            }
            case 48: {

              minimum_ = input.readInt64();
              break;
            }
            case 58: {
              org.tensorflow.proto.framework.AttrValue.Builder subBuilder = null;
              if (allowedValues_ != null) {
                subBuilder = allowedValues_.toBuilder();
              }
              allowedValues_ = input.readMessage(org.tensorflow.proto.framework.AttrValue.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(allowedValues_);
                allowedValues_ = subBuilder.buildPartial();
              }

              break;
            }
            default: {
              if (!parseUnknownField(
                  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 org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_AttrDef_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_AttrDef_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.tensorflow.proto.framework.OpDef.AttrDef.class, org.tensorflow.proto.framework.OpDef.AttrDef.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * A descriptive name for the argument.  May be used, e.g. by the
     * Python client, as a keyword argument name, and so should match
     * the regexp "[a-z][a-z0-9_]+".
     * </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>
     * A descriptive name for the argument.  May be used, e.g. by the
     * Python client, as a keyword argument name, and so should match
     * the regexp "[a-z][a-z0-9_]+".
     * </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 volatile java.lang.Object type_;
    /**
     * <pre>
     * One of the type names from attr_value.proto ("string", "list(string)",
     * "int", etc.).
     * </pre>
     *
     * <code>string type = 2;</code>
     */
    public java.lang.String getType() {
      java.lang.Object ref = type_;
      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();
        type_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * One of the type names from attr_value.proto ("string", "list(string)",
     * "int", etc.).
     * </pre>
     *
     * <code>string type = 2;</code>
     */
    public com.google.protobuf.ByteString
        getTypeBytes() {
      java.lang.Object ref = type_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        type_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFAULT_VALUE_FIELD_NUMBER = 3;
    private org.tensorflow.proto.framework.AttrValue defaultValue_;
    /**
     * <pre>
     * A reasonable default for this attribute if the user does not supply
     * a value.  If not specified, the user must supply a value.
     * </pre>
     *
     * <code>.tensorflow.AttrValue default_value = 3;</code>
     */
    public boolean hasDefaultValue() {
      return defaultValue_ != null;
    }
    /**
     * <pre>
     * A reasonable default for this attribute if the user does not supply
     * a value.  If not specified, the user must supply a value.
     * </pre>
     *
     * <code>.tensorflow.AttrValue default_value = 3;</code>
     */
    public org.tensorflow.proto.framework.AttrValue getDefaultValue() {
      return defaultValue_ == null ? org.tensorflow.proto.framework.AttrValue.getDefaultInstance() : defaultValue_;
    }
    /**
     * <pre>
     * A reasonable default for this attribute if the user does not supply
     * a value.  If not specified, the user must supply a value.
     * </pre>
     *
     * <code>.tensorflow.AttrValue default_value = 3;</code>
     */
    public org.tensorflow.proto.framework.AttrValueOrBuilder getDefaultValueOrBuilder() {
      return getDefaultValue();
    }

    public static final int DESCRIPTION_FIELD_NUMBER = 4;
    private volatile java.lang.Object description_;
    /**
     * <pre>
     * Human-readable description.
     * </pre>
     *
     * <code>string description = 4;</code>
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      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();
        description_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Human-readable description.
     * </pre>
     *
     * <code>string description = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int HAS_MINIMUM_FIELD_NUMBER = 5;
    private boolean hasMinimum_;
    /**
     * <pre>
     * For type == "int", this is a minimum value.  For "list(___)"
     * types, this is the minimum length.
     * </pre>
     *
     * <code>bool has_minimum = 5;</code>
     */
    public boolean getHasMinimum() {
      return hasMinimum_;
    }

    public static final int MINIMUM_FIELD_NUMBER = 6;
    private long minimum_;
    /**
     * <code>int64 minimum = 6;</code>
     */
    public long getMinimum() {
      return minimum_;
    }

    public static final int ALLOWED_VALUES_FIELD_NUMBER = 7;
    private org.tensorflow.proto.framework.AttrValue allowedValues_;
    /**
     * <pre>
     * The set of allowed values.  Has type that is the "list" version
     * of the "type" field above (uses the "list" field of AttrValue).
     * If type == "type" or "list(type)" above, then the "type" field
     * of "allowed_values.list" has the set of allowed DataTypes.
     * If type == "string" or "list(string)", then the "s" field of
     * "allowed_values.list" has the set of allowed strings.
     * </pre>
     *
     * <code>.tensorflow.AttrValue allowed_values = 7;</code>
     */
    public boolean hasAllowedValues() {
      return allowedValues_ != null;
    }
    /**
     * <pre>
     * The set of allowed values.  Has type that is the "list" version
     * of the "type" field above (uses the "list" field of AttrValue).
     * If type == "type" or "list(type)" above, then the "type" field
     * of "allowed_values.list" has the set of allowed DataTypes.
     * If type == "string" or "list(string)", then the "s" field of
     * "allowed_values.list" has the set of allowed strings.
     * </pre>
     *
     * <code>.tensorflow.AttrValue allowed_values = 7;</code>
     */
    public org.tensorflow.proto.framework.AttrValue getAllowedValues() {
      return allowedValues_ == null ? org.tensorflow.proto.framework.AttrValue.getDefaultInstance() : allowedValues_;
    }
    /**
     * <pre>
     * The set of allowed values.  Has type that is the "list" version
     * of the "type" field above (uses the "list" field of AttrValue).
     * If type == "type" or "list(type)" above, then the "type" field
     * of "allowed_values.list" has the set of allowed DataTypes.
     * If type == "string" or "list(string)", then the "s" field of
     * "allowed_values.list" has the set of allowed strings.
     * </pre>
     *
     * <code>.tensorflow.AttrValue allowed_values = 7;</code>
     */
    public org.tensorflow.proto.framework.AttrValueOrBuilder getAllowedValuesOrBuilder() {
      return getAllowedValues();
    }

    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 (!getTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, type_);
      }
      if (defaultValue_ != null) {
        output.writeMessage(3, getDefaultValue());
      }
      if (!getDescriptionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, description_);
      }
      if (hasMinimum_ != false) {
        output.writeBool(5, hasMinimum_);
      }
      if (minimum_ != 0L) {
        output.writeInt64(6, minimum_);
      }
      if (allowedValues_ != null) {
        output.writeMessage(7, getAllowedValues());
      }
      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 (!getTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, type_);
      }
      if (defaultValue_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getDefaultValue());
      }
      if (!getDescriptionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, description_);
      }
      if (hasMinimum_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, hasMinimum_);
      }
      if (minimum_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, minimum_);
      }
      if (allowedValues_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getAllowedValues());
      }
      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 org.tensorflow.proto.framework.OpDef.AttrDef)) {
        return super.equals(obj);
      }
      org.tensorflow.proto.framework.OpDef.AttrDef other = (org.tensorflow.proto.framework.OpDef.AttrDef) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (!getType()
          .equals(other.getType())) return false;
      if (hasDefaultValue() != other.hasDefaultValue()) return false;
      if (hasDefaultValue()) {
        if (!getDefaultValue()
            .equals(other.getDefaultValue())) return false;
      }
      if (!getDescription()
          .equals(other.getDescription())) return false;
      if (getHasMinimum()
          != other.getHasMinimum()) return false;
      if (getMinimum()
          != other.getMinimum()) return false;
      if (hasAllowedValues() != other.hasAllowedValues()) return false;
      if (hasAllowedValues()) {
        if (!getAllowedValues()
            .equals(other.getAllowedValues())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @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) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getType().hashCode();
      if (hasDefaultValue()) {
        hash = (37 * hash) + DEFAULT_VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultValue().hashCode();
      }
      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getDescription().hashCode();
      hash = (37 * hash) + HAS_MINIMUM_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getHasMinimum());
      hash = (37 * hash) + MINIMUM_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMinimum());
      if (hasAllowedValues()) {
        hash = (37 * hash) + ALLOWED_VALUES_FIELD_NUMBER;
        hash = (53 * hash) + getAllowedValues().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef 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 org.tensorflow.proto.framework.OpDef.AttrDef parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef 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 org.tensorflow.proto.framework.OpDef.AttrDef parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.tensorflow.proto.framework.OpDef.AttrDef 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(org.tensorflow.proto.framework.OpDef.AttrDef 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>
     * Description of the graph-construction-time configuration of this
     * Op.  That is to say, this describes the attr fields that will
     * be specified in the NodeDef.
     * </pre>
     *
     * Protobuf type {@code tensorflow.OpDef.AttrDef}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:tensorflow.OpDef.AttrDef)
        org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_AttrDef_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_AttrDef_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.tensorflow.proto.framework.OpDef.AttrDef.class, org.tensorflow.proto.framework.OpDef.AttrDef.Builder.class);
      }

      // Construct using org.tensorflow.proto.framework.OpDef.AttrDef.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_ = "";

        type_ = "";

        if (defaultValueBuilder_ == null) {
          defaultValue_ = null;
        } else {
          defaultValue_ = null;
          defaultValueBuilder_ = null;
        }
        description_ = "";

        hasMinimum_ = false;

        minimum_ = 0L;

        if (allowedValuesBuilder_ == null) {
          allowedValues_ = null;
        } else {
          allowedValues_ = null;
          allowedValuesBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_AttrDef_descriptor;
      }

      @java.lang.Override
      public org.tensorflow.proto.framework.OpDef.AttrDef getDefaultInstanceForType() {
        return org.tensorflow.proto.framework.OpDef.AttrDef.getDefaultInstance();
      }

      @java.lang.Override
      public org.tensorflow.proto.framework.OpDef.AttrDef build() {
        org.tensorflow.proto.framework.OpDef.AttrDef result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.tensorflow.proto.framework.OpDef.AttrDef buildPartial() {
        org.tensorflow.proto.framework.OpDef.AttrDef result = new org.tensorflow.proto.framework.OpDef.AttrDef(this);
        result.name_ = name_;
        result.type_ = type_;
        if (defaultValueBuilder_ == null) {
          result.defaultValue_ = defaultValue_;
        } else {
          result.defaultValue_ = defaultValueBuilder_.build();
        }
        result.description_ = description_;
        result.hasMinimum_ = hasMinimum_;
        result.minimum_ = minimum_;
        if (allowedValuesBuilder_ == null) {
          result.allowedValues_ = allowedValues_;
        } else {
          result.allowedValues_ = allowedValuesBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.tensorflow.proto.framework.OpDef.AttrDef) {
          return mergeFrom((org.tensorflow.proto.framework.OpDef.AttrDef)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.tensorflow.proto.framework.OpDef.AttrDef other) {
        if (other == org.tensorflow.proto.framework.OpDef.AttrDef.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.getType().isEmpty()) {
          type_ = other.type_;
          onChanged();
        }
        if (other.hasDefaultValue()) {
          mergeDefaultValue(other.getDefaultValue());
        }
        if (!other.getDescription().isEmpty()) {
          description_ = other.description_;
          onChanged();
        }
        if (other.getHasMinimum() != false) {
          setHasMinimum(other.getHasMinimum());
        }
        if (other.getMinimum() != 0L) {
          setMinimum(other.getMinimum());
        }
        if (other.hasAllowedValues()) {
          mergeAllowedValues(other.getAllowedValues());
        }
        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 {
        org.tensorflow.proto.framework.OpDef.AttrDef parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.tensorflow.proto.framework.OpDef.AttrDef) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * A descriptive name for the argument.  May be used, e.g. by the
       * Python client, as a keyword argument name, and so should match
       * the regexp "[a-z][a-z0-9_]+".
       * </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>
       * A descriptive name for the argument.  May be used, e.g. by the
       * Python client, as a keyword argument name, and so should match
       * the regexp "[a-z][a-z0-9_]+".
       * </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>
       * A descriptive name for the argument.  May be used, e.g. by the
       * Python client, as a keyword argument name, and so should match
       * the regexp "[a-z][a-z0-9_]+".
       * </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>
       * A descriptive name for the argument.  May be used, e.g. by the
       * Python client, as a keyword argument name, and so should match
       * the regexp "[a-z][a-z0-9_]+".
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A descriptive name for the argument.  May be used, e.g. by the
       * Python client, as a keyword argument name, and so should match
       * the regexp "[a-z][a-z0-9_]+".
       * </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 type_ = "";
      /**
       * <pre>
       * One of the type names from attr_value.proto ("string", "list(string)",
       * "int", etc.).
       * </pre>
       *
       * <code>string type = 2;</code>
       */
      public java.lang.String getType() {
        java.lang.Object ref = type_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          type_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * One of the type names from attr_value.proto ("string", "list(string)",
       * "int", etc.).
       * </pre>
       *
       * <code>string type = 2;</code>
       */
      public com.google.protobuf.ByteString
          getTypeBytes() {
        java.lang.Object ref = type_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          type_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * One of the type names from attr_value.proto ("string", "list(string)",
       * "int", etc.).
       * </pre>
       *
       * <code>string type = 2;</code>
       */
      public Builder setType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * One of the type names from attr_value.proto ("string", "list(string)",
       * "int", etc.).
       * </pre>
       *
       * <code>string type = 2;</code>
       */
      public Builder clearType() {
        
        type_ = getDefaultInstance().getType();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * One of the type names from attr_value.proto ("string", "list(string)",
       * "int", etc.).
       * </pre>
       *
       * <code>string type = 2;</code>
       */
      public Builder setTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        type_ = value;
        onChanged();
        return this;
      }

      private org.tensorflow.proto.framework.AttrValue defaultValue_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.tensorflow.proto.framework.AttrValue, org.tensorflow.proto.framework.AttrValue.Builder, org.tensorflow.proto.framework.AttrValueOrBuilder> defaultValueBuilder_;
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public boolean hasDefaultValue() {
        return defaultValueBuilder_ != null || defaultValue_ != null;
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public org.tensorflow.proto.framework.AttrValue getDefaultValue() {
        if (defaultValueBuilder_ == null) {
          return defaultValue_ == null ? org.tensorflow.proto.framework.AttrValue.getDefaultInstance() : defaultValue_;
        } else {
          return defaultValueBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public Builder setDefaultValue(org.tensorflow.proto.framework.AttrValue value) {
        if (defaultValueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          defaultValue_ = value;
          onChanged();
        } else {
          defaultValueBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public Builder setDefaultValue(
          org.tensorflow.proto.framework.AttrValue.Builder builderForValue) {
        if (defaultValueBuilder_ == null) {
          defaultValue_ = builderForValue.build();
          onChanged();
        } else {
          defaultValueBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public Builder mergeDefaultValue(org.tensorflow.proto.framework.AttrValue value) {
        if (defaultValueBuilder_ == null) {
          if (defaultValue_ != null) {
            defaultValue_ =
              org.tensorflow.proto.framework.AttrValue.newBuilder(defaultValue_).mergeFrom(value).buildPartial();
          } else {
            defaultValue_ = value;
          }
          onChanged();
        } else {
          defaultValueBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public Builder clearDefaultValue() {
        if (defaultValueBuilder_ == null) {
          defaultValue_ = null;
          onChanged();
        } else {
          defaultValue_ = null;
          defaultValueBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public org.tensorflow.proto.framework.AttrValue.Builder getDefaultValueBuilder() {
        
        onChanged();
        return getDefaultValueFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      public org.tensorflow.proto.framework.AttrValueOrBuilder getDefaultValueOrBuilder() {
        if (defaultValueBuilder_ != null) {
          return defaultValueBuilder_.getMessageOrBuilder();
        } else {
          return defaultValue_ == null ?
              org.tensorflow.proto.framework.AttrValue.getDefaultInstance() : defaultValue_;
        }
      }
      /**
       * <pre>
       * A reasonable default for this attribute if the user does not supply
       * a value.  If not specified, the user must supply a value.
       * </pre>
       *
       * <code>.tensorflow.AttrValue default_value = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.tensorflow.proto.framework.AttrValue, org.tensorflow.proto.framework.AttrValue.Builder, org.tensorflow.proto.framework.AttrValueOrBuilder> 
          getDefaultValueFieldBuilder() {
        if (defaultValueBuilder_ == null) {
          defaultValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.tensorflow.proto.framework.AttrValue, org.tensorflow.proto.framework.AttrValue.Builder, org.tensorflow.proto.framework.AttrValueOrBuilder>(
                  getDefaultValue(),
                  getParentForChildren(),
                  isClean());
          defaultValue_ = null;
        }
        return defaultValueBuilder_;
      }

      private java.lang.Object description_ = "";
      /**
       * <pre>
       * Human-readable description.
       * </pre>
       *
       * <code>string description = 4;</code>
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Human-readable description.
       * </pre>
       *
       * <code>string description = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Human-readable description.
       * </pre>
       *
       * <code>string description = 4;</code>
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human-readable description.
       * </pre>
       *
       * <code>string description = 4;</code>
       */
      public Builder clearDescription() {
        
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human-readable description.
       * </pre>
       *
       * <code>string description = 4;</code>
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        description_ = value;
        onChanged();
        return this;
      }

      private boolean hasMinimum_ ;
      /**
       * <pre>
       * For type == "int", this is a minimum value.  For "list(___)"
       * types, this is the minimum length.
       * </pre>
       *
       * <code>bool has_minimum = 5;</code>
       */
      public boolean getHasMinimum() {
        return hasMinimum_;
      }
      /**
       * <pre>
       * For type == "int", this is a minimum value.  For "list(___)"
       * types, this is the minimum length.
       * </pre>
       *
       * <code>bool has_minimum = 5;</code>
       */
      public Builder setHasMinimum(boolean value) {
        
        hasMinimum_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * For type == "int", this is a minimum value.  For "list(___)"
       * types, this is the minimum length.
       * </pre>
       *
       * <code>bool has_minimum = 5;</code>
       */
      public Builder clearHasMinimum() {
        
        hasMinimum_ = false;
        onChanged();
        return this;
      }

      private long minimum_ ;
      /**
       * <code>int64 minimum = 6;</code>
       */
      public long getMinimum() {
        return minimum_;
      }
      /**
       * <code>int64 minimum = 6;</code>
       */
      public Builder setMinimum(long value) {
        
        minimum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 minimum = 6;</code>
       */
      public Builder clearMinimum() {
        
        minimum_ = 0L;
        onChanged();
        return this;
      }

      private org.tensorflow.proto.framework.AttrValue allowedValues_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.tensorflow.proto.framework.AttrValue, org.tensorflow.proto.framework.AttrValue.Builder, org.tensorflow.proto.framework.AttrValueOrBuilder> allowedValuesBuilder_;
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public boolean hasAllowedValues() {
        return allowedValuesBuilder_ != null || allowedValues_ != null;
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public org.tensorflow.proto.framework.AttrValue getAllowedValues() {
        if (allowedValuesBuilder_ == null) {
          return allowedValues_ == null ? org.tensorflow.proto.framework.AttrValue.getDefaultInstance() : allowedValues_;
        } else {
          return allowedValuesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public Builder setAllowedValues(org.tensorflow.proto.framework.AttrValue value) {
        if (allowedValuesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          allowedValues_ = value;
          onChanged();
        } else {
          allowedValuesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public Builder setAllowedValues(
          org.tensorflow.proto.framework.AttrValue.Builder builderForValue) {
        if (allowedValuesBuilder_ == null) {
          allowedValues_ = builderForValue.build();
          onChanged();
        } else {
          allowedValuesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public Builder mergeAllowedValues(org.tensorflow.proto.framework.AttrValue value) {
        if (allowedValuesBuilder_ == null) {
          if (allowedValues_ != null) {
            allowedValues_ =
              org.tensorflow.proto.framework.AttrValue.newBuilder(allowedValues_).mergeFrom(value).buildPartial();
          } else {
            allowedValues_ = value;
          }
          onChanged();
        } else {
          allowedValuesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public Builder clearAllowedValues() {
        if (allowedValuesBuilder_ == null) {
          allowedValues_ = null;
          onChanged();
        } else {
          allowedValues_ = null;
          allowedValuesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public org.tensorflow.proto.framework.AttrValue.Builder getAllowedValuesBuilder() {
        
        onChanged();
        return getAllowedValuesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      public org.tensorflow.proto.framework.AttrValueOrBuilder getAllowedValuesOrBuilder() {
        if (allowedValuesBuilder_ != null) {
          return allowedValuesBuilder_.getMessageOrBuilder();
        } else {
          return allowedValues_ == null ?
              org.tensorflow.proto.framework.AttrValue.getDefaultInstance() : allowedValues_;
        }
      }
      /**
       * <pre>
       * The set of allowed values.  Has type that is the "list" version
       * of the "type" field above (uses the "list" field of AttrValue).
       * If type == "type" or "list(type)" above, then the "type" field
       * of "allowed_values.list" has the set of allowed DataTypes.
       * If type == "string" or "list(string)", then the "s" field of
       * "allowed_values.list" has the set of allowed strings.
       * </pre>
       *
       * <code>.tensorflow.AttrValue allowed_values = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.tensorflow.proto.framework.AttrValue, org.tensorflow.proto.framework.AttrValue.Builder, org.tensorflow.proto.framework.AttrValueOrBuilder> 
          getAllowedValuesFieldBuilder() {
        if (allowedValuesBuilder_ == null) {
          allowedValuesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.tensorflow.proto.framework.AttrValue, org.tensorflow.proto.framework.AttrValue.Builder, org.tensorflow.proto.framework.AttrValueOrBuilder>(
                  getAllowedValues(),
                  getParentForChildren(),
                  isClean());
          allowedValues_ = null;
        }
        return allowedValuesBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:tensorflow.OpDef.AttrDef)
    }

    // @@protoc_insertion_point(class_scope:tensorflow.OpDef.AttrDef)
    private static final org.tensorflow.proto.framework.OpDef.AttrDef DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.tensorflow.proto.framework.OpDef.AttrDef();
    }

    public static org.tensorflow.proto.framework.OpDef.AttrDef getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.tensorflow.proto.framework.OpDef.AttrDef getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public static final int NAME_FIELD_NUMBER = 1;
  private volatile java.lang.Object name_;
  /**
   * <pre>
   * Op names starting with an underscore are reserved for internal use.
   * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
   * </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>
   * Op names starting with an underscore are reserved for internal use.
   * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
   * </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 INPUT_ARG_FIELD_NUMBER = 2;
  private java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> inputArg_;
  /**
   * <pre>
   * Description of the input(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
   */
  public java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> getInputArgList() {
    return inputArg_;
  }
  /**
   * <pre>
   * Description of the input(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
   */
  public java.util.List<? extends org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> 
      getInputArgOrBuilderList() {
    return inputArg_;
  }
  /**
   * <pre>
   * Description of the input(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
   */
  public int getInputArgCount() {
    return inputArg_.size();
  }
  /**
   * <pre>
   * Description of the input(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
   */
  public org.tensorflow.proto.framework.OpDef.ArgDef getInputArg(int index) {
    return inputArg_.get(index);
  }
  /**
   * <pre>
   * Description of the input(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
   */
  public org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder getInputArgOrBuilder(
      int index) {
    return inputArg_.get(index);
  }

  public static final int OUTPUT_ARG_FIELD_NUMBER = 3;
  private java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> outputArg_;
  /**
   * <pre>
   * Description of the output(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
   */
  public java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> getOutputArgList() {
    return outputArg_;
  }
  /**
   * <pre>
   * Description of the output(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
   */
  public java.util.List<? extends org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> 
      getOutputArgOrBuilderList() {
    return outputArg_;
  }
  /**
   * <pre>
   * Description of the output(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
   */
  public int getOutputArgCount() {
    return outputArg_.size();
  }
  /**
   * <pre>
   * Description of the output(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
   */
  public org.tensorflow.proto.framework.OpDef.ArgDef getOutputArg(int index) {
    return outputArg_.get(index);
  }
  /**
   * <pre>
   * Description of the output(s).
   * </pre>
   *
   * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
   */
  public org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder getOutputArgOrBuilder(
      int index) {
    return outputArg_.get(index);
  }

  public static final int CONTROL_OUTPUT_FIELD_NUMBER = 20;
  private com.google.protobuf.LazyStringList controlOutput_;
  /**
   * <pre>
   * Named control outputs for this operation. Useful only for composite
   * operations (i.e. functions) which want to name different control outputs.
   * </pre>
   *
   * <code>repeated string control_output = 20;</code>
   */
  public com.google.protobuf.ProtocolStringList
      getControlOutputList() {
    return controlOutput_;
  }
  /**
   * <pre>
   * Named control outputs for this operation. Useful only for composite
   * operations (i.e. functions) which want to name different control outputs.
   * </pre>
   *
   * <code>repeated string control_output = 20;</code>
   */
  public int getControlOutputCount() {
    return controlOutput_.size();
  }
  /**
   * <pre>
   * Named control outputs for this operation. Useful only for composite
   * operations (i.e. functions) which want to name different control outputs.
   * </pre>
   *
   * <code>repeated string control_output = 20;</code>
   */
  public java.lang.String getControlOutput(int index) {
    return controlOutput_.get(index);
  }
  /**
   * <pre>
   * Named control outputs for this operation. Useful only for composite
   * operations (i.e. functions) which want to name different control outputs.
   * </pre>
   *
   * <code>repeated string control_output = 20;</code>
   */
  public com.google.protobuf.ByteString
      getControlOutputBytes(int index) {
    return controlOutput_.getByteString(index);
  }

  public static final int ATTR_FIELD_NUMBER = 4;
  private java.util.List<org.tensorflow.proto.framework.OpDef.AttrDef> attr_;
  /**
   * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
   */
  public java.util.List<org.tensorflow.proto.framework.OpDef.AttrDef> getAttrList() {
    return attr_;
  }
  /**
   * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
   */
  public java.util.List<? extends org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder> 
      getAttrOrBuilderList() {
    return attr_;
  }
  /**
   * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
   */
  public int getAttrCount() {
    return attr_.size();
  }
  /**
   * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
   */
  public org.tensorflow.proto.framework.OpDef.AttrDef getAttr(int index) {
    return attr_.get(index);
  }
  /**
   * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
   */
  public org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder getAttrOrBuilder(
      int index) {
    return attr_.get(index);
  }

  public static final int DEPRECATION_FIELD_NUMBER = 8;
  private org.tensorflow.proto.framework.OpDeprecation deprecation_;
  /**
   * <pre>
   * Optional deprecation based on GraphDef versions.
   * </pre>
   *
   * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
   */
  public boolean hasDeprecation() {
    return deprecation_ != null;
  }
  /**
   * <pre>
   * Optional deprecation based on GraphDef versions.
   * </pre>
   *
   * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
   */
  public org.tensorflow.proto.framework.OpDeprecation getDeprecation() {
    return deprecation_ == null ? org.tensorflow.proto.framework.OpDeprecation.getDefaultInstance() : deprecation_;
  }
  /**
   * <pre>
   * Optional deprecation based on GraphDef versions.
   * </pre>
   *
   * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
   */
  public org.tensorflow.proto.framework.OpDeprecationOrBuilder getDeprecationOrBuilder() {
    return getDeprecation();
  }

  public static final int SUMMARY_FIELD_NUMBER = 5;
  private volatile java.lang.Object summary_;
  /**
   * <pre>
   * One-line human-readable description of what the Op does.
   * </pre>
   *
   * <code>string summary = 5;</code>
   */
  public java.lang.String getSummary() {
    java.lang.Object ref = summary_;
    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();
      summary_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * One-line human-readable description of what the Op does.
   * </pre>
   *
   * <code>string summary = 5;</code>
   */
  public com.google.protobuf.ByteString
      getSummaryBytes() {
    java.lang.Object ref = summary_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      summary_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int DESCRIPTION_FIELD_NUMBER = 6;
  private volatile java.lang.Object description_;
  /**
   * <pre>
   * Additional, longer human-readable description of what the Op does.
   * </pre>
   *
   * <code>string description = 6;</code>
   */
  public java.lang.String getDescription() {
    java.lang.Object ref = description_;
    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();
      description_ = s;
      return s;
    }
  }
  /**
   * <pre>
   * Additional, longer human-readable description of what the Op does.
   * </pre>
   *
   * <code>string description = 6;</code>
   */
  public com.google.protobuf.ByteString
      getDescriptionBytes() {
    java.lang.Object ref = description_;
    if (ref instanceof java.lang.String) {
      com.google.protobuf.ByteString b = 
          com.google.protobuf.ByteString.copyFromUtf8(
              (java.lang.String) ref);
      description_ = b;
      return b;
    } else {
      return (com.google.protobuf.ByteString) ref;
    }
  }

  public static final int IS_COMMUTATIVE_FIELD_NUMBER = 18;
  private boolean isCommutative_;
  /**
   * <pre>
   * True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
   * </pre>
   *
   * <code>bool is_commutative = 18;</code>
   */
  public boolean getIsCommutative() {
    return isCommutative_;
  }

  public static final int IS_AGGREGATE_FIELD_NUMBER = 16;
  private boolean isAggregate_;
  /**
   * <pre>
   * If is_aggregate is true, then this operation accepts N &gt;= 2
   * inputs and produces 1 output all of the same type.  Should be
   * associative and commutative, and produce output with the same
   * shape as the input.  The optimizer may replace an aggregate op
   * taking input from multiple devices with a tree of aggregate ops
   * that aggregate locally within each device (and possibly within
   * groups of nearby devices) before communicating.
   * TODO(josh11b): Implement that optimization.
   * </pre>
   *
   * <code>bool is_aggregate = 16;</code>
   */
  public boolean getIsAggregate() {
    return isAggregate_;
  }

  public static final int IS_STATEFUL_FIELD_NUMBER = 17;
  private boolean isStateful_;
  /**
   * <pre>
   * Ops are marked as stateful if their behavior depends on some state beyond
   * their input tensors (e.g. variable reading op) or if they have
   * a side-effect (e.g. printing or asserting ops). Equivalently, stateless ops
   * must always produce the same output for the same input and have
   * no side-effects.
   * By default Ops may be moved between devices.  Stateful ops should
   * either not be moved, or should only be moved if that state can also
   * be moved (e.g. via some sort of save / restore).
   * Stateful ops are guaranteed to never be optimized away by Common
   * Subexpression Elimination (CSE).
   * </pre>
   *
   * <code>bool is_stateful = 17;</code>
   */
  public boolean getIsStateful() {
    return isStateful_;
  }

  public static final int ALLOWS_UNINITIALIZED_INPUT_FIELD_NUMBER = 19;
  private boolean allowsUninitializedInput_;
  /**
   * <pre>
   * By default, all inputs to an Op must be initialized Tensors.  Ops
   * that may initialize tensors for the first time should set this
   * field to true, to allow the Op to take an uninitialized Tensor as
   * input.
   * </pre>
   *
   * <code>bool allows_uninitialized_input = 19;</code>
   */
  public boolean getAllowsUninitializedInput() {
    return allowsUninitializedInput_;
  }

  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_);
    }
    for (int i = 0; i < inputArg_.size(); i++) {
      output.writeMessage(2, inputArg_.get(i));
    }
    for (int i = 0; i < outputArg_.size(); i++) {
      output.writeMessage(3, outputArg_.get(i));
    }
    for (int i = 0; i < attr_.size(); i++) {
      output.writeMessage(4, attr_.get(i));
    }
    if (!getSummaryBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 5, summary_);
    }
    if (!getDescriptionBytes().isEmpty()) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 6, description_);
    }
    if (deprecation_ != null) {
      output.writeMessage(8, getDeprecation());
    }
    if (isAggregate_ != false) {
      output.writeBool(16, isAggregate_);
    }
    if (isStateful_ != false) {
      output.writeBool(17, isStateful_);
    }
    if (isCommutative_ != false) {
      output.writeBool(18, isCommutative_);
    }
    if (allowsUninitializedInput_ != false) {
      output.writeBool(19, allowsUninitializedInput_);
    }
    for (int i = 0; i < controlOutput_.size(); i++) {
      com.google.protobuf.GeneratedMessageV3.writeString(output, 20, controlOutput_.getRaw(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_);
    }
    for (int i = 0; i < inputArg_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(2, inputArg_.get(i));
    }
    for (int i = 0; i < outputArg_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(3, outputArg_.get(i));
    }
    for (int i = 0; i < attr_.size(); i++) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(4, attr_.get(i));
    }
    if (!getSummaryBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, summary_);
    }
    if (!getDescriptionBytes().isEmpty()) {
      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, description_);
    }
    if (deprecation_ != null) {
      size += com.google.protobuf.CodedOutputStream
        .computeMessageSize(8, getDeprecation());
    }
    if (isAggregate_ != false) {
      size += com.google.protobuf.CodedOutputStream
        .computeBoolSize(16, isAggregate_);
    }
    if (isStateful_ != false) {
      size += com.google.protobuf.CodedOutputStream
        .computeBoolSize(17, isStateful_);
    }
    if (isCommutative_ != false) {
      size += com.google.protobuf.CodedOutputStream
        .computeBoolSize(18, isCommutative_);
    }
    if (allowsUninitializedInput_ != false) {
      size += com.google.protobuf.CodedOutputStream
        .computeBoolSize(19, allowsUninitializedInput_);
    }
    {
      int dataSize = 0;
      for (int i = 0; i < controlOutput_.size(); i++) {
        dataSize += computeStringSizeNoTag(controlOutput_.getRaw(i));
      }
      size += dataSize;
      size += 2 * getControlOutputList().size();
    }
    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 org.tensorflow.proto.framework.OpDef)) {
      return super.equals(obj);
    }
    org.tensorflow.proto.framework.OpDef other = (org.tensorflow.proto.framework.OpDef) obj;

    if (!getName()
        .equals(other.getName())) return false;
    if (!getInputArgList()
        .equals(other.getInputArgList())) return false;
    if (!getOutputArgList()
        .equals(other.getOutputArgList())) return false;
    if (!getControlOutputList()
        .equals(other.getControlOutputList())) return false;
    if (!getAttrList()
        .equals(other.getAttrList())) return false;
    if (hasDeprecation() != other.hasDeprecation()) return false;
    if (hasDeprecation()) {
      if (!getDeprecation()
          .equals(other.getDeprecation())) return false;
    }
    if (!getSummary()
        .equals(other.getSummary())) return false;
    if (!getDescription()
        .equals(other.getDescription())) return false;
    if (getIsCommutative()
        != other.getIsCommutative()) return false;
    if (getIsAggregate()
        != other.getIsAggregate()) return false;
    if (getIsStateful()
        != other.getIsStateful()) return false;
    if (getAllowsUninitializedInput()
        != other.getAllowsUninitializedInput()) return false;
    if (!unknownFields.equals(other.unknownFields)) return false;
    return true;
  }

  @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 (getInputArgCount() > 0) {
      hash = (37 * hash) + INPUT_ARG_FIELD_NUMBER;
      hash = (53 * hash) + getInputArgList().hashCode();
    }
    if (getOutputArgCount() > 0) {
      hash = (37 * hash) + OUTPUT_ARG_FIELD_NUMBER;
      hash = (53 * hash) + getOutputArgList().hashCode();
    }
    if (getControlOutputCount() > 0) {
      hash = (37 * hash) + CONTROL_OUTPUT_FIELD_NUMBER;
      hash = (53 * hash) + getControlOutputList().hashCode();
    }
    if (getAttrCount() > 0) {
      hash = (37 * hash) + ATTR_FIELD_NUMBER;
      hash = (53 * hash) + getAttrList().hashCode();
    }
    if (hasDeprecation()) {
      hash = (37 * hash) + DEPRECATION_FIELD_NUMBER;
      hash = (53 * hash) + getDeprecation().hashCode();
    }
    hash = (37 * hash) + SUMMARY_FIELD_NUMBER;
    hash = (53 * hash) + getSummary().hashCode();
    hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
    hash = (53 * hash) + getDescription().hashCode();
    hash = (37 * hash) + IS_COMMUTATIVE_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
        getIsCommutative());
    hash = (37 * hash) + IS_AGGREGATE_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
        getIsAggregate());
    hash = (37 * hash) + IS_STATEFUL_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
        getIsStateful());
    hash = (37 * hash) + ALLOWS_UNINITIALIZED_INPUT_FIELD_NUMBER;
    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
        getAllowsUninitializedInput());
    hash = (29 * hash) + unknownFields.hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static org.tensorflow.proto.framework.OpDef parseFrom(
      java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static org.tensorflow.proto.framework.OpDef parseFrom(
      java.nio.ByteBuffer data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static org.tensorflow.proto.framework.OpDef parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static org.tensorflow.proto.framework.OpDef parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static org.tensorflow.proto.framework.OpDef parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static org.tensorflow.proto.framework.OpDef parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static org.tensorflow.proto.framework.OpDef parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static org.tensorflow.proto.framework.OpDef 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 org.tensorflow.proto.framework.OpDef parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseDelimitedWithIOException(PARSER, input);
  }
  public static org.tensorflow.proto.framework.OpDef 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 org.tensorflow.proto.framework.OpDef parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessageV3
        .parseWithIOException(PARSER, input);
  }
  public static org.tensorflow.proto.framework.OpDef 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(org.tensorflow.proto.framework.OpDef 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 an operation. A NodeDef in a GraphDef specifies an Op by
   * using the "op" field which should match the name of a OpDef.
   * LINT.IfChange
   * </pre>
   *
   * Protobuf type {@code tensorflow.OpDef}
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
      // @@protoc_insertion_point(builder_implements:tensorflow.OpDef)
      org.tensorflow.proto.framework.OpDefOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.tensorflow.proto.framework.OpDef.class, org.tensorflow.proto.framework.OpDef.Builder.class);
    }

    // Construct using org.tensorflow.proto.framework.OpDef.newBuilder()
    private Builder() {
      maybeForceBuilderInitialization();
    }

    private Builder(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      super(parent);
      maybeForceBuilderInitialization();
    }
    private void maybeForceBuilderInitialization() {
      if (com.google.protobuf.GeneratedMessageV3
              .alwaysUseFieldBuilders) {
        getInputArgFieldBuilder();
        getOutputArgFieldBuilder();
        getAttrFieldBuilder();
      }
    }
    @java.lang.Override
    public Builder clear() {
      super.clear();
      name_ = "";

      if (inputArgBuilder_ == null) {
        inputArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
      } else {
        inputArgBuilder_.clear();
      }
      if (outputArgBuilder_ == null) {
        outputArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
      } else {
        outputArgBuilder_.clear();
      }
      controlOutput_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      bitField0_ = (bitField0_ & ~0x00000004);
      if (attrBuilder_ == null) {
        attr_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
      } else {
        attrBuilder_.clear();
      }
      if (deprecationBuilder_ == null) {
        deprecation_ = null;
      } else {
        deprecation_ = null;
        deprecationBuilder_ = null;
      }
      summary_ = "";

      description_ = "";

      isCommutative_ = false;

      isAggregate_ = false;

      isStateful_ = false;

      allowsUninitializedInput_ = false;

      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return org.tensorflow.proto.framework.OpDefProtos.internal_static_tensorflow_OpDef_descriptor;
    }

    @java.lang.Override
    public org.tensorflow.proto.framework.OpDef getDefaultInstanceForType() {
      return org.tensorflow.proto.framework.OpDef.getDefaultInstance();
    }

    @java.lang.Override
    public org.tensorflow.proto.framework.OpDef build() {
      org.tensorflow.proto.framework.OpDef result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public org.tensorflow.proto.framework.OpDef buildPartial() {
      org.tensorflow.proto.framework.OpDef result = new org.tensorflow.proto.framework.OpDef(this);
      int from_bitField0_ = bitField0_;
      result.name_ = name_;
      if (inputArgBuilder_ == null) {
        if (((bitField0_ & 0x00000001) != 0)) {
          inputArg_ = java.util.Collections.unmodifiableList(inputArg_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.inputArg_ = inputArg_;
      } else {
        result.inputArg_ = inputArgBuilder_.build();
      }
      if (outputArgBuilder_ == null) {
        if (((bitField0_ & 0x00000002) != 0)) {
          outputArg_ = java.util.Collections.unmodifiableList(outputArg_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.outputArg_ = outputArg_;
      } else {
        result.outputArg_ = outputArgBuilder_.build();
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        controlOutput_ = controlOutput_.getUnmodifiableView();
        bitField0_ = (bitField0_ & ~0x00000004);
      }
      result.controlOutput_ = controlOutput_;
      if (attrBuilder_ == null) {
        if (((bitField0_ & 0x00000008) != 0)) {
          attr_ = java.util.Collections.unmodifiableList(attr_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.attr_ = attr_;
      } else {
        result.attr_ = attrBuilder_.build();
      }
      if (deprecationBuilder_ == null) {
        result.deprecation_ = deprecation_;
      } else {
        result.deprecation_ = deprecationBuilder_.build();
      }
      result.summary_ = summary_;
      result.description_ = description_;
      result.isCommutative_ = isCommutative_;
      result.isAggregate_ = isAggregate_;
      result.isStateful_ = isStateful_;
      result.allowsUninitializedInput_ = allowsUninitializedInput_;
      onBuilt();
      return result;
    }

    @java.lang.Override
    public Builder clone() {
      return super.clone();
    }
    @java.lang.Override
    public Builder setField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        java.lang.Object value) {
      return super.setField(field, value);
    }
    @java.lang.Override
    public Builder clearField(
        com.google.protobuf.Descriptors.FieldDescriptor field) {
      return super.clearField(field);
    }
    @java.lang.Override
    public Builder clearOneof(
        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
      return super.clearOneof(oneof);
    }
    @java.lang.Override
    public Builder setRepeatedField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        int index, java.lang.Object value) {
      return super.setRepeatedField(field, index, value);
    }
    @java.lang.Override
    public Builder addRepeatedField(
        com.google.protobuf.Descriptors.FieldDescriptor field,
        java.lang.Object value) {
      return super.addRepeatedField(field, value);
    }
    @java.lang.Override
    public Builder mergeFrom(com.google.protobuf.Message other) {
      if (other instanceof org.tensorflow.proto.framework.OpDef) {
        return mergeFrom((org.tensorflow.proto.framework.OpDef)other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(org.tensorflow.proto.framework.OpDef other) {
      if (other == org.tensorflow.proto.framework.OpDef.getDefaultInstance()) return this;
      if (!other.getName().isEmpty()) {
        name_ = other.name_;
        onChanged();
      }
      if (inputArgBuilder_ == null) {
        if (!other.inputArg_.isEmpty()) {
          if (inputArg_.isEmpty()) {
            inputArg_ = other.inputArg_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureInputArgIsMutable();
            inputArg_.addAll(other.inputArg_);
          }
          onChanged();
        }
      } else {
        if (!other.inputArg_.isEmpty()) {
          if (inputArgBuilder_.isEmpty()) {
            inputArgBuilder_.dispose();
            inputArgBuilder_ = null;
            inputArg_ = other.inputArg_;
            bitField0_ = (bitField0_ & ~0x00000001);
            inputArgBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getInputArgFieldBuilder() : null;
          } else {
            inputArgBuilder_.addAllMessages(other.inputArg_);
          }
        }
      }
      if (outputArgBuilder_ == null) {
        if (!other.outputArg_.isEmpty()) {
          if (outputArg_.isEmpty()) {
            outputArg_ = other.outputArg_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureOutputArgIsMutable();
            outputArg_.addAll(other.outputArg_);
          }
          onChanged();
        }
      } else {
        if (!other.outputArg_.isEmpty()) {
          if (outputArgBuilder_.isEmpty()) {
            outputArgBuilder_.dispose();
            outputArgBuilder_ = null;
            outputArg_ = other.outputArg_;
            bitField0_ = (bitField0_ & ~0x00000002);
            outputArgBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getOutputArgFieldBuilder() : null;
          } else {
            outputArgBuilder_.addAllMessages(other.outputArg_);
          }
        }
      }
      if (!other.controlOutput_.isEmpty()) {
        if (controlOutput_.isEmpty()) {
          controlOutput_ = other.controlOutput_;
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          ensureControlOutputIsMutable();
          controlOutput_.addAll(other.controlOutput_);
        }
        onChanged();
      }
      if (attrBuilder_ == null) {
        if (!other.attr_.isEmpty()) {
          if (attr_.isEmpty()) {
            attr_ = other.attr_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureAttrIsMutable();
            attr_.addAll(other.attr_);
          }
          onChanged();
        }
      } else {
        if (!other.attr_.isEmpty()) {
          if (attrBuilder_.isEmpty()) {
            attrBuilder_.dispose();
            attrBuilder_ = null;
            attr_ = other.attr_;
            bitField0_ = (bitField0_ & ~0x00000008);
            attrBuilder_ = 
              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                 getAttrFieldBuilder() : null;
          } else {
            attrBuilder_.addAllMessages(other.attr_);
          }
        }
      }
      if (other.hasDeprecation()) {
        mergeDeprecation(other.getDeprecation());
      }
      if (!other.getSummary().isEmpty()) {
        summary_ = other.summary_;
        onChanged();
      }
      if (!other.getDescription().isEmpty()) {
        description_ = other.description_;
        onChanged();
      }
      if (other.getIsCommutative() != false) {
        setIsCommutative(other.getIsCommutative());
      }
      if (other.getIsAggregate() != false) {
        setIsAggregate(other.getIsAggregate());
      }
      if (other.getIsStateful() != false) {
        setIsStateful(other.getIsStateful());
      }
      if (other.getAllowsUninitializedInput() != false) {
        setAllowsUninitializedInput(other.getAllowsUninitializedInput());
      }
      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 {
      org.tensorflow.proto.framework.OpDef parsedMessage = null;
      try {
        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        parsedMessage = (org.tensorflow.proto.framework.OpDef) e.getUnfinishedMessage();
        throw e.unwrapIOException();
      } finally {
        if (parsedMessage != null) {
          mergeFrom(parsedMessage);
        }
      }
      return this;
    }
    private int bitField0_;

    private java.lang.Object name_ = "";
    /**
     * <pre>
     * Op names starting with an underscore are reserved for internal use.
     * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
     * </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>
     * Op names starting with an underscore are reserved for internal use.
     * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
     * </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>
     * Op names starting with an underscore are reserved for internal use.
     * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
     * </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>
     * Op names starting with an underscore are reserved for internal use.
     * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
     * </pre>
     *
     * <code>string name = 1;</code>
     */
    public Builder clearName() {
      
      name_ = getDefaultInstance().getName();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Op names starting with an underscore are reserved for internal use.
     * Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9&gt;_]*".
     * </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.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> inputArg_ =
      java.util.Collections.emptyList();
    private void ensureInputArgIsMutable() {
      if (!((bitField0_ & 0x00000001) != 0)) {
        inputArg_ = new java.util.ArrayList<org.tensorflow.proto.framework.OpDef.ArgDef>(inputArg_);
        bitField0_ |= 0x00000001;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        org.tensorflow.proto.framework.OpDef.ArgDef, org.tensorflow.proto.framework.OpDef.ArgDef.Builder, org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> inputArgBuilder_;

    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> getInputArgList() {
      if (inputArgBuilder_ == null) {
        return java.util.Collections.unmodifiableList(inputArg_);
      } else {
        return inputArgBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public int getInputArgCount() {
      if (inputArgBuilder_ == null) {
        return inputArg_.size();
      } else {
        return inputArgBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef getInputArg(int index) {
      if (inputArgBuilder_ == null) {
        return inputArg_.get(index);
      } else {
        return inputArgBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder setInputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef value) {
      if (inputArgBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputArgIsMutable();
        inputArg_.set(index, value);
        onChanged();
      } else {
        inputArgBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder setInputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef.Builder builderForValue) {
      if (inputArgBuilder_ == null) {
        ensureInputArgIsMutable();
        inputArg_.set(index, builderForValue.build());
        onChanged();
      } else {
        inputArgBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder addInputArg(org.tensorflow.proto.framework.OpDef.ArgDef value) {
      if (inputArgBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputArgIsMutable();
        inputArg_.add(value);
        onChanged();
      } else {
        inputArgBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder addInputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef value) {
      if (inputArgBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureInputArgIsMutable();
        inputArg_.add(index, value);
        onChanged();
      } else {
        inputArgBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder addInputArg(
        org.tensorflow.proto.framework.OpDef.ArgDef.Builder builderForValue) {
      if (inputArgBuilder_ == null) {
        ensureInputArgIsMutable();
        inputArg_.add(builderForValue.build());
        onChanged();
      } else {
        inputArgBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder addInputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef.Builder builderForValue) {
      if (inputArgBuilder_ == null) {
        ensureInputArgIsMutable();
        inputArg_.add(index, builderForValue.build());
        onChanged();
      } else {
        inputArgBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder addAllInputArg(
        java.lang.Iterable<? extends org.tensorflow.proto.framework.OpDef.ArgDef> values) {
      if (inputArgBuilder_ == null) {
        ensureInputArgIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, inputArg_);
        onChanged();
      } else {
        inputArgBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder clearInputArg() {
      if (inputArgBuilder_ == null) {
        inputArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
      } else {
        inputArgBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public Builder removeInputArg(int index) {
      if (inputArgBuilder_ == null) {
        ensureInputArgIsMutable();
        inputArg_.remove(index);
        onChanged();
      } else {
        inputArgBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef.Builder getInputArgBuilder(
        int index) {
      return getInputArgFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder getInputArgOrBuilder(
        int index) {
      if (inputArgBuilder_ == null) {
        return inputArg_.get(index);  } else {
        return inputArgBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public java.util.List<? extends org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> 
         getInputArgOrBuilderList() {
      if (inputArgBuilder_ != null) {
        return inputArgBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(inputArg_);
      }
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef.Builder addInputArgBuilder() {
      return getInputArgFieldBuilder().addBuilder(
          org.tensorflow.proto.framework.OpDef.ArgDef.getDefaultInstance());
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef.Builder addInputArgBuilder(
        int index) {
      return getInputArgFieldBuilder().addBuilder(
          index, org.tensorflow.proto.framework.OpDef.ArgDef.getDefaultInstance());
    }
    /**
     * <pre>
     * Description of the input(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef input_arg = 2;</code>
     */
    public java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef.Builder> 
         getInputArgBuilderList() {
      return getInputArgFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        org.tensorflow.proto.framework.OpDef.ArgDef, org.tensorflow.proto.framework.OpDef.ArgDef.Builder, org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> 
        getInputArgFieldBuilder() {
      if (inputArgBuilder_ == null) {
        inputArgBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            org.tensorflow.proto.framework.OpDef.ArgDef, org.tensorflow.proto.framework.OpDef.ArgDef.Builder, org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder>(
                inputArg_,
                ((bitField0_ & 0x00000001) != 0),
                getParentForChildren(),
                isClean());
        inputArg_ = null;
      }
      return inputArgBuilder_;
    }

    private java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> outputArg_ =
      java.util.Collections.emptyList();
    private void ensureOutputArgIsMutable() {
      if (!((bitField0_ & 0x00000002) != 0)) {
        outputArg_ = new java.util.ArrayList<org.tensorflow.proto.framework.OpDef.ArgDef>(outputArg_);
        bitField0_ |= 0x00000002;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        org.tensorflow.proto.framework.OpDef.ArgDef, org.tensorflow.proto.framework.OpDef.ArgDef.Builder, org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> outputArgBuilder_;

    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef> getOutputArgList() {
      if (outputArgBuilder_ == null) {
        return java.util.Collections.unmodifiableList(outputArg_);
      } else {
        return outputArgBuilder_.getMessageList();
      }
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public int getOutputArgCount() {
      if (outputArgBuilder_ == null) {
        return outputArg_.size();
      } else {
        return outputArgBuilder_.getCount();
      }
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef getOutputArg(int index) {
      if (outputArgBuilder_ == null) {
        return outputArg_.get(index);
      } else {
        return outputArgBuilder_.getMessage(index);
      }
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder setOutputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef value) {
      if (outputArgBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputArgIsMutable();
        outputArg_.set(index, value);
        onChanged();
      } else {
        outputArgBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder setOutputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef.Builder builderForValue) {
      if (outputArgBuilder_ == null) {
        ensureOutputArgIsMutable();
        outputArg_.set(index, builderForValue.build());
        onChanged();
      } else {
        outputArgBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder addOutputArg(org.tensorflow.proto.framework.OpDef.ArgDef value) {
      if (outputArgBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputArgIsMutable();
        outputArg_.add(value);
        onChanged();
      } else {
        outputArgBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder addOutputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef value) {
      if (outputArgBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureOutputArgIsMutable();
        outputArg_.add(index, value);
        onChanged();
      } else {
        outputArgBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder addOutputArg(
        org.tensorflow.proto.framework.OpDef.ArgDef.Builder builderForValue) {
      if (outputArgBuilder_ == null) {
        ensureOutputArgIsMutable();
        outputArg_.add(builderForValue.build());
        onChanged();
      } else {
        outputArgBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder addOutputArg(
        int index, org.tensorflow.proto.framework.OpDef.ArgDef.Builder builderForValue) {
      if (outputArgBuilder_ == null) {
        ensureOutputArgIsMutable();
        outputArg_.add(index, builderForValue.build());
        onChanged();
      } else {
        outputArgBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder addAllOutputArg(
        java.lang.Iterable<? extends org.tensorflow.proto.framework.OpDef.ArgDef> values) {
      if (outputArgBuilder_ == null) {
        ensureOutputArgIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, outputArg_);
        onChanged();
      } else {
        outputArgBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder clearOutputArg() {
      if (outputArgBuilder_ == null) {
        outputArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
      } else {
        outputArgBuilder_.clear();
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public Builder removeOutputArg(int index) {
      if (outputArgBuilder_ == null) {
        ensureOutputArgIsMutable();
        outputArg_.remove(index);
        onChanged();
      } else {
        outputArgBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef.Builder getOutputArgBuilder(
        int index) {
      return getOutputArgFieldBuilder().getBuilder(index);
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder getOutputArgOrBuilder(
        int index) {
      if (outputArgBuilder_ == null) {
        return outputArg_.get(index);  } else {
        return outputArgBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public java.util.List<? extends org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> 
         getOutputArgOrBuilderList() {
      if (outputArgBuilder_ != null) {
        return outputArgBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(outputArg_);
      }
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef.Builder addOutputArgBuilder() {
      return getOutputArgFieldBuilder().addBuilder(
          org.tensorflow.proto.framework.OpDef.ArgDef.getDefaultInstance());
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public org.tensorflow.proto.framework.OpDef.ArgDef.Builder addOutputArgBuilder(
        int index) {
      return getOutputArgFieldBuilder().addBuilder(
          index, org.tensorflow.proto.framework.OpDef.ArgDef.getDefaultInstance());
    }
    /**
     * <pre>
     * Description of the output(s).
     * </pre>
     *
     * <code>repeated .tensorflow.OpDef.ArgDef output_arg = 3;</code>
     */
    public java.util.List<org.tensorflow.proto.framework.OpDef.ArgDef.Builder> 
         getOutputArgBuilderList() {
      return getOutputArgFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        org.tensorflow.proto.framework.OpDef.ArgDef, org.tensorflow.proto.framework.OpDef.ArgDef.Builder, org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder> 
        getOutputArgFieldBuilder() {
      if (outputArgBuilder_ == null) {
        outputArgBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            org.tensorflow.proto.framework.OpDef.ArgDef, org.tensorflow.proto.framework.OpDef.ArgDef.Builder, org.tensorflow.proto.framework.OpDef.ArgDefOrBuilder>(
                outputArg_,
                ((bitField0_ & 0x00000002) != 0),
                getParentForChildren(),
                isClean());
        outputArg_ = null;
      }
      return outputArgBuilder_;
    }

    private com.google.protobuf.LazyStringList controlOutput_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    private void ensureControlOutputIsMutable() {
      if (!((bitField0_ & 0x00000004) != 0)) {
        controlOutput_ = new com.google.protobuf.LazyStringArrayList(controlOutput_);
        bitField0_ |= 0x00000004;
       }
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getControlOutputList() {
      return controlOutput_.getUnmodifiableView();
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public int getControlOutputCount() {
      return controlOutput_.size();
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public java.lang.String getControlOutput(int index) {
      return controlOutput_.get(index);
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public com.google.protobuf.ByteString
        getControlOutputBytes(int index) {
      return controlOutput_.getByteString(index);
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public Builder setControlOutput(
        int index, java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  ensureControlOutputIsMutable();
      controlOutput_.set(index, value);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public Builder addControlOutput(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  ensureControlOutputIsMutable();
      controlOutput_.add(value);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public Builder addAllControlOutput(
        java.lang.Iterable<java.lang.String> values) {
      ensureControlOutputIsMutable();
      com.google.protobuf.AbstractMessageLite.Builder.addAll(
          values, controlOutput_);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public Builder clearControlOutput() {
      controlOutput_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      bitField0_ = (bitField0_ & ~0x00000004);
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Named control outputs for this operation. Useful only for composite
     * operations (i.e. functions) which want to name different control outputs.
     * </pre>
     *
     * <code>repeated string control_output = 20;</code>
     */
    public Builder addControlOutputBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      ensureControlOutputIsMutable();
      controlOutput_.add(value);
      onChanged();
      return this;
    }

    private java.util.List<org.tensorflow.proto.framework.OpDef.AttrDef> attr_ =
      java.util.Collections.emptyList();
    private void ensureAttrIsMutable() {
      if (!((bitField0_ & 0x00000008) != 0)) {
        attr_ = new java.util.ArrayList<org.tensorflow.proto.framework.OpDef.AttrDef>(attr_);
        bitField0_ |= 0x00000008;
       }
    }

    private com.google.protobuf.RepeatedFieldBuilderV3<
        org.tensorflow.proto.framework.OpDef.AttrDef, org.tensorflow.proto.framework.OpDef.AttrDef.Builder, org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder> attrBuilder_;

    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public java.util.List<org.tensorflow.proto.framework.OpDef.AttrDef> getAttrList() {
      if (attrBuilder_ == null) {
        return java.util.Collections.unmodifiableList(attr_);
      } else {
        return attrBuilder_.getMessageList();
      }
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public int getAttrCount() {
      if (attrBuilder_ == null) {
        return attr_.size();
      } else {
        return attrBuilder_.getCount();
      }
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public org.tensorflow.proto.framework.OpDef.AttrDef getAttr(int index) {
      if (attrBuilder_ == null) {
        return attr_.get(index);
      } else {
        return attrBuilder_.getMessage(index);
      }
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder setAttr(
        int index, org.tensorflow.proto.framework.OpDef.AttrDef value) {
      if (attrBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureAttrIsMutable();
        attr_.set(index, value);
        onChanged();
      } else {
        attrBuilder_.setMessage(index, value);
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder setAttr(
        int index, org.tensorflow.proto.framework.OpDef.AttrDef.Builder builderForValue) {
      if (attrBuilder_ == null) {
        ensureAttrIsMutable();
        attr_.set(index, builderForValue.build());
        onChanged();
      } else {
        attrBuilder_.setMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder addAttr(org.tensorflow.proto.framework.OpDef.AttrDef value) {
      if (attrBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureAttrIsMutable();
        attr_.add(value);
        onChanged();
      } else {
        attrBuilder_.addMessage(value);
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder addAttr(
        int index, org.tensorflow.proto.framework.OpDef.AttrDef value) {
      if (attrBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureAttrIsMutable();
        attr_.add(index, value);
        onChanged();
      } else {
        attrBuilder_.addMessage(index, value);
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder addAttr(
        org.tensorflow.proto.framework.OpDef.AttrDef.Builder builderForValue) {
      if (attrBuilder_ == null) {
        ensureAttrIsMutable();
        attr_.add(builderForValue.build());
        onChanged();
      } else {
        attrBuilder_.addMessage(builderForValue.build());
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder addAttr(
        int index, org.tensorflow.proto.framework.OpDef.AttrDef.Builder builderForValue) {
      if (attrBuilder_ == null) {
        ensureAttrIsMutable();
        attr_.add(index, builderForValue.build());
        onChanged();
      } else {
        attrBuilder_.addMessage(index, builderForValue.build());
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder addAllAttr(
        java.lang.Iterable<? extends org.tensorflow.proto.framework.OpDef.AttrDef> values) {
      if (attrBuilder_ == null) {
        ensureAttrIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, attr_);
        onChanged();
      } else {
        attrBuilder_.addAllMessages(values);
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder clearAttr() {
      if (attrBuilder_ == null) {
        attr_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
      } else {
        attrBuilder_.clear();
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public Builder removeAttr(int index) {
      if (attrBuilder_ == null) {
        ensureAttrIsMutable();
        attr_.remove(index);
        onChanged();
      } else {
        attrBuilder_.remove(index);
      }
      return this;
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public org.tensorflow.proto.framework.OpDef.AttrDef.Builder getAttrBuilder(
        int index) {
      return getAttrFieldBuilder().getBuilder(index);
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder getAttrOrBuilder(
        int index) {
      if (attrBuilder_ == null) {
        return attr_.get(index);  } else {
        return attrBuilder_.getMessageOrBuilder(index);
      }
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public java.util.List<? extends org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder> 
         getAttrOrBuilderList() {
      if (attrBuilder_ != null) {
        return attrBuilder_.getMessageOrBuilderList();
      } else {
        return java.util.Collections.unmodifiableList(attr_);
      }
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public org.tensorflow.proto.framework.OpDef.AttrDef.Builder addAttrBuilder() {
      return getAttrFieldBuilder().addBuilder(
          org.tensorflow.proto.framework.OpDef.AttrDef.getDefaultInstance());
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public org.tensorflow.proto.framework.OpDef.AttrDef.Builder addAttrBuilder(
        int index) {
      return getAttrFieldBuilder().addBuilder(
          index, org.tensorflow.proto.framework.OpDef.AttrDef.getDefaultInstance());
    }
    /**
     * <code>repeated .tensorflow.OpDef.AttrDef attr = 4;</code>
     */
    public java.util.List<org.tensorflow.proto.framework.OpDef.AttrDef.Builder> 
         getAttrBuilderList() {
      return getAttrFieldBuilder().getBuilderList();
    }
    private com.google.protobuf.RepeatedFieldBuilderV3<
        org.tensorflow.proto.framework.OpDef.AttrDef, org.tensorflow.proto.framework.OpDef.AttrDef.Builder, org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder> 
        getAttrFieldBuilder() {
      if (attrBuilder_ == null) {
        attrBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
            org.tensorflow.proto.framework.OpDef.AttrDef, org.tensorflow.proto.framework.OpDef.AttrDef.Builder, org.tensorflow.proto.framework.OpDef.AttrDefOrBuilder>(
                attr_,
                ((bitField0_ & 0x00000008) != 0),
                getParentForChildren(),
                isClean());
        attr_ = null;
      }
      return attrBuilder_;
    }

    private org.tensorflow.proto.framework.OpDeprecation deprecation_;
    private com.google.protobuf.SingleFieldBuilderV3<
        org.tensorflow.proto.framework.OpDeprecation, org.tensorflow.proto.framework.OpDeprecation.Builder, org.tensorflow.proto.framework.OpDeprecationOrBuilder> deprecationBuilder_;
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public boolean hasDeprecation() {
      return deprecationBuilder_ != null || deprecation_ != null;
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public org.tensorflow.proto.framework.OpDeprecation getDeprecation() {
      if (deprecationBuilder_ == null) {
        return deprecation_ == null ? org.tensorflow.proto.framework.OpDeprecation.getDefaultInstance() : deprecation_;
      } else {
        return deprecationBuilder_.getMessage();
      }
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public Builder setDeprecation(org.tensorflow.proto.framework.OpDeprecation value) {
      if (deprecationBuilder_ == null) {
        if (value == null) {
          throw new NullPointerException();
        }
        deprecation_ = value;
        onChanged();
      } else {
        deprecationBuilder_.setMessage(value);
      }

      return this;
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public Builder setDeprecation(
        org.tensorflow.proto.framework.OpDeprecation.Builder builderForValue) {
      if (deprecationBuilder_ == null) {
        deprecation_ = builderForValue.build();
        onChanged();
      } else {
        deprecationBuilder_.setMessage(builderForValue.build());
      }

      return this;
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public Builder mergeDeprecation(org.tensorflow.proto.framework.OpDeprecation value) {
      if (deprecationBuilder_ == null) {
        if (deprecation_ != null) {
          deprecation_ =
            org.tensorflow.proto.framework.OpDeprecation.newBuilder(deprecation_).mergeFrom(value).buildPartial();
        } else {
          deprecation_ = value;
        }
        onChanged();
      } else {
        deprecationBuilder_.mergeFrom(value);
      }

      return this;
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public Builder clearDeprecation() {
      if (deprecationBuilder_ == null) {
        deprecation_ = null;
        onChanged();
      } else {
        deprecation_ = null;
        deprecationBuilder_ = null;
      }

      return this;
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public org.tensorflow.proto.framework.OpDeprecation.Builder getDeprecationBuilder() {
      
      onChanged();
      return getDeprecationFieldBuilder().getBuilder();
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    public org.tensorflow.proto.framework.OpDeprecationOrBuilder getDeprecationOrBuilder() {
      if (deprecationBuilder_ != null) {
        return deprecationBuilder_.getMessageOrBuilder();
      } else {
        return deprecation_ == null ?
            org.tensorflow.proto.framework.OpDeprecation.getDefaultInstance() : deprecation_;
      }
    }
    /**
     * <pre>
     * Optional deprecation based on GraphDef versions.
     * </pre>
     *
     * <code>.tensorflow.OpDeprecation deprecation = 8;</code>
     */
    private com.google.protobuf.SingleFieldBuilderV3<
        org.tensorflow.proto.framework.OpDeprecation, org.tensorflow.proto.framework.OpDeprecation.Builder, org.tensorflow.proto.framework.OpDeprecationOrBuilder> 
        getDeprecationFieldBuilder() {
      if (deprecationBuilder_ == null) {
        deprecationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
            org.tensorflow.proto.framework.OpDeprecation, org.tensorflow.proto.framework.OpDeprecation.Builder, org.tensorflow.proto.framework.OpDeprecationOrBuilder>(
                getDeprecation(),
                getParentForChildren(),
                isClean());
        deprecation_ = null;
      }
      return deprecationBuilder_;
    }

    private java.lang.Object summary_ = "";
    /**
     * <pre>
     * One-line human-readable description of what the Op does.
     * </pre>
     *
     * <code>string summary = 5;</code>
     */
    public java.lang.String getSummary() {
      java.lang.Object ref = summary_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        summary_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * One-line human-readable description of what the Op does.
     * </pre>
     *
     * <code>string summary = 5;</code>
     */
    public com.google.protobuf.ByteString
        getSummaryBytes() {
      java.lang.Object ref = summary_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        summary_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * One-line human-readable description of what the Op does.
     * </pre>
     *
     * <code>string summary = 5;</code>
     */
    public Builder setSummary(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      summary_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * One-line human-readable description of what the Op does.
     * </pre>
     *
     * <code>string summary = 5;</code>
     */
    public Builder clearSummary() {
      
      summary_ = getDefaultInstance().getSummary();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * One-line human-readable description of what the Op does.
     * </pre>
     *
     * <code>string summary = 5;</code>
     */
    public Builder setSummaryBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      summary_ = value;
      onChanged();
      return this;
    }

    private java.lang.Object description_ = "";
    /**
     * <pre>
     * Additional, longer human-readable description of what the Op does.
     * </pre>
     *
     * <code>string description = 6;</code>
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      if (!(ref instanceof java.lang.String)) {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        description_ = s;
        return s;
      } else {
        return (java.lang.String) ref;
      }
    }
    /**
     * <pre>
     * Additional, longer human-readable description of what the Op does.
     * </pre>
     *
     * <code>string description = 6;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    /**
     * <pre>
     * Additional, longer human-readable description of what the Op does.
     * </pre>
     *
     * <code>string description = 6;</code>
     */
    public Builder setDescription(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();
  }
  
      description_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Additional, longer human-readable description of what the Op does.
     * </pre>
     *
     * <code>string description = 6;</code>
     */
    public Builder clearDescription() {
      
      description_ = getDefaultInstance().getDescription();
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Additional, longer human-readable description of what the Op does.
     * </pre>
     *
     * <code>string description = 6;</code>
     */
    public Builder setDescriptionBytes(
        com.google.protobuf.ByteString value) {
      if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
      
      description_ = value;
      onChanged();
      return this;
    }

    private boolean isCommutative_ ;
    /**
     * <pre>
     * True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
     * </pre>
     *
     * <code>bool is_commutative = 18;</code>
     */
    public boolean getIsCommutative() {
      return isCommutative_;
    }
    /**
     * <pre>
     * True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
     * </pre>
     *
     * <code>bool is_commutative = 18;</code>
     */
    public Builder setIsCommutative(boolean value) {
      
      isCommutative_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
     * </pre>
     *
     * <code>bool is_commutative = 18;</code>
     */
    public Builder clearIsCommutative() {
      
      isCommutative_ = false;
      onChanged();
      return this;
    }

    private boolean isAggregate_ ;
    /**
     * <pre>
     * If is_aggregate is true, then this operation accepts N &gt;= 2
     * inputs and produces 1 output all of the same type.  Should be
     * associative and commutative, and produce output with the same
     * shape as the input.  The optimizer may replace an aggregate op
     * taking input from multiple devices with a tree of aggregate ops
     * that aggregate locally within each device (and possibly within
     * groups of nearby devices) before communicating.
     * TODO(josh11b): Implement that optimization.
     * </pre>
     *
     * <code>bool is_aggregate = 16;</code>
     */
    public boolean getIsAggregate() {
      return isAggregate_;
    }
    /**
     * <pre>
     * If is_aggregate is true, then this operation accepts N &gt;= 2
     * inputs and produces 1 output all of the same type.  Should be
     * associative and commutative, and produce output with the same
     * shape as the input.  The optimizer may replace an aggregate op
     * taking input from multiple devices with a tree of aggregate ops
     * that aggregate locally within each device (and possibly within
     * groups of nearby devices) before communicating.
     * TODO(josh11b): Implement that optimization.
     * </pre>
     *
     * <code>bool is_aggregate = 16;</code>
     */
    public Builder setIsAggregate(boolean value) {
      
      isAggregate_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * If is_aggregate is true, then this operation accepts N &gt;= 2
     * inputs and produces 1 output all of the same type.  Should be
     * associative and commutative, and produce output with the same
     * shape as the input.  The optimizer may replace an aggregate op
     * taking input from multiple devices with a tree of aggregate ops
     * that aggregate locally within each device (and possibly within
     * groups of nearby devices) before communicating.
     * TODO(josh11b): Implement that optimization.
     * </pre>
     *
     * <code>bool is_aggregate = 16;</code>
     */
    public Builder clearIsAggregate() {
      
      isAggregate_ = false;
      onChanged();
      return this;
    }

    private boolean isStateful_ ;
    /**
     * <pre>
     * Ops are marked as stateful if their behavior depends on some state beyond
     * their input tensors (e.g. variable reading op) or if they have
     * a side-effect (e.g. printing or asserting ops). Equivalently, stateless ops
     * must always produce the same output for the same input and have
     * no side-effects.
     * By default Ops may be moved between devices.  Stateful ops should
     * either not be moved, or should only be moved if that state can also
     * be moved (e.g. via some sort of save / restore).
     * Stateful ops are guaranteed to never be optimized away by Common
     * Subexpression Elimination (CSE).
     * </pre>
     *
     * <code>bool is_stateful = 17;</code>
     */
    public boolean getIsStateful() {
      return isStateful_;
    }
    /**
     * <pre>
     * Ops are marked as stateful if their behavior depends on some state beyond
     * their input tensors (e.g. variable reading op) or if they have
     * a side-effect (e.g. printing or asserting ops). Equivalently, stateless ops
     * must always produce the same output for the same input and have
     * no side-effects.
     * By default Ops may be moved between devices.  Stateful ops should
     * either not be moved, or should only be moved if that state can also
     * be moved (e.g. via some sort of save / restore).
     * Stateful ops are guaranteed to never be optimized away by Common
     * Subexpression Elimination (CSE).
     * </pre>
     *
     * <code>bool is_stateful = 17;</code>
     */
    public Builder setIsStateful(boolean value) {
      
      isStateful_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * Ops are marked as stateful if their behavior depends on some state beyond
     * their input tensors (e.g. variable reading op) or if they have
     * a side-effect (e.g. printing or asserting ops). Equivalently, stateless ops
     * must always produce the same output for the same input and have
     * no side-effects.
     * By default Ops may be moved between devices.  Stateful ops should
     * either not be moved, or should only be moved if that state can also
     * be moved (e.g. via some sort of save / restore).
     * Stateful ops are guaranteed to never be optimized away by Common
     * Subexpression Elimination (CSE).
     * </pre>
     *
     * <code>bool is_stateful = 17;</code>
     */
    public Builder clearIsStateful() {
      
      isStateful_ = false;
      onChanged();
      return this;
    }

    private boolean allowsUninitializedInput_ ;
    /**
     * <pre>
     * By default, all inputs to an Op must be initialized Tensors.  Ops
     * that may initialize tensors for the first time should set this
     * field to true, to allow the Op to take an uninitialized Tensor as
     * input.
     * </pre>
     *
     * <code>bool allows_uninitialized_input = 19;</code>
     */
    public boolean getAllowsUninitializedInput() {
      return allowsUninitializedInput_;
    }
    /**
     * <pre>
     * By default, all inputs to an Op must be initialized Tensors.  Ops
     * that may initialize tensors for the first time should set this
     * field to true, to allow the Op to take an uninitialized Tensor as
     * input.
     * </pre>
     *
     * <code>bool allows_uninitialized_input = 19;</code>
     */
    public Builder setAllowsUninitializedInput(boolean value) {
      
      allowsUninitializedInput_ = value;
      onChanged();
      return this;
    }
    /**
     * <pre>
     * By default, all inputs to an Op must be initialized Tensors.  Ops
     * that may initialize tensors for the first time should set this
     * field to true, to allow the Op to take an uninitialized Tensor as
     * input.
     * </pre>
     *
     * <code>bool allows_uninitialized_input = 19;</code>
     */
    public Builder clearAllowsUninitializedInput() {
      
      allowsUninitializedInput_ = false;
      onChanged();
      return this;
    }
    @java.lang.Override
    public final Builder setUnknownFields(
        final com.google.protobuf.UnknownFieldSet unknownFields) {
      return super.setUnknownFields(unknownFields);
    }

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


    // @@protoc_insertion_point(builder_scope:tensorflow.OpDef)
  }

  // @@protoc_insertion_point(class_scope:tensorflow.OpDef)
  private static final org.tensorflow.proto.framework.OpDef DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new org.tensorflow.proto.framework.OpDef();
  }

  public static org.tensorflow.proto.framework.OpDef getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

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

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

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

  @java.lang.Override
  public org.tensorflow.proto.framework.OpDef getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}

