content: /*
   * Tencent is pleased to support the open source community by making Angel available.
   *
   * Copyright (C) 2017-2018 THL A29 Limited, a Tencent company. All rights reserved.
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
   * compliance with the License. You may obtain a copy of the License at
   *
   * https://opensource.org/licenses/Apache-2.0
   *
   * Unless required by applicable law or agreed to in writing, software distributed under the License
   * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
   * or implied. See the License for the specific language governing permissions and limitations under
   * the License.
   *
   */
  // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: core/graph/op_def.proto
  
  package com.tencent.angel.core.graph;
  
  public final class OpDefProtos {
    private OpDefProtos() {}
    public static void registerAllExtensions(
        com.google.protobuf.ExtensionRegistryLite registry) {
    }
  
    public static void registerAllExtensions(
        com.google.protobuf.ExtensionRegistry registry) {
      registerAllExtensions(
          (com.google.protobuf.ExtensionRegistryLite) registry);
    }
    public interface OpDefOrBuilder extends
        // @@protoc_insertion_point(interface_extends:angel.OpDef)
        com.google.protobuf.MessageOrBuilder {
  
      /**
       * <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_]*".
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      java.lang.String getName();
      /**
       * <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_]*".
       * </pre>
       *
       * <code>string name = 1;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();
  
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> 
          getInputArgList();
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getInputArg(int index);
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      int getInputArgCount();
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> 
          getInputArgOrBuilderList();
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder getInputArgOrBuilder(
          int index);
  
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> 
          getOutputArgList();
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getOutputArg(int index);
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      int getOutputArgCount();
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> 
          getOutputArgOrBuilderList();
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder getOutputArgOrBuilder(
          int index);
  
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef> 
          getAttrList();
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef getAttr(int index);
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      int getAttrCount();
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder> 
          getAttrOrBuilderList();
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder getAttrOrBuilder(
          int index);
  
      /**
       * <pre>
       * Optional deprecation based on GraphDef versions.
       * </pre>
       *
       * <code>.angel.OpDeprecation deprecation = 8;</code>
       */
      boolean hasDeprecation();
      /**
       * <pre>
       * Optional deprecation based on GraphDef versions.
       * </pre>
       *
       * <code>.angel.OpDeprecation deprecation = 8;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDeprecation getDeprecation();
      /**
       * <pre>
       * Optional deprecation based on GraphDef versions.
       * </pre>
       *
       * <code>.angel.OpDeprecation deprecation = 8;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDeprecationOrBuilder getDeprecationOrBuilder();
  
      /**
       * <pre>
       * One-line human-readable description of what the Op does.
       * </pre>
       *
       * <code>string summary = 5;</code>
       */
      java.lang.String getSummary();
      /**
       * <pre>
       * One-line human-readable description of what the Op does.
       * </pre>
       *
       * <code>string summary = 5;</code>
       */
      com.google.protobuf.ByteString
          getSummaryBytes();
  
      /**
       * <pre>
       * Additional, longer human-readable description of what the Op does.
       * </pre>
       *
       * <code>string description = 6;</code>
       */
      java.lang.String getDescription();
      /**
       * <pre>
       * Additional, longer human-readable description of what the Op does.
       * </pre>
       *
       * <code>string description = 6;</code>
       */
      com.google.protobuf.ByteString
          getDescriptionBytes();
  
      /**
       * <pre>
       * True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
       * </pre>
       *
       * <code>bool is_commutative = 18;</code>
       */
      boolean getIsCommutative();
  
      /**
       * <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>
       */
      boolean getIsAggregate();
  
      /**
       * <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>
       */
      boolean getIsStateful();
  
      /**
       * <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>
       */
      boolean getAllowsUninitializedInput();
    }
    /**
     * <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 angel.OpDef}
     */
    public  static final class OpDef extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:angel.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();
        attr_ = java.util.Collections.emptyList();
        summary_ = "";
        description_ = "";
        isCommutative_ = false;
        isAggregate_ = false;
        isStateful_ = false;
        allowsUninitializedInput_ = false;
      }
  
      @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;
              default: {
                if (!parseUnknownFieldProto3(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                java.lang.String s = input.readStringRequireUtf8();
  
                name_ = s;
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  inputArg_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef>();
                  mutable_bitField0_ |= 0x00000002;
                }
                inputArg_.add(
                    input.readMessage(com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.parser(), extensionRegistry));
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  outputArg_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef>();
                  mutable_bitField0_ |= 0x00000004;
                }
                outputArg_.add(
                    input.readMessage(com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.parser(), extensionRegistry));
                break;
              }
              case 34: {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  attr_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef>();
                  mutable_bitField0_ |= 0x00000008;
                }
                attr_.add(
                    input.readMessage(com.tencent.angel.core.graph.OpDefProtos.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: {
                com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder subBuilder = null;
                if (deprecation_ != null) {
                  subBuilder = deprecation_.toBuilder();
                }
                deprecation_ = input.readMessage(com.tencent.angel.core.graph.OpDefProtos.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;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            inputArg_ = java.util.Collections.unmodifiableList(inputArg_);
          }
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            outputArg_ = java.util.Collections.unmodifiableList(outputArg_);
          }
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            attr_ = java.util.Collections.unmodifiableList(attr_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.tencent.angel.core.graph.OpDefProtos.OpDef.class, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder.class);
      }
  
      public interface ArgDefOrBuilder extends
          // @@protoc_insertion_point(interface_extends:angel.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>.angel.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>.angel.DataType type = 3;</code>
         */
        com.tencent.angel.serving.apis.common.TypesProtos.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 angel.OpDef.ArgDef}
       */
      public  static final class ArgDef extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:angel.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_ = "";
          isRef_ = false;
        }
  
        @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();
          }
          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;
                default: {
                  if (!parseUnknownFieldProto3(
                      input, unknownFields, extensionRegistry, tag)) {
                    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;
                }
              }
            }
          } 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 com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_ArgDef_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_ArgDef_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.class, com.tencent.angel.core.graph.OpDefProtos.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>.angel.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>.angel.DataType type = 3;</code>
         */
        public com.tencent.angel.serving.apis.common.TypesProtos.DataType getType() {
          com.tencent.angel.serving.apis.common.TypesProtos.DataType result = com.tencent.angel.serving.apis.common.TypesProtos.DataType.valueOf(type_);
          return result == null ? com.tencent.angel.serving.apis.common.TypesProtos.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;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized == 1) return true;
          if (isInitialized == 0) return false;
  
          memoizedIsInitialized = 1;
          return true;
        }
  
        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_ != com.tencent.angel.serving.apis.common.TypesProtos.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);
        }
  
        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_ != com.tencent.angel.serving.apis.common.TypesProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef)) {
            return super.equals(obj);
          }
          com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef other = (com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef) obj;
  
          boolean result = true;
          result = result && getName()
              .equals(other.getName());
          result = result && getDescription()
              .equals(other.getDescription());
          result = result && type_ == other.type_;
          result = result && getTypeAttr()
              .equals(other.getTypeAttr());
          result = result && getNumberAttr()
              .equals(other.getNumberAttr());
          result = result && getTypeListAttr()
              .equals(other.getTypeListAttr());
          result = result && (getIsRef()
              == other.getIsRef());
          result = result && unknownFields.equals(other.unknownFields);
          return result;
        }
  
        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          hash = (37 * hash) + NAME_FIELD_NUMBER;
          hash = (53 * hash) + getName().hashCode();
          hash = (37 * hash) + 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 com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(
            java.nio.ByteBuffer data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(
            java.nio.ByteBuffer data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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);
        }
  
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder() {
          return DEFAULT_INSTANCE.toBuilder();
        }
        public static Builder newBuilder(com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef prototype) {
          return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        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 angel.OpDef.ArgDef}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:angel.OpDef.ArgDef)
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_ArgDef_descriptor;
          }
  
          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_ArgDef_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.class, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder.class);
          }
  
          // Construct using com.tencent.angel.core.graph.OpDefProtos.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) {
            }
          }
          public Builder clear() {
            super.clear();
            name_ = "";
  
            description_ = "";
  
            type_ = 0;
  
            typeAttr_ = "";
  
            numberAttr_ = "";
  
            typeListAttr_ = "";
  
            isRef_ = false;
  
            return this;
          }
  
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_ArgDef_descriptor;
          }
  
          public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getDefaultInstanceForType() {
            return com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.getDefaultInstance();
          }
  
          public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef build() {
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }
  
          public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef buildPartial() {
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef result = new com.tencent.angel.core.graph.OpDefProtos.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;
          }
  
          public Builder clone() {
            return (Builder) super.clone();
          }
          public Builder setField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              java.lang.Object value) {
            return (Builder) super.setField(field, value);
          }
          public Builder clearField(
              com.google.protobuf.Descriptors.FieldDescriptor field) {
            return (Builder) super.clearField(field);
          }
          public Builder clearOneof(
              com.google.protobuf.Descriptors.OneofDescriptor oneof) {
            return (Builder) super.clearOneof(oneof);
          }
          public Builder setRepeatedField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              int index, java.lang.Object value) {
            return (Builder) super.setRepeatedField(field, index, value);
          }
          public Builder addRepeatedField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              java.lang.Object value) {
            return (Builder) super.addRepeatedField(field, value);
          }
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef) {
              return mergeFrom((com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }
  
          public Builder mergeFrom(com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef other) {
            if (other == com.tencent.angel.core.graph.OpDefProtos.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;
          }
  
          public final boolean isInitialized() {
            return true;
          }
  
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (com.tencent.angel.core.graph.OpDefProtos.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>.angel.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>.angel.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>.angel.DataType type = 3;</code>
           */
          public com.tencent.angel.serving.apis.common.TypesProtos.DataType getType() {
            com.tencent.angel.serving.apis.common.TypesProtos.DataType result = com.tencent.angel.serving.apis.common.TypesProtos.DataType.valueOf(type_);
            return result == null ? com.tencent.angel.serving.apis.common.TypesProtos.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>.angel.DataType type = 3;</code>
           */
          public Builder setType(com.tencent.angel.serving.apis.common.TypesProtos.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>.angel.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;
          }
          public final Builder setUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.setUnknownFieldsProto3(unknownFields);
          }
  
          public final Builder mergeUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.mergeUnknownFields(unknownFields);
          }
  
  
          // @@protoc_insertion_point(builder_scope:angel.OpDef.ArgDef)
        }
  
        // @@protoc_insertion_point(class_scope:angel.OpDef.ArgDef)
        private static final com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef();
        }
  
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }
  
        private static final com.google.protobuf.Parser<ArgDef>
            PARSER = new com.google.protobuf.AbstractParser<ArgDef>() {
          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;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }
  
      }
  
      public interface AttrDefOrBuilder extends
          // @@protoc_insertion_point(interface_extends:angel.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>.angel.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>.angel.AttrValue default_value = 3;</code>
         */
        com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
         */
        com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue allowed_values = 7;</code>
         */
        com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
         */
        com.tencent.angel.core.graph.AttrValueProtos.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 angel.OpDef.AttrDef}
       */
      public  static final class AttrDef extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:angel.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_ = "";
          hasMinimum_ = false;
          minimum_ = 0L;
        }
  
        @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();
          }
          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;
                default: {
                  if (!parseUnknownFieldProto3(
                      input, unknownFields, extensionRegistry, tag)) {
                    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: {
                  com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder subBuilder = null;
                  if (defaultValue_ != null) {
                    subBuilder = defaultValue_.toBuilder();
                  }
                  defaultValue_ = input.readMessage(com.tencent.angel.core.graph.AttrValueProtos.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: {
                  com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder subBuilder = null;
                  if (allowedValues_ != null) {
                    subBuilder = allowedValues_.toBuilder();
                  }
                  allowedValues_ = input.readMessage(com.tencent.angel.core.graph.AttrValueProtos.AttrValue.parser(), extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(allowedValues_);
                    allowedValues_ = subBuilder.buildPartial();
                  }
  
                  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 com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_AttrDef_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_AttrDef_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.class, com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue default_value = 3;</code>
         */
        public com.tencent.angel.core.graph.AttrValueProtos.AttrValue getDefaultValue() {
          return defaultValue_ == null ? com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
         */
        public com.tencent.angel.core.graph.AttrValueProtos.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 com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue allowed_values = 7;</code>
         */
        public com.tencent.angel.core.graph.AttrValueProtos.AttrValue getAllowedValues() {
          return allowedValues_ == null ? com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
         */
        public com.tencent.angel.core.graph.AttrValueProtos.AttrValueOrBuilder getAllowedValuesOrBuilder() {
          return getAllowedValues();
        }
  
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized == 1) return true;
          if (isInitialized == 0) return false;
  
          memoizedIsInitialized = 1;
          return true;
        }
  
        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);
        }
  
        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 com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef)) {
            return super.equals(obj);
          }
          com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef other = (com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef) obj;
  
          boolean result = true;
          result = result && getName()
              .equals(other.getName());
          result = result && getType()
              .equals(other.getType());
          result = result && (hasDefaultValue() == other.hasDefaultValue());
          if (hasDefaultValue()) {
            result = result && getDefaultValue()
                .equals(other.getDefaultValue());
          }
          result = result && getDescription()
              .equals(other.getDescription());
          result = result && (getHasMinimum()
              == other.getHasMinimum());
          result = result && (getMinimum()
              == other.getMinimum());
          result = result && (hasAllowedValues() == other.hasAllowedValues());
          if (hasAllowedValues()) {
            result = result && getAllowedValues()
                .equals(other.getAllowedValues());
          }
          result = result && unknownFields.equals(other.unknownFields);
          return result;
        }
  
        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          hash = (37 * hash) + NAME_FIELD_NUMBER;
          hash = (53 * hash) + getName().hashCode();
          hash = (37 * hash) + 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 com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(
            java.nio.ByteBuffer data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(
            java.nio.ByteBuffer data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static com.tencent.angel.core.graph.OpDefProtos.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);
        }
  
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder() {
          return DEFAULT_INSTANCE.toBuilder();
        }
        public static Builder newBuilder(com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef prototype) {
          return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }
        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 angel.OpDef.AttrDef}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:angel.OpDef.AttrDef)
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_AttrDef_descriptor;
          }
  
          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_AttrDef_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.class, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder.class);
          }
  
          // Construct using com.tencent.angel.core.graph.OpDefProtos.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) {
            }
          }
          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;
          }
  
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_AttrDef_descriptor;
          }
  
          public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef getDefaultInstanceForType() {
            return com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.getDefaultInstance();
          }
  
          public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef build() {
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }
  
          public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef buildPartial() {
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef result = new com.tencent.angel.core.graph.OpDefProtos.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;
          }
  
          public Builder clone() {
            return (Builder) super.clone();
          }
          public Builder setField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              java.lang.Object value) {
            return (Builder) super.setField(field, value);
          }
          public Builder clearField(
              com.google.protobuf.Descriptors.FieldDescriptor field) {
            return (Builder) super.clearField(field);
          }
          public Builder clearOneof(
              com.google.protobuf.Descriptors.OneofDescriptor oneof) {
            return (Builder) super.clearOneof(oneof);
          }
          public Builder setRepeatedField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              int index, java.lang.Object value) {
            return (Builder) super.setRepeatedField(field, index, value);
          }
          public Builder addRepeatedField(
              com.google.protobuf.Descriptors.FieldDescriptor field,
              java.lang.Object value) {
            return (Builder) super.addRepeatedField(field, value);
          }
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef) {
              return mergeFrom((com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }
  
          public Builder mergeFrom(com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef other) {
            if (other == com.tencent.angel.core.graph.OpDefProtos.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;
          }
  
          public final boolean isInitialized() {
            return true;
          }
  
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef parsedMessage = null;
            try {
              parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              parsedMessage = (com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.AttrValueProtos.AttrValue defaultValue_ = null;
          private com.google.protobuf.SingleFieldBuilderV3<
              com.tencent.angel.core.graph.AttrValueProtos.AttrValue, com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder, com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue default_value = 3;</code>
           */
          public com.tencent.angel.core.graph.AttrValueProtos.AttrValue getDefaultValue() {
            if (defaultValueBuilder_ == null) {
              return defaultValue_ == null ? com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
           */
          public Builder setDefaultValue(com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
           */
          public Builder setDefaultValue(
              com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
           */
          public Builder mergeDefaultValue(com.tencent.angel.core.graph.AttrValueProtos.AttrValue value) {
            if (defaultValueBuilder_ == null) {
              if (defaultValue_ != null) {
                defaultValue_ =
                  com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue default_value = 3;</code>
           */
          public com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
           */
          public com.tencent.angel.core.graph.AttrValueProtos.AttrValueOrBuilder getDefaultValueOrBuilder() {
            if (defaultValueBuilder_ != null) {
              return defaultValueBuilder_.getMessageOrBuilder();
            } else {
              return defaultValue_ == null ?
                  com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue default_value = 3;</code>
           */
          private com.google.protobuf.SingleFieldBuilderV3<
              com.tencent.angel.core.graph.AttrValueProtos.AttrValue, com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder, com.tencent.angel.core.graph.AttrValueProtos.AttrValueOrBuilder> 
              getDefaultValueFieldBuilder() {
            if (defaultValueBuilder_ == null) {
              defaultValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                  com.tencent.angel.core.graph.AttrValueProtos.AttrValue, com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder, com.tencent.angel.core.graph.AttrValueProtos.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 com.tencent.angel.core.graph.AttrValueProtos.AttrValue allowedValues_ = null;
          private com.google.protobuf.SingleFieldBuilderV3<
              com.tencent.angel.core.graph.AttrValueProtos.AttrValue, com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder, com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue allowed_values = 7;</code>
           */
          public com.tencent.angel.core.graph.AttrValueProtos.AttrValue getAllowedValues() {
            if (allowedValuesBuilder_ == null) {
              return allowedValues_ == null ? com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
           */
          public Builder setAllowedValues(com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
           */
          public Builder setAllowedValues(
              com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
           */
          public Builder mergeAllowedValues(com.tencent.angel.core.graph.AttrValueProtos.AttrValue value) {
            if (allowedValuesBuilder_ == null) {
              if (allowedValues_ != null) {
                allowedValues_ =
                  com.tencent.angel.core.graph.AttrValueProtos.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>.angel.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>.angel.AttrValue allowed_values = 7;</code>
           */
          public com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
           */
          public com.tencent.angel.core.graph.AttrValueProtos.AttrValueOrBuilder getAllowedValuesOrBuilder() {
            if (allowedValuesBuilder_ != null) {
              return allowedValuesBuilder_.getMessageOrBuilder();
            } else {
              return allowedValues_ == null ?
                  com.tencent.angel.core.graph.AttrValueProtos.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>.angel.AttrValue allowed_values = 7;</code>
           */
          private com.google.protobuf.SingleFieldBuilderV3<
              com.tencent.angel.core.graph.AttrValueProtos.AttrValue, com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder, com.tencent.angel.core.graph.AttrValueProtos.AttrValueOrBuilder> 
              getAllowedValuesFieldBuilder() {
            if (allowedValuesBuilder_ == null) {
              allowedValuesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                  com.tencent.angel.core.graph.AttrValueProtos.AttrValue, com.tencent.angel.core.graph.AttrValueProtos.AttrValue.Builder, com.tencent.angel.core.graph.AttrValueProtos.AttrValueOrBuilder>(
                      getAllowedValues(),
                      getParentForChildren(),
                      isClean());
              allowedValues_ = null;
            }
            return allowedValuesBuilder_;
          }
          public final Builder setUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.setUnknownFieldsProto3(unknownFields);
          }
  
          public final Builder mergeUnknownFields(
              final com.google.protobuf.UnknownFieldSet unknownFields) {
            return super.mergeUnknownFields(unknownFields);
          }
  
  
          // @@protoc_insertion_point(builder_scope:angel.OpDef.AttrDef)
        }
  
        // @@protoc_insertion_point(class_scope:angel.OpDef.AttrDef)
        private static final com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef();
        }
  
        public static com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }
  
        private static final com.google.protobuf.Parser<AttrDef>
            PARSER = new com.google.protobuf.AbstractParser<AttrDef>() {
          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;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }
  
      }
  
      private int bitField0_;
      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_]*".
       * </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_]*".
       * </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<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> inputArg_;
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> getInputArgList() {
        return inputArg_;
      }
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> 
          getInputArgOrBuilderList() {
        return inputArg_;
      }
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      public int getInputArgCount() {
        return inputArg_.size();
      }
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getInputArg(int index) {
        return inputArg_.get(index);
      }
      /**
       * <pre>
       * Description of the input(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder getInputArgOrBuilder(
          int index) {
        return inputArg_.get(index);
      }
  
      public static final int OUTPUT_ARG_FIELD_NUMBER = 3;
      private java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> outputArg_;
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> getOutputArgList() {
        return outputArg_;
      }
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> 
          getOutputArgOrBuilderList() {
        return outputArg_;
      }
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      public int getOutputArgCount() {
        return outputArg_.size();
      }
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef getOutputArg(int index) {
        return outputArg_.get(index);
      }
      /**
       * <pre>
       * Description of the output(s).
       * </pre>
       *
       * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder getOutputArgOrBuilder(
          int index) {
        return outputArg_.get(index);
      }
  
      public static final int ATTR_FIELD_NUMBER = 4;
      private java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef> attr_;
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef> getAttrList() {
        return attr_;
      }
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder> 
          getAttrOrBuilderList() {
        return attr_;
      }
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      public int getAttrCount() {
        return attr_.size();
      }
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef getAttr(int index) {
        return attr_.get(index);
      }
      /**
       * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder getAttrOrBuilder(
          int index) {
        return attr_.get(index);
      }
  
      public static final int DEPRECATION_FIELD_NUMBER = 8;
      private com.tencent.angel.core.graph.OpDefProtos.OpDeprecation deprecation_;
      /**
       * <pre>
       * Optional deprecation based on GraphDef versions.
       * </pre>
       *
       * <code>.angel.OpDeprecation deprecation = 8;</code>
       */
      public boolean hasDeprecation() {
        return deprecation_ != null;
      }
      /**
       * <pre>
       * Optional deprecation based on GraphDef versions.
       * </pre>
       *
       * <code>.angel.OpDeprecation deprecation = 8;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation getDeprecation() {
        return deprecation_ == null ? com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.getDefaultInstance() : deprecation_;
      }
      /**
       * <pre>
       * Optional deprecation based on GraphDef versions.
       * </pre>
       *
       * <code>.angel.OpDeprecation deprecation = 8;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.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;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;
  
        memoizedIsInitialized = 1;
        return true;
      }
  
      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_);
        }
        unknownFields.writeTo(output);
      }
  
      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_);
        }
        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 com.tencent.angel.core.graph.OpDefProtos.OpDef)) {
          return super.equals(obj);
        }
        com.tencent.angel.core.graph.OpDefProtos.OpDef other = (com.tencent.angel.core.graph.OpDefProtos.OpDef) obj;
  
        boolean result = true;
        result = result && getName()
            .equals(other.getName());
        result = result && getInputArgList()
            .equals(other.getInputArgList());
        result = result && getOutputArgList()
            .equals(other.getOutputArgList());
        result = result && getAttrList()
            .equals(other.getAttrList());
        result = result && (hasDeprecation() == other.hasDeprecation());
        if (hasDeprecation()) {
          result = result && getDeprecation()
              .equals(other.getDeprecation());
        }
        result = result && getSummary()
            .equals(other.getSummary());
        result = result && getDescription()
            .equals(other.getDescription());
        result = result && (getIsCommutative()
            == other.getIsCommutative());
        result = result && (getIsAggregate()
            == other.getIsAggregate());
        result = result && (getIsStateful()
            == other.getIsStateful());
        result = result && (getAllowsUninitializedInput()
            == other.getAllowsUninitializedInput());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }
  
      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
        if (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 (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 com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.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 com.tencent.angel.core.graph.OpDefProtos.OpDef parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.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);
      }
  
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.tencent.angel.core.graph.OpDefProtos.OpDef prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      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 angel.OpDef}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:angel.OpDef)
          com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.tencent.angel.core.graph.OpDefProtos.OpDef.class, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder.class);
        }
  
        // Construct using com.tencent.angel.core.graph.OpDefProtos.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();
          }
        }
        public Builder clear() {
          super.clear();
          name_ = "";
  
          if (inputArgBuilder_ == null) {
            inputArg_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            inputArgBuilder_.clear();
          }
          if (outputArgBuilder_ == null) {
            outputArg_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            outputArgBuilder_.clear();
          }
          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;
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDef_descriptor;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDef getDefaultInstanceForType() {
          return com.tencent.angel.core.graph.OpDefProtos.OpDef.getDefaultInstance();
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDef build() {
          com.tencent.angel.core.graph.OpDefProtos.OpDef result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDef buildPartial() {
          com.tencent.angel.core.graph.OpDefProtos.OpDef result = new com.tencent.angel.core.graph.OpDefProtos.OpDef(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          result.name_ = name_;
          if (inputArgBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              inputArg_ = java.util.Collections.unmodifiableList(inputArg_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.inputArg_ = inputArg_;
          } else {
            result.inputArg_ = inputArgBuilder_.build();
          }
          if (outputArgBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              outputArg_ = java.util.Collections.unmodifiableList(outputArg_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.outputArg_ = outputArg_;
          } else {
            result.outputArg_ = outputArgBuilder_.build();
          }
          if (attrBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
              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_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.tencent.angel.core.graph.OpDefProtos.OpDef) {
            return mergeFrom((com.tencent.angel.core.graph.OpDefProtos.OpDef)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(com.tencent.angel.core.graph.OpDefProtos.OpDef other) {
          if (other == com.tencent.angel.core.graph.OpDefProtos.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_ & ~0x00000002);
              } else {
                ensureInputArgIsMutable();
                inputArg_.addAll(other.inputArg_);
              }
              onChanged();
            }
          } else {
            if (!other.inputArg_.isEmpty()) {
              if (inputArgBuilder_.isEmpty()) {
                inputArgBuilder_.dispose();
                inputArgBuilder_ = null;
                inputArg_ = other.inputArg_;
                bitField0_ = (bitField0_ & ~0x00000002);
                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_ & ~0x00000004);
              } else {
                ensureOutputArgIsMutable();
                outputArg_.addAll(other.outputArg_);
              }
              onChanged();
            }
          } else {
            if (!other.outputArg_.isEmpty()) {
              if (outputArgBuilder_.isEmpty()) {
                outputArgBuilder_.dispose();
                outputArgBuilder_ = null;
                outputArg_ = other.outputArg_;
                bitField0_ = (bitField0_ & ~0x00000004);
                outputArgBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getOutputArgFieldBuilder() : null;
              } else {
                outputArgBuilder_.addAllMessages(other.outputArg_);
              }
            }
          }
          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;
        }
  
        public final boolean isInitialized() {
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.tencent.angel.core.graph.OpDefProtos.OpDef parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.tencent.angel.core.graph.OpDefProtos.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_]*".
         * </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_]*".
         * </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_]*".
         * </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_]*".
         * </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_]*".
         * </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<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> inputArg_ =
          java.util.Collections.emptyList();
        private void ensureInputArgIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            inputArg_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef>(inputArg_);
            bitField0_ |= 0x00000002;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> inputArgBuilder_;
  
        /**
         * <pre>
         * Description of the input(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.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 .angel.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder setInputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder setInputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder addInputArg(com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder addInputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder addInputArg(
            com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder addInputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder addAllInputArg(
            java.lang.Iterable<? extends com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public Builder clearInputArg() {
          if (inputArgBuilder_ == null) {
            inputArg_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            inputArgBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Description of the input(s).
         * </pre>
         *
         * <code>repeated .angel.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder getInputArgBuilder(
            int index) {
          return getInputArgFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * Description of the input(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder addInputArgBuilder() {
          return getInputArgFieldBuilder().addBuilder(
              com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.getDefaultInstance());
        }
        /**
         * <pre>
         * Description of the input(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder addInputArgBuilder(
            int index) {
          return getInputArgFieldBuilder().addBuilder(
              index, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.getDefaultInstance());
        }
        /**
         * <pre>
         * Description of the input(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef input_arg = 2;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder> 
             getInputArgBuilderList() {
          return getInputArgFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> 
            getInputArgFieldBuilder() {
          if (inputArgBuilder_ == null) {
            inputArgBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder>(
                    inputArg_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            inputArg_ = null;
          }
          return inputArgBuilder_;
        }
  
        private java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef> outputArg_ =
          java.util.Collections.emptyList();
        private void ensureOutputArgIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            outputArg_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef>(outputArg_);
            bitField0_ |= 0x00000004;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> outputArgBuilder_;
  
        /**
         * <pre>
         * Description of the output(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.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 .angel.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder setOutputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder setOutputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder addOutputArg(com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder addOutputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder addOutputArg(
            com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder addOutputArg(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder addAllOutputArg(
            java.lang.Iterable<? extends com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public Builder clearOutputArg() {
          if (outputArgBuilder_ == null) {
            outputArg_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            outputArgBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Description of the output(s).
         * </pre>
         *
         * <code>repeated .angel.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder getOutputArgBuilder(
            int index) {
          return getOutputArgFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * Description of the output(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder addOutputArgBuilder() {
          return getOutputArgFieldBuilder().addBuilder(
              com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.getDefaultInstance());
        }
        /**
         * <pre>
         * Description of the output(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder addOutputArgBuilder(
            int index) {
          return getOutputArgFieldBuilder().addBuilder(
              index, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.getDefaultInstance());
        }
        /**
         * <pre>
         * Description of the output(s).
         * </pre>
         *
         * <code>repeated .angel.OpDef.ArgDef output_arg = 3;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder> 
             getOutputArgBuilderList() {
          return getOutputArgFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder> 
            getOutputArgFieldBuilder() {
          if (outputArgBuilder_ == null) {
            outputArgBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.ArgDefOrBuilder>(
                    outputArg_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            outputArg_ = null;
          }
          return outputArgBuilder_;
        }
  
        private java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef> attr_ =
          java.util.Collections.emptyList();
        private void ensureAttrIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            attr_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef>(attr_);
            bitField0_ |= 0x00000008;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder> attrBuilder_;
  
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef> getAttrList() {
          if (attrBuilder_ == null) {
            return java.util.Collections.unmodifiableList(attr_);
          } else {
            return attrBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public int getAttrCount() {
          if (attrBuilder_ == null) {
            return attr_.size();
          } else {
            return attrBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef getAttr(int index) {
          if (attrBuilder_ == null) {
            return attr_.get(index);
          } else {
            return attrBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder setAttr(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder setAttr(
            int index, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder builderForValue) {
          if (attrBuilder_ == null) {
            ensureAttrIsMutable();
            attr_.set(index, builderForValue.build());
            onChanged();
          } else {
            attrBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder addAttr(com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder addAttr(
            int index, com.tencent.angel.core.graph.OpDefProtos.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 .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder addAttr(
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder builderForValue) {
          if (attrBuilder_ == null) {
            ensureAttrIsMutable();
            attr_.add(builderForValue.build());
            onChanged();
          } else {
            attrBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder addAttr(
            int index, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder builderForValue) {
          if (attrBuilder_ == null) {
            ensureAttrIsMutable();
            attr_.add(index, builderForValue.build());
            onChanged();
          } else {
            attrBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public Builder addAllAttr(
            java.lang.Iterable<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef> values) {
          if (attrBuilder_ == null) {
            ensureAttrIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, attr_);
            onChanged();
          } else {
            attrBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .angel.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 .angel.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 .angel.OpDef.AttrDef attr = 4;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder getAttrBuilder(
            int index) {
          return getAttrFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder getAttrOrBuilder(
            int index) {
          if (attrBuilder_ == null) {
            return attr_.get(index);  } else {
            return attrBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder> 
             getAttrOrBuilderList() {
          if (attrBuilder_ != null) {
            return attrBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(attr_);
          }
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder addAttrBuilder() {
          return getAttrFieldBuilder().addBuilder(
              com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.getDefaultInstance());
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder addAttrBuilder(
            int index) {
          return getAttrFieldBuilder().addBuilder(
              index, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.getDefaultInstance());
        }
        /**
         * <code>repeated .angel.OpDef.AttrDef attr = 4;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder> 
             getAttrBuilderList() {
          return getAttrFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder> 
            getAttrFieldBuilder() {
          if (attrBuilder_ == null) {
            attrBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDef.AttrDefOrBuilder>(
                    attr_,
                    ((bitField0_ & 0x00000008) == 0x00000008),
                    getParentForChildren(),
                    isClean());
            attr_ = null;
          }
          return attrBuilder_;
        }
  
        private com.tencent.angel.core.graph.OpDefProtos.OpDeprecation deprecation_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDeprecation, com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDeprecationOrBuilder> deprecationBuilder_;
        /**
         * <pre>
         * Optional deprecation based on GraphDef versions.
         * </pre>
         *
         * <code>.angel.OpDeprecation deprecation = 8;</code>
         */
        public boolean hasDeprecation() {
          return deprecationBuilder_ != null || deprecation_ != null;
        }
        /**
         * <pre>
         * Optional deprecation based on GraphDef versions.
         * </pre>
         *
         * <code>.angel.OpDeprecation deprecation = 8;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation getDeprecation() {
          if (deprecationBuilder_ == null) {
            return deprecation_ == null ? com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.getDefaultInstance() : deprecation_;
          } else {
            return deprecationBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Optional deprecation based on GraphDef versions.
         * </pre>
         *
         * <code>.angel.OpDeprecation deprecation = 8;</code>
         */
        public Builder setDeprecation(com.tencent.angel.core.graph.OpDefProtos.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>.angel.OpDeprecation deprecation = 8;</code>
         */
        public Builder setDeprecation(
            com.tencent.angel.core.graph.OpDefProtos.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>.angel.OpDeprecation deprecation = 8;</code>
         */
        public Builder mergeDeprecation(com.tencent.angel.core.graph.OpDefProtos.OpDeprecation value) {
          if (deprecationBuilder_ == null) {
            if (deprecation_ != null) {
              deprecation_ =
                com.tencent.angel.core.graph.OpDefProtos.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>.angel.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>.angel.OpDeprecation deprecation = 8;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder getDeprecationBuilder() {
          
          onChanged();
          return getDeprecationFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Optional deprecation based on GraphDef versions.
         * </pre>
         *
         * <code>.angel.OpDeprecation deprecation = 8;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDeprecationOrBuilder getDeprecationOrBuilder() {
          if (deprecationBuilder_ != null) {
            return deprecationBuilder_.getMessageOrBuilder();
          } else {
            return deprecation_ == null ?
                com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.getDefaultInstance() : deprecation_;
          }
        }
        /**
         * <pre>
         * Optional deprecation based on GraphDef versions.
         * </pre>
         *
         * <code>.angel.OpDeprecation deprecation = 8;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDeprecation, com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDeprecationOrBuilder> 
            getDeprecationFieldBuilder() {
          if (deprecationBuilder_ == null) {
            deprecationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.tencent.angel.core.graph.OpDefProtos.OpDeprecation, com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder, com.tencent.angel.core.graph.OpDefProtos.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;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }
  
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }
  
  
        // @@protoc_insertion_point(builder_scope:angel.OpDef)
      }
  
      // @@protoc_insertion_point(class_scope:angel.OpDef)
      private static final com.tencent.angel.core.graph.OpDefProtos.OpDef DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.tencent.angel.core.graph.OpDefProtos.OpDef();
      }
  
      public static com.tencent.angel.core.graph.OpDefProtos.OpDef getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }
  
      private static final com.google.protobuf.Parser<OpDef>
          PARSER = new com.google.protobuf.AbstractParser<OpDef>() {
        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;
      }
  
      public com.tencent.angel.core.graph.OpDefProtos.OpDef getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
  
    }
  
    public interface OpDeprecationOrBuilder extends
        // @@protoc_insertion_point(interface_extends:angel.OpDeprecation)
        com.google.protobuf.MessageOrBuilder {
  
      /**
       * <pre>
       * First GraphDef version at which the op is disallowed.
       * </pre>
       *
       * <code>int32 version = 1;</code>
       */
      int getVersion();
  
      /**
       * <pre>
       * Explanation of why it was deprecated and what to use instead.
       * </pre>
       *
       * <code>string explanation = 2;</code>
       */
      java.lang.String getExplanation();
      /**
       * <pre>
       * Explanation of why it was deprecated and what to use instead.
       * </pre>
       *
       * <code>string explanation = 2;</code>
       */
      com.google.protobuf.ByteString
          getExplanationBytes();
    }
    /**
     * <pre>
     * Information about version-dependent deprecation of an op
     * </pre>
     *
     * Protobuf type {@code angel.OpDeprecation}
     */
    public  static final class OpDeprecation extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:angel.OpDeprecation)
        OpDeprecationOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use OpDeprecation.newBuilder() to construct.
      private OpDeprecation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private OpDeprecation() {
        version_ = 0;
        explanation_ = "";
      }
  
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private OpDeprecation(
          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;
              default: {
                if (!parseUnknownFieldProto3(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
  
                version_ = input.readInt32();
                break;
              }
              case 18: {
                java.lang.String s = input.readStringRequireUtf8();
  
                explanation_ = s;
                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 com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDeprecation_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDeprecation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.class, com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder.class);
      }
  
      public static final int VERSION_FIELD_NUMBER = 1;
      private int version_;
      /**
       * <pre>
       * First GraphDef version at which the op is disallowed.
       * </pre>
       *
       * <code>int32 version = 1;</code>
       */
      public int getVersion() {
        return version_;
      }
  
      public static final int EXPLANATION_FIELD_NUMBER = 2;
      private volatile java.lang.Object explanation_;
      /**
       * <pre>
       * Explanation of why it was deprecated and what to use instead.
       * </pre>
       *
       * <code>string explanation = 2;</code>
       */
      public java.lang.String getExplanation() {
        java.lang.Object ref = explanation_;
        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();
          explanation_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Explanation of why it was deprecated and what to use instead.
       * </pre>
       *
       * <code>string explanation = 2;</code>
       */
      public com.google.protobuf.ByteString
          getExplanationBytes() {
        java.lang.Object ref = explanation_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          explanation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;
  
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (version_ != 0) {
          output.writeInt32(1, version_);
        }
        if (!getExplanationBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, explanation_);
        }
        unknownFields.writeTo(output);
      }
  
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;
  
        size = 0;
        if (version_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, version_);
        }
        if (!getExplanationBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, explanation_);
        }
        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 com.tencent.angel.core.graph.OpDefProtos.OpDeprecation)) {
          return super.equals(obj);
        }
        com.tencent.angel.core.graph.OpDefProtos.OpDeprecation other = (com.tencent.angel.core.graph.OpDefProtos.OpDeprecation) obj;
  
        boolean result = true;
        result = result && (getVersion()
            == other.getVersion());
        result = result && getExplanation()
            .equals(other.getExplanation());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }
  
      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getVersion();
        hash = (37 * hash) + EXPLANATION_FIELD_NUMBER;
        hash = (53 * hash) + getExplanation().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }
  
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation 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 com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation 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 com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
  
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.tencent.angel.core.graph.OpDefProtos.OpDeprecation prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      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>
       * Information about version-dependent deprecation of an op
       * </pre>
       *
       * Protobuf type {@code angel.OpDeprecation}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:angel.OpDeprecation)
          com.tencent.angel.core.graph.OpDefProtos.OpDeprecationOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDeprecation_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDeprecation_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.class, com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.Builder.class);
        }
  
        // Construct using com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          version_ = 0;
  
          explanation_ = "";
  
          return this;
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpDeprecation_descriptor;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation getDefaultInstanceForType() {
          return com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.getDefaultInstance();
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation build() {
          com.tencent.angel.core.graph.OpDefProtos.OpDeprecation result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation buildPartial() {
          com.tencent.angel.core.graph.OpDefProtos.OpDeprecation result = new com.tencent.angel.core.graph.OpDefProtos.OpDeprecation(this);
          result.version_ = version_;
          result.explanation_ = explanation_;
          onBuilt();
          return result;
        }
  
        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.tencent.angel.core.graph.OpDefProtos.OpDeprecation) {
            return mergeFrom((com.tencent.angel.core.graph.OpDefProtos.OpDeprecation)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(com.tencent.angel.core.graph.OpDefProtos.OpDeprecation other) {
          if (other == com.tencent.angel.core.graph.OpDefProtos.OpDeprecation.getDefaultInstance()) return this;
          if (other.getVersion() != 0) {
            setVersion(other.getVersion());
          }
          if (!other.getExplanation().isEmpty()) {
            explanation_ = other.explanation_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }
  
        public final boolean isInitialized() {
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.tencent.angel.core.graph.OpDefProtos.OpDeprecation parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.tencent.angel.core.graph.OpDefProtos.OpDeprecation) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
  
        private int version_ ;
        /**
         * <pre>
         * First GraphDef version at which the op is disallowed.
         * </pre>
         *
         * <code>int32 version = 1;</code>
         */
        public int getVersion() {
          return version_;
        }
        /**
         * <pre>
         * First GraphDef version at which the op is disallowed.
         * </pre>
         *
         * <code>int32 version = 1;</code>
         */
        public Builder setVersion(int value) {
          
          version_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * First GraphDef version at which the op is disallowed.
         * </pre>
         *
         * <code>int32 version = 1;</code>
         */
        public Builder clearVersion() {
          
          version_ = 0;
          onChanged();
          return this;
        }
  
        private java.lang.Object explanation_ = "";
        /**
         * <pre>
         * Explanation of why it was deprecated and what to use instead.
         * </pre>
         *
         * <code>string explanation = 2;</code>
         */
        public java.lang.String getExplanation() {
          java.lang.Object ref = explanation_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            explanation_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Explanation of why it was deprecated and what to use instead.
         * </pre>
         *
         * <code>string explanation = 2;</code>
         */
        public com.google.protobuf.ByteString
            getExplanationBytes() {
          java.lang.Object ref = explanation_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            explanation_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Explanation of why it was deprecated and what to use instead.
         * </pre>
         *
         * <code>string explanation = 2;</code>
         */
        public Builder setExplanation(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    
          explanation_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Explanation of why it was deprecated and what to use instead.
         * </pre>
         *
         * <code>string explanation = 2;</code>
         */
        public Builder clearExplanation() {
          
          explanation_ = getDefaultInstance().getExplanation();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Explanation of why it was deprecated and what to use instead.
         * </pre>
         *
         * <code>string explanation = 2;</code>
         */
        public Builder setExplanationBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    checkByteStringIsUtf8(value);
          
          explanation_ = value;
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }
  
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }
  
  
        // @@protoc_insertion_point(builder_scope:angel.OpDeprecation)
      }
  
      // @@protoc_insertion_point(class_scope:angel.OpDeprecation)
      private static final com.tencent.angel.core.graph.OpDefProtos.OpDeprecation DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.tencent.angel.core.graph.OpDefProtos.OpDeprecation();
      }
  
      public static com.tencent.angel.core.graph.OpDefProtos.OpDeprecation getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }
  
      private static final com.google.protobuf.Parser<OpDeprecation>
          PARSER = new com.google.protobuf.AbstractParser<OpDeprecation>() {
        public OpDeprecation parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new OpDeprecation(input, extensionRegistry);
        }
      };
  
      public static com.google.protobuf.Parser<OpDeprecation> parser() {
        return PARSER;
      }
  
      @java.lang.Override
      public com.google.protobuf.Parser<OpDeprecation> getParserForType() {
        return PARSER;
      }
  
      public com.tencent.angel.core.graph.OpDefProtos.OpDeprecation getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
  
    }
  
    public interface OpListOrBuilder extends
        // @@protoc_insertion_point(interface_extends:angel.OpList)
        com.google.protobuf.MessageOrBuilder {
  
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef> 
          getOpList();
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDef getOp(int index);
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      int getOpCount();
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder> 
          getOpOrBuilderList();
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder getOpOrBuilder(
          int index);
    }
    /**
     * <pre>
     * A collection of OpDefs
     * </pre>
     *
     * Protobuf type {@code angel.OpList}
     */
    public  static final class OpList extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:angel.OpList)
        OpListOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use OpList.newBuilder() to construct.
      private OpList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private OpList() {
        op_ = java.util.Collections.emptyList();
      }
  
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private OpList(
          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;
              default: {
                if (!parseUnknownFieldProto3(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  op_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef>();
                  mutable_bitField0_ |= 0x00000001;
                }
                op_.add(
                    input.readMessage(com.tencent.angel.core.graph.OpDefProtos.OpDef.parser(), extensionRegistry));
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            op_ = java.util.Collections.unmodifiableList(op_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpList_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpList_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.tencent.angel.core.graph.OpDefProtos.OpList.class, com.tencent.angel.core.graph.OpDefProtos.OpList.Builder.class);
      }
  
      public static final int OP_FIELD_NUMBER = 1;
      private java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef> op_;
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef> getOpList() {
        return op_;
      }
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder> 
          getOpOrBuilderList() {
        return op_;
      }
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      public int getOpCount() {
        return op_.size();
      }
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDef getOp(int index) {
        return op_.get(index);
      }
      /**
       * <code>repeated .angel.OpDef op = 1;</code>
       */
      public com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder getOpOrBuilder(
          int index) {
        return op_.get(index);
      }
  
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;
  
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < op_.size(); i++) {
          output.writeMessage(1, op_.get(i));
        }
        unknownFields.writeTo(output);
      }
  
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;
  
        size = 0;
        for (int i = 0; i < op_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, op_.get(i));
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }
  
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.tencent.angel.core.graph.OpDefProtos.OpList)) {
          return super.equals(obj);
        }
        com.tencent.angel.core.graph.OpDefProtos.OpList other = (com.tencent.angel.core.graph.OpDefProtos.OpList) obj;
  
        boolean result = true;
        result = result && getOpList()
            .equals(other.getOpList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }
  
      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getOpCount() > 0) {
          hash = (37 * hash) + OP_FIELD_NUMBER;
          hash = (53 * hash) + getOpList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }
  
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList 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 com.tencent.angel.core.graph.OpDefProtos.OpList parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList 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 com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.tencent.angel.core.graph.OpDefProtos.OpList parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
  
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.tencent.angel.core.graph.OpDefProtos.OpList prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A collection of OpDefs
       * </pre>
       *
       * Protobuf type {@code angel.OpList}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:angel.OpList)
          com.tencent.angel.core.graph.OpDefProtos.OpListOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpList_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpList_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.tencent.angel.core.graph.OpDefProtos.OpList.class, com.tencent.angel.core.graph.OpDefProtos.OpList.Builder.class);
        }
  
        // Construct using com.tencent.angel.core.graph.OpDefProtos.OpList.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getOpFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          if (opBuilder_ == null) {
            op_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            opBuilder_.clear();
          }
          return this;
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.tencent.angel.core.graph.OpDefProtos.internal_static_angel_OpList_descriptor;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpList getDefaultInstanceForType() {
          return com.tencent.angel.core.graph.OpDefProtos.OpList.getDefaultInstance();
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpList build() {
          com.tencent.angel.core.graph.OpDefProtos.OpList result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public com.tencent.angel.core.graph.OpDefProtos.OpList buildPartial() {
          com.tencent.angel.core.graph.OpDefProtos.OpList result = new com.tencent.angel.core.graph.OpDefProtos.OpList(this);
          int from_bitField0_ = bitField0_;
          if (opBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              op_ = java.util.Collections.unmodifiableList(op_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.op_ = op_;
          } else {
            result.op_ = opBuilder_.build();
          }
          onBuilt();
          return result;
        }
  
        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.tencent.angel.core.graph.OpDefProtos.OpList) {
            return mergeFrom((com.tencent.angel.core.graph.OpDefProtos.OpList)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(com.tencent.angel.core.graph.OpDefProtos.OpList other) {
          if (other == com.tencent.angel.core.graph.OpDefProtos.OpList.getDefaultInstance()) return this;
          if (opBuilder_ == null) {
            if (!other.op_.isEmpty()) {
              if (op_.isEmpty()) {
                op_ = other.op_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureOpIsMutable();
                op_.addAll(other.op_);
              }
              onChanged();
            }
          } else {
            if (!other.op_.isEmpty()) {
              if (opBuilder_.isEmpty()) {
                opBuilder_.dispose();
                opBuilder_ = null;
                op_ = other.op_;
                bitField0_ = (bitField0_ & ~0x00000001);
                opBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getOpFieldBuilder() : null;
              } else {
                opBuilder_.addAllMessages(other.op_);
              }
            }
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }
  
        public final boolean isInitialized() {
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.tencent.angel.core.graph.OpDefProtos.OpList parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.tencent.angel.core.graph.OpDefProtos.OpList) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        private java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef> op_ =
          java.util.Collections.emptyList();
        private void ensureOpIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            op_ = new java.util.ArrayList<com.tencent.angel.core.graph.OpDefProtos.OpDef>(op_);
            bitField0_ |= 0x00000001;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder> opBuilder_;
  
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef> getOpList() {
          if (opBuilder_ == null) {
            return java.util.Collections.unmodifiableList(op_);
          } else {
            return opBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public int getOpCount() {
          if (opBuilder_ == null) {
            return op_.size();
          } else {
            return opBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef getOp(int index) {
          if (opBuilder_ == null) {
            return op_.get(index);
          } else {
            return opBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder setOp(
            int index, com.tencent.angel.core.graph.OpDefProtos.OpDef value) {
          if (opBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureOpIsMutable();
            op_.set(index, value);
            onChanged();
          } else {
            opBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder setOp(
            int index, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder builderForValue) {
          if (opBuilder_ == null) {
            ensureOpIsMutable();
            op_.set(index, builderForValue.build());
            onChanged();
          } else {
            opBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder addOp(com.tencent.angel.core.graph.OpDefProtos.OpDef value) {
          if (opBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureOpIsMutable();
            op_.add(value);
            onChanged();
          } else {
            opBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder addOp(
            int index, com.tencent.angel.core.graph.OpDefProtos.OpDef value) {
          if (opBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureOpIsMutable();
            op_.add(index, value);
            onChanged();
          } else {
            opBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder addOp(
            com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder builderForValue) {
          if (opBuilder_ == null) {
            ensureOpIsMutable();
            op_.add(builderForValue.build());
            onChanged();
          } else {
            opBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder addOp(
            int index, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder builderForValue) {
          if (opBuilder_ == null) {
            ensureOpIsMutable();
            op_.add(index, builderForValue.build());
            onChanged();
          } else {
            opBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder addAllOp(
            java.lang.Iterable<? extends com.tencent.angel.core.graph.OpDefProtos.OpDef> values) {
          if (opBuilder_ == null) {
            ensureOpIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, op_);
            onChanged();
          } else {
            opBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder clearOp() {
          if (opBuilder_ == null) {
            op_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            opBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public Builder removeOp(int index) {
          if (opBuilder_ == null) {
            ensureOpIsMutable();
            op_.remove(index);
            onChanged();
          } else {
            opBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder getOpBuilder(
            int index) {
          return getOpFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder getOpOrBuilder(
            int index) {
          if (opBuilder_ == null) {
            return op_.get(index);  } else {
            return opBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public java.util.List<? extends com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder> 
             getOpOrBuilderList() {
          if (opBuilder_ != null) {
            return opBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(op_);
          }
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder addOpBuilder() {
          return getOpFieldBuilder().addBuilder(
              com.tencent.angel.core.graph.OpDefProtos.OpDef.getDefaultInstance());
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder addOpBuilder(
            int index) {
          return getOpFieldBuilder().addBuilder(
              index, com.tencent.angel.core.graph.OpDefProtos.OpDef.getDefaultInstance());
        }
        /**
         * <code>repeated .angel.OpDef op = 1;</code>
         */
        public java.util.List<com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder> 
             getOpBuilderList() {
          return getOpFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.tencent.angel.core.graph.OpDefProtos.OpDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder> 
            getOpFieldBuilder() {
          if (opBuilder_ == null) {
            opBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.tencent.angel.core.graph.OpDefProtos.OpDef, com.tencent.angel.core.graph.OpDefProtos.OpDef.Builder, com.tencent.angel.core.graph.OpDefProtos.OpDefOrBuilder>(
                    op_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            op_ = null;
          }
          return opBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFieldsProto3(unknownFields);
        }
  
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }
  
  
        // @@protoc_insertion_point(builder_scope:angel.OpList)
      }
  
      // @@protoc_insertion_point(class_scope:angel.OpList)
      private static final com.tencent.angel.core.graph.OpDefProtos.OpList DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.tencent.angel.core.graph.OpDefProtos.OpList();
      }
  
      public static com.tencent.angel.core.graph.OpDefProtos.OpList getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }
  
      private static final com.google.protobuf.Parser<OpList>
          PARSER = new com.google.protobuf.AbstractParser<OpList>() {
        public OpList parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new OpList(input, extensionRegistry);
        }
      };
  
      public static com.google.protobuf.Parser<OpList> parser() {
        return PARSER;
      }
  
      @java.lang.Override
      public com.google.protobuf.Parser<OpList> getParserForType() {
        return PARSER;
      }
  
      public com.tencent.angel.core.graph.OpDefProtos.OpList getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
  
    }
  
    private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_angel_OpDef_descriptor;
    private static final 
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internal_static_angel_OpDef_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_angel_OpDef_ArgDef_descriptor;
    private static final 
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internal_static_angel_OpDef_ArgDef_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_angel_OpDef_AttrDef_descriptor;
    private static final 
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internal_static_angel_OpDef_AttrDef_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_angel_OpDeprecation_descriptor;
    private static final 
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internal_static_angel_OpDeprecation_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor
      internal_static_angel_OpList_descriptor;
    private static final 
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internal_static_angel_OpList_fieldAccessorTable;
  
    public static com.google.protobuf.Descriptors.FileDescriptor
        getDescriptor() {
      return descriptor;
    }
    private static  com.google.protobuf.Descriptors.FileDescriptor
        descriptor;
    static {
      java.lang.String[] descriptorData = {
        "\n\027core/graph/op_def.proto\022\005angel\032\033core/g" +
        "raph/attr_value.proto\032\027apis/common/types" +
        ".proto\"\225\005\n\005OpDef\022\014\n\004name\030\001 \001(\t\022&\n\tinput_" +
        "arg\030\002 \003(\0132\023.angel.OpDef.ArgDef\022\'\n\noutput" +
        "_arg\030\003 \003(\0132\023.angel.OpDef.ArgDef\022\"\n\004attr\030" +
        "\004 \003(\0132\024.angel.OpDef.AttrDef\022)\n\013deprecati" +
        "on\030\010 \001(\0132\024.angel.OpDeprecation\022\017\n\007summar" +
        "y\030\005 \001(\t\022\023\n\013description\030\006 \001(\t\022\026\n\016is_commu" +
        "tative\030\022 \001(\010\022\024\n\014is_aggregate\030\020 \001(\010\022\023\n\013is" +
        "_stateful\030\021 \001(\010\022\"\n\032allows_uninitialized_" +
        "input\030\023 \001(\010\032\232\001\n\006ArgDef\022\014\n\004name\030\001 \001(\t\022\023\n\013" +
        "description\030\002 \001(\t\022\035\n\004type\030\003 \001(\0162\017.angel." +
        "DataType\022\021\n\ttype_attr\030\004 \001(\t\022\023\n\013number_at" +
        "tr\030\005 \001(\t\022\026\n\016type_list_attr\030\006 \001(\t\022\016\n\006is_r" +
        "ef\030\020 \001(\010\032\263\001\n\007AttrDef\022\014\n\004name\030\001 \001(\t\022\014\n\004ty" +
        "pe\030\002 \001(\t\022\'\n\rdefault_value\030\003 \001(\0132\020.angel." +
        "AttrValue\022\023\n\013description\030\004 \001(\t\022\023\n\013has_mi" +
        "nimum\030\005 \001(\010\022\017\n\007minimum\030\006 \001(\003\022(\n\016allowed_" +
        "values\030\007 \001(\0132\020.angel.AttrValue\"5\n\rOpDepr" +
        "ecation\022\017\n\007version\030\001 \001(\005\022\023\n\013explanation\030" +
        "\002 \001(\t\"\"\n\006OpList\022\030\n\002op\030\001 \003(\0132\014.angel.OpDe" +
        "fB-\n\034com.tencent.angel.core.graphB\013OpDef" +
        "ProtosP\000b\006proto3"
      };
      com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
          new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
            public com.google.protobuf.ExtensionRegistry assignDescriptors(
                com.google.protobuf.Descriptors.FileDescriptor root) {
              descriptor = root;
              return null;
            }
          };
      com.google.protobuf.Descriptors.FileDescriptor
        .internalBuildGeneratedFileFrom(descriptorData,
          new com.google.protobuf.Descriptors.FileDescriptor[] {
            com.tencent.angel.core.graph.AttrValueProtos.getDescriptor(),
            com.tencent.angel.serving.apis.common.TypesProtos.getDescriptor(),
          }, assigner);
      internal_static_angel_OpDef_descriptor =
        getDescriptor().getMessageTypes().get(0);
      internal_static_angel_OpDef_fieldAccessorTable = new
        com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
          internal_static_angel_OpDef_descriptor,
          new java.lang.String[] { "Name", "InputArg", "OutputArg", "Attr", "Deprecation", "Summary", "Description", "IsCommutative", "IsAggregate", "IsStateful", "AllowsUninitializedInput", });
      internal_static_angel_OpDef_ArgDef_descriptor =
        internal_static_angel_OpDef_descriptor.getNestedTypes().get(0);
      internal_static_angel_OpDef_ArgDef_fieldAccessorTable = new
        com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
          internal_static_angel_OpDef_ArgDef_descriptor,
          new java.lang.String[] { "Name", "Description", "Type", "TypeAttr", "NumberAttr", "TypeListAttr", "IsRef", });
      internal_static_angel_OpDef_AttrDef_descriptor =
        internal_static_angel_OpDef_descriptor.getNestedTypes().get(1);
      internal_static_angel_OpDef_AttrDef_fieldAccessorTable = new
        com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
          internal_static_angel_OpDef_AttrDef_descriptor,
          new java.lang.String[] { "Name", "Type", "DefaultValue", "Description", "HasMinimum", "Minimum", "AllowedValues", });
      internal_static_angel_OpDeprecation_descriptor =
        getDescriptor().getMessageTypes().get(1);
      internal_static_angel_OpDeprecation_fieldAccessorTable = new
        com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
          internal_static_angel_OpDeprecation_descriptor,
          new java.lang.String[] { "Version", "Explanation", });
      internal_static_angel_OpList_descriptor =
        getDescriptor().getMessageTypes().get(2);
      internal_static_angel_OpList_fieldAccessorTable = new
        com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
          internal_static_angel_OpList_descriptor,
          new java.lang.String[] { "Op", });
      com.tencent.angel.core.graph.AttrValueProtos.getDescriptor();
      com.tencent.angel.serving.apis.common.TypesProtos.getDescriptor();
    }
  
    // @@protoc_insertion_point(outer_class_scope)
  }
  